{"id":46886643,"url":"https://github.com/mtheli/toothbrush-card","last_synced_at":"2026-04-15T00:02:57.869Z","repository":{"id":322054485,"uuid":"1088052689","full_name":"mtheli/toothbrush-card","owner":"mtheli","description":"Custom Lovelace card for electric toothbrushes — supports Oral-B (oralb_ble) and Philips Sonicare (philips_sonicare_ble)","archived":false,"fork":false,"pushed_at":"2026-04-10T06:55:37.000Z","size":536,"stargazers_count":12,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-10T08:38:29.898Z","etag":null,"topics":["custom-card","hacs","home-assistant","lovelace","oralb","philips","sonicare","toothbrush"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mtheli.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-02T07:47:13.000Z","updated_at":"2026-04-10T06:55:30.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/mtheli/toothbrush-card","commit_stats":null,"previous_names":["mtheli/toothbrush-card"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/mtheli/toothbrush-card","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mtheli%2Ftoothbrush-card","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mtheli%2Ftoothbrush-card/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mtheli%2Ftoothbrush-card/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mtheli%2Ftoothbrush-card/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mtheli","download_url":"https://codeload.github.com/mtheli/toothbrush-card/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mtheli%2Ftoothbrush-card/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31820369,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T18:05:02.291Z","status":"ssl_error","status_checked_at":"2026-04-14T18:05:01.765Z","response_time":153,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["custom-card","hacs","home-assistant","lovelace","oralb","philips","sonicare","toothbrush"],"created_at":"2026-03-10T22:15:36.324Z","updated_at":"2026-04-15T00:02:57.861Z","avatar_url":"https://github.com/mtheli.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Toothbrush Card\n\n[![hacs_badge](https://img.shields.io/badge/HACS-Custom-41BDF5.svg)](https://github.com/hacs/integration)\n[![GitHub Release](https://img.shields.io/github/v/release/mtheli/toothbrush-card)](https://github.com/mtheli/toothbrush-card/releases)\n[![License: MIT](https://img.shields.io/github/license/mtheli/toothbrush-card)](LICENSE)\n\nA **Custom Lovelace Card** for [Home Assistant](https://www.home-assistant.io/) designed to visualize **electric toothbrushes** via Bluetooth LE integrations.\n\n### Supported Integrations\n\n| Brand | Integration | Link |\n|-------|------------|------|\n| Oral-B | `oralb` | [Oral-B Integration](https://www.home-assistant.io/integrations/oralb/) (official, built into HA Core) |\n| Philips Sonicare | `philips_sonicare_ble` | [philips_sonicare_ble](https://github.com/mtheli/philips_sonicare_ble) (custom component) |\n\n![Oral-B](screenshots/OralB.png) ![Sonicare](screenshots/Sonicare.png)\n\n---\n\n## Features\n\n- Real-time brushing visualization with animated tooth SVG (4 or 6 sectors)\n- Chip-based display for battery, pressure/intensity, and brushing mode\n- Bluetooth connection status indicator (Pantone 285 blue)\n- Progress bar based on brushing target (uses device routine length when available)\n- Success badge when all sectors are complete\n- Automatic entity discovery — no manual YAML required\n- Sector tracking: device-reported (Oral-B) or time-based calculation (Sonicare)\n- Configurable title, subtitle, and accent color\n- Configurable sector order with drag \u0026 drop and up/down buttons\n- Responsive layout with container queries (icon-only chips on narrow cards)\n- Multi-language support (auto-detects Home Assistant language)\n- Light and dark mode support via HA CSS variables\n\n## Supported Data Points\n\n| Sensor    | Oral-B                          | Philips Sonicare                          |\n|-----------|---------------------------------|-------------------------------------------|\n| Status    | idle, running, charging, …      | off, standby, run, charge, …              |\n| Sector    | Reported by device (1–6)        | Calculated from routine time (4 or 6 sectors, configurable) |\n| Duration  | Brushing session (seconds)      | Brushing time (seconds)                   |\n| Pressure  | low, normal, high               | —                                         |\n| Intensity | —                               | low, medium, high                         |\n| Mode      | Daily Clean, Sensitive, Turbo, …| Clean, White+, Gum Health, Deep Clean+    |\n| Battery   | Battery level (%)               | Battery level (%)                          |\n\n## Community\n\n- [Smartes Badezimmer? So hilft dir ein Shelly Wall Display beim Zähneputzen \u0026 Rasieren!](https://www.youtube.com/watch?v=ROI91x2Swv8) — Video by [@smartmatic](https://github.com/smartmatic) showing the card on a Shelly Wall Display alongside the Philips Shaver integration (German)\n\n## Installation\n\n### HACS (Recommended)\n1. Open **HACS → Frontend → Custom Repositories**\n2. Add the repository: `https://github.com/mtheli/toothbrush-card`\n3. Install **Toothbrush Card**\n4. Refresh your Home Assistant dashboard\n\n### Manual\n1. Download `dist/toothbrush-card.js` from the [latest release](https://github.com/mtheli/toothbrush-card/releases)\n2. Copy it to `/config/www/community/toothbrush-card/`\n3. Add as a Lovelace resource:\n```yaml\nresources:\n  - url: /local/community/toothbrush-card/toothbrush-card.js\n    type: module\n```\n\n## Configuration\n\nThe card is configured via the UI — just add it and select your toothbrush device.\n\n| Option        | Type     | Default | Description                                  |\n|---------------|----------|---------|----------------------------------------------|\n| device_id     | string   | —       | **(required)** Toothbrush device to use      |\n| title         | string   | —       | Custom title (default: manufacturer)         |\n| show_subtitle | boolean  | true    | Show device name as subtitle                 |\n| accent_color  | string   | —       | Header accent color (hex, e.g. `#0085FF`)    |\n| num_sectors   | 4 \\| 6   | auto    | Override sector count (Oral-B: from device; Sonicare: 4 default, set to 6 for Prestige/HX999B) |\n| sector_order  | string[] | —       | Custom sector order (drag \u0026 drop in UI)      |\n\n### YAML Example\n```yaml\ntype: custom:toothbrush-card\ndevice_id: 1234567890abcdef\ntitle: My Toothbrush\nshow_subtitle: true\naccent_color: \"#0085FF\"\n```\n\n## Supported Languages\n\n| Language | Code |\n|----------|------|\n| English    | en   |\n| Deutsch    | de   |\n| Nederlands | nl   |\n\nThe card automatically detects the language configured in your Home Assistant instance. If your language is not yet supported, it falls back to English. Contributions for additional languages are welcome — just add a new JSON file in `src/locales/`.\n\n## Known Issues\n\n- **6-sector brushes (IO Series):** The [oralb_ble integration](https://github.com/Bluetooth-Devices/oralb-ble) only maps sectors 1–4. When a 6-sector brush reaches sectors 5 or 6, the integration incorrectly reports them as sector 4. The card includes a client-side workaround that tracks brushing progress and auto-advances past duplicate sectors, but the root cause needs to be fixed upstream in the oralb_ble parser.\n\n## Development\n\n```bash\ngit clone https://github.com/mtheli/toothbrush-card.git\ncd toothbrush-card\nnpm install\nnpm run build\n```\n\n## Disclaimer\n\nThis is an independent community project and is not affiliated with, endorsed by, or sponsored by Philips or Oral-B. All product names, trademarks, and registered trademarks are property of their respective owners.\n\n## License\n\nMIT License — see [LICENSE](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmtheli%2Ftoothbrush-card","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmtheli%2Ftoothbrush-card","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmtheli%2Ftoothbrush-card/lists"}