找回密碼
 立即註冊
    查看: 145|回覆: 0

    讓 Home Assistant 自己告訴你哪裡壞了:可維護性的十個實作步驟

    [複製鏈接]

    !lvup!   100%

    386

    主題

    27

    回帖

    2200萬

    積分

    管理員

    積分
    22006063
    發表於 2026-9-21 10:40:44 | 顯示全部樓層 |閱讀模式
    智能家居最麻煩的不是壞掉,是「安靜地壞掉」。

    感應器沒電、Zigbee 裝置掉線、某個整合的 API 改了——這些都不會跳錯誤訊息,只是那條自動化從此不再觸發。你可能三個月後才因為「咦,怎麼最近燈都不會自己亮」而發現。

    這篇做兩件事:


    • 前半(步驟 1~5):把設定整理成半年後你還看得懂、還敢改的樣子
    • 後半(步驟 6~10):讓系統主動回報自己的健康狀況


    全部做完大約兩小時,之後每個月花十分鐘看一次報告就好。

    全部做完大約兩小時,之後每個月花十分鐘看一次報告就好。

    步驟 1:找出散落各處的重複判斷

    這是最常見、也最難察覺的技術債。

    典型長這樣——三個自動化各自判斷「現在是不是夜間」:
    1. # 自動化 A
    2. conditions:
    3.   - condition: template
    4.     value_template: "{{ now().hour >= 23 or now().hour < 6 }}"
    5. # 自動化 B
    6. conditions:
    7.   - condition: template
    8.     value_template: "{{ now().hour >= 23 or now().hour < 6 }}"
    9. # 自動化 C(這裡不小心寫成 22)
    10. conditions:
    11.   - condition: template
    12.     value_template: "{{ now().hour >= 22 or now().hour < 6 }}"
    複製代碼

    同一個「夜間」的定義散在三個地方,而且已經不一致了。只差一小時,所以沒有任何症狀,你永遠不會發現。

    怎麼把它們找出來:


    • 開設定 → 自動化與場景,右上角三個點 → 以 YAML 編輯(在單一自動化裡),或是直接用 File editor 開 `automations.yaml`
    • 搜尋 `now().hour`、`sun.sun`、`is_state('person`、`> 70`(濕度門檻)這幾個字串


    你會看到什麼:同一個判斷出現兩次以上。出現第二次,就該抽出來。

    步驟 2:把重複的判斷抽成一個實體

    放在 `configuration.yaml` 的最外層(頂格):
    1. template:
    2.   - binary_sensor:
    3.       - name: 夜間模式
    4.         unique_id: night_mode
    5.         icon: mdi:weather-night
    6.         state: >
    7.           {{ now().hour >= 23 or now().hour < 6 }}
    8.       - name: 家裡太濕
    9.         unique_id: home_too_humid
    10.         device_class: moisture
    11.         state: >
    12.           {{ states('sensor.living_room_humidity') | float(0) > 70 }}
    13.         availability: >
    14.           {{ has_value('sensor.living_room_humidity') }}
    複製代碼

    ⚠⚠ 三個一定要注意的地方

    一、不要用舊的 `- platform: template` 寫法。

    舊式長這樣(錯的):
    1. binary_sensor:
    2.   - platform: template
    3.     sensors:
    4.       night_mode:
    5.         friendly_name: 夜間模式
    6.         value_template: "{{ now().hour >= 23 }}"
    複製代碼

    HA 2026.6 已經把這個寫法整個移除,涵蓋十種實體類型(sensor、binary_sensor、cover、fan、light、lock、switch、vacuum、weather、alarm_control_panel)。

    移除的方式是靜默的:實體直接不見,引用它的自動化在介面上仍顯示「已啟用」卻永遠不觸發,儀表板上沒有任何紅字。2025.12 到 2026.5 之間有棄用警告,但那些警告只出現在日誌裡,沒在看的人不會知道。

    二、`availability_template:` 已經改名成 `availability:`。

    舊名只在已被移除的 `platform: template` 底下合法。寫在新式區塊裡不會報錯,只是那個實體建不出來——你會在狀態頁找不到它,而且不知道為什麼。

    三、`unique_id` 一定要寫。

    沒有 `unique_id` 的模板實體不能在介面上改名、不能指定區域、不能停用。而且之後想補上去的話,實體 ID 會重新產生一次,引用它的地方全部要再改一遍。

    以下還有約 81% 的內容
    登入後即可閱讀完整教學

    登入繼續閱讀使用 Google 登入
    您需要登入後纔可以回帖 登入 | 立即註冊

    本版積分規則

    延伸閱讀

    加入惟家 LINE 群 QR Code加入惟家 LINE 群

    Archiver|手機版|惟家的智能論壇

    GMT+8, 2026-11-10 00:55 , Processed in 0.127159 second(s), 25 queries .

    快速回覆 返回頂部 返回列表