For those of you wanting BLE presence detection on Wear OS, the newest Home Assistant Android App Beta has a beta Wear OS version that allows you to enable an iBeacon. Release beta-3074-d7ee3953 · home-assistant/android (github.com)
I’ve sideloaded this on my wife’s Samsung GW4 and am very pleased with the results. I couldn’t get her to carry her phone around the house with her, but she always wears her watch!
If you’ve used ADB then sideloading the current beta is pretty easy, here is an article for Samsung Watches, I’m guessing other flavors are very similar 3 Ways to Install, Sideload, and Uninstall Apps on Samsung Galaxy Watch - TechWiser
I’ve recently installed ESPHome and tested the BLE receivers and new iBeacon integration, but honestly I deleted it all and returned to ESPresense. The configuration options required to maked beacon tracking just aren’t in the new integration, but I’m sure it will mature over time.
I’ve found with ESPresense that 2 options are critical to get useful presence tracking results -
- Limiting the reporting range of the receivers
- Filtering at the receivers
I’ve got 6 of the M5 Atom stack ESP32 devices with BLE and they are tiny and relatively cheap. I plan to add a few more. Since there is a bit of range overlap, it’s best to limit the reporting distance for devices to as small a space as the room you deploy them in. ESPresense uses the mqtt_room functions so the receiver with the best signal will win, but limiting the range lowers the chance of bouncing between 2 receivers.
Another poorly documented feature of ESPresense that is super handy is the ability to change the IDs of devices. If you use iBeacons like me the IDs wind up being 50+ characters. The reason this is an issue is that the include/exclude filter options of ESPresense have limited text characters. I use the settings function to change the IDs to 4 characters, then you can use the new ID names in the filters. This way I can get 10 or so devices in a filter list.
You can use an MQTT tool like MQTT Explorer to change the ID and adjust the RSSI of devices with the topic
espresense/settings/{beacon_id}/config
and a JSON payload of
{“id”:“abcd”,“name”:“myname”}
If you’re using a new version of ESPresense on your receivers you can see an example of these under the espresense/settings topic as the receiver generates it’s own beacon and sets a short name for itself.
In the include/exclude fields of the receiver web configuration you can use the new IDs separated by spaces. In the include filter for example you can put
abcd efgh ijkl
and only those 3 beacons will be reported by that receiver.
Sometimes it’s helpful to specifically include beacons, sometimes it’s better to exclude. For example I have a receiver in my garage to track vehicle arrival/departures, but I don’t want it to report my trash bin, so I exclude that device. Makes it easy for the trash bin to report not_home when at the curb.
Using these strategies I’ve been able to get good results for controlling fans in my office and other rooms as I move from room to room.