第 22 章

生活紀錄與客製儀表板

家裡的感測器會自己記錄,但「今天喝了幾杯水」「這個月電費多少」「濾網上次什麼時候換的」沒人幫你記。這章教你用輔助元件(Helper)把這些事變成 Home Assistant 裡的正式資料,讓它自己長出圖表,最後排成一個你每天都想打開的儀表板。

為什麼要自己做紀錄

裝了智慧家庭之後你會發現一件事:溫濕度、電量、門有沒有開,這些都有感測器幫你記。但生活裡真正想追蹤的東西,反而都沒有感測器。

  • 陽台的空氣清淨機濾網,上次換是三月還是四月?想不起來。
  • 這個月水電瓦斯加起來花多少?帳單來了才知道,來不及了。
  • 魚缸多久換一次水?靠腦袋記,結果總是拖到水濁了才想到。
  • 媽媽留言「今天不要開洗碗機」,寫在冰箱便條紙上,你根本沒走進廚房。

這些事情的共通點是:資料在你腦袋裡,不在系統裡。只要塞進 Home Assistant,它就會自動幫你留下時間軸、畫成圖、到期了主動戳你一下。

讀完這章你會多出這些能力:

  1. 把任何一件事變成可記錄的實體

    數字、文字、選項、日期、次數,五種輔助元件各自對應一種紀錄需求,你會知道什麼時候該用哪一種。

  2. 讓紀錄自己畫成圖

    知道為什麼有些數字畫得出長期趨勢圖、有些畫不出來,以及怎麼補救。

  3. 把原始數字加工成有意義的指標

    用 Utility Meter 自動分月結算,用範本(Template)感測器算出「距離上次保養幾天」。

  4. 排出一個真的好用的儀表板

    Sections 版面、條件顯示卡片、手機和平板看到不一樣的東西。

觀念:輔助元件(Helper)的基礎建立方式在附錄 B已經講過了,儀表板的編輯、分頁、檢視類型在第 6 章。這章不重講操作介面,直接進到「拿它們做出四類真實紀錄系統」。

五種輔助元件,各自適合記什麼

建立輔助元件的位置固定在:設定 → 裝置與服務 → 輔助工具(Settings → Devices & services → Helpers),右下角建立輔助工具。以下五種是做紀錄最常用的。

輔助工具頁面
圖 22-1設定 → 裝置與服務 → 輔助工具:計數器、輸入布林、數字、日期、下拉等所有 helper 都列在這,右下角是建立入口。
建立時選這個實體開頭存什麼家裡的例子
數字(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設定日期或時間datetime(可以兩個一起給),或改用 datetimetimestamp(這兩個不能和其他欄位並用)
注意:文字輔助元件的最大長度預設 100 個字,可以自己調高,但 Home Assistant 的實體狀態有 255 個字元的硬上限,調到 255 就是天花板。想存長篇留言(例如整段購物清單)不要硬塞進 input_text,後面「隨手記事」那節有更適合的作法。

動手做:五分鐘做出「今天喝了幾杯水」

先把最簡單的那個做完,你就會抓到節奏。目標:儀表板上一個按鈕,喝一杯按一下,半夜自動歸零。

  1. 建立計數器

    設定 → 裝置與服務 → 輔助工具,按建立輔助工具,選計數器(Counter)。名稱打「今日喝水杯數」,圖示可以填 mdi:cup-water,最小值填 0,步進值填 1,其他留預設。按建立

  2. 確認它的實體 ID

    建好之後點進去看一下實體 ID,中文名稱通常會被轉成一串拼音或亂碼。建議在實體設定裡把它改成 counter.water_cups_today 這種看得懂的英文。命名規則和改 ID 的注意事項在第 4 章

  3. 放到儀表板上,並且把加減按鈕叫出來

    回到你的儀表板,右上角編輯,按新增卡片,搜尋「今日喝水杯數」,選圖磚(Tile)卡片。這裡有個大家最常卡住的地方:圖磚卡預設只會顯示一個數字,不會有加減按鈕。在卡片編輯畫面往下捲,找到功能(Features),按新增,選計數器動作(Counter actions),勾要顯示哪幾顆(increment 加、decrement 減、reset 歸零)。存好之後卡片上才會出現按鈕。

  4. 做一個半夜自動歸零的自動化

    設定 → 自動化與場景 → 建立自動化,切到 YAML 模式貼上下面這段。自動化的三段式結構如果還不熟,回頭看第 8 章

  5. 測試

    在自動化編輯畫面按執行,看計數器有沒有變成 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
提示:數字輔助元件也有對應的功能可以加:圖磚卡的功能選數值輸入(Numeric input)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 的時候才會生效。指針關掉的話,顏色設了也不會顯示,這是很多人以為自己寫錯的地方。
觀念:上面那個 8 杯只是拿來當進度條的刻度,你想設 5 或 10 都可以,純粹是視覺上的參考線,跟任何建議攝取量無關。

想看長期趨勢?先看下一步

你現在會想「那我要看體重這三個月的變化圖」。這裡有個很多人卡住的坑:輔助元件本身不會產生長期統計資料,所以拿 input_number.weight 去放統計圖表卡(statistics-graph)會顯示找不到統計資料。解法在後面〈把數字加工〉那一節,記得往下看完。

實例二:家庭收支與水電費紀錄

A. 隨手記一筆支出

做法是「兩個數字 + 一個腳本」:一個數字放你要記的單筆金額,一個數字放本月累計,中間用腳本把單筆金額加進累計裡。

  1. 建三個數字輔助元件

    input_number.expense_entry(單筆金額,最小 0、最大 100000、步進 1、模式選輸入框)、input_number.expense_month_total(本月累計,同樣範圍,單位填 ),再加一個 input_number.expense_last_month(上月支出,設定跟累計那個一樣)。第三個現在用不到,是給下面每月結算用的,一起建好省得等一下再回來。

  2. 建一個腳本把金額加進去

    設定 → 自動化與場景 → 腳本,建立新腳本,切 YAML 模式貼上下面內容。腳本的細節(欄位、執行模式)在第 10 章

  3. 把腳本做成按鈕卡

    儀表板上放一張實體(Entities)卡,把兩個數字和這個腳本放進同一張卡。輸入金額 → 按執行 → 累計自動加上去 → 單筆金額自己歸零。

  4. 每月一號自動結算

    結算的自動化在下面,它會先把這個月的總額抄到「上月支出」,再把累計歸零。

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水表當前累計度數單位
input_datetime.meter_read_date這次抄表日期只勾「日期」
注意:累計度數只能往上加,不要每期填「這期用了幾度」。填累計值,Home Assistant 才有辦法幫你自動分期結算;這也是後面 Utility Meter 能運作的前提。

如果你家已經有智慧電表、電量感測器或有讀電功能的智慧插座,那就更省事,跳過手抄,直接把那個感測器餵給 Utility Meter 就好。

實例三:設備保養紀錄與自動提醒

這類需求的形狀都一樣:記住上次做的日期 → 算出過了幾天 → 超過週期就提醒。學會一個,濾網、換水、冷氣清洗、換牙刷頭全部通用。

  1. 建一個日期輔助元件

    設定 → 裝置與服務 → 輔助工具 → 建立輔助工具 → 日期/時間,名稱「濾網上次更換」,只勾日期不勾時間,實體 ID 建議是 input_datetime.filter_last_change

  2. 建一個算天數的範本感測器

    設定 → 裝置與服務 → 輔助工具,按建立輔助工具,選範本(Template),再選感測器(Sensor)。名稱打「濾網已用天數」,狀態範本貼下面那段,測量單位填 。建完一樣去把實體 ID 改成 sensor.filter_days_since,後面的自動化才對得上。

  3. 做一個「今天換好了」的按鈕

    建一個腳本,內容是把日期設成今天。這樣你換完濾網只要按一下,不用手動去挑日曆。

  4. 做提醒自動化

    每天早上九點檢查一次,超過 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)整合,資料存在你自己家裡,不需要任何雲端帳號。

  1. 加入整合

    設定 → 裝置與服務 → 新增整合,搜尋 Local to-do,依畫面指示建立一份清單,例如「採買清單」。

  2. 再建幾份

    同一個整合可以重複新增多份清單。建議至少分「採買清單」和「家裡待修」兩份。

  3. 放上儀表板

    編輯儀表板 →新增卡片→ 找待辦清單(To-do list)卡片,選你剛建的清單。手機上直接打勾、新增項目都可以。

  4. 讓自動化幫你加項目

    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% 的需求,重點是知道它們各自吃什麼資料。

歷史頁的時間序列圖
圖 22-2側欄「歷史」頁能直接把選好的實體畫成時間序列圖,這種樣式也能用 history-graph 卡片直接嵌到儀表板。
卡片看什麼資料來源常用參數
歷史圖表 history-graph最近幾小時到幾天的變化錄製器(Recorder)的原始狀態hours_to_show(預設 24)
統計圖表 statistics-graph幾週到幾年的長期趨勢長期統計(Long-term statistics)days_to_show(預設 30)、stat_typeschart_typeperiod
儀錶 gauge當下的一個數字+進度感實體目前狀態min(0)、max(100)、needlesegments
Markdown markdown自己排版的文字摘要範本,想抓什麼都行contenttitletext_only

歷史圖表:看短期

type: history-graph
title: 這兩天的喝水與運動
hours_to_show: 48
entities:
  - entity: counter.water_cups_today
    name: 喝水
  - entity: counter.workout_count
    name: 運動

統計圖表:看長期,但有前提

這是整章最重要的一個觀念,也是最多人卡在這裡放棄的地方:

注意:統計圖表卡只吃有長期統計的實體。而長期統計只會替具備狀態類別(State class)的感測器產生,也就是 measurementtotaltotal_increasing 這三種其中之一。輔助元件(input_numbercounter 等)沒有狀態類別,所以直接放進去會顯示「找不到統計資料」。

解法是用一個範本(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_record2026.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: 體重
觀念:合格的感測器會被記兩份統計:每 5 分鐘一筆的短期統計,以及把它壓縮成每小時一筆的長期統計(存最小/最大/平均)。短期那份跟詳細紀錄一樣會被定期清掉,長期那份官方文件明講不會被清除,會一直留著,所以它能存好幾年也不會把硬碟撐爆,代價是解析度比原始紀錄粗。stat_types 可選 minmaxmeansumstatechangeperiod 可選 5minutehourdayweekmonthyearauto
提示:剛建好的範本感測器,統計圖是空的很正常。用 period: dayweekmonth 這種長週期時,它讀的是每小時才產生一次的長期統計,所以通常要等過了下一個整點才會冒出第一個點。想馬上看到東西,先用歷史圖表卡頂著,或把 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)、次數、最大值、最小值等等。

注意:取樣數量(sampling size)和最大時效(max age)至少要設一個,兩個都空著感測器不會動。要「過去 30 天的平均」就把最大時效設成 30 天。

客製儀表板:把紀錄排成你想看的樣子

資料都有了,接下來是排版。新建的儀表板檢視預設就是 Sections(區塊) 版面,這也是目前最好用的排法。

Sections 版面的儀表板
圖 22-3首頁儀表板:Sections 版面把 Favorites、房間、Summaries(更新/裝置探索/燈光/溫度/安全)自然分成幾塊,這正是紀錄卡片最適合的排法。

Sections 版面怎麼想

把它想成一面公布欄:整個檢視是一個網格,你在上面貼幾個「區塊」,每個區塊裡再放卡片。跟舊的 Masonry 版面比起來,最大的差別是你不用再靠垂直堆疊卡(vertical-stack)硬湊排版,區塊本身就是分組單位。

設定在哪做什麼
最大欄數(Max columns)檢視設定寬螢幕最多排幾欄。設 3~4 通常剛好
密集排列(Dense section placement)檢視設定自動補洞,畫面比較滿但你會失去一些排列控制權
標題卡(Heading card)每個區塊最上面區塊標題,可設 heading_styletitlesubtitle,還能掛徽章
徽章(Badges)檢視頂端 / 標題卡上小小一顆顯示某個實體的數值,很適合放「今日喝水 5 杯」

一個「生活紀錄」檢視的建議排法

  1. 新增檢視

    儀表板右上編輯→ 分頁列最右邊的+→ 檢視類型選 Sections,標題打「生活紀錄」,最大欄數設 3。

  2. 第一個區塊「今天」

    標題卡寫「今天」,裡面放喝水計數器圖磚、運動計數器圖磚、喝水儀錶。這是你最常互動的一區,放最上面。

  3. 第二個區塊「這個月」

    標題卡寫「這個月」,放本月支出的實體卡、記帳腳本按鈕、每月用電統計圖表卡。

  4. 第三個區塊「保養與待辦」

    放保養狀態的 Markdown 卡、採買清單的待辦清單卡、家庭留言的實體卡。

  5. 第四個區塊「趨勢」

    放體重與各種長期統計圖表卡。這區平常不用看,放最下面。

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)可以在條件不成立時整張卡消失。現在支援的條件種類有 statenumeric_statescreenuserlocationtime,還有 andornot 可以組合。

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
提示:另一個更單純的作法是做兩個儀表板:一個「手機版」只放五六張最常按的卡,一個「平板版」放全部。手機 App 的側欄可以把不需要的儀表板隱藏起來,這樣比一堆條件卡好維護很多。

還可以用 user 條件讓每個家人看到自己的紀錄卡片,使用者帳號的建立在第 5 章

值得裝的社群卡片

內建卡片其實夠用了,先把內建的用熟再說。真的覺得不夠再從 HACS 裝,安裝方式看附錄 A。以下幾個是社群裡最常被拿來做紀錄儀表板的。要先講清楚:它們的維護節奏差很多,有的幾乎每個月都在更新,有的正式版已經一年多沒發新的了(雖然還沒被作者封存)。名單只代表「常見」,不代表「保證能在你的版本上跑」:

卡片解決什麼問題對紀錄類儀表板的用處
Mushroom一整套視覺更輕的卡片把一排計數器排得整齊好按,手機上特別明顯
ApexCharts Card功能非常完整的圖表卡要疊多條線、自訂 Y 軸、做週對比時,內建圖表做不到的它做得到
Bubble Card手機優先的卡片與彈出視窗把記帳、記錄的輸入介面收進彈窗,主畫面保持乾淨
Mini Graph Card小巧的迷你折線圖塞在區塊角落當縮圖,不佔空間
card-mod改卡片的樣式(顏色、字體、間距)純外觀微調,不影響資料
注意:社群卡片是第三方作者維護的,Home Assistant 大改版時可能會壞掉。裝之前花三十秒做這件事:打開它的 GitHub 頁面,看最後一次 commit 和最新一版 release 的日期,再看 README 有沒有寫最低支援的 Home Assistant 版本(例如 card-mod 就明確標了版本對應表)。日期停在一年前的,代表下次 HA 改版它不一定有人修。裝太多社群卡片會讓你之後每次升級都提心吊膽,能用內建就用內建。
危險:不要為了裝一張卡片去加來路不明的自訂儲存庫。前端卡片是直接在你瀏覽器裡執行的 JavaScript,來源不明等於把瀏覽器交給別人。只裝 HACS 預設清單裡、星星數和更新紀錄都看得到的。

把紀錄匯出保存

紀錄累積久了會想拿出來自己算,或是怕哪天資料庫壞掉。有三個層次:

層次一:直接下載 CSV

  1. 打開歷史面板

    從側欄進入歷史(History)面板。這是「畫數值圖、下載數值」的地方。側欄另外那個活動(Activity,舊名記錄簿 Logbook)面板是流水帳,記的是「幾點幾分誰開了什麼」,2026.8 起它也有自己的 CSV 下載,但你要匯出的是數字,請走歷史面板。

  2. 挑實體與時間範圍

    選你要的區域、裝置或實體,再設定時間範圍。

  3. 按下載資料

    右上角有下載資料,會給你一份 CSV,可以直接丟進試算表。

注意:錄製器(Recorder)預設只保留 10 天的詳細資料(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) }} 元
提示:被清掉的是詳細狀態紀錄和每 5 分鐘的短期統計;每小時一筆的長期統計不會被清除,會一直留著。所以「詳細資料只有 10 天」不代表你的長期趨勢圖只有 10 天,體重、每月用電這種圖放個幾年都還在。想留更長的原始資料才要去調錄製器的 purge_keep_days,代價是資料庫變大,SD 卡或小容量硬碟要特別小心。

常見卡關

  1. 重開機之後 Helper 歸零了

    正常情況下數字、文字、下拉、日期時間輔助元件都會還原成重開前的值,計數器也有 restore 選項而且預設是開的。會歸零通常是因為你用 YAML 設定時填了 initial,這個值的優先權比還原高,開機就會把你的紀錄蓋掉。把 initial 拿掉即可。另一個可能是 Home Assistant 沒有正常關機(直接拔電),來不及寫入狀態。

  2. 統計圖表卡說沒有資料

    九成是因為你把輔助元件直接丟進去了。輔助元件沒有狀態類別(State class),不會產生長期統計。照〈讓紀錄長出圖表〉那節包一層範本感測器,加上 state_class: measurement。包好之後圖還是空的也別急:長期統計要整點過後才會產生第一筆,先等下一個整點再看。

  3. 歷史圖表是空的或只有一條直線

    先確認你的錄製器(Recorder)有沒有把這個實體排除掉。再來,如果數值從頭到尾沒變過,圖本來就是一條直線,這不是壞掉。第三,在歷史面板裡把時間範圍拉超過 10 天,畫面會自動改讀長期統計;輔助元件沒有長期統計,那段就會一片空白。想看輔助元件的原始變化,時間範圍留在 10 天內,卡片上的 hours_to_show 也別設太大。

  4. 卡片在手機上被截斷或擠成一團

    先確認檢視類型是不是 Sections。再檢查是不是把太多東西塞進同一張堆疊卡裡。Markdown 卡如果內容很長,加上 card_size 讓它預留高度。表格類的 Markdown 內容在窄螢幕本來就容易爆版,手機版建議改用條列式而不是表格。

  5. 範本感測器建好了但實體找不到

    改完 configuration.yaml 一定要重新載入。到側欄的工具(2026.8 之前叫「開發者工具」)→ YAML 分頁,按「範本實體」重新載入。如果重新載入之後還是沒有,多半是 YAML 縮排錯了,先用同一頁的「檢查設定」驗一次。還有一個常見的低級錯誤:configuration.yaml 裡已經有一個 template: 區塊了,你又貼了第二個,YAML 只會認最後一個,要把感測器併進同一個區塊底下。

  6. 條件卡永遠不顯示

    條件卡預設是「所有條件都要成立」才顯示。用 numeric_state 時注意 above 是嚴格大於,寫 above: 90 剛好 90 天時不會觸發,要寫 above: 89。用 screen 條件時媒體查詢字串記得整段用引號包起來。

  7. 腳本按了但累計沒變

    檢查 input_number 的最大值是不是被範本算出來的結果超過了,超過上限會被擋下來。另外用 | float(0) 這種帶預設值的寫法,避免實體暫時 unavailable 時整段範本炸掉。

常見問題

紀錄要用計數器還是數字,我還是分不清楚
看你「輸入的動作」是什麼。按一下加一,用計數器(counter),它有現成的 counter.incrementcounter.reset。要填一個具體數值(62.4 公斤、1284 元),用數字(input_number),把顯示模式設成輸入框比較好打。真的猶豫的話先用計數器,因為它有一鍵歸零,做每日紀錄方便很多。
我想記「一整段」文字,例如購物清單,可是文字 Helper 太短
不要跟長度限制硬碰硬。文字輔助元件的最大長度預設 100、最多只能調到 255,因為實體狀態本身就卡在 255 個字元。清單類的東西請用內建的本地待辦清單(Local To-do)整合加上待辦清單卡片,資料存在本機、可以無限增減項目,自動化也能用 todo.add_item 直接加東西進去。
體重的圖我只想看每週一個點,不要每天上上下下
兩個作法。第一,統計圖表卡把 period 設成 weekstat_types 設成 mean,它會直接幫你算每週平均。第二,建一個 Statistics 輔助元件,特徵值選平均值(mean),最大時效(max age)設 7 天,得到一個「近七日平均」的感測器再畫圖。第一種比較省事。
Utility Meter 的來源感測器一定要是智慧電表嗎?
不用,但來源必須是一個會一直往上累加的感測器實體,不能直接餵 input_number。手抄度數的話,先寫一個範本感測器把 input_number 包成 state_class: total_increasing 的感測器,再拿那個感測器當 Utility Meter 的輸入。設定時記得把「週期性重置(Periodically resetting)」關掉——它預設是開著的,而真正的水電表不會自己歸零,忘了關用量會算錯。
我把紀錄卡片放在手機上,但每次要滑很久才找到
做一個專門的手機儀表板,只放你每天真的會按的五六張卡(喝水、運動、記帳按鈕、留言),其他全部放在另一個平板/電腦用的儀表板。這比用一堆 screen 條件卡去藏東西好維護太多。手機 App 的側欄可以把不常用的儀表板隱藏起來。
這些紀錄會不會傳到雲端?家人的資料安全嗎?
輔助元件、本地待辦清單、Recorder 資料庫全部都存在你自己的 Home Assistant 主機上,預設不會外傳。要注意的是兩件事:一是你如果開了外部存取,儀表板就是從外面看得到的,權限與帳號設定請看第 5 章;二是備份檔裡面就包含這些紀錄,備份檔放哪裡要想清楚,細節在第 9 章
圖表上顯示的數字和我自己算的不一樣
很可能你看的是長期統計而不是原始紀錄。超過錄製器保留期(預設 10 天)的資料會自動改用長期統計,那是每小時取樣、平均過的濃縮值,跟每一筆原始數字對不起來很正常。想核對精確數字,把時間範圍縮到 10 天以內,或直接下載 CSV 自己看。
一定要裝 HACS 的社群卡片才做得出好看的儀表板嗎?
不用。Sections 版面加上圖磚卡、標題卡、徽章、統計圖表卡、Markdown 卡,已經可以做出相當完整的紀錄儀表板。社群卡片的價值在於補內建做不到的特定需求(例如 ApexCharts 的複雜圖表),但每多裝一個就多一個升級時可能壞掉的東西。建議先把內建卡片用到極限,真的卡住再裝,而且只裝還在持續更新的。