Skip to content

Releases: thomasgregg/oralb-ha

v0.6.1 — clarify charger-priority limitations

Choose a tag to compare

@thomasgregg thomasgregg released this 24 Jul 07:16

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 unknown indefinitely 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

Choose a tag to compare

@thomasgregg thomasgregg released this 23 Jul 22:01

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

Choose a tag to compare

@thomasgregg thomasgregg released this 23 Jul 20:55

Fixes

  • Capture sustained charger-priority sessions that advertise selection_menu without a running state.
  • 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

Choose a tag to compare

@thomasgregg thomasgregg released this 23 Jul 20:39

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

Choose a tag to compare

@thomasgregg thomasgregg released this 23 Jul 20:07

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

Choose a tag to compare

@thomasgregg thomasgregg released this 23 Jul 19:39
63563ec

What's Changed

New Contributors

Full Changelog: v0.4.0...v0.5.0

v0.4.0 — works alongside the iO Sense charger

Choose a tag to compare

@thomasgregg thomasgregg released this 23 Jul 18:20
575228c

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 sleeping and transport states
  • 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

Choose a tag to compare

@thomasgregg thomasgregg released this 23 Jul 13:54
6455305

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.json keys 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 characteristic ff0b
  • 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-card works 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

Choose a tag to compare

@thomasgregg thomasgregg released this 23 Jul 11:13
1ca2c2b

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 characteristic ff0b
  • 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-card works 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 any unknown_state_<n> or mode_<n>.