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

    自動化開始互相打架?用一個「家的狀態」把它們收斂起來(十個步驟)

    [複製鏈接]

    !lvup!   100%

    386

    主題

    27

    回帖

    2200萬

    積分

    管理員

    積分
    22006063
    發表於 2026-9-21 10:40:35 | 顯示全部樓層 |閱讀模式
    這篇解決一種很具體的症狀:自動化數量過了十幾個之後,東西開始自己動,而你查不出是誰動的。

    典型的四個畫面:


    • 離家模式開著,走道的感應器還是會把燈打開
    • 半夜起來上廁所,「回家自動化」把冷氣重新開到 26 度
    • 兩個自動化搶著控制同一盞燈,燈一直閃
    • 度假模式忘了關,回家之後什麼都不會動


    這四個都不是程式寫錯,是因為每個自動化各自在判斷「現在算什麼情況」,而且判斷得不一樣。

    解法是:讓全家共用一個「現在是什麼狀態」的實體,所有自動化都只看它。

    一個

    做完這篇你會有什麼


    • 一個 `input_select.house_mode`,值永遠是五個狀態之一
    • 一個負責切換狀態的自動化(只有它能改這個值)
    • 一個負責「切換時要做什麼」的自動化
    • 所有其他自動化改成「只讀狀態、不判斷」


    步驟 1:列出你家的狀態(紙筆五分鐘)

    先寫下來。建議從這五個開始,多數家庭夠用:


    • 在家-日間
    • 在家-夜間
    • 睡覺
    • 外出
    • 度假(超過一天不在)


    怎麼判斷一個東西該不該進這張清單:問「它和別的項目能不能同時成立」。


    • 「睡覺」和「外出」不可能同時成立 → 是狀態,放進來
    • 「看電影」和「在家-夜間」可以同時成立 → 是情境,不要放進來,另外用一個 `input_boolean` 處理


    超過八個項目,幾乎一定是把情境混進來了。混進來的後果是狀態機的轉換規則會爆炸性成長(五個狀態有 20 種轉換,八個就有 56 種),你會維護不動。

    步驟 2:建立 `input_select.house_mode`

    兩種建法,選一種,不要兩種都做(會打架)。

    做法 A:用介面建(推薦給多數人)


    • 設定 → 裝置與服務 → 輔助元件 → 建立輔助元件 → 下拉式選單
    • 名稱填 `家的狀態`
    • 選項一個一個加:`在家-日間`、`在家-夜間`、`睡覺`、`外出`、`度假`


    你會看到什麼:建好之後到設定 → 工具 → 狀態,搜尋 `input_select`,會出現一個 `input_select.家的狀態` 或 `input_select.house_mode`(看 HA 怎麼轉的)。

    ⚠ 實體 ID 一定要自己確認一次,不要假設。中文名稱轉出來的實體 ID 不一定是你想的那個。在那個實體上點一下 → 齒輪 → 可以直接把實體 ID 改成 `input_select.house_mode`,建議現在就改掉,後面所有 YAML 都會用到它。

    做法 B:寫在 `configuration.yaml`

    放在檔案的最外層(頂格,前面沒有空白):
    1. input_select:
    2.   house_mode:
    3.     name: 家的狀態
    4.     options:
    5.       - 在家-日間
    6.       - 在家-夜間
    7.       - 睡覺
    8.       - 外出
    9.       - 度假
    10.     icon: mdi:home-heart
    複製代碼

    ⚠⚠ 這裡有一個官方文件寫了、但幾乎所有中文教學都寫反的地方。

    很多文章(包括這篇的舊版)說「`initial` 只在第一次建立時生效,之後 HA 會記住上次的值」。

    事實相反。官方文件的說法是:設了合法的 `initial` 值,HA 每次啟動都會把狀態設成那個值;沒有設 `initial` 才會還原成關機前的值。

    所以上面那段刻意沒有寫 `initial`。寫了的話,你會遇到「每次重開 HA,狀態就跳回在家-日間」,而且因為它看起來像是正常運作,你會往別的地方查。

    (用做法 A 從介面建的人不會遇到這件事——介面上根本沒有 `initial` 這個欄位,它一律還原。)

    另一個 YAML 的坑:選項如果是 `On`、`Off`、`Yes`、`No`、`是`、`否` 這類詞,一定要加引號,不然 YAML 會把它們轉成布林值 `True` / `False`,狀態就對不起來了。上面那五個中文選項不會踩到,但你自己改的時候要注意。

    改完存檔 → 設定 → 工具 → YAML → 檢查設定 → 重新啟動。

    步驟 3:建立「家裡真的有人」這個感測器

    狀態機要能運作,這一顆是基礎。單靠手機定位不夠可靠——在家時手機常常因為省電而不回報,出門時 GPS 又會飄。

    正確的做法是把「連線型」和「位置型」的證據合起來看。HA 內建的 `person` 實體本身就在做這件事:人在家時以連線型追蹤器(路由器看到你的手機)為準,人在外時以位置型(GPS)為準。

    先確認你的 person 實體存在:設定 → 人員(不是舊教學的「設定 → 使用者與人員」,已經改了),點你的名字,確認底下「選擇裝置追蹤器」有勾到你的手機。

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

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

    本版積分規則

    延伸閱讀

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

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

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

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