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

    完整專案:做一套真的準的「有沒有人在家」偵測

    [複製鏈接]

    !lvup!   100%

    386

    主題

    27

    回帖

    2200萬

    積分

    管理員

    積分
    22006063
    發表於 2026-9-21 13:48:08 | 顯示全部樓層 |閱讀模式
    「離家自動關燈」是每個人裝 Home Assistant 之後第一個想做、也第一個放棄的功能。原因不是自動化寫錯,是「在不在家」這個判斷本身就不準。

    「離家自動關燈」是每個人裝 Home Assistant 之後第一個想做、也第一個放棄的功能。原因不是自動化寫錯,是「在不在家」這個判斷本身

    這一篇會一步一步做出三層判斷,每一層做完都有辦法驗證它到底準不準,不是做完整套才發現不能用。

    為什麼單一來源一定會出錯

    先認清每一種訊號各自在什麼情況下失效 —— 這是後面所有設計的根據:


    • 手機 GPS —— 省電模式會把定位更新拉長到十幾分鐘;在家充電時位置會慢慢飄,飄出家的半徑就變成「離家」
    • Wi-Fi 連線偵測 —— 手機螢幕關掉一段時間會進入深度睡眠,主動斷開 Wi-Fi 省電。你人在沙發上,路由器看不到你
    • 藍牙/BLE —— 範圍只有幾公尺,穿一道牆就掉
    • 人體感應器(PIR) —— 偵測的是「移動」,不是「存在」。你坐著看電視不動,三分鐘後它就說沒人
    • 毫米波 —— 偵測靜止微動,坐著不動也抓得到,但電風扇搖頭、窗簾飄動也會被當成人


    關鍵在於它們失效的情況彼此不重疊。 GPS 飄掉的時候 Wi-Fi 還連著;Wi-Fi 睡著的時候 GPS 還在;PIR 抓不到的時候電視還在播。所以把它們疊起來會比任何單一一個準得多。

    ⚠ 順帶澄清一個過期的建議:不用去關「私密 Wi-Fi 位址」

    很多教學(包括這篇的舊版)會叫你把手機的隨機 MAC 關掉,理由是路由器認不出你。這件事在 iOS 18 之後已經不成立,而且方向是反的。

    iOS 18 的「私密 Wi-Fi 位址」是三選一:關閉/固定/輪換。家裡的 WPA2/WPA3 加密網路,預設就是「固定」 —— 每次連同一個 SSID 都用同一組隨機 MAC,路由器認得出來,DHCP 保留也照樣有效。真正會破壞追蹤的是「輪換」,而那是開放網路與需要網頁登入的公共熱點的預設值。

    Android 同理:每個網路各自有「使用隨機 MAC(固定)」和「使用隨機 MAC(每次連線)」兩種。前者沒問題,只有後者要改。

    要怎麼確認你的手機是哪一種:


    • iOS:設定 → Wi-Fi → 你家網路右邊的 (i) → 看「私密 Wi-Fi 位址」,顯示「固定」就不用動
    • Android:Wi-Fi 設定 → 你家網路 → 隱私權,顯示「使用隨機 MAC」或「已隨機化 MAC (固定)」就不用動


    比改設定更可靠的驗證方式:到路由器的 DHCP 用戶端清單,把手機 Wi-Fi 關掉再打開三次。三次的 MAC 都一樣,就沒問題;每次都不一樣,才需要去改成固定。

    第一層:讓 person 變準

    每次都不一樣

    步驟 1:確認你有一個 person 實體

    到設定 → 人員(注意不是舊教學寫的「使用者與人員」,那個選單名稱已經變了)。裡面應該至少有一個人。

    你會看到:到設定 → 工具 → 狀態(開發者工具在 2026.2 搬進「設定」、2026.8 改名叫「工具」),篩選 `person.`,應該有一個實體,狀態是 `home` 或 `not_home`。

    完全沒有 person 實體:你還沒裝手機 App,或沒有把使用者對應到人。回設定 → 人員 → 新增人員。

    步驟 2:加第二個追蹤來源(路由器)

    只靠手機 App 的 GPS 一定會飄。加一個「本地、即時」的來源。

    先看你的路由器有沒有原生整合:設定 → 裝置與服務 → 新增整合,搜尋你的品牌。常見的有 ASUS Router、OpenWrt、UniFi Network、MikroTik、TP-Link Omada、FRITZ!Box。

    有的話用它,沒有的話用 Nmap Tracker:


    • 設定 → 裝置與服務 → 新增整合 → 搜尋 Nmap Tracker
    • 網路位址:填你家網段,例如 `192.168.1.0/24`
    • 掃描間隔:先用預設
    • 建好之後點那個整合的「設定」,把 consider home(判定離家前的等待秒數)調到 300


    ⚠ Nmap Tracker 沒有 YAML 寫法。 網路上大量教學(包括這篇的舊版)給的是這種東西:
    1. # 這段現在是死的,貼進 configuration.yaml 沒有用
    2. device_tracker:
    3.   - platform: nmap_tracker
    4.     hosts: 192.168.1.0/24
    5.     consider_home: 300
    複製代碼

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

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

    本版積分規則

    延伸閱讀

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

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

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

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