This is a significant release that fixes a collection of issues introduced in v0.8.0 as well as some significant fixes for recent iOS devices, where devices would appear as Unknown
for various periods or on various user actions on the device (this particular issue will be at least "much improved", if not fully solved).
Huge thanks to all those who assisted in the various "iOS devices going unknown" threads with sharing observations and diagnostic data - an incomplete list being @oneseventhree, @drothenberger, @erkr, @hajar97, @faz17, @kbrohkahn, @rccoleman, @jksmurf, @milandzuris, @iotola, @rickt123, @bill7531 and more, and particularly to @tylerhartwig for some very decisive debug capture!
Thanks also @jackjourneyman for documentation improvements.
๐จ Breaking Change
The keys and some value formats in the bermuda.dump_devices
service call / action have changed.
I'm not aware of any integrations that use this service, so this will probably only affect you if you have used the service yourself to create template sensors etc.
Of particular note is that the scanners
sub-key on each device is now called adverts
, better reflecting the actual content, and the key is now device-address__scanner-address
(a tuple, internally). Advertisement data has also been moved around inside the advert dict, and values are now generally expressed in hex rather than bytes, because python's bytes format causes my retinas to slowly detach with a scraping noise that is decidedly disconcerting.
๐๐ฆ Significant Changes
๐ผ๏ธ Area and Distance sensors now use the icon defined for the current Area (it's not the most significant change, but it's the most easily noticed!)
๐ก Bermuda takes a different approach to gathering the advertising data from scanners, and now has visibility of all packets reported by scanners rather than just those collated by the Bluetooth manager. The scanning logic has been cleaned up and refactored.
๐ป New scanner handling avoids problems caused by previously storing state / a list of scanners. Scanner discovery is now cleaner and more robust and should respond better to realtime changes in device addition/removal. This also means that the Distance to...
(and Unfiltered Distance to...
) sensors now get created on-demand as new scanners appear / are removed, which should lead to less surprising behaviour.
โ๏ธ Device pruning has been improved and several bugs fixed. This resolves some issues with CPU and memory use increases, as well as IRK or iBeacon devices going unknown
prematurely due to over-zealous pruning.
๐ Area detection tweaks continue, with improvements to more stable transitions from an Area to Unknown, without glitching to another area in the interim.
๐ Bermuda now includes an IRK implementation in parallel to Private BLE Device that tracks full history for valid MACs (a resolvable MAC can be used for up to 15 minutes) and allows Bermuda to validate prior MACs after a reload and respond to advertisements that might not be forwarded to the entire Bluetooth stack.
๐ง Ignore zombie advertisements reported from BlueZ (local USB or onboard BLE adaptors) for paired but absent devices (rssi -128)
๐งน Significant code restructuring, cleanups etc. Fixed some asyncio usage issues.
๐ Sub-millisecond startup time by placing startup io tasks in separate thread
Changelog
- fix: #534 pruning index out of range, vscode/devcontainer tweaks by @agittins in #540
- chore(deps): bump actions/setup-python from 5.5.0 to 5.6.0 by @dependabot in #530
- chore(deps): update pip requirement from <25.1,>=24.1.1 to >=24.1.1,<25.2 by @dependabot in #536
- chore(deps): bump pip from 25.0.1 to 25.1 in /.github/workflows by @dependabot in #537
- chore(deps): bump ruff from 0.11.6 to 0.11.7 by @dependabot in #531
- fix: Area switching on timeout to stale adverts by @agittins in #549
- fix: async usage addressing #456 by @agittins in #550
- feat: Area and distance entities use area icon by @agittins in #558
- docs: readme updates incl min ha version by @agittins in #559
- chore(deps): bump ruff from 0.11.7 to 0.11.8 by @dependabot in #552
- chore(deps): bump pip from 25.1 to 25.1.1 in /.github/workflows by @dependabot in #557
- chore: added autoreload to vscode launch.json by @agittins in #566
- feat: significant restructuring by @agittins in #568
- chore(deps): bump ruff from 0.11.8 to 0.11.10 by @dependabot in #567
- chore: ren BermudaDeviceScanner to BermudaAdvert by @agittins in #569
- fix: new irk_manager to cover all traffic types by @agittins in #576
- fix: restore on_advert trigger and add diags log by @agittins in #577
Full Changelog: v0.8.1...v0.8.2