Recent Oral-B iO firmware stopped broadcasting live data during a brushing session. If you have one, you’ll recognise it: the timer sits at 0 and then jumps to the final duration, pressure is frozen, the quadrant never advances — and if the single end-of-session advertisement is missed, the session disappears entirely.
The official oralb integration isn’t at fault; it’s passive, and there’s nothing left to listen to. The data moved to GATT notifications, which need a connection.
So I wrote a custom integration that does both: it listens passively like the official one, and connects while the brush is awake to subscribe to the live characteristics.
- Live brushing timer at 1 Hz
- Live pressure (low / normal / high)
- Live quadrant and mode
- Brushing log: last session with duration, mode, quadrants covered and
high-pressure count, plus sessions today — survives restarts - Falls back to passive when the phone app or an iO Sense charger holds the
connection - Entity names mirror the official integration, so toothbrush-card works unchanged
GitHub - thomasgregg/oralb-ha · GitHub (HACS custom repository)
Honest caveats: it uses one Bluetooth connection slot while the brush is awake, it competes with the Oral-B app for the brush, and it’s been tested on a single iO Series 10. If your brush still broadcasts during sessions, stick with the official integration — it’s free and passive.
The README documents the full characteristic map, including what I ruled out, so nobody else has to repeat the reverse-engineering.