第 8 章

第一個自動化

前面 7 章把家的架構、命名、儀表板、通知都設好了。這一章帶你寫下第一個自動化,讓 HA 真的動起來。

為什麼要學這個

自動化(Automation)是 HA 的核心,也是它跟一般智慧插座 App 最大的差別。

如果只把 HA 當成「一個能遠端開關燈的網頁」,那它其實不比小米 / Google Home 好用。真正讓 HA 值得裝的,是它能夠:

  • 根據時間(日落、每天早上七點)做事。
  • 根據感應器(有人進門、溫度太高、電費超過某個值)做事。
  • 根據多重條件(有人在家 + 天黑 + 週間)決定要不要做。

不寫自動化,HA 只是一台比較貴的遙控器。從這一章開始,我們讓它變成家裡的自動管家。

三段式概念:觸發 / 條件 / 動作

HA 的每一個自動化,都由三個區塊組成,記住這三個字,之後看任何範例都不會迷路:

  • 觸發(Trigger):什麼時候要「開始檢查」這個自動化。例如:日落時、某個開關被按下、溫度超過 28 度。
  • 條件(Condition):觸發後,要不要真的執行。例如:只有「有人在家」時才開燈、只有「非假日」才響鬧鐘。條件是過濾器
  • 動作(Action):實際要做什麼。例如:開燈、發推播、播音樂、關窗簾。
心法:觸發是「什麼時候問」,條件是「要不要做」,動作是「做什麼」。這三段拆清楚,任何複雜自動化都能拼出來。

device_id 與 entity_id 的陷阱

這是 HA 社群公認的第一大坑,也是很多人自動化「用一陣子就壞了」的原因。

在 UI 建立自動化時,HA 預設會用裝置(device)作為觸發對象,例如「客廳燈這台裝置被打開」。看起來很直覺,但這樣寫的自動化是綁在那顆實體硬體上的識別碼(device_id)。一旦你把燈換一顆、重新配對 Zigbee、或整合被移除重加,device_id 就變了,自動化就整條壞掉,而且不會有錯誤訊息,它只是安靜地不動

本教學規則:所有自動化的觸發與動作,一律改成 entity_id(例如 light.livingroom_ceiling),不用 device_id。UI 上會顯示為「實體」選項而非「裝置」選項。

entity_id 是邏輯名稱,是你在第 4 章時親手命名的那串。設備換了、整合重裝了,只要你把新設備改成同樣的 entity_id,所有自動化就會自動接回去,不用改。

這也是為什麼第 4 章的命名與標籤那麼重要——好的 entity_id 是可維護自動化的地基。

延伸閱讀:HA 社群討論:為什麼要避開 device_id

動手做:當日落時打開客廳燈

我們用最經典的「日落開燈」來實作。目標:太陽下山後 30 分鐘,把客廳主燈打開,並發一則手機推播通知。

名稱有改過:HA 2024.8 起把「服務(Service)」正式改叫「動作(Action)」,UI 上的「呼叫服務(Call service)」變成「執行動作(Perform action)」。2024.10 起自動化 YAML 的最外層三個鍵也改成複數:trigger:triggers:condition:conditions:action:actions:;動作裡的 service: 改成 action:service_data: 改成 data:。舊寫法官方沒有廢除、還是跑得動,所以你在網路上看到舊範例不用緊張。下面的步驟一律用新名稱,括號裡標的舊名就是舊版畫面上會看到的字。
  1. 建立新的自動化

    到「設定 → 自動化與場景 → 建立自動化」,選擇「從空白開始」。給它一個好懂的名字,例如「日落 · 客廳主燈開啟」。

    建立新自動化
    圖 8-1從空白開始,命名務必描述「什麼時候做什麼」。
  2. 設定觸發:太陽(Sun)

    點「新增觸發器」,選擇「Sun(太陽)」。事件選「日落(sunset)」,偏移(Offset)填 +00:30:00,代表日落後 30 分鐘。

    設定 Sun 觸發
    圖 8-2Sun 觸發器:日落 / 日出 + 前後偏移。
  3. (可選)加條件:只在有人在家時執行

    點「新增條件」,選「狀態」,實體選 zone.home(或你在第 3 章設定的家庭區域),狀態為「大於 0」。這樣沒人在家時就不會浪費電。

    設定條件
    圖 8-3條件是過濾器,觸發後才判斷。
  4. 設定動作:開燈

    點「新增動作」,選「執行動作(Perform action,舊版叫「呼叫服務 Call service」)」,動作選 light.turn_on重點:目標欄請切換到「實體(Entity)」而非「裝置(Device)」,選 light.livingroom_ceiling(或你的客廳主燈 entity_id)。亮度可以設 60%。

    設定開燈動作
    圖 8-4動作務必用 entity_id,見上一節說明。
  5. 加一個推播通知動作

    再點「新增動作」,選 notify.mobile_app_xxx(第 7 章設定的通知動作),訊息填「客廳燈已隨日落開啟」。

    加推播動作
    圖 8-5動作可以串很多個,會依序執行。
  6. 儲存並測試

    右下角「儲存」,取名確認後,回自動化列表可以看到剛建立的那一條。點它旁邊的「執行」按鈕手動觸發一次,確認燈會亮、手機會收到通知。

    儲存與測試
    圖 8-6手動執行可以跳過觸發條件,直接驗證動作。
驗證:把手機時間調到剛過日落 30 分鐘,燈應該亮起。或到「設定 → 自動化 → 你剛建的那個 → 執行」手動觸發。手機若收到「客廳燈已隨日落開啟」的推播,代表整條路徑(觸發 → 條件 → 動作 → 通知)都通了。

執行模式:single / restart / queued / parallel

當自動化在「還在跑」時又被觸發了一次,該怎麼辦?這就是執行模式要決定的事。到自動化編輯頁最下方可以看到「模式」設定。

模式 行為 適用情境
single(預設) 上一次還在跑就忽略新觸發 日落開燈、每日備份這類「跑完就好」的自動化
restart 收到新觸發就中斷上一次,從頭跑 動作感應器開燈 + 5 分鐘後關(每次有人動就重新計時)
queued 新觸發排隊,等前面跑完再依序執行 按門鈴要「叮咚」一聲一聲不能疊,或短時間內大量事件
parallel 同時跑多份 很少用,只有明確要多份並行才選

不確定就留 single,這是最安全的預設值。

Blueprint 藍圖:一鍵匯入別人寫好的自動化

Blueprint 是 HA 官方的「自動化樣板」機制。作者把邏輯寫好、把可調整的部份留成表單欄位,你只要填幾個下拉選單就有一條可用的自動化。

常見用途:

  • Zigbee 按鈕綁定(IKEA、Aqara、Hue 遙控器)
  • 動作感應器開燈 + 逾時關燈
  • 洗衣機 / 烘衣機完成通知
  • 低電量電池提醒

匯入流程:

  1. HA Blueprint Exchange 論壇 或 GitHub 找想要的藍圖,複製它的 URL。
  2. 在 HA「設定 → 自動化與場景 → 藍圖 → 匯入藍圖」,貼上網址。
  3. 回到「自動化」,點「以藍圖建立自動化」,選剛匯入的那份,填入設備 / 實體參數即可。
建議:先熟悉自己手寫一次自動化(也就是本章的範例),再開始用藍圖。這樣藍圖出問題你才知道怎麼看、怎麼改。

常見卡關

問題 1:自動化沒跑,也沒錯誤訊息。

到自動化列表點那條進去,右上角有個「軌跡(Trace)」按鈕。這裡會顯示最近 5 次觸發的完整流程:哪個觸發器啟動、條件通過與否、動作跑到哪一步。看軌跡是排錯的第一步,比看 log 直接。

問題 2:觸發有發生,但條件把它擋掉。

Trace 會用顏色標示:條件那格如果變成灰色 / 白色,代表沒通過,滑鼠移上去會顯示當下實體的實際值。常見原因:zone.home 判斷成 0(大家都不在家)、時間條件與時區沒對齊。

問題 3:實體名字拼錯 / 已改名。

如果你改了 entity_id,舊自動化不會自動跟著改,會安靜地跑不動。HA 2024 版之後新增了「未使用的實體」和「重新命名時提示更新」,但舊自動化建議手動用「設定 → 工具 → YAML → 檢查設定」(Settings → Tools → YAML;這頁舊版叫「開發者工具」,2026.2 搬進「設定」底下、2026.8 再簡化成「工具」)跑一次驗證。

常見問題

可以在自動化裡呼叫另一個自動化嗎?
可以,但更推薦用「腳本(Script)」。腳本就是一段可重用的動作序列,可以被多個自動化呼叫,也可以在儀表板放按鈕手動觸發。設定 → 自動化與場景 → 腳本 建立。
自動化寫在 UI 好還是 YAML 好?
新手一律用 UI,錯誤訊息友善、有 Trace 除錯。YAML 適合已經很熟、要做版本控制、或要複製到多台 HA 的進階使用者。UI 建的自動化其實底層也是 YAML,可以隨時匯出。
為什麼我的日落觸發時間跟實際天色差很多?
HA 的日落時間是根據第 2 章設定的「經緯度」計算的。如果經緯度沒設,會用預設值(可能是德國),時間就會歪。到「設定 → 系統 → 家庭資訊(Home information,舊版叫「一般」)」確認。
有辦法讓一條自動化暫時停用嗎(例如出國期間)?
自動化列表右邊有個開關可以直接關掉。或者用「輸入布林值(input_boolean)」建一個「渡假模式」開關,在條件裡引用它,就可以在儀表板上一鍵切換。