生活紀錄與客製儀表板
家裡的感測器會自己記錄,但「今天喝了幾杯水」「這個月電費多少」「濾網上次什麼時候換的」沒人幫你記。這章教你用輔助元件(Helper)把這些事變成 Home Assistant 裡的正式資料,讓它自己長出圖表,最後排成一個你每天都想打開的儀表板。
為什麼要自己做紀錄
裝了智慧家庭之後你會發現一件事:溫濕度、電量、門有沒有開,這些都有感測器幫你記。但生活裡真正想追蹤的東西,反而都沒有感測器。
- 陽台的空氣清淨機濾網,上次換是三月還是四月?想不起來。
- 這個月水電瓦斯加起來花多少?帳單來了才知道,來不及了。
- 魚缸多久換一次水?靠腦袋記,結果總是拖到水濁了才想到。
- 媽媽留言「今天不要開洗碗機」,寫在冰箱便條紙上,你根本沒走進廚房。
這些事情的共通點是:資料在你腦袋裡,不在系統裡。只要塞進 Home Assistant,它就會自動幫你留下時間軸、畫成圖、到期了主動戳你一下。
讀完這章你會多出這些能力:
-
把任何一件事變成可記錄的實體
數字、文字、選項、日期、次數,五種輔助元件各自對應一種紀錄需求,你會知道什麼時候該用哪一種。
-
讓紀錄自己畫成圖
知道為什麼有些數字畫得出長期趨勢圖、有些畫不出來,以及怎麼補救。
-
把原始數字加工成有意義的指標
用 Utility Meter 自動分月結算,用範本(Template)感測器算出「距離上次保養幾天」。
-
排出一個真的好用的儀表板
Sections 版面、條件顯示卡片、手機和平板看到不一樣的東西。
五種輔助元件,各自適合記什麼
建立輔助元件的位置固定在:設定 → 裝置與服務 → 輔助工具(Settings → Devices & services → Helpers),右下角建立輔助工具。以下五種是做紀錄最常用的。
| 建立時選這個 | 實體開頭 | 存什麼 | 家裡的例子 |
|---|---|---|---|
| 數字(Number) | input_number. | 一個可調整的數值 | 體重、本月累計支出、房間目標溫度 |
| 文字(Text) | input_text. | 一段短文字 | 冰箱留言、車位號碼、Wi-Fi 訪客密碼 |
| 下拉(Dropdown) | input_select. | 從固定選項中選一個 | 今天誰倒垃圾、洗衣機模式、家庭狀態 |
| 日期/時間(Date and/or time) | input_datetime. | 一個日期、時間或兩者 | 濾網上次更換日、下次繳費日 |
| 計數器(Counter) | counter. | 只會加一減一的整數 | 今天喝水杯數、本週運動次數、貓砂清理次數 |
數字和計數器差在哪?
兩個都是數字,但用起來完全不同:
數字 input_number | 計數器 counter | |
|---|---|---|
| 怎麼輸入 | 拉滑桿或直接打字(mode 可選 slider 或 box) | 只有加、減、歸零、直接設定 |
| 可以有小數嗎 | 可以,step 最小 0.001 | 整數為主,step 預設 1 |
| 有「歸零」這個動作嗎 | 沒有,要自己設回 0 | 有,counter.reset 直接回到起始值 |
| 最適合 | 體重 62.4、電費 1284 這種「有值」的東西 | 喝水 1 杯、運動 1 次這種「按一下加一」的東西 |
會用到的動作(Action)名稱
寫自動化或腳本的時候要用到,先放這裡當速查表。(舊版文件把這些叫「服務 Service」,現在統一叫「動作 Action」,YAML 裡的關鍵字也從 service: 改成 action:。)
| 動作 | 做什麼 | 要帶的資料 |
|---|---|---|
input_number.set_value | 直接設定數值 | value |
input_number.increment / decrement | 依 step 加一格 / 減一格 | 不用 |
counter.increment / decrement | 加 / 減一個 step | 不用 |
counter.reset | 回到起始值 | 不用 |
counter.set_value | 直接設成某個數 | value |
input_text.set_value | 寫入一段文字 | value |
input_select.select_option | 選某一個選項 | option |
input_select.select_next / select_previous | 切到下一個 / 上一個選項 | 不用 |
input_datetime.set_datetime | 設定日期或時間 | date、time(可以兩個一起給),或改用 datetime、timestamp(這兩個不能和其他欄位並用) |
input_text,後面「隨手記事」那節有更適合的作法。動手做:五分鐘做出「今天喝了幾杯水」
先把最簡單的那個做完,你就會抓到節奏。目標:儀表板上一個按鈕,喝一杯按一下,半夜自動歸零。
-
建立計數器
到設定 → 裝置與服務 → 輔助工具,按建立輔助工具,選計數器(Counter)。名稱打「今日喝水杯數」,圖示可以填
mdi:cup-water,最小值填 0,步進值填 1,其他留預設。按建立。 -
確認它的實體 ID
建好之後點進去看一下實體 ID,中文名稱通常會被轉成一串拼音或亂碼。建議在實體設定裡把它改成
counter.water_cups_today這種看得懂的英文。命名規則和改 ID 的注意事項在第 4 章。 -
放到儀表板上,並且把加減按鈕叫出來
回到你的儀表板,右上角編輯,按新增卡片,搜尋「今日喝水杯數」,選圖磚(Tile)卡片。這裡有個大家最常卡住的地方:圖磚卡預設只會顯示一個數字,不會有加減按鈕。在卡片編輯畫面往下捲,找到功能(Features),按新增,選計數器動作(Counter actions),勾要顯示哪幾顆(increment 加、decrement 減、reset 歸零)。存好之後卡片上才會出現按鈕。
-
做一個半夜自動歸零的自動化
到設定 → 自動化與場景 → 建立自動化,切到 YAML 模式貼上下面這段。自動化的三段式結構如果還不熟,回頭看第 8 章。
-
測試
在自動化編輯畫面按執行,看計數器有沒有變成 0。有的話代表整條路通了。
alias: 每天午夜重置喝水杯數
triggers:
- trigger: time
at: "00:00:00"
conditions: []
actions:
- action: counter.reset
target:
entity_id: counter.water_cups_today
mode: single
那張圖磚卡切到 YAML 模式看的話,長這樣。以後要做第二個、第三個計數器,直接複製改實體就好:
type: tile
entity: counter.water_cups_today
name: 今日喝水
features:
- type: counter-actions
actions:
- increment
- decrement
- reset
type: numeric-input),style 可以選 slider(滑桿)或 buttons(加減按鈕)。體重、金額這種要打字的,用這個比每次點進實體視窗快很多。counter.reset 前面加一個 input_number.set_value,把昨天的值寫進另一個叫「昨日喝水杯數」的數字輔助元件就行。實例一:生活習慣紀錄
三個元件的分工
| 要記的東西 | 用哪種元件 | 設定重點 |
|---|---|---|
| 喝水杯數 | 計數器 | 最小 0,步進 1,每天午夜歸零 |
| 運動次數 | 計數器 | 最小 0,步進 1,每週一早上歸零 |
| 體重 | 數字 | 最小 30、最大 150、步進 0.1、單位 kg、模式選「輸入框(box)」 |
體重特別建議把模式設成輸入框而不是滑桿。滑桿要拖到 62.4 很痛苦,直接打字快多了。建立時在「顯示模式」那一欄選輸入框即可。
每週一自動重置運動次數
alias: 每週一重置運動次數
triggers:
- trigger: time
at: "05:00:00"
conditions:
- condition: time
weekday:
- mon
actions:
- action: counter.reset
target:
entity_id: counter.workout_count
mode: single
放在儀表板上長什麼樣
建議把三個東西擺成一個區塊:兩張圖磚卡(喝水、運動)加一張儀錶(Gauge)卡看今天喝水進度。儀錶卡的設定很直覺,min 預設 0、max 預設 100,記得依實際情況調。
type: gauge
entity: counter.water_cups_today
name: 今日喝水
unit: 杯
min: 0
max: 8
needle: true
segments:
- from: 0
color: var(--error-color)
- from: 3
color: var(--warning-color)
- from: 6
color: var(--success-color)
segments(分段變色)只有在 needle: true 的時候才會生效。指針關掉的話,顏色設了也不會顯示,這是很多人以為自己寫錯的地方。想看長期趨勢?先看下一步
你現在會想「那我要看體重這三個月的變化圖」。這裡有個很多人卡住的坑:輔助元件本身不會產生長期統計資料,所以拿 input_number.weight 去放統計圖表卡(statistics-graph)會顯示找不到統計資料。解法在後面〈把數字加工〉那一節,記得往下看完。
實例二:家庭收支與水電費紀錄
A. 隨手記一筆支出
做法是「兩個數字 + 一個腳本」:一個數字放你要記的單筆金額,一個數字放本月累計,中間用腳本把單筆金額加進累計裡。
-
建三個數字輔助元件
input_number.expense_entry(單筆金額,最小 0、最大 100000、步進 1、模式選輸入框)、input_number.expense_month_total(本月累計,同樣範圍,單位填元),再加一個input_number.expense_last_month(上月支出,設定跟累計那個一樣)。第三個現在用不到,是給下面每月結算用的,一起建好省得等一下再回來。 -
建一個腳本把金額加進去
到設定 → 自動化與場景 → 腳本,建立新腳本,切 YAML 模式貼上下面內容。腳本的細節(欄位、執行模式)在第 10 章。
-
把腳本做成按鈕卡
儀表板上放一張實體(Entities)卡,把兩個數字和這個腳本放進同一張卡。輸入金額 → 按執行 → 累計自動加上去 → 單筆金額自己歸零。
-
每月一號自動結算
結算的自動化在下面,它會先把這個月的總額抄到「上月支出」,再把累計歸零。
alias: 記一筆支出
sequence:
- action: input_number.set_value
target:
entity_id: input_number.expense_month_total
data:
value: >-
{{ states('input_number.expense_month_total') | float(0)
+ states('input_number.expense_entry') | float(0) }}
- action: input_number.set_value
target:
entity_id: input_number.expense_entry
data:
value: 0
mode: single
alias: 每月一號結算支出
triggers:
- trigger: time
at: "00:05:00"
conditions:
- condition: template
value_template: "{{ now().day == 1 }}"
actions:
- action: input_number.set_value
target:
entity_id: input_number.expense_last_month
data:
value: "{{ states('input_number.expense_month_total') | float(0) }}"
- action: input_number.set_value
target:
entity_id: input_number.expense_month_total
data:
value: 0
mode: single
choose 判斷要加到哪一個累計數字。分類太多會很難維護,建議最多四五類。B. 手抄水電瓦斯度數
台灣的水電瓦斯大多還是人工抄表或看帳單。做法是每次抄表把累計度數填進一個數字輔助元件,再讓 Home Assistant 自己算出每期用了多少。
| 元件 | 用途 | 設定 |
|---|---|---|
input_number.meter_electricity | 電表當前累計度數 | 最大值設大一點(例如 999999),步進 1,單位 kWh |
input_number.meter_water | 水表當前累計度數 | 單位 m³ |
input_datetime.meter_read_date | 這次抄表日期 | 只勾「日期」 |
如果你家已經有智慧電表、電量感測器或有讀電功能的智慧插座,那就更省事,跳過手抄,直接把那個感測器餵給 Utility Meter 就好。
實例三:設備保養紀錄與自動提醒
這類需求的形狀都一樣:記住上次做的日期 → 算出過了幾天 → 超過週期就提醒。學會一個,濾網、換水、冷氣清洗、換牙刷頭全部通用。
-
建一個日期輔助元件
設定 → 裝置與服務 → 輔助工具 → 建立輔助工具 → 日期/時間,名稱「濾網上次更換」,只勾日期不勾時間,實體 ID 建議是
input_datetime.filter_last_change。 -
建一個算天數的範本感測器
到設定 → 裝置與服務 → 輔助工具,按建立輔助工具,選範本(Template),再選感測器(Sensor)。名稱打「濾網已用天數」,狀態範本貼下面那段,測量單位填
天。建完一樣去把實體 ID 改成sensor.filter_days_since,後面的自動化才對得上。 -
做一個「今天換好了」的按鈕
建一個腳本,內容是把日期設成今天。這樣你換完濾網只要按一下,不用手動去挑日曆。
-
做提醒自動化
每天早上九點檢查一次,超過 90 天就推播到手機。推播設定看第 7 章。
{{ ((now().timestamp()
- as_timestamp(states('input_datetime.filter_last_change'), 0))
/ 86400) | int(0) }}
| int(0) 是無條件捨去,算的是「完整過了幾天」:早上換的濾網,當天整天都算 0 天。如果改用 round(0)(四捨五入),過中午就會跳成 1 天,看起來會怪怪的。後面括號裡的 0 是預設值,日期還沒設或實體暫時讀不到時就回 0,整段範本才不會炸掉變成 unknown。alias: 濾網換好了
sequence:
- action: input_datetime.set_datetime
target:
entity_id: input_datetime.filter_last_change
data:
date: "{{ now().strftime('%Y-%m-%d') }}"
mode: single
alias: 濾網該換了提醒
triggers:
- trigger: time
at: "09:00:00"
conditions:
- condition: numeric_state
entity_id: sensor.filter_days_since
above: 89
actions:
- action: notify.persistent_notification
data:
title: 客廳清淨機
message: >-
濾網已經用了 {{ states('sensor.filter_days_since') }} 天,該換了。
mode: single
numeric_state 條件。第二種比較笨但比較好懂,剛開始建議用第二種。想在儀表板上一眼看完所有保養狀態,用 Markdown 卡片最省事,它的 content 欄位可以直接寫範本:
type: markdown
title: 保養狀態
content: |-
| 項目 | 已經過 | 週期 |
|---|---|---|
| 清淨機濾網 | {{ states('sensor.filter_days_since') }} 天 | 90 天 |
| 魚缸換水 | {{ states('sensor.tank_days_since') }} 天 | 14 天 |
| 冷氣清洗 | {{ states('sensor.ac_days_since') }} 天 | 180 天 |
實例四:隨手記事與家庭留言板
短留言用文字輔助元件
「今天不要開洗碗機」這種一句話留言,一個文字輔助元件就夠了。建立時的最大長度預設是 100,不夠的話可以往上調,但最多只能到 255——那是 Home Assistant 實體狀態本身的硬上限,再多就存不進去了。做好之後放在儀表板上用實體(Entities)卡,就能直接在卡片上打字改內容。
再配一個日期時間輔助元件記下「誰什麼時候留的」,自動化像這樣:
alias: 留言更新時記時間
triggers:
- trigger: state
entity_id: input_text.family_message
conditions: []
actions:
- action: input_datetime.set_datetime
target:
entity_id: input_datetime.family_message_time
data:
datetime: "{{ now().strftime('%Y-%m-%d %H:%M:%S') }}"
mode: single
清單類的東西用待辦清單,不要用文字
購物清單、要修的東西、待辦事項,這些會一直增減的清單,硬塞進一個文字欄位會很難用(而且 255 字元很快就爆)。Home Assistant 有內建的本地待辦清單(Local To-do)整合,資料存在你自己家裡,不需要任何雲端帳號。
-
加入整合
設定 → 裝置與服務 → 新增整合,搜尋 Local to-do,依畫面指示建立一份清單,例如「採買清單」。
-
再建幾份
同一個整合可以重複新增多份清單。建議至少分「採買清單」和「家裡待修」兩份。
-
放上儀表板
編輯儀表板 →新增卡片→ 找待辦清單(To-do list)卡片,選你剛建的清單。手機上直接打勾、新增項目都可以。
-
讓自動化幫你加項目
用
todo.add_item這個動作。例如上面那個濾網提醒,除了推播之外,順便把「買濾網」加進採買清單。
actions:
- action: todo.add_item
target:
entity_id: todo.shopping_list
data:
item: 買清淨機濾網
其他可用的動作還有 todo.update_item(改內容或標記完成)、todo.remove_item(刪一項)、todo.get_items(讀出清單內容)、todo.remove_completed_items(清掉打勾的)。
input_select.select_next 的自動化,就變成自動輪班表。讓紀錄自己長出圖表
四張卡片就能覆蓋 90% 的需求,重點是知道它們各自吃什麼資料。
history-graph 卡片直接嵌到儀表板。| 卡片 | 看什麼 | 資料來源 | 常用參數 |
|---|---|---|---|
歷史圖表 history-graph | 最近幾小時到幾天的變化 | 錄製器(Recorder)的原始狀態 | hours_to_show(預設 24) |
統計圖表 statistics-graph | 幾週到幾年的長期趨勢 | 長期統計(Long-term statistics) | days_to_show(預設 30)、stat_types、chart_type、period |
儀錶 gauge | 當下的一個數字+進度感 | 實體目前狀態 | min(0)、max(100)、needle、segments |
Markdown markdown | 自己排版的文字摘要 | 範本,想抓什麼都行 | content、title、text_only |
歷史圖表:看短期
type: history-graph
title: 這兩天的喝水與運動
hours_to_show: 48
entities:
- entity: counter.water_cups_today
name: 喝水
- entity: counter.workout_count
name: 運動
統計圖表:看長期,但有前提
這是整章最重要的一個觀念,也是最多人卡在這裡放棄的地方:
measurement、total、total_increasing 這三種其中之一。輔助元件(input_number、counter 等)沒有狀態類別,所以直接放進去會顯示「找不到統計資料」。解法是用一個範本(Template)感測器把輔助元件「包一層」,順便掛上狀態類別。範本感測器雖然也能從輔助工具頁用 UI 建立,但官方文件寫明 UI 版提供的是「比較精簡的選項子集」,狀態類別這種進階欄位不一定給你設。所以這裡一律示範寫在 configuration.yaml 裡,跨版本最不會出事:
template:
- sensor:
- name: "體重紀錄"
unique_id: weight_record
unit_of_measurement: "kg"
device_class: weight
state_class: measurement
state: "{{ states('input_number.weight') | float(0) }}"
availability: "{{ is_number(states('input_number.weight')) }}"
存檔後到側欄的工具(Tools)→ YAML 分頁,按「範本實體」重新載入,之後就會出現 sensor.weight_record。2026.8 版起,這個選單從「開發者工具(Developer tools)」正式改名為「工具(Tools)」,比它舊的版本仍然叫開發者工具,位置一樣。把新感測器放進統計圖表卡:
type: statistics-graph
title: 體重趨勢
days_to_show: 90
chart_type: line
period: day
stat_types:
- mean
entities:
- entity: sensor.weight_record
name: 體重
stat_types 可選 min、max、mean、sum、state、change;period 可選 5minute、hour、day、week、month、year 或 auto。period: day/week/month 這種長週期時,它讀的是每小時才產生一次的長期統計,所以通常要等過了下一個整點才會冒出第一個點。想馬上看到東西,先用歷史圖表卡頂著,或把 period 設成 5minute 看短期統計。Markdown:把一堆數字寫成一句人話
type: markdown
title: 本月摘要
content: |-
### 這個月到目前為止
- 支出累計 **{{ states('input_number.expense_month_total') | int(0) }}** 元
- 上個月同期 {{ states('input_number.expense_last_month') | int(0) }} 元
- 電表度數 {{ states('input_number.meter_electricity') }} kWh
- 上次抄表 {{ states('input_datetime.meter_read_date') }}
把原始數字加工成有意義的指標
原始數字(累計度數、一個體重值)常常不好看懂。Home Assistant 有幾個現成的輔助元件可以幫你算,不用自己寫程式。
| 輔助元件 | 它幫你算什麼 | 家裡的用法 |
|---|---|---|
| Utility Meter(分期用量計量) | 把一個一直累加的感測器,切成每日/每月/每年的用量 | 這個月用了幾度電、這期用了幾噸水 |
| Statistics(統計) | 對某個感測器算平均、最大、最小、變化量、次數等 | 過去 30 天體重的平均值 |
| Derivative(變化率) | 算「每小時/每天變多少」,也就是變化的速度 | 用電速度、水位下降速度 |
| Template(範本) | 自己寫公式,什麼都能算 | 距離上次保養幾天、電費估算 |
Utility Meter:自動分月結算
它需要一個會一直往上累加的感測器當來源。如果你是手抄度數,先用範本感測器把 input_number 包成一個 total_increasing 的感測器:
template:
- sensor:
- name: "電表累計"
unique_id: meter_electricity_total
unit_of_measurement: "kWh"
device_class: energy
state_class: total_increasing
state: "{{ states('input_number.meter_electricity') | float(0) }}"
接著到設定 → 裝置與服務 → 輔助工具 → 建立輔助工具 → Utility Meter,設定重點:
| 欄位 | 填什麼 |
|---|---|
| 輸入感測器 | 剛剛那個 sensor.meter_electricity_total |
| 計量週期(Cycle) | 可選每刻鐘、每小時、每日、每週、每月、每兩月、每季、每年 |
| 週期性重置(Periodically resetting) | 預設是開著的。來源自己會歸零(某些智慧插座斷電後從 0 重新算)才要留著開;手抄度數和真正的水電表都不會歸零,記得把它關掉,否則用量會算錯 |
| 差值輸入(Delta values) | 來源送的是「這次增加多少」而不是累計值時才打開 |
| 淨消耗(Net consumption) | 有太陽能會回售這種可正可負的情況才打開 |
| 費率(Tariffs) | 有分尖峰離峰才填。填了會多產生一個切換費率的選擇實體 |
建好之後你會多出一個「每月電量」之類的感測器(實際名稱以畫面為準),放一張圖磚卡就能看到「這個月到目前為止用了幾度」,月初自己歸零。
至於「每個月各用幾度」的長條圖,最直接的做法不是畫那個每月感測器,而是把一直累加的來源感測器丟給統計圖表卡,讓它自己算每個月的變化量(change):
type: statistics-graph
title: 每月用電
days_to_show: 365
chart_type: bar
period: month
stat_types:
- change
entities:
- sensor.meter_electricity_total
需要手動歸零或校正時,有 utility_meter.reset(全部歸零)和 utility_meter.calibrate(設成指定數值)兩個動作可以用。
Statistics 輔助元件:算平均
建立位置一樣在輔助工具裡,選 Statistics。它會問你要哪一種特徵值(characteristic),數值型感測器可選平均值(mean)、中位數、總和、變化量(change)、次數、最大值、最小值等等。
客製儀表板:把紀錄排成你想看的樣子
資料都有了,接下來是排版。新建的儀表板檢視預設就是 Sections(區塊) 版面,這也是目前最好用的排法。
Sections 版面怎麼想
把它想成一面公布欄:整個檢視是一個網格,你在上面貼幾個「區塊」,每個區塊裡再放卡片。跟舊的 Masonry 版面比起來,最大的差別是你不用再靠垂直堆疊卡(vertical-stack)硬湊排版,區塊本身就是分組單位。
| 設定 | 在哪 | 做什麼 |
|---|---|---|
| 最大欄數(Max columns) | 檢視設定 | 寬螢幕最多排幾欄。設 3~4 通常剛好 |
| 密集排列(Dense section placement) | 檢視設定 | 自動補洞,畫面比較滿但你會失去一些排列控制權 |
| 標題卡(Heading card) | 每個區塊最上面 | 區塊標題,可設 heading_style 為 title 或 subtitle,還能掛徽章 |
| 徽章(Badges) | 檢視頂端 / 標題卡上 | 小小一顆顯示某個實體的數值,很適合放「今日喝水 5 杯」 |
一個「生活紀錄」檢視的建議排法
-
新增檢視
儀表板右上編輯→ 分頁列最右邊的+→ 檢視類型選 Sections,標題打「生活紀錄」,最大欄數設 3。
-
第一個區塊「今天」
標題卡寫「今天」,裡面放喝水計數器圖磚、運動計數器圖磚、喝水儀錶。這是你最常互動的一區,放最上面。
-
第二個區塊「這個月」
標題卡寫「這個月」,放本月支出的實體卡、記帳腳本按鈕、每月用電統計圖表卡。
-
第三個區塊「保養與待辦」
放保養狀態的 Markdown 卡、採買清單的待辦清單卡、家庭留言的實體卡。
-
第四個區塊「趨勢」
放體重與各種長期統計圖表卡。這區平常不用看,放最下面。
type: heading
heading: 今天
icon: mdi:calendar-today
heading_style: title
badges:
- type: entity
entity: counter.water_cups_today
- type: entity
entity: counter.workout_count
條件顯示卡片:不該看到的就別佔位置
條件卡(Conditional card)可以在條件不成立時整張卡消失。現在支援的條件種類有 state、numeric_state、screen、user、location、time,還有 and、or、not 可以組合。
type: conditional
conditions:
- condition: numeric_state
entity: sensor.filter_days_since
above: 89
card:
type: markdown
content: 濾網已經超過 90 天,記得換。
手機和平板看到不一樣的東西
screen 條件吃的是 CSS 媒體查詢字串,用它就能做出「大螢幕才顯示的詳細圖表」和「小螢幕才顯示的精簡版」。
type: conditional
conditions:
- condition: screen
media_query: "(min-width: 1024px)"
card:
type: statistics-graph
title: 完整趨勢
days_to_show: 365
chart_type: line
entities:
- sensor.weight_record
type: conditional
conditions:
- condition: screen
media_query: "(max-width: 1023px)"
card:
type: gauge
entity: counter.water_cups_today
name: 今日喝水
min: 0
max: 8
還可以用 user 條件讓每個家人看到自己的紀錄卡片,使用者帳號的建立在第 5 章。
值得裝的社群卡片
內建卡片其實夠用了,先把內建的用熟再說。真的覺得不夠再從 HACS 裝,安裝方式看附錄 A。以下幾個是社群裡最常被拿來做紀錄儀表板的。要先講清楚:它們的維護節奏差很多,有的幾乎每個月都在更新,有的正式版已經一年多沒發新的了(雖然還沒被作者封存)。名單只代表「常見」,不代表「保證能在你的版本上跑」:
| 卡片 | 解決什麼問題 | 對紀錄類儀表板的用處 |
|---|---|---|
| Mushroom | 一整套視覺更輕的卡片 | 把一排計數器排得整齊好按,手機上特別明顯 |
| ApexCharts Card | 功能非常完整的圖表卡 | 要疊多條線、自訂 Y 軸、做週對比時,內建圖表做不到的它做得到 |
| Bubble Card | 手機優先的卡片與彈出視窗 | 把記帳、記錄的輸入介面收進彈窗,主畫面保持乾淨 |
| Mini Graph Card | 小巧的迷你折線圖 | 塞在區塊角落當縮圖,不佔空間 |
| card-mod | 改卡片的樣式(顏色、字體、間距) | 純外觀微調,不影響資料 |
把紀錄匯出保存
紀錄累積久了會想拿出來自己算,或是怕哪天資料庫壞掉。有三個層次:
層次一:直接下載 CSV
-
打開歷史面板
從側欄進入歷史(History)面板。這是「畫數值圖、下載數值」的地方。側欄另外那個活動(Activity,舊名記錄簿 Logbook)面板是流水帳,記的是「幾點幾分誰開了什麼」,2026.8 起它也有自己的 CSV 下載,但你要匯出的是數字,請走歷史面板。
-
挑實體與時間範圍
選你要的區域、裝置或實體,再設定時間範圍。
-
按下載資料
右上角有下載資料,會給你一份 CSV,可以直接丟進試算表。
purge_keep_days 預設值就是 10)。超過 10 天的部分,畫面和下載會自動改用長期統計,那是每小時取樣平均過的,數值會和原始資料不完全一樣。這不是 bug,是節省空間的設計。層次二:讓備份把資料庫一起帶走
Home Assistant 的資料庫預設是設定目錄裡的 home-assistant_v2.db,內建備份會涵蓋它。備份設定與還原流程在第 9 章,如果你認真在記帳或記保養,請務必把自動備份排程打開。
層次三:重要的數字自己再存一份
最保險的作法:每月結算的自動化順便把數字寫進待辦清單、寄一封通知給自己,或推播一則含當月摘要的訊息。這樣就算資料庫整個掛掉,你至少還有一份文字紀錄。
actions:
- action: todo.add_item
target:
entity_id: todo.household_log
data:
item: >-
{{ now().strftime('%Y-%m') }} 支出
{{ states('input_number.expense_month_total') | int(0) }} 元
purge_keep_days,代價是資料庫變大,SD 卡或小容量硬碟要特別小心。常見卡關
-
重開機之後 Helper 歸零了
正常情況下數字、文字、下拉、日期時間輔助元件都會還原成重開前的值,計數器也有
restore選項而且預設是開的。會歸零通常是因為你用 YAML 設定時填了initial,這個值的優先權比還原高,開機就會把你的紀錄蓋掉。把initial拿掉即可。另一個可能是 Home Assistant 沒有正常關機(直接拔電),來不及寫入狀態。 -
統計圖表卡說沒有資料
九成是因為你把輔助元件直接丟進去了。輔助元件沒有狀態類別(State class),不會產生長期統計。照〈讓紀錄長出圖表〉那節包一層範本感測器,加上
state_class: measurement。包好之後圖還是空的也別急:長期統計要整點過後才會產生第一筆,先等下一個整點再看。 -
歷史圖表是空的或只有一條直線
先確認你的錄製器(Recorder)有沒有把這個實體排除掉。再來,如果數值從頭到尾沒變過,圖本來就是一條直線,這不是壞掉。第三,在歷史面板裡把時間範圍拉超過 10 天,畫面會自動改讀長期統計;輔助元件沒有長期統計,那段就會一片空白。想看輔助元件的原始變化,時間範圍留在 10 天內,卡片上的
hours_to_show也別設太大。 -
卡片在手機上被截斷或擠成一團
先確認檢視類型是不是 Sections。再檢查是不是把太多東西塞進同一張堆疊卡裡。Markdown 卡如果內容很長,加上
card_size讓它預留高度。表格類的 Markdown 內容在窄螢幕本來就容易爆版,手機版建議改用條列式而不是表格。 -
範本感測器建好了但實體找不到
改完
configuration.yaml一定要重新載入。到側欄的工具(2026.8 之前叫「開發者工具」)→ YAML 分頁,按「範本實體」重新載入。如果重新載入之後還是沒有,多半是 YAML 縮排錯了,先用同一頁的「檢查設定」驗一次。還有一個常見的低級錯誤:configuration.yaml裡已經有一個template:區塊了,你又貼了第二個,YAML 只會認最後一個,要把感測器併進同一個區塊底下。 -
條件卡永遠不顯示
條件卡預設是「所有條件都要成立」才顯示。用
numeric_state時注意above是嚴格大於,寫above: 90剛好 90 天時不會觸發,要寫above: 89。用screen條件時媒體查詢字串記得整段用引號包起來。 -
腳本按了但累計沒變
檢查
input_number的最大值是不是被範本算出來的結果超過了,超過上限會被擋下來。另外用| float(0)這種帶預設值的寫法,避免實體暫時unavailable時整段範本炸掉。
常見問題
紀錄要用計數器還是數字,我還是分不清楚
counter),它有現成的 counter.increment 和 counter.reset。要填一個具體數值(62.4 公斤、1284 元),用數字(input_number),把顯示模式設成輸入框比較好打。真的猶豫的話先用計數器,因為它有一鍵歸零,做每日紀錄方便很多。我想記「一整段」文字,例如購物清單,可是文字 Helper 太短
todo.add_item 直接加東西進去。體重的圖我只想看每週一個點,不要每天上上下下
period 設成 week、stat_types 設成 mean,它會直接幫你算每週平均。第二,建一個 Statistics 輔助元件,特徵值選平均值(mean),最大時效(max age)設 7 天,得到一個「近七日平均」的感測器再畫圖。第一種比較省事。Utility Meter 的來源感測器一定要是智慧電表嗎?
input_number。手抄度數的話,先寫一個範本感測器把 input_number 包成 state_class: total_increasing 的感測器,再拿那個感測器當 Utility Meter 的輸入。設定時記得把「週期性重置(Periodically resetting)」關掉——它預設是開著的,而真正的水電表不會自己歸零,忘了關用量會算錯。我把紀錄卡片放在手機上,但每次要滑很久才找到
screen 條件卡去藏東西好維護太多。手機 App 的側欄可以把不常用的儀表板隱藏起來。