New ESP32 bluetooth proxy - how is it supposed to work?

Hi, i was wondering how the new bluetooth proxy should work

    active: true

this is what I added to my esphome on nodemcu-32s config that also run climate component, just to test it out, but no new entry appears in home assistant integration esphome for that device (i have tried deleting it and adding again :slight_smile: )


I haven’t tried it yet, but have you updated ESPhome to version 2022.8.3?

yes, i guess otherwise it would complain during compile that it does not know bluetooth proxy in config

if i understand it correctly it should work like this:

  1. i add bluetooth_proxy to one of my esp32 based esphome devices
  2. in home assistant i add esphome integration and point it to that device ip (i do not have working mdns in my network, if i had working mdns, it should be automatically added)
  3. bluetooth integration is automatically set up and discover devices that proxy sees
  4. if the device is apple homekit compatible it is automatically also added under homekit controller integration (or if it is first device like that integration is created) and HA now works as apple homekit hub (ie. apple TV)
1 Like

There is nothing to configure on the Home Assistant side. You recompile the ESP with the bluetooth_proxy: line in it. And it starts forwarding the packets to Home Assistant (if it was already a device within Home Assistant, as would be the case with an existing ESPHome device). There is nothing to see on the HA side. When a device is “heard” by the ESP32 device, that is forwarded to HA and if it is a device that HA knows how to decode, the relevant integration will pop up as a discovered device.

On the ESP32 device:

    active: true

is not required, if you didn’t already have that in the config.

I’m trying to use this to track my iBeacon for automations, but can’t find a way to make it work. I’ve flashed my ESP32 with the Bluetooth Proxy firmware and I’ve added the ESP32 integration to HA. All I see in the ESP32 device page is a Safe Mode Boot entity button… How do I track a device? (I know both UUID and mac address)

You shouldn’t have to add anything. The code is already there:

  name: "bt-proxy-zolder"
  esphome.bluetooth-proxy: github://esphome/bluetooth-proxies/esp32-generic.yaml@main
  name: ${name}
  name_add_mac_suffix: false

  ssid: !secret wifi_ssid
  password: !secret wifi_password

And the packages: entry should add everything to the config that you need. Just follow that github link. But I too have no working hub. Nothing showing in the logs. While before I already had a BLE BT tracker ESP device that worked and decided to try this. But not really clear on how to get it working.

1 Like

Same here, BT installed on RPI installed. BT proxy as described above. No logs, no response…
Also no info that there is a proxy connected.

So far we don’t know.
They said in the stream (which people really should watch) that Home Assistant does know which ESP device is reporting what advertisement it heard. But no one has yet said anything about how to use this for tracking.

There is nothing visual on the home assistant side to show that the proxy is connected, or that an ESP device has detected anything. Until the advertisement is for a device that an integration exists for - and then you’ll see a new device found box.

Otherwise, it seems that enabling the debug logs for the Bluetooth component is the only real way to see that it is hearing Bluetooth advertisements


Are you referring to the regular Bluetooth component (non existent for those of us running HA without a Bluetooth dongle)?

Exactly what I have in my config/esphome yaml file.

1 Like

I am also wondering how to check if the proxy is really working like e.g. to check the logs showing ble mac addresses which has passed through the proxy?

Is there no way to control that the proxy is successfully processing advertisements?

My only workaround is currently to check if the RSSI has been improved for some devices. But i dont know if this indicator can be used to determine the proxy is working or not? If i understand it right the response can only improve when the RSSI is going down using a proxy?


The component is still loaded as part of default_config: even if you haven’t configured it, or there is no bluetooth adaptor.

so add

  - platform: bluetooth_le_tracker

to configuration.yaml
and see log afterwards?

All I can suggest is that you watch the release video -

that’s where I got all my information.

Hi, this is working great!
I have a xiaomi mi-plant that is far away from the home-assistant NUC, before trying this I don’t have data from it… so I flashed a generic esp32, turn it on near the mi-plant, and voilà! data is comming!
now I’m wondering if I can add this to some of my sonoff m5 switches… as far as I know those things have an esp32 inside…
I’ll try and post my finding here…

There is a lot of confusion here on how to set this up so it would be really helpful if you could detail what you did to get it working. Thanks!

Just add this in your ESPHome configuration file for the case you already has an existing ESPHome device running, not in the Home Assistant configuration file:


So I watched the video, turned on debug logger on homeassistant.components.bluetooth and yes, data from the Bluetooth Proxy starts getting into home-assistant.log. The scan shows devices nearby and RSSI info, but not UUID. Any suggestions on how to add a tracker sensor for an iBeacon UUID?

2022-09-09 07:57:10.426 DEBUG (MainThread) [homeassistant.components.bluetooth.manager] esp32-bluetooth-proxy-3b6e28: 4A:E2:3F:70:87:83 AdvertisementData(manufacturer_data={76: b'\x10\x05\x08\x1c\xe1\xe1G'}) connectable: False match: set() rssi: -98
2022-09-09 07:57:10.541 DEBUG (MainThread) [homeassistant.components.bluetooth.manager] esp32-bluetooth-proxy-3b6e28: 68:A5:E8:F7:C5:DD AdvertisementData(manufacturer_data={76: b'\x10\x02!\x00'}) connectable: False match: set() rssi: -63
2022-09-09 07:57:11.665 DEBUG (MainThread) [homeassistant.components.bluetooth.manager] esp32-bluetooth-proxy-3b6e28: F0:B3:BC:69:7B:6D AdvertisementData(manufacturer_data={76: b'\x10\x05\x01\x14\xa1\xb6w'}) connectable: False match: set() rssi: -77
2022-09-09 07:57:11.667 DEBUG (MainThread) [homeassistant.components.bluetooth.manager] esp32-bluetooth-proxy-3b6e28: 40:CB:B0:B5:0D:05 AdvertisementData(manufacturer_data={76: b'\x10\x05\x0c\x14\x01\xadJ'}) connectable: False match: set() rssi: -86
2022-09-09 07:57:11.677 DEBUG (MainThread) [homeassistant.components.bluetooth.manager] esp32-bluetooth-proxy-3b6e28: 52:DA:C9:34:BC:A9 AdvertisementData(manufacturer_data={76: b'\x10\x07\x06\x1f\x85\x08\x86g('}) connectable: False match: set() rssi: -49
2022-09-09 07:57:11.763 DEBUG (MainThread) [homeassistant.components.bluetooth.manager] esp32-bluetooth-proxy-3b6e28: D0:03:4B:0B:FB:BD AdvertisementData(manufacturer_data={76: b'\x10\x05\t\x14\x8ezZ'}) connectable: False match: set() rssi: -86
2022-09-09 07:57:11.859 DEBUG (MainThread) [homeassistant.components.bluetooth.manager] esp32-bluetooth-proxy-3b6e28: 61:D7:F9:CD:25:BA AdvertisementData(manufacturer_data={76: b'\x10\x05%\x18kA\xda'}) connectable: False match: set() rssi: -98

We need to wait for input from the people behind all the bluetooth work.

I am trying to set this up (I want also to see if it works for pairing Matter devices, btw) but I’m getting the following when I try to compile anything in ESPHome:

Component not found: bluetooth_proxy.

and the editor also complains about the bluetooth_proxy: in the configuration file. I HAVE updated to HA 2022.9.1, it is a regular ESP32 device, etc, and I’ve included esp32_ble_tracker: as well (with no other configuration for either). However, I am running “ESPHome (dev)”, which (since it is the dev version) should have all the latest stuff… right? The change log linked from the add-on page even mentions it. I would uninstall the ESPHome addon and reinstall a non-dev version but don’t want to screw up my ESPHome configuration. Ideally the dev version would have support for this, too. I’m thinking perhaps it was simply overlooked?

Update: I switched to the “regular” release (did not uninstall the dev version, just stopped it and installed the regular one alongside it then started it) and the compile works now. So this feature made it into the regular release, but not the dev release?