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

    HA 自動化進階:choose、repeat、parallel、變數

    [複製鏈接]

    !lvup!   100%

    386

    主題

    27

    回帖

    2200萬

    積分

    管理員

    積分
    22006063
    發表於 2026-9-21 13:30:20 | 顯示全部樓層 |閱讀模式
    寫久了會發現:一堆長得很像的自動化,只差一兩個地方。choose 可以把它們收成一個。

    寫久了會發現:一堆長得很像的自動化,只差一兩個地方。choose 可以把它們收成一個。

    這篇的每一段 YAML 都標了放在哪個檔案、放在哪一層,而且都能整段複製。文章裡用的實體 ID 是範例,換成你自己的。

    先說兩件會影響你怎麼讀這篇的事

    一、實體 ID 一律用英文

    在 HA 用中文名稱建立的東西,HA 會把中文音譯成拼音。你以為的 `light.客廳` 實際上可能是 `light.ke_ting`,也可能是別的。照抄中文 ID 的自動化會指到不存在的實體,而且不會報錯,只是永遠不動。

    到「設定 → 裝置與服務 → 實體」查真正的 ID,需要的話在那裡改成英文。同一條規則也適用於 Jinja 變數名。

    二、開發者工具搬家了

    這篇會一直叫你去測試。路徑是 設定 → 工具,底下有「範本」「狀態」「動作」「事件」「YAML」。


    • 2026.2 起它從側邊欄搬進「設定」底下
    • 2026.8 起名字從「開發者工具」改成「工具」


    所有舊教學寫的「側邊欄 → 開發者工具」都找不到了。懶得點的話按 Ctrl + K(Mac 是 Cmd + K)直接搜。

    步驟 1:先看原本的問題長什麼樣

    假設你有四個自動化:
    1. 自動化 1:早上 7 點    → 開窗簾
    2. 自動化 2:中午 12 點   → 開空調
    3. 自動化 3:晚上 6 點    → 開燈
    4. 自動化 4:晚上 11 點   → 全部關掉
    複製代碼

    四個獨立的自動化,四個地方,想調整「一天的作息」要開四次編輯器,而且很容易漏掉其中一個。

    步驟 2:用 choose 合併成一個

    放在 configuration.yaml 的最外層(如果你用 `automation: !include automations.yaml`,那就把 `- alias:` 以下的部分貼到 `automations.yaml`,不要再寫一次 `automation:`)。
    1. automation:
    2.   - alias: 一天的作息
    3.     id: daily_routine
    4.     mode: single
    5.     triggers:
    6.       - trigger: time
    7.         at: "07:00:00"
    8.         id: morning
    9.       - trigger: time
    10.         at: "12:00:00"
    11.         id: noon
    12.       - trigger: time
    13.         at: "18:00:00"
    14.         id: evening
    15.       - trigger: time
    16.         at: "23:00:00"
    17.         id: bedtime
    18.     actions:
    19.       - choose:
    20.           - conditions:
    21.               - condition: trigger
    22.                 id: morning
    23.             sequence:
    24.               - action: cover.open_cover
    25.                 target:
    26.                   entity_id: cover.living_room_curtain
    27.           - conditions:
    28.               - condition: trigger
    29.                 id: noon
    30.             sequence:
    31.               - action: climate.turn_on
    32.                 target:
    33.                   entity_id: climate.living_room
    34.           - conditions:
    35.               - condition: trigger
    36.                 id: evening
    37.             sequence:
    38.               - action: light.turn_on
    39.                 target:
    40.                   entity_id: light.living_room
    41.           - conditions:
    42.               - condition: trigger
    43.                 id: bedtime
    44.             sequence:
    45.               - action: light.turn_off
    46.                 target:
    47.                   entity_id: all
    48.         default:
    49.           - action: persistent_notification.create
    50.             data:
    51.               title: 一天的作息
    52.               message: 被觸發了但沒有符合任何一段,檢查 trigger id
    複製代碼

    三個要點


    • 每個觸發器給一個 id,用英文
    • condition: trigger 判斷「是哪一個觸發器把我叫起來的」
    • id 可以重複 —— 兩個不同型別的觸發器給同一個 id,就會跑同一段


    default 那一段不要省。它是這個結構唯一的除錯手段:當你哪天打錯 id,沒有 default 的版本會安靜地什麼都不做,有 default 的版本會在 HA 的通知鈴鐺跳出來告訴你。

    entity_id: all 是合法的,代表該動作能作用的所有實體。睡前關燈用它很方便,但要有心理準備:它是真的全部,包括你不想關的那盞小夜燈。

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

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

    本版積分規則

    延伸閱讀

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

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

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

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