以往僅透過手機 APP 的 GPS 定位,只能知道你是否在家中,但卻不知道你身處哪個房間,甚至訊號可能偶爾會亂飄導致定位不準確,我在之前也嘗試透過 WiFi 或是人體感應器之類的來進行偵測,但效果都不甚理想,設定自動化後,還有可能明明人在房間,電燈卻被關掉。
在 IRK 功能加入 Home Assistant 之後,我們終於可以完成房間等級的定位了,更棒的是你甚至不需要在手機上安裝任何 APP,只需要開啟藍牙功能就可以了,在這篇文章中,我們將會使用 Bermuda BLE Trilateration 和 Bluetooth Proxy 來一步步教你如何完成房間等級的定位!
什麼樣的狀況適合房間等級定位
只要你家的房間超過一個房間,便可能透過房間定位來自動開關燈和開啟更多可能性。
有什麼侷限嗎?
這樣的定位方式只能辨認手機或手錶的位置,如果你沒有攜帶任何可以追蹤的藍牙裝置的話,便無法追蹤位置了,但在這個連上廁所都要帶手機進去滑的世代,應該不是什麼大問題就是了。
事前準備
- 安裝好 HACS 的 Home Assistant
- ESP32 或支援 Bluetooth proxy 的裝置
- 像是接在 Home Assistant 上的藍牙 USB Dongle 或是安裝 ESPhome 韌體的 ESP32 裝置
- 你需要在每個需要追蹤的房間都放置 ESP32 來偵測藍牙訊號,我在這邊用的是已經刷好 ESPhome 韌體的智慧開關(Sonoff M5),因爲我家剛裝潢完而且非常剛好每個房間都有至少一個智慧開關,特別適合用來做追蹤,而且只需要在設定檔中加入藍牙 proxy 就好,剩下的都可以在 Home Assistant 裡設定
如果你最近剛好要裝潢新家,即使不安裝智慧開關,但在未來哪怕有一絲絲想安裝智慧開關的打算,都建議你可以預先請水電師傅拉好中性線(在中國叫做零線,如果你打算在淘寶買智慧開關的話),會在未來幫你省下不少麻煩。
安裝 HACS 和 Bermuda BLE Trilateration
你需要先安裝 HACS,接著在裡面安裝 Bermuda BLE Trilateration,並將其加入整合裡
點選上面按鈕在 Home Assistant 中安裝 Bermuda BLE Trilateration。
指定 ESP32 區域
設定好區域讓 Bermuda BLE Trilateration 自動根據藍牙訊號強度,在多個房間中自動追蹤你的位置,如果房間中有多個 ESP32,也可以設定相同的區域,讓追蹤更準確。

調整 ESPhome 設定檔
根據官方的 Wiki,建議調整 Bluetooth proxy 的設定值來讓偵測效果更好一點,並避免裝置有時候會飄到其他房間的問題,你可以在 ESPHome 的 yaml 設定檔中加入下面的設定:
esp32_ble_tracker:
scan_parameters:
active: True
interval: 320ms
window: 300ms
取得手機 IRK
取得 IRK 的步驟會較為繁瑣,但一臺裝置只需要取得一次就好了,這個金鑰並不會隨著裝置重新開機或是更新系統而改變。
請參考下列文章來取得 IRK
- Apple 裝置取得 IRK 教學
- 由於我們使用 ESPHome,請參考 Lookup Method (requires a Mac) 的教學來取得 IRK
- Android 裝置取得 IRK 教學
加入 Private BLE Devices 到 Home Assistant
取得 IRK 後就可以透過 Private BLE Devices 整合讓 Home Assistant 追蹤你手機的訊號了!

如果你還沒有看到區域感應器的話,可以嘗試重新啟動 Home Assistant,你接下來可以為這些追蹤器設定自動化動作,像是自動開關燈等等,相信房間等級的定位可以幫助你的智慧家庭使用上帶來更多方便與可能性。
進階:設定調整
如果你覺得房間追蹤的結果不甚理想,可以嘗試調整設定檔,像是追蹤的訊號強度、位置的更新頻率等等,但是我設定好之後很滿意,所以就沒有調整預設設定了。