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

    自動化寫在 HomeKit 還是 Home Assistant?四題決策表與兩份完整範例

    [複製鏈接]

    !lvup!   100%

    384

    主題

    27

    回帖

    2200萬

    積分

    管理員

    積分
    22005889
    發表於 2026-9-21 02:06:45 | 顯示全部樓層 |閱讀模式
    兩邊都寫得出自動化,而且都不難。難的是決定寫哪邊 —— 決定錯了不會報錯,只是某一天你會發現它沒跑,或是兩邊打架讓燈一直閃。這一篇給一張四題的決策表,然後把兩邊各做一條完整的自動化,最後教你盤點自己有沒有不小心寫重複。

    兩邊都寫得出自動化,而且都不難。難的是決定寫哪邊 —— 決定錯了不會報錯,只是某一天你會發現它沒跑,或是兩邊打架讓燈一直閃。這一篇給一張四題

    這一篇做完你會有什麼


    • 一條真的在「家庭」App 裡跑的自動化,而且你驗證過它跑了
    • 一條在 Home Assistant 裡跑的多條件自動化,完整的 YAML
    • 一個橋接回「家庭」App 的狀態,讓家人看得到 Home Assistant 的判斷結果
    • 一份盤點表,確認沒有任何一件事被兩邊各寫一次


    步驟 1:四題決策表

    每一題都有具體的判斷方法,不要用感覺的。

    第一題:這條自動化需要用到「數值比較」嗎?

    「溫度超過 28 度」「濕度低於 40%」「電量低於 20%」「連續 30 分鐘沒有人」都算。


    • 需要 → 寫 Home Assistant。「家庭」App 的條件只能比對裝置狀態(開/關、偵測到/沒偵測到),對感測器數值的判斷能力非常有限
    • 不需要 → 繼續看第二題


    第二題:需要同時判斷三個以上的條件嗎?

    「有人在家 而且 天黑了 而且 不是假日 而且 冷氣沒開」這種。


    • 需要 → 寫 Home Assistant
    • 不需要(一個觸發、一到兩個條件) → 繼續看第三題


    第三題:Home Assistant 重開機或更新時,這條自動化可不可以停?

    這一題最常被忽略,卻常常是決定性的。

    HomeKit 的自動化跑在 HomePod 或 Apple TV 上(2026 年 2 月之後 iPad 不再算家庭中樞),跟 Home Assistant 完全無關。Home Assistant 在更新、在重開、主機壞掉,這些自動化照樣跑。


    • 不可以停(玄關燈、安全相關、長輩房的夜燈)→ 寫 HomeKit
    • 可以停 → 繼續看第四題


    第四題:你希望家人自己改得動嗎?


    • 希望 → 寫 HomeKit。「家庭」App 的自動化編輯器只有幾個選項,長輩調個時間不會把系統弄壞
    • 不希望,或改的人只有你 → 寫 Home Assistant,功能多很多


    結論的優先順序:第一、二題只要有一個「需要」就是 Home Assistant,沒有商量餘地(因為 HomeKit 根本做不到)。第三、四題是偏好問題。

    步驟 2:範例 A —— 寫在 HomeKit(日落開門廊燈)

    挑這個例子是因為它四題全部指向 HomeKit:單一觸發、沒有數值比較、Home Assistant 停了也要亮、家人可能想調時間。

    2-1 前置確認


    • 「家庭」App → 左上角房子圖示 → 家庭設定 → 家庭中樞與橋接器
    • 你會看到最上面一台標著「已連線」


    這一頁是空的 → 沒有中樞,自動化根本不會執行。要先有 HomePod、HomePod mini 或 Apple TV。

    2-2 建立


    • 「家庭」App → 下方自動化分頁 → 右上角加號
    • 選特定時間發生時
    • 上方選日落,下面可以再加減偏移,選之後 30 分鐘
    • 人物那一段選任何人在家或不在家時(不加限制)
    • 下一步 → 勾選門廊燈
    • 長按那個燈的圖示(不是點一下),會展開亮度滑桿,調到 60%
    • 右上角完成


    你會看到:自動化清單裡多一條,名稱是「日落之後 30 分鐘」之類的系統自動命名,右邊有一個開著的開關。

    長按沒有展開滑桿 → 你長按的是整張卡片不是燈的圖示。滑桿會從下方推上來。

    2-3 驗證(這一步在 HomeKit 這邊特別重要)

    ⚠ 這裡有一個常見的過期說法要修正:很多文章寫「HomeKit 完全不留紀錄」。新版家庭架構其實有「活動記錄」(Activity History),30 天滾動、端對端加密。

    但它的範圍很窄,多數情況下還是驗不了你這一條自動化:


    • 只涵蓋安全與氣候類配件 —— 門鎖、車庫門、警報系統、門窗感測器、煙霧偵測器,以及氣候自動化
    • 普通的燈、開關、插座不在裡面
    • 沒有任何數值曲線。要看溫濕度趨勢、用電量變化,還是只有 Home Assistant 有
    • 需要新版家庭架構,而且 Apple TV 要 tvOS 17 以上、HomePod 要 17 版以上


    怎麼打開與查看:「家庭」App → 右上角三個點 → 家庭設定 → 活動 → 活動選擇器 → 一個月。要看的時候回首頁,把上方的「安全」篩選器打開,紀錄會出現在感測器清單的最前面。

    所以這條門廊燈的自動化不會出現在活動記錄裡。用下面三個方法確認:

    方法一:手動執行一次

    自動化清單 → 點那一條進去 → 最下面有測試此自動化。

    你會看到:門廊燈立刻亮到 60%。

    方法二:用 Home Assistant 反查(最可靠)

    那盞燈如果是透過 HomeKit Bridge 橋過去的,Home Assistant 就看得到它被誰動了。


    • Home Assistant → 設定 → 系統 → 日誌記錄
    • 上方實體欄位填那盞燈
    • 等到日落之後 30 分鐘再回來看


    你會看到:一筆「門廊燈 被開啟」,觸發來源會標成 HomeKit 或是空白(不是任何一條 Home Assistant 自動化的名字)。

    方法三:把時間暫時改早

    不想等日落的話,把觸發時間改成「五分鐘後的一個固定時刻」,驗證完再改回日落。

    2-4 家人要怎麼改

    自動化清單 → 點進去 → 改時間 → 完成。就這樣,改不壞。

    步驟 3:範例 B —— 寫在 Home Assistant(多條件自動除濕)

    這個例子第一、二題都命中:要比濕度數值,而且要同時看三個條件。

    3-1 先確認你有哪些實體

    開發者工具 → 狀態分頁,把下面這幾個查出來並用滑鼠複製(不要手打):


    • 濕度感測器,像 sensor.ke_ting_shi_du
    • 除濕機的開關,像 switch.chu_shi_ji
    • 人員,像 person.charles


    3-2 完整的自動化

    加到 automations.yaml(或 設定 → 自動化與場景 → 新增自動化 → 右上角三個點 → 以 YAML 編輯):
    1. - id: auto_dehumidify
    2.   alias: "濕度過高且有人在家就除濕"
    3.   description: "濕度連續 10 分鐘超過 70%、白天、有人在家才開"
    4.   mode: single
    5.   triggers:
    6.     - trigger: numeric_state
    7.       entity_id: sensor.ke_ting_shi_du
    8.       above: 70
    9.       for:
    10.         minutes: 10
    11.   conditions:
    12.     - condition: time
    13.       after: "08:00:00"
    14.       before: "22:00:00"
    15.     - condition: state
    16.       entity_id: person.charles
    17.       state: "home"
    18.     - condition: state
    19.       entity_id: switch.chu_shi_ji
    20.       state: "off"
    21.   actions:
    22.     - action: switch.turn_on
    23.       target:
    24.         entity_id: switch.chu_shi_ji
    25.     - action: persistent_notification.create
    26.       data:
    27.         title: 自動除濕
    28.         message: >-
    29.           客廳濕度 {{ states('sensor.ke_ting_shi_du') }}%,
    30.           已於 {{ now().strftime('%H:%M') }} 開啟除濕機
    31. - id: auto_dehumidify_off
    32.   alias: "濕度降下來就關除濕機"
    33.   mode: single
    34.   triggers:
    35.     - trigger: numeric_state
    36.       entity_id: sensor.ke_ting_shi_du
    37.       below: 58
    38.       for:
    39.         minutes: 5
    40.   conditions:
    41.     - condition: state
    42.       entity_id: switch.chu_shi_ji
    43.       state: "on"
    44.   actions:
    45.     - action: switch.turn_off
    46.       target:
    47.         entity_id: switch.chu_shi_ji
    複製代碼

    幾個一定要有的設計,不是可有可無:


    • for: minutes: 10 —— 濕度在 70 附近抖動時不要立刻反應。少了這行,開關會一直跳
    • 開 70 關 58,中間留 12 的落差 —— 這叫遲滯。兩個門檻設成同一個數字,除濕機會在門檻上反覆開關
    • conditions 裡檢查目前狀態 —— 已經開著就不要再開一次,否則通知會一直跳
    • mode: single —— 同一條自動化還在跑的時候不要再觸發一次


    3-3 驗證

    存檔後 設定 → 系統 → 右上角三個點 → 重新載入 YAML 設定 → 自動化。

    你會看到:設定 → 自動化與場景 裡多出兩條,右邊的開關都是開著的。

    一條都沒出現 → YAML 縮排錯。最常見的是把 `- id:` 前面那個減號吃掉了。到 設定 → 系統 → 日誌看紅字,它會寫第幾行。

    不要只看它有沒有出現,要驗它動得了:


    • 點進「濕度過高且有人在家就除濕」
    • 右上角三個點 → 執行
    • 你會看到除濕機立刻啟動,而且右上角跳出那則通知,內容含實際的濕度數字


    執行後除濕機沒動 → `entity_id` 打錯。回開發者工具複製正確的。
    通知裡的濕度顯示 unknown → 範本裡的感測器名稱打錯了。

    3-4 看它真正被觸發時發生了什麼

    自動化真的被濕度觸發之後,可以看完整的執行過程:


    • 點進那條自動化 → 右上角三個點 → 追蹤(Traces)
    • 你會看到一張流程圖,綠色的路徑是實際走過的,灰色的是沒走
    • 點步驟詳細資料可以看到每個條件當下的值


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

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

    本版積分規則

    延伸閱讀

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

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

    GMT+8, 2026-9-30 15:26 , Processed in 0.141763 second(s), 25 queries .

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