Philips Sonicare BLE - Toothbrush Integration with 30+ Sensors

Hey everyone,

A Sonicare integration has been requested since 2020 and while there have been some great efforts over the years (shoutout to GrumpyMeow’s early integration, v6ak’s ESPHome package, and Andrecall’s fork), many users struggled with connection reliability, missing sensors, or Bluetooth proxy issues.

I’ve built a new HACS integration from scratch that aims to solve these problems — Philips Sonicare BLE brings 30+ sensors into Home Assistant, fully local via Bluetooth, no cloud required.

What’s different?

  • Built from the ground up with an event-driven architecture — no polling loops, instant updates
  • Robust connection management tailored to Sonicare’s quirky BLE behavior (short advertisement windows, subscribe-first pattern)
  • Native ESP32 Bridge support for bathrooms out of Bluetooth range
  • 30+ entities including live brushing data most previous solutions couldn’t access

Features

  • Battery — Level in percent, charging status
  • Live Brushing Data — Duration, pressure (in grams!), pressure alert, temperature
  • Brush Head Tracking — Wear %, type, serial number (NFC), color ring ID (who’s brushing?)
  • Session Tracking — Current and stored brushing sessions
  • Brushing Mode & Intensity — Clean, White+, Gum Health, Deep Clean+, Sensitive, Tongue Care
  • Motor Runtime — Cumulative operating hours for maintenance predictions
  • Diagnostics — Firmware, model, RSSI

Two Connection Methods

  1. Direct Bluetooth — HA connects directly to the toothbrush
  2. ESP32 Bridge — For toothbrushes out of BLE range, via ESPHome

Screenshots

Installation

Available via HACS as a custom repository:

HACS → Integrations → ⋮ → Custom Repositories
URL: https://github.com/mtheli/philips_sonicare_ble
Category: Integration

The toothbrush is auto-discovered as soon as it’s placed on the charging stand (BLE advertisement active).

No pairing required — Sonicare uses open GATT.

Tested Models

Model Status
DiamondClean 9000 (HX992B) Fully tested

Any BLE-enabled Sonicare using the same BLE protocol should work (DiamondClean Smart, FlexCare, HX992X series). If you have a different model — happy to hear your test results!

Toothbrush Card — Dashboard Visualization

There’s also a matching Custom Lovelace Card that visualizes your toothbrush live on the dashboard:

  • Animated tooth SVG with live sector tracking (4 quadrants)
  • Chips for battery, intensity, and brushing mode
  • Progress bar based on brushing target duration
  • Success badge when all sectors are complete
  • Bluetooth connection status indicator
  • Automatic entity discovery — no YAML required
  • Light & dark mode, multi-language (EN/DE)
  • Also works with Oral-B (official HA integration)


Install via HACS:

HACS → Frontend → ⋮ → Custom Repositories
URL: https://github.com/mtheli/toothbrush-card
Category: Dashboard

Links

Feedback and model reports are welcome!

5 Likes

Hi @mtheli,

Great timing! We need to replace an old Sonicare and I was curious if there were any that integrate with HA like our Oral-Bs.

It looks like the model you tested with is discontinued. I saw your note:

Other BLE-enabled Philips Sonicare toothbrushes using the Legacy protocol (service UUID 477ea600-a260-11e4-ae37-0002a5d50001) should also work. The integration auto-discovers compatible devices via BLE.

Do you know if there is a reference for what those models might be? For example, they still use the DiamondClean Smart name, but a current model would be HX9903/05.

Alternatively, is supporting a newer model just a potential development effort or do you suspect newer models might not be supportable?

Thank you for putting this together - it looks great.

Aron

Hi @ajsilverton , thanks for your interest!

Short answer: The HX9903/05 (DiamondClean Smart) should work — it’s the same model family as my HX992X that I’m testing with.

Compatible models: The integration works with any BLE-enabled Sonicare toothbrush that advertises the Sonicare GATT service (477ea600-a260-11e4-ae37-0002a5d50001). This includes at least:

  • DiamondClean Smart (HX99xx) — tested and confirmed
  • Expert Clean (HX96xx)
  • Sonicare 6500/7100 (HX74xx)
  • 9900 Prestige (HX999x)

Basically any Sonicare with a Bluetooth symbol on the packaging should be discovered automatically. The integration uses BLE auto-discovery, so if HA sees the toothbrush, it will offer to set up.

Note: You need either a Bluetooth adapter on your HA host or an ESP32 as a BLE bridge (recommended for range/stability). The README has setup instructions for both.

Let me know if you run into any issues — I’m happy to help debug!

Update: I’ve removed the “Legacy protocol” wording from the README and docs — that was a misleading label on my part. There’s just one Sonicare BLE protocol that all current models share. Sorry for the confusion!

Martin, Thanks for the clarification. The “legacy” bit was throwing me off. The models I am considering are all in the list you provided. I’ll report back after I get the new toothbrush. Our Oral-Bs are connected via ESPHome BLE proxies already, so we are good for connectivity.

Thank you for the excellent Lovelace card. I’ve already added it to a dashboard.

For folks who might be wondering why bother with an HA-integrated toothbrush, for us it’s:

  • Brush head replacement reminders
  • Charging reminders (it happens…)
  • Gamification of brushing to get the kiddo to do it correctly - nothing like beating mom and dad in a competition
1 Like

I’ve just barely tested the integration so far, and it seems to work well with my Sonicare prestige 9900 (HX999X) I’ve got loads of different bluetooth proxies (both shelly and esp32), so that’s how it’s connected. probably a shelly device used as a proxy.

I see all sensors go to unavailable aftere a while.
At least some of them I think should retain the last known value, like firmware/model/motor runtime.

I did have a little struggle connecting the toothbrush, and after reading the updated manual I see that it’s probably becase I put it back on the charger.

So far I’m very happy with this integration!

Hi @doffen,

thanks for testing with your Prestige 9900 — great to hear it works!

Regarding sensors going unavailable:

You’re right — static values like firmware, model number and motor runtime should retain their last known value instead of going unavailable when the toothbrush is out of range. This is now fixed in v0.2.1. Static sensors (firmware, model number, motor runtime, session count, handle time and all brush head sensors) will keep their last known value. Only dynamic sensors (battery, brushing state, pressure, etc.) go unavailable when disconnected.

You can update via HACS or download from GitHub.

Regarding initial connection issues:

The Sonicare only advertises via BLE when it’s not on the charger. Once placed on the charger, it stops advertising and can’t be discovered. To set up the integration, make sure the toothbrush is off the charger — a quick button press wakes it up and starts BLE advertising for about 30 seconds.

Thanks for the feedback!

1 Like

Hi @doffen,

quick question about your Prestige 9900 (HX9992) — did you pair it manually via bluetoothctl or the Bluetooth settings before setting up the integration? Or did it work right away without any pairing?

I’m investigating which Sonicare models require BLE bonding. My HX992B works without pairing, but an ExpertClean 7500 (HX962V) user needs authentication before characteristics can be read. Trying to figure out if the Prestige falls into the same category.

I did not pair my Prestige 9900 first.
It was discovered by the philips sonicare integration stragiht away and I set it up there.

I guess my connection is what you call Direct Bluetooth in your first post, since I’ve not flashed any espe32 especially for my toothbrush. it’s just picked up through one of my many proxies.

Thanks for confirming! Good to know the Prestige 9900 works without bonding — same as my DiamondClean 9000. So it seems to be model-dependent: ExpertClean (HX962V) and HX991M require
bonding, while yours and mine don’t.

v0.4.0 is out now with:

  • BLE pairing support for models that require bonding (auto-detected during setup)
  • Fixed “not in range” warning — now DEBUG level instead of WARNING (#2)
  • Your Prestige 9900 is now listed as a tested model in the README

Update via HACS to get the new version.

1 Like