Breaking changes
- Minimum required python version 3.14 [BREAKING CHANGE]
- Minimum required home assistant version 2026.7.0 [BREAKING CHANGE]
What's else changed
- Keep passive scans continuous and support instant batched updates by @rmounce in #1558
- Change device class from HUMIDITY to MOISTURE for moisture sensors
- Add support for MJWSD06MMC with different device_id
- fix deprecated CONCENTRATION_* constants by @shomanjk
Summary
This PR contains the following changes that improve passive HCI scanning and low-latency measurement delivery:
- decouple scanner lifetime from the measurement aggregation period
- add a configurable per-adapter raw-HCI inactivity watchdog
- add backward-compatible periodic/instant measurement update policies, including per-device overrides
- parse every legacy or extended advertising report in batched HCI LE meta-events
Motivation and root cause
Restarting the HCI scanner after every aggregation period creates avoidable scan downtime. With period: 1, a TP-Link UB500 was repeatedly closing and reopening its HCI socket and losing advertisements.
After continuous scanning and instant updates were enabled, matched captures identified a second UB500-specific loss mechanism. The adapter commonly emits LE Extended Advertising Report events containing two to five reports. BleParser.parse_raw_data() assumed exactly one report and rejected the complete HCI event whenever its total length exceeded the first report's length.
Configuration example
ble_monitor:
hci_inactivity_timeout: 60
measurement_update: instantNew Contributors
Full Changelog: 3.16.0...14.0.0-beta