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

    六個會在半年後咬你一口的自動化寫法,每個都附完整的修正版

    [複製鏈接]

    !lvup!   100%

    386

    主題

    27

    回帖

    2200萬

    積分

    管理員

    積分
    22006063
    發表於 2026-9-21 02:22:33 | 顯示全部樓層 |閱讀模式
    這六種寫法都能通過 Home Assistant 的檢查、存檔不會報錯、當下測試也正常。它們的共同點是:要等到某個特定的日子、某個特定的溫度、或某個特定的順序才會發作,而發作的時候你早就忘記自己是怎麼寫的了。

    每一段都有三件事:怎麼確認你家中了、完整可以貼的修正版、改完之後你會看到什麼。

    改完之後你會看到什麼

    ━━ 步驟 0:先準備好可以貼 YAML 的地方 ━━

    底下所有修正版都是 automations.yaml 的內容。三種貼法擇一:


    • 用 UI 貼單條(最推薦)—— 設定 → 自動化與場景 → 建立自動化 → 從頭開始 → 右上角三個點 → 以 YAML 編輯 → 把整條貼進去(不要貼最前面的那個減號,UI 編輯器一次只放一條)
    • 直接改檔案 —— 用「檔案編輯器(File editor)」應用程式(2026.2 前叫「附加元件」)開 /config/automations.yaml,貼在最後面,要包含最前面的減號。存檔後到 開發者工具 → YAML → 重新載入自動化
    • 分檔管理 —— 如果你在 configuration.yaml 裡寫了 automation: !include_dir_merge_list automations/,那就在 automations/ 底下新增檔案


    每次貼完的共同驗證:到 開發者工具 → YAML → 按「檢查設定」。

    你會看到什麼:綠色的「設定有效!」。出現紅色錯誤框的話,錯誤訊息會直接指出檔名和行號,九成是縮排少了或多了兩格。

    ━━ 步驟 1:修掉「通知沒有時間條件」 ━━

    1-1 怎麼確認你中了

    到 設定 → 自動化,把所有名字裡有「通知」「提醒」「推播」的點開,切到 YAML 檢視。

    中了的長相:conditions: 是空的,或者根本沒有這個區塊,而 actions 裡有 notify.mobile_app_xxx。

    原始的問題寫法(順便看一下舊語法長什麼樣):
    1. trigger:
    2.   - platform: state
    3.     entity_id: binary_sensor.hou_men
    4.     to: "on"
    5. action:
    6.   - service: notify.mobile_app_iphone
    7.     data:
    8.       message: 後門開了
    複製代碼

    這段在凌晨四點會響。觸發的來源可能是貓跳上窗台、風把門吹動、或者感應器單純誤觸發 —— 而因為它是「安全類」通知,被吵醒的人會嚇一跳。

    1-2 修正版(完整可貼)

    這裡不只加時間條件,而是做成分級:白天只寫進 Logbook,晚上才推播,而且要求門持續開著 30 秒才算數,濾掉瞬間誤觸。
    1. - alias: "後門開啟 - 白天只記錄"
    2.   id: back_door_day_log
    3.   mode: single
    4.   triggers:
    5.     - trigger: state
    6.       entity_id: binary_sensor.hou_men
    7.       to: "on"
    8.       for:
    9.         seconds: 30
    10.   conditions:
    11.     - condition: time
    12.       after: "07:00:00"
    13.       before: "23:00:00"
    14.   actions:
    15.     - action: logbook.log
    16.       data:
    17.         name: "後門"
    18.         message: "白天開啟(未推播)"
    19.         entity_id: binary_sensor.hou_men
    20. - alias: "後門開啟 - 夜間推播"
    21.   id: back_door_night_push
    22.   mode: single
    23.   triggers:
    24.     - trigger: state
    25.       entity_id: binary_sensor.hou_men
    26.       to: "on"
    27.       for:
    28.         seconds: 30
    29.   conditions:
    30.     - condition: time
    31.       after: "23:00:00"
    32.       before: "07:00:00"
    33.   actions:
    34.     - action: notify.mobile_app_iphone
    35.       data:
    36.         title: "後門持續開啟"
    37.         message: >
    38.           後門已開啟超過 30 秒。
    39.           現在時間 {{ now().strftime('%H:%M') }}。
    40.         data:
    41.           push:
    42.             sound:
    43.               name: default
    44.               critical: 1
    45.               volume: 0.8
    複製代碼

    每個設計決定的理由:


    • for: seconds: 30 —— 貓踩過、風吹一下都不會維持 30 秒。這一行擋掉的誤報比時間條件還多
    • 兩條分開寫,不寫成一條加 if —— 因為白天和晚上的動作本來就不同,分開之後每一條都只有一種行為,出問題時你知道要看哪一條
    • time 條件跨午夜是合法的 —— after: 23:00 / before: 07:00 這種寫法 HA 認得,它會理解成跨日
    • critical: 1 —— iOS 的重要通知,會無視靜音模式。只有真正該叫醒你的事才加這個


    1-3 你會看到什麼

    存檔後到 設定 → 自動化,你會看到兩條新的自動化,右邊的開關都是開的。

    驗證方法:手動開門超過 30 秒。


    • 白天 —— 手機不會響。到 設定 → 系統 → 紀錄簿(Logbook),你會看到一行「後門 白天開啟(未推播)」
    • 晚上 —— 手機收到推播
    • 什麼都沒發生 —— 先確認實體名稱對不對。到 開發者工具 → 狀態,搜尋你的門磁,把完整的 entity_id 複製下來取代 binary_sensor.hou_men


    不想等到半夜才測:把兩條的 time 條件暫時對調,測完再改回來。

    ━━ 步驟 2:修掉「用 delay 做延遲關燈」 ━━

    2-1 怎麼確認你中了

    到 設定 → 自動化,YAML 檢視裡搜尋 delay。

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

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

    本版積分規則

    延伸閱讀

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

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

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

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