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

    多人住的家,「沒人在家」怎麼判斷才準:四層做法與完整設定

    [複製鏈接]

    !lvup!   100%

    386

    主題

    27

    回帖

    2200萬

    積分

    管理員

    積分
    22006063
    發表於 2026-9-21 02:22:57 | 顯示全部樓層 |閱讀模式
    「家裡的人數歸零就關冷氣關燈」這個邏輯在單人住的家幾乎不會錯,但在多人住的家會三天兩頭出包。原因不是邏輯寫錯了,是 zone.home 這個數字的定義跟你以為的不一樣。

    這篇先把「為什麼一定會出包」講清楚(那是機制上的必然,不是設定沒調好),然後給四層由淺到深的補強,每一層都有完整可貼的設定和驗收方法。第三層包含自己做一顆毫米波存在感應器的零件清單、逐腳位接線和完整的 ESPHome 設定檔。

    「家裡的人數歸零就關冷氣關燈」這個邏輯在單人住的家幾乎不會錯,但在多人住的家會三天兩頭出包。原因不是邏輯寫錯了,是 zone.home 這個

    ━━ 步驟 1:先確認你現在的判斷有多不準 ━━

    1-1 看清楚 zone.home 到底在數什麼

    到 開發者工具 → 狀態,搜尋 zone.home。

    你會看到什麼:
    1. zone.home        2
    2. 屬性:
    3.   latitude: 25.0330
    4.   longitude: 121.5654
    5.   radius: 100
    6.   persons:
    7.     - person.charles
    8.     - person.family_a
    9.   editable: true
    10.   icon: mdi:home
    11.   friendly_name: 家
    複製代碼

    關鍵在那個 persons 清單。 zone.home 的狀態 = 那個清單的長度 = 「目前在家的、而且有被 person 實體追蹤的人數」。

    它不是「家裡有幾個人」。 這兩件事的差距就是你所有誤判的來源。

    1-2 列出誰有被追蹤、誰沒有

    到 開發者工具 → 範本,貼上:
    1. --- 所有 person 實體與它們的來源 ---
    2. {% for p in states.person %}
    3. {{ p.name }}:{{ p.state }}
    4.   來源裝置:{{ p.attributes.device_trackers | default([]) | join(', ') }}
    5.   定位誤差:{{ p.attributes.gps_accuracy | default('無') }}
    6. {% endfor %}
    7. zone.home 現在數到:{{ states('zone.home') }} 人
    複製代碼

    你會看到什麼:
    1. --- 所有 person 實體與它們的來源 ---
    2. Charles:home
    3.   來源裝置:device_tracker.charles_iphone
    4.   定位誤差:12
    5. 家人A:not_home
    6.   來源裝置:device_tracker.family_a_phone
    7.   定位誤差:35
    8. zone.home 現在數到:1 人
    複製代碼

    三件事要確認:


    • 「來源裝置」是空的 → 那個 person 永遠不會變成 home。到 設定 → 人員 → 點那個人 → 「選取要追蹤的裝置」勾起來
    • 只有一個來源裝置 → 那個人的在家判定是單點依賴。步驟 2 會處理
    • 家裡有人沒有出現在這個清單上(長輩、小孩、室友)→ 他們對 zone.home 完全不存在


    1-3 三個失效模式,全部是同一個原因


    • 不帶手機的人 —— 系統永遠認為他在家(如果手機留在家充電),或永遠認為他不在家(如果沒有 person 實體)。兩種都是單向的錯,而且不會自己恢復
    • 手機沒電 —— device_tracker 變成 unknown 或 unavailable,而很多人的自動化把「不是 home」當成「not_home」,於是人在家裡燈自己關了
    • 訪客 —— 完全不在 person 清單裡,zone.home 數不到他們


    共同原因:zone.home 數的是「被追蹤的裝置」,不是「人」。 所以補強的方向不是「把 GPS 調準」,而是加上不依賴手機的證據。

    ━━ 步驟 2:第一層 —— 讓每個人有兩個獨立的追蹤來源 ━━

    這一層不用買任何東西,解掉「手機沒電」和一部分「定位漂移」。

    2-1 加上路由器的 device_tracker

    手機連上家裡 Wi-Fi 這件事,是一個完全獨立於 GPS 的證據。

    方法 A:路由器本身有整合

    設定 → 裝置與服務 → 新增整合,搜尋你的路由器品牌(ASUS、Ubiquiti UniFi、TP-Link Omada、OpenWrt、MikroTik 都有官方整合)。

    你會看到什麼:新增完成後到 開發者工具 → 狀態,搜尋 device_tracker.,會出現一堆你家裡連線裝置的實體,名稱多半是主機名稱或 MAC 位址。

    方法 B:路由器沒有整合,用 Ping 整合

    ⚠ 這裡有一個會讓你白做一輪的陷阱:網路上大量教學教你在 configuration.yaml 寫 device_tracker: - platform: ping。那個寫法自 Home Assistant 2023.12 起已經不存在了。

    Ping 整合已經改成從 UI 設定(config flow),沒有 YAML 寫法。而失敗的樣子非常惡劣:YAML 檢查會過(因為 HA 只是忽略它不認得的平台)、重啟不會報錯、但實體就是不會出現。你會以為是縮排寫錯,然後在那裡卡很久。

    正確做法:


    • 先到路由器的 DHCP 設定,把每支手機綁定固定 IP(用 MAC 位址保留)
    • 到 設定 → 裝置與服務 → 新增整合 → 搜尋 Ping
    • 主機名稱 填那支手機的固定 IP(例如 192.168.1.101)
    • 送出。一支手機建一個項目,有幾個人就重複幾次


    ⚠ 第二個陷阱:建好之後 device_tracker 實體預設是「停用」的。

    官方文件講得很清楚:ping 整合的 device tracker 預設停用。它預設只給你一個 binary_sensor(那台主機通不通),而你要的 device_tracker 要自己去打開。

    怎麼打開:設定 → 裝置與服務 → 找到 Ping → 點那個項目 → 會看到「1 個實體」和「1 個已停用的實體」 → 點進停用的那個 → 右上角齒輪 → 把「已啟用」打開 → 確定。

    你會看到什麼:到 開發者工具 → 狀態,搜尋 device_tracker.,會出現一個以那個 IP 或你取的名字命名的實體,狀態是 home 或 not_home。

    搜尋不到 → 實體還是停用狀態。停用的實體不會出現在開發者工具的狀態清單裡,這也是很多人以為「整合壞了」的原因。

    調整 Consider home:點那個 Ping 項目 → 設定(齒輪)→ 「Consider home」欄位。


    • 官方預設是 180 秒(3 分鐘)
    • 建議改成 300 秒(5 分鐘)。手機進入省電睡眠時會不回應 ping,三分鐘常常不夠,會造成「人在家裡卻被判定離家」的假離線


    ⚠ iPhone 有一個特性:它在省電模式下可能長時間不回 ping,而且預設會用隨機 MAC 位址。要讓這個方法可靠,必須到 iPhone 的「設定 → Wi-Fi → 你家的網路 → 私密 Wi-Fi 位址」把它關掉,否則每次重連 MAC 都會變,固定 IP 綁不住。

    2-2 把兩個來源掛到同一個人身上

    設定 → 人員 → 點那個人 → 「選取要追蹤的裝置」,把 App 的 tracker 和路由器/ping 的 tracker 都勾起來。

    person 整合的合併規則:只要任何一個 tracker 說 home,這個人就是 home。GPS 類的優先順序高於路由器類,但路由器說 home 時 GPS 的 not_home 不會蓋過它。

    2-3 你會看到什麼

    回到步驟 1-2 那段範本重跑一次。

    你會看到「來源裝置」那一行從一個變成兩個:
    1. Charles:home
    2.   來源裝置:device_tracker.charles_iphone, device_tracker.charles_phone_ping
    複製代碼

    測試:把手機的 Wi-Fi 關掉、行動網路也關掉(模擬沒電)。


    • 五分鐘後,你會看到 ping 的那個 tracker 變成 not_home
    • 但 App 的 tracker 會變成 unknown 而不是 not_home
    • person 實體的狀態:這時候會變成 not_home。這正是問題所在,步驟 3 要處理


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

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

    本版積分規則

    延伸閱讀

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

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

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

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