ランキングに戻る

agittins/bermuda

Python

Bermuda Bluetooth/BLE Triangulation / Trilateration for HomeAssistant

blebluetooth-low-energyhacs-integrationhomeassistant-custom-componenttriangulationbluetooth-beaconsesphometrilaterationbluetooth-proxy
スター成長
スター
1.9k
フォーク
62
週間成長
Issue
94
5001k1.5k
2023年8月2024年7月2025年7月2026年7月
成果物PyPIpip install bermuda
README

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**


関連リポジトリ
bettercap/bettercap

The Swiss Army knife for 802.11, BLE, HID, CAN-bus, IPv4 and IPv6 networks reconnaissance and MITM attacks.

GoGo ModulesOtherpassword-sniffermitm
bettercap.org
19.5k1.7k
flipperdevices/flipperzero-firmware

Flipper Zero firmware source code

CGNU General Public License v3.0nfcrfid
flipper.net
16.3k3.4k
Jasonchenlijian/FastBle

Android Bluetooth Low Energy (BLE) Fast Development Framework. It uses simple ways to filter, scan, connect, read ,write, notify, readRssi, setMTU, and multiConnection.

JavaMavenApache License 2.0androidbluetooth
5.5k1.2k
blinker-iot/blinker-library

An IoT Solution,Blinker library for embedded hardware. Works with Arduino R4, ESP32.

C++MIT Licensearduinoesp8266
diandeng.tech
5.2k236
blinker-iot/blinker-py

Blinker python library for hardware. Works with Raspberry Pi, Banan Pi, Linux devices

PythonPyPIMIT Licenseblinkerwifi
4.4k30
ts1/BLEUnlock

Lock/unlock your Mac with your iPhone, Apple Watch, or any other Bluetooth LE devices

Swiftswiftmacos
4.2k275
1technophile/OpenMQTTGateway

MQTT gateway for ESP8266 or ESP32 with bidirectional 433mhz/315mhz/868mhz, Infrared communications, BLE, Bluetooth, beacons detection, mi flora, mi jia, LYWSD02, LYWSD03MMC, Mi Scale, TPMS, BBQ thermometer compatibility & LoRa.

C++GNU General Public License v3.0mqttgateway
docs.openmqttgateway.com
4.1k895
dingjikerbo/Android-BluetoothKit

Android BLE蓝牙通信库

JavaMavenApache License 2.0bleandroid-ble
3.7k759
dariuszseweryn/RxAndroidBle

An Android Bluetooth Low Energy (BLE) Library with RxJava3 interface

JavaMavenApache License 2.0blebluetooth-low-energy
polidea.github.io/RxAndroidBle/
3.5k593
ZSWatch/ZSWatch

ZSWatch - the Open Source Zephyr™ based Smartwatch, including both HW and FW.

CGNU General Public License v3.0angle-of-arrivalble
zswatch.dev
3.3k302
T-vK/ESP32-BLE-Keyboard

Bluetooth LE Keyboard library for the ESP32 (Arduino IDE compatible)

C++esp32bluetooth
3.1k568
earlephilhower/arduino-pico

Raspberry Pi Pico Arduino core, for all RP2040 and RP2350 boards

CGNU Lesser General Public License v2.1raspberrypi
2.8k560