手機 Bluetooth 變 Home Assistant 在家感應器:IRK 設定同三種定位方法點揀
3C 產品

手機 Bluetooth 變 Home Assistant 在家感應器:IRK 設定同三種定位方法點揀

圖片:via XDA Developers — https://www.xda-developers.com/phones-bluetooth-is-presence-sensor-home-assistant-needs-right-key/
TechLab 編輯部(譯)·

由硬件準備、擷取密鑰,到私隱同準確度一次講清

手機長期帶喺身,拎佢做 Home Assistant 在家感應器,其實幾合理:返到屋企開燈、開冷氣,最後一個人離開就關晒非必要電器。XDA 作者試嘅方法係讀取手機原有嘅 Bluetooth Low Energy 廣播,再交畀 Home Assistant 判斷人在唔在家。橋唔算新,勝在唔使手機另外長開一個 geofencing app;不過設定成本、延遲同私隱風險,都要先講清楚。

點解 Home Assistant 認唔到同一部手機

iPhone 同 Android 會用 Resolvable Private Address,定時更換 Bluetooth 位址,避免商戶或者街上嘅掃描器長期認住同一部裝置。問題係 Home Assistant 同樣只會見到一堆不斷轉換嘅位址。Identity Resolving Key(IRK)就係解開呢層隨機化嘅密鑰,Home Assistant 拎住佢,先可以確認幾個不同位址其實來自同一部手機。官方 Private BLE Device 文件亦寫明,整合後會提供在家狀態、訊號強度,同距離最近掃描器嘅估算距離。

IRK 本身屬敏感識別資料,因為佢可以繞過隨機位址帶來嘅私隱保護。**唔好將 IRK、Bluetooth 設定檔、bug report 或 HCI snoop log 放上論壇、公開雲端連結或者截圖入面。**最好只喺自己控制嘅電腦處理,完成後刪走暫存 log。用第三方 IRK 擷取工具前亦要睇清楚程式碼同資料流向,唔好見到方便就直接交出條 key。

Home Assistant Android app 詢問用戶係咪開啟位置分享

圖片:Home Assistant

手機之外,屋企仲要有接收器

手機只負責廣播,Home Assistant 主機仍要有可用嘅 Bluetooth adapter。可以用主機內置嘅 Bluetooth radio、官方列明兼容嘅 USB dongle,亦可以擺一部行 ESPHome 嘅 ESP32 做 Bluetooth proxy,經 Wi‑Fi 或 Ethernet 將附近廣播送返主機。多房或者多層環境用 proxy 會易覆蓋得好啲;細單位就可能一個位置合適嘅 adapter 已經夠。可先到 Settings > Devices & services > Bluetooth,確認 Home Assistant 真係見到 scanner。

擺位對穩定度影響幾大。Home Assistant Bluetooth 文件建議 adapter 遠離牆身、Wi‑Fi AP、電源同 USB 3.x 干擾源;USB dongle 最好用延長線拉離主機。Proxy 可以擴闊接收範圍,但唔會令 Bluetooth 訊號突然變成精準室內定位。屋企間隔、人體遮擋、傢俬同 2.4GHz 干擾,都會令 RSSI 上落。

iPhone:有同一個 iCloud 帳戶嘅 Mac 就易辦

Apple 裝置嘅官方做法相對直接。Mac 要登入同 iPhone 或 Apple Watch 相同嘅 iCloud 帳戶,開 Keychain Access 搜尋 Bluetooth,再按手機「設定 > 一般 > 關於本機」顯示嘅 Bluetooth 位址,搵返相符而且標示 Public 嘅紀錄。顯示密碼後,XML 內容入面嘅 Remote IRK data 就係要交畀 Home Assistant 嘅 Base64 key。呢個過程會要求輸入 Mac 帳戶憑證,做完記得關閉畫面,亦唔好保留載有 key 嘅截圖。

Android:冇 root 都做到,但步驟長好多

已 root 嘅 Android 可以喺 /data/misc/bluedroid/bt_config.confLE_LOCAL_KEY_IRK,不過檔案內嘅 key 係 little-endian,交畀 Home Assistant 前要反轉 byte 次序。冇 root 就要開 Developer options 入面嘅 USB debugging 同 Bluetooth HCI snoop log,先解除另一件耳機或手錶嘅配對,再重新配對。跟住用 ADB 匯出 bug report,將 btsnoop_hci.log 放入 Wireshark,搜尋 btsmp.id_resolving_key,最後同樣反轉擷取到嘅數值。唔同手機同系統版本嘅步驟同成功率都可能有出入,XDA 作者亦遇過配對未完成、首次加入失敗嘅情況。

攞到 key 後,到 Settings > Devices & services > Add Integration,加入 Private BLE Device,再貼上 Base64 或 hex 格式嘅 IRK。設定嗰刻手機要開住 Bluetooth、保持廣播,同埋位於 adapter 或 proxy 接收範圍內;Home Assistant 會即場驗證條 key。驗證失敗時先確認 scanner 收到手機訊號,再檢查 Android key 有冇反轉次序,唔好一開始就反覆擷取同上載更多 log。

Companion App、Wi‑Fi 同 BLE 點揀

Companion App 定位最適合處理返工、回家同跨區域自動化。佢可以傳送 GPS 座標,亦可以只交代 zone 名稱,後者私隱壓力細啲;但背景更新要有定位權限,速度亦受 iOS、Android 嘅背景排程影響。官方 Companion 文件話資料會按連線設定直接送到 Home Assistant,或者經 Home Assistant Cloud,唔會交畀其他機構。想減少位置資料,就將 Location Sent 設成 Zone Name Only。

Wi‑Fi device tracking最簡單,Home Assistant 只要經兼容路由器或 AP 整合,睇手機有冇連上屋企網絡。佢唔使 GPS,亦冇 IRK 呢條敏感密鑰,不過通常只答到 home/not home;更新速度會受路由器輪詢、手機慳電同 Wi‑Fi 漫遊影響。BLE tracking可以全程留喺本地網絡,亦有最近 scanner 同 RSSI 資料,不過要管理 IRK 同接收器覆蓋,準確度亦會隨環境浮動。

適合慢速自動化,房間判斷要保守

XDA 作者話自己遇過離家狀態超過 15 分鐘先更新,呢個係個人環境嘅結果,唔代表每部手機都一樣。實際編排時,BLE 比較適合開啟離家模式、調整冷氣預設或者確認屋企仲有冇人;門一開即亮燈、有人坐低就唔熄燈呢類即時反應,PIR、mmWave 或門窗感應器會穩陣好多。關冷氣或全屋燈之前亦可以加等待時間,再用 Wi‑Fi tracker 或 Companion App 狀態交叉確認,減少手機短暫收唔到訊號造成誤判。

多個 proxy 配合 Bermuda BLE Trilateration,可以按邊個 scanner 收得最強去估手機較接近邊間房。不過 RSSI 只係距離線索,隔一道牆、手機放入口袋,結果已經可以變。當佢係房間自動化嘅輔助條件就合理;涉及保安、門鎖、危險電器或者精確人員位置,就唔好單靠手機 BLE 判斷。


參考來源

本文根據原文及公開資料整理;資料有出入時,以原文及官方資料為準。

分享:WhatsAppThreadsTelegramFacebook