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

    自動化寫了卻不動:十個原因,每一個都有查證方法與正確寫法

    [複製鏈接]

    !lvup!   100%

    386

    主題

    27

    回帖

    2200萬

    積分

    管理員

    積分
    22006063
    發表於 2026-9-21 13:50:30 | 顯示全部樓層 |閱讀模式
    自動化最難的不是寫,是「它沒動,而你不知道為什麼」。Home Assistant 大部分的失敗都是安靜的 —— 沒有紅字、沒有錯誤通知,畫面上什麼都看不出來。

    這一篇列十個實際會發生的失敗,每一個都給三件事:怎麼確認你中的是這一個、錯的寫法、對的寫法。

    對的寫法

    步驟 0:先學會看自動化的「追蹤」

    下面每一項的診斷都會用到它,所以先做這一步。


    • 設定 → 自動化與場景
    • 點你要查的那一則
    • 右上角三個點 → 追蹤


    你會看到:一張流程圖,橘色線是這次執行實際走過的路徑。左邊可以切換最近幾次執行。點任何一個方塊,右邊會顯示那一步當下的變數值與結果。

    追蹤清單是空的:這則自動化從來沒有被觸發過。問題出在觸發器,不是動作 —— 直接跳到第一、第二、第三項。
    有紀錄,但流程圖在 conditions 就停住:觸發沒問題,是條件不成立。點那個條件方塊看它為什麼是 false。

    這是 Home Assistant 最有用的除錯工具,而且很多人不知道它存在。

    一、感應燈一直開開關關

    怎麼確認:追蹤裡短時間內出現大量執行紀錄,而你人根本沒有進出。

    錯的寫法:
    1. - id: bad_motion_light
    2.   alias: 錯誤示範 - 感應燈
    3.   triggers:
    4.     - trigger: state
    5.       entity_id: binary_sensor.hallway_motion
    6.       to: "off"
    7.   actions:
    8.     - action: light.turn_off
    9.       target:
    10.         entity_id: light.hallway
    複製代碼

    問題:人體感應器(PIR)偵測的是移動,不是存在。人還在,只是剛好停下來看手機,燈就關了。

    對的寫法:
    1. - id: motion_light
    2.   alias: 走廊感應燈
    3.   mode: restart
    4.   triggers:
    5.     - trigger: state
    6.       entity_id: binary_sensor.hallway_motion
    7.       to: "on"
    8.   actions:
    9.     - action: light.turn_on
    10.       target:
    11.         entity_id: light.hallway
    12.     - wait_for_trigger:
    13.         - trigger: state
    14.           entity_id: binary_sensor.hallway_motion
    15.           to: "off"
    16.           for: "00:03:00"
    17.       timeout: "02:00:00"
    18.       continue_on_timeout: true
    19.     - action: light.turn_off
    20.       target:
    21.         entity_id: light.hallway
    複製代碼

    三個重點:


    • mode: restart —— 等待期間又偵測到人,整則重新開始,計時歸零
    • for: "00:03:00" —— 沒人要持續三分鐘才算真的沒人
    • timeout —— 感應器卡在 on(沒電、故障)的時候,兩小時後也會把燈關掉。任何 `wait_for_trigger` 都要有 timeout,否則那次執行會永遠掛在那裡


    你會看到:追蹤裡每次執行只有一筆,而且卡在 `wait_for_trigger` 那一格(右邊顯示「執行中」)。

    更簡單的做法:把三分鐘的緩衝做在感測器端,用模板二元感測器的 `delay_off: "00:03:00"`,這樣所有用到它的自動化都自動有緩衝,不用每則各寫一次。

    二、mode 沒設,執行被默默丟掉

    症狀:自動化偶爾不動,但你找不出規律。

    怎麼確認:設定 → 系統 → 日誌,右上角「載入完整日誌」,搜尋 `already running`。

    你會看到:`Automation with alias 'xxx' is already running` 這類警告,時間點正好是你覺得「它沒動」的那幾次。

    原因:`mode` 的預設值是 `single`。前一次執行還卡在 `delay` 或 `wait_for_trigger` 的時候,新的觸發整個被丟掉。

    四個模式怎麼選:


    • single(預設)—— 前一次沒跑完就忽略新的。適合「不能重複做」的事,例如發通知
    • restart —— 砍掉前一次,重新開始。適合任何有倒數計時的東西(感應燈、手動模式解除)
    • queued —— 排隊,一個一個跑。適合「每一次都不能漏」的事,例如寫紀錄
    • parallel —— 同時跑。適合被多個房間共用的通用腳本


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

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

    本版積分規則

    延伸閱讀

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

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

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

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