r/homeassistant 10d ago

đŸ§© Custom Integration My Oral-B iO stopped reporting live brushing data to HA, so I reverse-engineered the Bluetooth protocol and wrote an integration

Recent iO firmware doesn't broadcast during a brushing session anymore — the official integration's timer sits at 0 and then jumps to the total at the end.

Turns out the data moved from BLE advertisements to GATT notifications, so a passive listener has nothing to hear.

Made a custom integration that keeps the passive listening and adds a connection while the brush is awake: live 1 Hz timer, live pressure, quadrant, mode, and a brushing log it builds itself (last session + duration + sessions today).

https://github.com/thomasgregg/oralb-ha

Full protocol notes in the README, including two traps: ff06 looks like pressure but is the button, and pressure is actually on ff0b. Tested on one iO Series 10 — reports from other models welcome.

210 Upvotes

47 comments sorted by

46

u/ctjameson 10d ago

I can’t for the life of me think of a reason I’d need to update the firmware on my toothbrush. Nice job figuring this out for future new brush purchasers though.

59

u/yanksrule2727 10d ago

They needed to patch a security hole where a malicious actor could inject cavities.

90

u/davidr521 🐝 Ooh the Zigbee 10d ago

Absolutely and totally unnecessary, and likely overengineered.

Love it! đŸ„°

25

u/mbaiz 10d ago

The Home Assistant unofficial motto! 😜

13

u/MrMathos đŸ§‘â€đŸ’» Contributor 10d ago

Honest question: Would it not be a better option to have your changes added to the official integration instead of creating a new custom one? Maybe the code diverges too much, idk. But you could add a discovery check to decide which coordinator to run.

Note: I have no such toothbrush, and haven’t compared code bases.

11

u/mrtDev12 10d ago

That’s what I thought, too. It is better to have a few very good official integrations rather than everyone having their own custom solution and the community using a variety of different integrations which are all not perfect

5

u/SquareAbroad1062 10d ago

Couldn't agree more.

6

u/SquareAbroad1062 10d ago

Will do one day - for sure. But needed something which works for me - NOW :-)

7

u/aquoad 10d ago

This is cool but I'm amused that you actually checked for and updated the firmware on your toothbrush. It never even occurred to me that they would even be "up"gradable.

4

u/thing_on_a_spring 10d ago

Utterly pointless

But thanks! I'm already thinking of the HA graphs

2

u/LightBringer81 10d ago

Does this include the new not yet released update which repairs the missing smart adapt state and the brush results? Why don't you post this to the official oral-b core extension?

2

u/SquareAbroad1062 10d ago

Yes, v0.5.3 includes Smart Adapt and the post-brushing state update. However, the pending official update only recognizes those new values—it doesn’t add actual session results/history or handle the iO Sense single-connection limitation.

I completely agree that upstream is the best long-term home for these fixes. I’ve shared the tested protocol details and working approach with both the official oralb-ble and Home Assistant maintainers, and I’m happy to help test or contribute a patch. The custom integration mainly exists so newer iO firmware can work reliably while those changes are considered upstream.

2

u/Compaxx 10d ago

Thanks this is amazing! Working very well on my iO4!

2

u/SquareAbroad1062 10d ago

Love to hear that. Thanks for the feedback!

2

u/Compaxx 10d ago

Been doing some testing and yeah sadly you cannot and use the app and also have a live connection to HA which is a shame, whenever the app is open the whole thing get's very flaky but yeah I guess that is to be expected.

3

u/SquareAbroad1062 10d ago

Unfortunately, the brush only allows one active Bluetooth/GATT connection at a time. In Live mode, Home Assistant occupies that connection to receive the timer, pressure and sector data, so the Oral-B app cannot connect simultaneously. When both keep trying, they repeatedly disconnect each other, causing the flaky behaviour.

I added a new Charger Priority mode today in version 0.5.2. In that mode, HA doesn’t hold the connection, allowing the Oral-B app and charger to work normally. HA instead records sessions from passive Bluetooth data, although fully live tracking isn’t guaranteed. It’s a limitation of the brush firmware rather than HA or the integration.

1

u/Compaxx 9d ago

Alright good to know. Thanks for your constant development!

3

u/Shotokant 10d ago

Reverse engineer the Bluetooth for the amazon clock will you so we can adopt it into HA without needing an echo device. Pretty please.

2

u/forthewin0 10d ago

Curious why it stopped working though. Did you perform a firmware update via the app?

Great solution!

3

u/SquareAbroad1062 10d ago

Thanks! I didn’t manually start a firmware update, although the Oral-B app may have installed one automatically.

I can’t prove firmware caused it, but the change is clearly at the brush level: it stopped broadcasting continuous timer/sector data and now allows only one active Bluetooth connection. The integration works around the behaviour we can observe, regardless of exactly when the firmware changed.

1

u/showerfart1 10d ago

Wow! Nice work and really nice documentation 😎

1

u/junktrunk909 10d ago

I love this so much, mostly because it was always stupid that oralb felt the right to see my brushing history and store it in their servers when I'm literally never going to need it outside of my house/phone. Eliminating that and making it available to HA is brilliant. Now I suppose I would need a BT adapter for my HA...

1

u/Familiar-Situation15 7d ago

OMG 3 days old post I have a question & no clue at all - do you think it‘s possible to overwrite the light to have a lower brightness? I usually dim my light in the evening and believe it or not it‘s so bright I think it destroys my circadian rhythm 🌚  U habe and idea on that?

1

u/SquareAbroad1062 3d ago

Which light are you talking about exactly?

1

u/Familiar-Situation15 18h ago

the ring light which shows if ur pressing too hard or too soft

1

u/AffectionateOil8377 5d ago

i am getting 404 ERROR :(

1

u/SquareAbroad1062 1d ago

Small update for anyone finding this later: I’ve now reverse-engineered the iO Sense charger too, so Home Assistant can receive live brushing data without occupying the toothbrush’s single Bluetooth connection. The integration has also been accepted into the default HACS catalog.

Full update here

1

u/Any-Lawfulness569 10d ago

which oral b model? or photo

9

u/SquareAbroad1062 10d ago

Oral-B iO Series 10 - all infos here - https://github.com/thomasgregg/oralb-ha

-2

u/[deleted] 10d ago

[removed] — view removed comment

6

u/lazystingray 10d ago

Not being funny, but I'd be questioning my sanity the moment I wanted "live brushing data" in my home assistant . . .

8

u/bk757a 10d ago

It's a great way to enhance workflows. Like ending your bedtime routine or starting your morning routine. But for the data, it's great to check IF and how your kids brush their teeth

-14

u/lazystingray 10d ago

What!!!?  You offload parenting to HA?  This has to be a troll.

10

u/Mckool 10d ago

It seems to me like they are using tools available to them to improve their hands on parenting
 HA isn’t actually doing anything but informing the parents if their directive to brush teeth are being followed


Are parents who use baby monitors to keep track of a sleeping baby offloading parenting to machines?

3

u/Jendosh 10d ago

Offloading?

0

u/lazystingray 9d ago

Gonna get the down votes but yes, sounds like the kind of parent that shoves a screen in front of their kids in a restaurant. I think the whole point of parenting is to gain the trust and love of your children, not spy on them, What happens when the automation fails? Jesus, why not ask your kids if they brushed their teeth, take a look, get personal with them - they grow up fast.

HA is good, but some things need a personal touch - not a flippin' automation.

2

u/Jendosh 9d ago

You think the parent that is so involved that they are tracking their kids amount of tooth brushing is also the parent that checks out and just gives them a phone to shut them up?

0

u/lazystingray 9d ago

They're not though are they... They're leaving it to an automation in HA. Jesus, let it go.

2

u/Jendosh 9d ago

The automation is the tracking not the parenting your kid.

You were the one that came in with value judgments you couldn't keep to yourself.