Releases: thomasgregg/oralb-ha
Release list
v0.6.1 — clarify charger-priority limitations
Documentation correction
- Clarifies that charger-priority mode guarantees the passive session log, state and mode—not GATT-only values.
- Smiley, battery diagnostics, target duration, available modes and brush-head lifetime update in charger-priority mode only when Home Assistant briefly wins the brush’s single BLE connection slot.
- States explicitly that these entities can remain
unknownindefinitely when the iO Sense charger or phone retains that slot. - Recommends Live mode when GATT-only entities must update reliably, while documenting that Live mode prevents the charger display and phone app from connecting.
No runtime behavior changed in this patch.
v0.6.0 — protocol diagnostics and Smart Adapt
What’s new
- Corrects the iO mode identifiers, including Super Sensitive (
5), Tongue Clean (6), Off (9) and Smart Adapt (11). - Adds the Smiley/display-face sensor from
ff0a, with live notifications when connected and post-session reads in charger-priority mode. - Decodes protocol 6/8 battery details: remaining brushing time, voltage, current and temperature.
- Reports the brush model, BLE protocol and firmware revision in Home Assistant device information.
- Adds the advertised sector timer, configured target duration and per-sector target-time attributes.
- Reads the brushing modes reported by the brush and probes supported brushes for brush-head/refill time remaining.
- Corrects terminal state identifiers and masks the sector byte so display flags cannot create invalid quadrants.
- Treats new GATT notifications and reads as optional, preserving compatibility with brushes that do not expose them.
Voltage, current, temperature and brush-head lifetime entities are disabled by default and can be enabled from the device entity list. The Smiley value represents the brush display face; it is not yet claimed to be a brushing-quality score.
Validation
- 10 protocol decoder regression tests
- Ruff and Python compilation
- HACS validation
- Home Assistant Hassfest validation
v0.5.3
Fixes
- Capture sustained charger-priority sessions that advertise
selection_menuwithout arunningstate. - Ignore momentary menu/button blips shorter than five seconds.
- Track back-to-back sessions as separate sync generations so a newer refresh cannot be cleared by an older one.
- Queue passive sessions individually so an older official brush record cannot overwrite or double-count a newer session.
Validated against the observed 33-second plus 20-second back-to-back timeline. HACS and Hassfest both pass.
v0.5.2
Fixes
- Record charger-priority sessions immediately from passive running-to-idle/charging transitions when the brush timer remains at zero.
- Calculate fallback duration from elapsed time without taking the brush’s single Bluetooth connection.
- Reconcile a later official brush history record with the passive session without double-counting Sessions today.
- Restore session metadata into the coordinator so reconciliation remains safe after an integration reload.
Validated with HACS and Hassfest.
v0.5.1 — reliable charger-priority sync
Fixes
- wait for the toothbrush to finish committing its last-session record before syncing
- retry stale, missing, or temporarily unavailable session records
- keep battery and state reads working when another GATT characteristic fails
- log duplicate and invalid session records for easier diagnosis
This fixes charger-priority sessions being missed when the first post-session sync returned the previous record.
v0.5.0 — charger priority and post-session sync
What's Changed
- Add v0.5 charger-priority mode by @thomasgregg in #1
New Contributors
- @thomasgregg made their first contribution in #1
Full Changelog: v0.4.0...v0.5.0
v0.4.0 — works alongside the iO Sense charger
Fixes the integration going silent while an iO Sense charger is plugged in and connected to the brush.
What was wrong
The brush stops advertising while a client is attached, and connection attempts were only made in response to an advertisement. With an iO Sense connected, no advertisement arrived, so no connection was ever attempted. Docked brushes also report charging, which the previous logic treated as a reason to release the connection rather than establish one.
Testing showed the brush accepts a second simultaneous client: with the charger attached and active, an independent client connected successfully and read state, time and pressure. The charger was never the blocker.
Changes
- Connect while the brush is charging as well as awake; docked is the most reliable moment to establish the link
- Only release the connection for
sleepingandtransportstates - Added a reconnect loop that retries every 30s when no connection is held, rather than waiting for an advertisement that will not come
- Raised connection attempts from 2 to 3 (the first attempt often fails while the brush is attached elsewhere)
- Replaced the 2-minute idle disconnect with a 15-minute stale-connection rebuild, so the link is held rather than dropped
Result
The Oral-B app, the iO Sense charger and Home Assistant can all be active at the same time.
Tested on an Oral-B iO Series 10 (model ID 0x36, protocol version 8).
v0.3.1 — packaging and validation
Packaging release. No functional changes to the integration since v0.3.0.
Changes
- Added brand assets (
custom_components/oralb_live/brand/) - Added MIT license
- Sorted
manifest.jsonkeys to the order hassfest requires - Added a Validate workflow running HACS and hassfest validation on every push
- Repository description and topics added
HACS validation and hassfest both pass on this commit.
Features (unchanged from v0.3.0)
- Live brushing timer at 1 Hz during a session
- Live pressure (
low/normal/high) from characteristicff0b - Live quadrant and brushing mode
- Battery and toothbrush state, including post-session summary states
- Brushing log: last session timestamp, duration, and sessions today, restored across restarts
- Falls back to passive listening when the phone app or an iO Sense charger holds the connection
- Entity names mirror the official integration, so
toothbrush-cardworks unchanged
Developed against an Oral-B iO Series 10 (model ID 0x36, protocol version 8). Reports from other models are welcome.
v0.3.0 — Live pressure and brushing log
First tagged release.
An alternative to the built-in oralb integration for iO firmware that no longer broadcasts live data during a brushing session. It listens passively like the official integration, and additionally connects while the brush is awake to receive GATT notifications.
Features
- Live brushing timer at 1 Hz during a session
- Live pressure (
low/normal/high) from characteristicff0b - Live quadrant and brushing mode
- Battery and toothbrush state, including the post-session summary states
- Brushing log: last session timestamp, duration, and sessions today, restored across restarts
- Falls back to passive listening when the phone app or an iO Sense charger holds the connection
- Entity names mirror the official integration, so
toothbrush-cardworks unchanged
Notes
- Disable the official Oral-B config entry for the same brush before use, and repoint dashboard cards at the new entity IDs.
- Stored session history on the brush is not retrievable without authentication; the integration builds its own log from live sessions instead. See the README protocol notes.
- Developed against a single iO-series brush (model bytes
36 08 52, protocol version 8). Reports from other models are welcome, especially raw values behind anyunknown_state_<n>ormode_<n>.