Some hardware links on this page are affiliate links. As an Amazon Associate I earn from qualifying purchases. We may earn a commission if you buy through them, at no extra cost to you. See the affiliate disclosure.
Wi-Fi device trackers know a phone is on the LAN, not which room. This pack uses ESP32 nodes you already flashed as BLE proxies, then the Bermuda integration to estimate which area hears a phone, watch, or tag loudest. Lights and climate follow that area — not a house-wide “someone is home” flag.
No MAC addresses, IRKs, or proxy hostnames belong in a published file. Those stay in your Bermuda config.
What problem it solves
You want the office lights to come up when that watch walks in, and the climate to drop back when the room is empty — without mmWave in every doorway and without a presence false-on from a phone two rooms over.
How it works
- Proxies — each ESP32 enables ESPHome
bluetooth_proxy(active connections optional; advertisements are enough for Bermuda). One healthy proxy per area you want to distinguish. - Bermuda — the integration watches which proxy hears which BLE advertisement, keeps a distance/area estimate, and exposes device trackers plus per-area sensors.
- Area occupancy — a binary sensor or group per room: “this area has at least one tracked device.” Phones that randomize addresses need an IRK (Companion / iOS) or a dedicated tag instead of the phone.
- Automations — when an area goes occupied, turn on that room’s lights (and optionally nudge climate). When it goes empty for a debounce, turn them off or restore an away setpoint.
- Hysteresis — a short “for” and a last-proxy helper stop you oscillating when two proxies hear the same watch in a doorway.
This is room-level, not wall-through radar. Drywall is fine; a proxy in a metal rack is not.
Hardware notes
- ESP32 nodes. Boards you already run for climate, relays, or displays are ideal — add
bluetooth_proxy:rather than buying a new fleet. ESP32-C3/C6/S3 all work; give each a stable 2.4 GHz link. - Tags. A $5 fob on a keyring or backpack is more reliable than a phone that sleeps BLE. Use tags for kids’ bags or a toolbox if phones are flaky.
- Phones / watches. Always-on BLE advertisement (or a resolvable IRK) matters more than brand. Disable battery savers that freeze advertising.
- Density. Two proxies in adjacent rooms is the minimum useful map. One proxy in the whole house is just “home / not home.”
Snippet
Blueprint inputs, not a live install. Never put adapter addresses in the snippet:
automation:
- alias: Area occupied → lights
trigger:
- platform: state
entity_id: !input area_occupied
to: "on"
for: "00:00:08"
action:
- service: light.turn_on
target:
entity_id: !input area_lights
- alias: Area empty → lights off
trigger:
- platform: state
entity_id: !input area_occupied
to: "off"
for: "00:02:00"
condition:
- condition: state
entity_id: !input override_helper
state: "off"
action:
- service: light.turn_off
target:
entity_id: !input area_lights
# proxy YAML + climate variant in the pack
ESPHome side (add to a node that already has Wi-Fi):
bluetooth_proxy:
active: true
Setup outline
- Flash
bluetooth_proxyon at least two ESP32s in different rooms. Confirm they show up as Bluetooth adapters in Home Assistant. - Install Bermuda, let it discover proxies, and add the phones/watches/tags you actually want to track. Keep IRKs in the UI, not in git.
- Create one occupancy helper (or use Bermuda’s area sensors) per room.
- Import the light/climate automations, point
!inputat those helpers, walk the house. Tune debounce until a hallway pass does not steal the office.
Troubleshooting
- Everything piles into one area. That proxy is the only one hearing advertisements, or the others are on a congested channel / inside metal. Move the quiet proxy or add a third.
- Phone vanishes for minutes. iOS randomized the address and Bermuda has no IRK, or Android battery optimization killed BLE. Use a tag, or complete IRK enrollment in Bermuda.
- Lights flap in a doorway. Debounce is too short and both proxies are equally loud. Raise the empty
for, or require the new area to win for several seconds. - Proxy shows in HA but Bermuda ignores it. The ESPHome Bluetooth integration must be loaded and the node online. Restart Bermuda after adding a proxy.
Privacy
Room-level BLE is still a tracker. Do not publish which watch maps to which person, proxy locations as a floor plan, or any device addresses. This page is the pattern only.
Credits
Based on Bermuda BLE Trilateration plus ESPHome bluetooth_proxy. This write-up is an original overview of the proxy-plus-area pattern, not a substitute for Bermuda’s own docs.