After transforming my home into a smart space with automated switches, lights, sensors for everything from doors to temperature and water leaks, and a robust Home Assistant setup for extensive automations and dashboards, a friend jokingly pointed out that the only thing not connected in my house was my toothbrush. Challenge accepted!
This might sound silly, but integrating your toothbrush into Home Assistant is a surprisingly simple project, and it can make for a fun dashboard addition. Plus, it’s an interesting way to push the boundaries of smart home automation.
Requirements
Although you’re more than welcome to just read this post for general knowledge, check out my recommendations for what you need to have, in order to be able to fully use the provided information.
I'm personally using the Oral-B Smart Series 4000 for this project, and it works flawlessly with Home Assistant. However, other models in the Oral-B Smart and IO series are also supported. The full list of compatible toothbrushes includes:
- IO Series 4
- IO Series 6
- IO Series 7
- IO Series 8
- IO Series 9
- Smart Series 4000
- Smart Series 6000
- Smart Series 7000
- Genius Series 8000
- Genius Series 9000
- Genius Series 10000
- Triumph V2
- Genius X
This guide works specifically with the Oral-B toothbrushes which connect via Bluetooth to the Oral-B mobile app. Through the app, you can monitor your brushing time, change vibration modes, and more. However, instead of using the app, we'll use Home Assistant to intercept those Bluetooth signals and create a live dashboard widget for your toothbrush activity.
Important Note: Since this process uses Bluetooth, the toothbrush needs to be within range of your Home Assistant setup (which serves as the Bluetooth receiver). If that’s not practical for your home layout, you can set up a Bluetooth proxy using an ESP32 board. If you're unfamiliar with this concept, I wrote a guide that explains how to create a DIY Bluetooth extension for smart home projects like this.
Step 1: Ensure Bluetooth Integration is Set Up
Before starting, make sure that the Bluetooth integration is active on your Home Assistant. If you don’t see it in your list of integrations, you can install it from the official Home Assistant website.
Step 2: Pair Your Toothbrush with Home Assistant
Turn on your toothbrush for a few seconds. Home Assistant should automatically detect it and suggest installing the Oral-B integration. If it doesn’t, you can install it manually. Surprisingly, the Oral-B integration is built into Home Assistant by default, so it’s quick to set up.
To manually install, click on "Add Integration" and search for Oral-B, or use this direct link for details.
Once installed, Home Assistant will create a new device for your toothbrush. You’ll gain access to the following sensors:

Brushing mode: The selected cleaning mode, such as daily clean.
Number of Sectors: The number of brushing areas, as set in the app's Pacer Visualization.
Sector: The current brushing sector based on your brush goal (e.g., sector 2 if you're 37 seconds into a 2-minute session).
Time: Total brushing time in seconds.
Toothbrush State: Whether the toothbrush is running or idle.
Battery: Battery percentage of your toothbrush.
Step 3: Create a Dashboard Card
You can now set up a new card in Home Assistant to visualize your toothbrush data. Here’s an example of my card:
- type: conditional
conditions:
- condition: state
entity: sensor.smart_series_4000_87d0
state: running
card:
type: custom:apexcharts-card
update_delay: 500ms
layout: minimal
yaxis:
- id: first
card_mod:
style: |
ha-card {
margin-top: 10px
}
show:
loading: false
experimental:
color_threshold: true
header:
show: false
show_states: false
colorize_states: true
series:
- entity: sensor.smart_series_4000_87d0_sector_timer
name: Pressure
color_threshold:
- value: 0
color: '#00b59d'
opacity: 1
- value: 25
color: '#009D88'
- value: 50
color: '#008473'
- value: 75
color: '#006C5E'
- entity: sensor.smart_series_4000_87d0_duration
yaxis_id: first
transform: return (x/120)*100;
name: Brushing Time
show:
legend_value: true
as_duration: second
datalabels: true
color_threshold:
- value: 0
color: '#00b59d'
opacity: 1
- value: 25
color: '#009D88'
- value: 50
color: '#008473'
- value: 75
color: '#006C5E'
chart_type: radialBar
apex_config:
legend:
show: false
stroke:
dashArray: 3
lineCap: butt
chart:
height: 330px
offsetY: 0
This setup uses a “conditional” block to show the card only when the toothbrush is in use. When you're not brushing your teeth, the card will remain hidden.
This card also uses the custom apexcharts-card, a fantastic tool that allows for a circular display—perfect for visualizing the brushing time information I was looking to highlight. You can install it easily through HACS. Just search for apexcharts-card
in the built-in HACS search, and it will pop right up. For more details and examples of what this card can do, check out the official page.
The end result looks like this:

It's a very minimal looking display, with two dials, the other one is for the current segment (so fills up every 30 seconds) and the inner dial that takes 2 minutes to fill up, with the color changing slightly over time.
Step 4: Start Brushing!
Now that everything’s set up, go ahead and brush your teeth while Home Assistant tracks the data. Don’t forget to floss!