bermuda is a free, open source internet of things (iot) project written in Python and released under MIT. It has 2,037 GitHub stars, 73 forks and 127 open issues, and was last pushed 6 days ago. On this registry it ranks #17 of 41 tracked projects in Internet of Things (IoT), with 5 head-to-head comparisons available.

What is bermuda?

Bermuda is a Home Assistant custom integration, distributed through HACS, that tracks Bluetooth Low Energy devices by room using ESPHome Bluetooth Proxies and Shelly Gen2 or later devices — built for smart-home owners who want area-level or home/not-home presence without buying dedicated tracking hardware.

What it is

Bermuda lives in the Home Assistant ecosystem as a HACS custom integration, written in Python under the MIT licence. It collects Bluetooth advertisement packets already flowing into Home Assistant through the Bluetooth backend, gathers them from sources such as ESPHome devices with the bluetooth_proxy component enabled, Shelly Plus or later devices with Bluetooth proxying turned on in the Shelly integration, or a USB Bluetooth adapter attached to the Home Assistant host. From those advertisements it produces Area and Distance sensors for the devices a user chooses, plus device_tracker entities that can be linked to Person entities.

The concrete problem it solves is room-level presence. Plain Bluetooth presence tracking only answers whether a device is home or away; Bermuda aims to have Home Assistant tell you which area of the house a device is in. The only extra hardware required is one or more devices providing Bluetooth proxy information to Home Assistant — inexpensive ESP32 boards are the recommended route — so it replaces dedicated proprietary room-presence hardware with hardware many Home Assistant users already run. It also supports iBeacon devices, including beacons with randomised MAC addresses, and resolvable private keys through the core Private BLE Device component.

Key capabilities

  • Creates Area and Distance sensors for each device the user selects for tracking.
  • Creates device_tracker entities that can be linked to Person entities for Home/Not Home tracking.
  • Supports iBeacon devices, including those broadcasting randomised MAC addresses such as Android phones running the Home Assistant Companion App.
  • Supports IRK (resolvable keys) through the core Private BLE Device component, so iOS devices registered there automatically receive Bermuda sensors.
  • Exposes configurable settings for RSSI reference level, environmental attenuation, and maximum tracking radius.
  • Provides a comprehensive JSON or YAML dump of devices and their distances from each Bluetooth receiver through the bermuda.dump_devices service.
  • Accepts Bluetooth proxy data from ESPHome bluetooth_proxy devices, Shelly Gen2 or later devices, and USB Bluetooth on the Home Assistant host.

Who uses it and how

  • Households running several ESP32 boards as Bluetooth proxies, where cheap boards such as the D1-Mini32 are spread across rooms to cover the floor plan.
  • Shelly Plus or later owners who enable Bluetooth proxying in the existing Shelly integration rather than introducing separate proxy hardware.
  • iOS and Android users who register their phones in the Private BLE Device core component and then receive Bermuda sensors automatically.
  • Single-host setups using USB Bluetooth for simple Home/Not Home tracking, accepting the reduced accuracy of that arrangement.
  • HACS users who rely on the project wiki, GitHub Discussions, and the Home Assistant Community thread for setup guidance and user-contributed how-tos.

Getting started

Install Bermuda through HACS using the repository badge for the integration category, which requires Home Assistant at the minimum version stated in the README plus at least one device supplying Bluetooth proxy information. A USB Bluetooth adapter on the Home Assistant host is also accepted.

How it compares

The facts provided name no paid products that Bermuda replaces, and no comparable room-presence integration is named alongside it either. On the evidence here it stands alone in this registry as the Bluetooth Low Energy triangulation and trilateration option for Home Assistant, sitting inside the HACS custom-integration space and depending on the ESPHome and Shelly integrations for its data.

When to use it — and when not to

Choose Bermuda if Home Assistant already runs with one or more ESP32 or Shelly Gen2 Bluetooth proxies and the goal is per-room device presence from hardware on hand. Avoid it if the setup relies solely on USB Bluetooth, since the README notes those adapters do not timestamp advertisement packets and finding a well-supported model is non-trivial, leaving only Home/Not Home and basic Area distance support. Note also that on-map triangulation is described as eventual rather than delivered, and the project carries 127 open issues, so users expecting finished positional tracking should check the wiki before committing.

project readme (upstream, from github) — read inline

Bermuda Logo

Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.

Bermuda BLE Trilateration

  • Track bluetooth devices by Area (Room) in Home Assistant, using ESPHome Bluetooth Proxies and Shelly Gen2 or later devices.

  • (eventually) Triangulate device positions! Like, on a map. Maybe.

GitHub Release GitHub Activity License HomeAssistant Minimum Version pre-commit Black hacs Project Maintenance Discord Community Forum

GitHub Sponsors BuyMeCoffee Patreon Sponsorship

What it does:

Bermuda aims to let you track any bluetooth device, and have Home Assistant tell you where in your house that device is. The only extra hardware you need are esp32 devices running esphome that act as bluetooth proxies. Alternatively, Shelly Plus devices can also perform this function.

  • Area-based device location (ie, device-level room prescence) is working reasonably well.
  • Creates sensors for Area and Distance for devices you choose
  • Supports iBeacon devices, including those with randomised MAC addresses (like Android phones running HA Companion App)
  • Supports IRK (resolvable keys) via the Private BLE Device core component. Once your iOS device (or Android!) is set up in Private BLE Device, it will automatically receive Bermuda sensors as well!
  • Creates device_tracker entities for chosen devices, which can be linked to "Person"s for Home/Not Home tracking
  • Configurable settings for rssi reference level, environmental attenuation, max tracking radius
  • Provides a comprehensive json/yaml dump of devices and their distances from each bluetooth receiver, via the bermuda.dump_devices service.

What you need:

  • Home Assistant. The current release of Bermuda requires at least haminverbadge

  • One or more devices providing bluetooth proxy information to HA using HA's bluetooth backend. These can be:

    • ESPHome devices with the bluetooth_proxy component enabled. I like the D1-Mini32 boards because they're cheap and easy to deploy.
    • Shelly Plus or later devices with Bluetooth proxying enabled in the Shelly integration.
    • USB Bluetooth on your HA host. This is not ideal, since they do not timestamp the advertisement packets and finding a well-supported usb bluetooth adaptor is non-trivial. However they can be used for simple "Home/Not Home" tracking, and basic Area distance support is enabled currently.
  • Some bluetooth BLE devices you want to track. Phones, smart watches, beacon tiles, thermometers etc.

  • Bermuda! I strongly recommend installing Bermuda via HACS: Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.

Documentation and help

The Wiki is the primary and official source of information for setting up Bermuda.

Discussions contain both official and user-contributed guides, how-tos and general Q&A.

HA Community Thread for Bermuda contains a wealth of information from and for users of Bermuda, and is where many folk first ask for assistance in setting up.

Screenshots

After installing, the integration should be visible in Settings, Devices & Services

The integration, in Settings, Devices & Services

Press the CONFIGURE button to see the configuration dialog. At the bottom is a field where you can enter/list any bluetooth devices the system can see. Choosing devices will add them to the configured devices list and creating sensor entities for them. See How Do The Settings Work? for more info.

Bermuda integration configuration option flow

Choosing the device screen shows the current sensors and other info. Note that there are extra sensors in the "not shown" section that are disabled by default (the screenshot shows several of these enabled already). You can edit the properties of these to enable them for more detailed data on your device locations. This is primarily intended for troubleshooting or development, though.

Screenshot of device information view

The sensor information also includes attributes area name and id, relevant MAC addresses etc.

Bermuda sensor information

In Settings, People, you can define any Bermuda device to track home/away status for any person/user.

Assign a Bermuda sensor for Person tracking

FAQ

See The FAQ in the Wiki!

Hacking tips

Wanna improve this? Awesome! Bear in mind this is my first ever HA integration, and I'm much more greybeard sysadmin than programmer, so ifwhere I'm doing stupid things I really would welcome some improvements!

You can start by using the service bermuda.dump_devices to examine the internal state.

Using bermuda.dump_devices service

Just calling the service bermuda.dump_devices will give you a full dump of the internal data structures that bermuda uses to track and calculate its state. This can be helpful for working out what's going on and troubleshooting, or to use if you have a very custom need that you can solve with template sensors etc.

If called with no parameters, the service will return all data. parameters are available which let you limit or reformat the resulting data to make it easier to work with. In particular the addresses parameter is helpful to only return data relevant for one or more MAC addresses (or iBeacon UUIDs). See the information on parameters in the Services page in Home Assistant, under Developer Tools.

Important: If you decide to use the results of this call for your own templates etc, bear in mind that the format might change in any release, and won't necessarily be considered a "breaking change". This is beacuse the structure is used internally, rather than being a published API. That said, efforts will be made to indicate in the release notes if fields in the structure are renamed or moved, but not for adding new items.

Prior Art

The bluetooth_tracker and ble_tracker integrations are only built to give a "home/not home" determination, and don't do "Area" based location. (nb: "Zones" are places outside the home, while "Areas" are rooms/areas inside the home). I wanted to be free to experiment with this in ways that might not suit core, but hopefully at least some of this could find a home in the core codebase one day.

The "monitor" script uses standalone Pi's to gather bluetooth data and then pumps it into MQTT. It doesn't use the bluetooth_proxy capabilities which I feel are the future of home bluetooth networking (well, it is for my home, anyway!).

ESPresense looks cool, but I don't want to dedicate my nodes to non-esphome use, and again it doesn't leverage the bluetooth proxy features now in HA. I am probably reinventing a fair amount of ESPresense's wheel.

Installation

You can install Bermuda by opening HACS on your Home Assistant instance and searching for "Bermuda". Alternatively you can click the button below to be automatically redirected.

Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.

You should now be able to add the Bermuda BLE Trilateration integration. Once you have done that, you need to restart Home Assistant, then in Settings, Devices & Services choose Add Integration and search for Bermuda BLE Trilateration. It's possible that it will autodetect for you just by noticing nearby bluetooth devices.

Once the integration is added, you need to set up your devices by clicking Configure in Devices and Services, Bermuda BLE Trilateration.

In the Configuration dialog, you can choose which bluetooth devices you would like the integration to track.

You can manually install Bermuda by doing the following:

  1. Using the tool of choice open the directory (folder) for your HA configuration (where you find configuration.yaml).
  2. If you do not have a custom_components directory (folder) there, you need to create it.
  3. In the custom_components directory (folder) create a new folder called bermuda.
  4. Download all the files from the custom_components/bermuda/ directory (folder) in this repository.
  5. Place the files you downloaded in the new directory (folder) you created.
  6. Restart Home Assistant
  7. In the HA UI go to "Configuration" -> "Integrations" click "+" and search for "Bermuda BLE Trilateration"

Contributions are welcome!

If you want to contribute to this please read the Contribution guidelines

Credits

This project was generated from @oncleben31's Home Assistant Custom Component Cookiecutter template.

Code template was mainly taken from @Ludeeus's integration_blueprint template Cookiecutter User Guide**


Frequently asked questions

Is bermuda free to use?

bermuda is open source under the MIT licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does bermuda do?

Bermuda Bluetooth/BLE Triangulation / Trilateration for HomeAssistant

What is bermuda written in?

bermuda is primarily written in Python. Its source is publicly available at https://github.com/agittins/bermuda, and it has 2,037 GitHub stars.