Integrating Bluetooth Beacons with Home Assistant solves one of the biggest challenges in modern smart home automation: knowing where you are in the house, not just whether you are home. Traditional GPS zones and Wi-Fi routers lack the precision required to trigger room-specific automations, such as turning on the reading lamp only when you sit in that exact armchair. By combining low-energy Bluetooth hardware with local ESP32 proxies, your system can track presence at the room level completely offline, keeping your data private and your automations instant.
Setting up this architecture requires understanding how Bluetooth Low Energy (BLE) advertisements interact with Home Assistant's native integrations and custom components like the iBeacon Tracker integration. Unlike cloud-dependent ecosystem trackers, local BLE tracking relies on signal strength (RSSI) measurements gathered by fixed receiver nodes placed around your house. This guide walks through selecting the right hardware, configuring ESPHome Bluetooth proxies, setting up integrations, and writing stable automations that won't flake out or bounce between rooms.
Choosing Your Beacon Hardware and Receivers
Before touching any code, you need a clear hardware strategy. Your setup consists of two parts: the beacons (the tags you carry or attach to objects) and the receivers (the ESP32 boards plugged into power outlets around your home).
- Dedicated BLE Beacons: Small coin-cell-powered devices broadcasting iBeacon or Eddystone packets. Popular models include Blue Charm Beacons or inexpensive nRF51822 modules. They run for 6 to 12 months on a single CR2032 battery and broadcast a steady identifier.
- Smartphones and Wearables: Your phone or smartwatch can act as a beacon. The Home Assistant companion app broadcasts BLE packets natively. However, phones frequently randomize their Bluetooth MAC addresses for privacy, making dedicated static beacons more reliable for strict room-level mapping.
- ESP32 Receivers (Proxies): You need at least one ESP32 board per target room to listen for these advertisements. Standard ESP32 DevKit V1 or ESP32-C3 mini boards cost very little and plug into any USB wall charger.
Flashing ESPHome Bluetooth Proxies
To turn an ESP32 into a remote antenna for Home Assistant, you'll flash it with ESPHome firmware configured as a Bluetooth proxy. This streams raw BLE data over your local Wi-Fi back to your Home Assistant server without hitting any cloud servers.
- Connect your ESP32 to your computer via USB and open the ESPHome Dashboard inside Home Assistant.
- Create a new device configuration and use the web-flasher tool to install the base firmware.
- Add the
bluetooth_proxycomponent to your YAML configuration:
esphome:
name: living-room-proxy
esp32:
board: esp32dev
wifi:
ssid: "YOUR_WIFI_SSID"
password: "YOUR_WIFI_PASSWORD"
api:
encryption:
key: "YOUR_API_KEY"
logger:
bluetooth_proxy:
active: true
- Compile and flash the code to the ESP32. Once it boots, Home Assistant will automatically discover the new proxy under Settings > Devices & Services, treating it as a local Bluetooth adapter.
Configuring the iBeacon Integration
Once your proxies are online, you can bring your beacons into Home Assistant. If you are using standardized iBeacon tags, Home Assistant provides a dedicated integration.
- Go to Settings > Devices & Services in Home Assistant.
- Click Add Integration and search for iBeacon Tracker.
- Follow the configuration prompts. The integration listens for UUID, Major, and Minor values broadcasted by your tags.
- To prevent your system from cluttering with random neighbor devices, specify your tracking UUIDs in the integration options.
For advanced room-level calculations where multiple proxies hear the same beacon simultaneously, many advanced users install custom community integrations like Bermuda BLE Room Presence via HACS. Bermuda automatically calculates exact distance estimates based on signal attenuation (RSSI) across all active proxy nodes.
Writing Reliable Room-Level Automations
Raw RSSI signals bounce around frequently due to walls, bodies, and furniture reflections. If you trigger lights directly off raw signal spikes, your smart lights will flicker constantly as the system mistakes a stationary presence for movement between rooms.
To fix this, implement a hysteresis margin or a short time delay before changing states. Here is an example automation that turns on office lights only when your beacon is stably detected in the office for more than ten seconds:
alias: Office Light Follows Presence
trigger:
- platform: state
entity_id: sensor.user_current_room
to: "office"
for:
seconds: 10
action:
- service: light.turn_on
target:
entity_id: light.office_main
Common Mistakes to Avoid
- Placing proxies near large metal objects: Enclosing an ESP32 proxy inside a metal electrical box or hiding it behind a refrigerator will block Bluetooth signals entirely. Mount them out in the open at chest height.
- Ignoring battery voltage drops: When a coin cell battery drops below operational voltage, its broadcast strength weakens. Your tracker might suddenly show you as "away" even while sitting in the same room. Set up battery level sensors in Home Assistant to alert you before cells die.
- Overloading a single proxy: Keep a strict one-proxy-per-room ratio for smaller spaces. Trying to cover an entire multi-story house with two central receivers defeats the purpose of room-level tracking.
Frequently Asked Questions
Can I use my existing smartphone instead of buying physical beacons?
Yes, the Home Assistant companion app can broadcast BLE data. However, modern operating systems frequently rotate Bluetooth MAC addresses for privacy, which can cause tracking dropouts unless configured carefully. Dedicated tags offer much higher stability.
Why does Home Assistant think I am jumping between adjacent rooms?
Signal reflections off concrete walls cause temporary RSSI fluctuations. Solve this by adding a time delay to your automation triggers or configuring a signal margin threshold so a new room must be significantly closer before switching.
Does this tracking setup require an active internet connection?
No. Everything runs locally on your local network using ESPHome and Home Assistant core integrations, ensuring fast response times and complete local privacy.
How many ESP32 proxies do I need for a typical home?
Plan for one ESP32 proxy per primary room or zone you want to track. A standard 3-bedroom home generally runs smoothly on 4 to 6 inexpensive proxy nodes.