Bisher ging die Toniebox in Home Assistant nur über ziemlich große Umwege. Meistens musstest du die Box dafür öffnen, und damit war die Garantie weg. Mit der HACS-Integration HA-Toniebox brauchst du das nicht mehr. Sie holt Tonieboxen, Kreativ-Tonies und Content-Tonies aus der Tonie Cloud nach Home Assistant. Bei der Toniebox 2 kommen Akku, Kopfhörer, Wiedergabe und Sleeptimer in Echtzeit an, und Play, Pause, Kapitelsprung und Lautstärke steuerst du direkt. Ich habe mir die Integration in Version 4.0.4 eingerichtet, ein Dashboard dazu gebaut und ein paar Automationen für den Abend geschrieben. Das Einrichten hat bei mir ungefähr zwei Minuten gedauert. Wichtig vorab: Die Integration ist inoffiziell und stammt nicht von Boxine, dem Hersteller der Toniebox.
Wie HA-Toniebox mit der Tonie Cloud arbeitet
Die Integration verbindet die Tonie Cloud mit Home Assistant. Dafür brauchst du nur die Integration selbst und deine ganz normalen Zugangsdaten für die Tonie Cloud. Das ist gleichzeitig der große Vorteil und der große Nachteil. Lokal läuft hier leider gar nichts, weil die Daten der Toniebox lokal (zumindest Stand jetzt) einfach nicht verfügbar sind. Alles wandert also einmal durch die Cloud und landet erst danach in Home Assistant.
Der Entwickler geht mit der Entstehung wahnsinnig transparent um. Im Repository steht überall, dass die Integration komplett gevibecodet ist, also mit Claude von Anthropic entwickelt und gegen ein echtes Tonie-Konto getestet wurde. Was dabei rausgekommen ist, funktioniert aus meiner Sicht schon ziemlich gut. Beim Einrichten bin ich allerdings auf zwei kleine Fehler gestoßen. Die habe ich auf GitHub als Issue gemeldet und gleich einen Fix als Pull Request vorgeschlagen, dazu weiter unten mehr.
Was du für die Toniebox in Home Assistant brauchst
- Home Assistant 2026.3 oder neuer
- HACS
- ein Tonies-Konto, also E-Mail-Adresse und Passwort wie in der Tonies-App
- eine Toniebox, wobei es den vollen Umfang nur mit der Toniebox 2 gibt (die Tabelle dazu kommt weiter unten)
- einen Kreativ-Tonie für Uploads und Kapitelverwaltung, denn Content-Tonies lassen sich nicht bearbeiten
In allen Beispielen stehen meine Namen: Die Box heißt toniebox, der Kreativ-Tonie kreativ_tonie_rubie und der Haushalt daniel_haushalt. Die tauschst du später einfach gegen deine eigenen aus.
Repository in HACS hinzufügen
HA-Toniebox ist noch nicht im Standardkatalog von HACS, deshalb trägst du das Repository einmal von Hand ein.
- HACS öffnen und oben rechts im Drei-Punkte-Menü Benutzerdefinierte Repositories wählen.
https://github.com/git4sim/HA-Tonieboxeintragen, bei Typ die Option Integration wählen und auf hinzufügen klicken.
Schneller geht es über den My-Link: Repository in HACS öffnen.
Herunterladen und Home Assistant neu starten
Danach taucht die Integration in der Suche auf. In der Vorschau siehst du dasselbe wie auf GitHub, also auch, welche Entitäten, Schalter und Sensoren sie mitbringt.
- In HACS nach Toniebox suchen und den Eintrag öffnen.
- Auf Herunterladen klicken und Version 4.0.4 im Dialog mit Herunterladen bestätigen.
- Home Assistant neu starten, entweder über die Reparatur unter Einstellungen oder über Einstellungen → Werkzeuge → YAML → Neu starten.
Das kennst du wahrscheinlich schon von anderen HACS-Integrationen.
Toniebox-Integration mit dem Tonie-Konto verbinden
Nach dem Neustart fügst du die Integration ganz normal hinzu.
- Einstellungen → Geräte & Dienste → Integration hinzufügen öffnen und nach Toniebox suchen.
- Im Dialog Toniebox Cloud Anmeldung die E-Mail-Adresse und das Passwort eintragen.
Auch hier gibt es einen Direktlink: Toniebox-Integration einrichten. Das sind dieselben Zugangsdaten, mit denen du sonst deine Kreativ-Tonies bespielst. Meldet der Dialog „Ungültige E-Mail-Adresse oder falsches Passwort.“, dann teste die Daten einmal direkt auf my.tonies.com.
Danach war es das eigentlich schon. Pro Tonie legt die Integration ein eigenes Gerät an, dazu kommen Einträge für die Box, die Kopfhörer und den Haushalt:
| Gerät | Inhalt |
|---|---|
| Haushalt | Konto, Zähler für Tonies, Tonieboxen, Kinder, Mitglieder, Benachrichtigungen, Einladungen |
| je Toniebox | Mediaplayer, Sensoren, Schalter, Einstellungen |
| Name der Box plus Headphones (nur Toniebox 2) | Kopfhörer |
| je Kreativ-Tonie | Kapitelliste, Gesamtdauer, Sortierknöpfe |
| je Content-Tonie | Kapitelzahl, Gesamtdauer, Gerade aktiv, Im Haushalt sperren |
Im Gerät der Toniebox findest du alles, was du sonst über die Tonies-App oder die Weboberfläche einstellst. Firmware und Seriennummer stehen da, du kannst den Altersmodus, die Sprache der Box, die Helligkeit des Rings und das Klopfen zum Vor- und Zurückspulen einstellen. Maximale Lautstärke für Box und Kopfhörer und die Einstellungen für die Schlafenszeit sind auch dabei.
Toniebox 2 oder erste Generation
Die Integration funktioniert auch mit der ersten Generation, allerdings mit deutlich weniger Funktionen. Welche Box du hast, zeigt der Sensor Generation: tng steht für die Toniebox 2, classic oder rosered für ältere Modelle.
| Funktion | Toniebox 2 | erste Generation |
|---|---|---|
| Aktuelle Figur, Firmware, Online | ja | ja |
| Max. Lautstärke Box, Max. Kopfhörerlautstärke | ja | ja |
| Play, Pause, Kapitel vor und zurück, Kapitel auswählen | ja | nein |
| Lautstärke direkt setzen, Box schlafen legen | ja | nein |
| Aktuelle Batterie, Wird geladen | ja | nein |
| Kopfhörer: Verbunden, Kopfhörer-Batterie | ja | nein |
| Aktion Sleeptimer, Sensor Schlaftimer aktiv | ja | nein |
| Beim Wechsel mischen (Kreativ-Tonie) | ja | nein |
| Helligkeit Ring und Schlafenszeit-Einstellungen | ja | nein |
| LED-Helligkeit, Klopf-Richtung, Kippen & Klopfen | nein | ja |
Bei der Erreichbarkeit gibt es auch einen Unterschied. Der Binärsensor Online reagiert bei der Toniebox 2 sofort. Die erste Generation gilt als online, wenn sie sich in den letzten 30 Minuten gemeldet hat. Der Sensor Online-Status zeigt bei der Toniebox 2 nur unsupported, den kannst du also ignorieren.
Die wichtigsten Entitäten der Toniebox
Die Integration bringt wahnsinnig viele Entitäten mit. Diese hier nutze ich im Dashboard und in den Automationen:
| Entität | Was sie zeigt |
|---|---|
media_player.toniebox | Figur, Kapitel, Fortschritt, Steuerung |
sensor.toniebox_aktuelle_figur | Name der aufgelegten Figur |
sensor.toniebox_aktuelle_figur_id | ID der aufgelegten Figur, gut als Auslöser |
sensor.toniebox_aktuelle_batterie | Akkustand in Prozent |
binary_sensor.toniebox_wird_geladen | an, solange die Box lädt |
binary_sensor.toniebox_online | Erreichbarkeit der Box |
binary_sensor.toniebox_schlaftimer_aktiv | läuft ein Sleeptimer, mit Attribut sleep_until |
binary_sensor.toniebox_headphones_verbunden | Kopfhörer verbunden |
sensor.toniebox_headphones_kopfhorer_batterie | Akkustand der Kopfhörer |
number.toniebox_max_lautstarke_box | Lautstärkegrenze der Box, 25 bis 100 Prozent in 25er-Schritten |
In den IDs fallen die Umlaute weg, deshalb heißt es lautstarke und kopfhorer. Läuft dein Home Assistant auf Englisch, entstehen englische IDs wie sensor.toniebox_current_battery. Deine echten IDs findest du unter Einstellungen → Geräte & Dienste → Toniebox beim jeweiligen Gerät.
Ein paar Entitäten sind ab Werk deaktiviert: Zuletzt gesehen, Features, Hinzugefügt am, Zeitzone, Setup-WLAN (SSID), Transkodierung, Freie Zeit und die Knöpfe Alle Kapitel löschen und Auf Werkseinstellungen zurücksetzen. Die beiden Knöpfe würde ich auf jeden Fall deaktiviert lassen.
Wiedergabe und Sleeptimer steuern
Bei der Toniebox 2 steuert media_player.toniebox Play, Pause, Kapitel, Lautstärke und das Ausschalten, wobei die Box dabei einschläft. Über Medien durchsuchen springst du direkt zu einem Kapitel der aufgelegten Figur. Die Reaktion ist tatsächlich ziemlich schnell. Ich drücke im Dashboard auf Pause und die Box hört praktisch sofort auf, die paar Millisekunden Latenz kann man komplett ignorieren.
Den Sleeptimer startest du über eine Aktion. Dafür gehst du auf Einstellungen → Werkzeuge → Aktionen, wechselst in den YAML-Modus, fügst den Block ein und klickst auf Aktion ausführen:
action: toniebox.sleeptimer
data:
entity_id: media_player.toniebox
minutes: 30Die Box schläft dann nach 30 Minuten ein, mit minutes: 0 brichst du den Timer wieder ab. Eine Eigenheit gibt es bei allen Aktionen der Integration: entity_id gehört in den data-Block. Unter target greift sie nicht.
Kreativ-Tonies sortieren, mischen und bespielen
Jeder Kreativ-Tonie hat eigene Knöpfe: Nach Titel sortieren, Nach Dateiname sortieren, Nach Datum sortieren und Kapitel mischen. Dazu kommen die Schalter Beim Wechsel mischen, Live-Funktion und Nur in diesem Haushalt abspielen.
Sortieren geht auch per Aktion. Für sort_by gibt es title, filename, date und random:
action: toniebox.sort_chapters
data:
entity_id: media_player.kreativ_tonie_rubie
sort_by: titleEine Audiodatei lädst du so hoch. Die Datei muss vorher in den Medien liegen, wie das geht, steht im nächsten Abschnitt:
action: toniebox.upload_audio
data:
entity_id: media_player.kreativ_tonie_rubie
file_path: /media/gute-nacht-geschichte.mp3
title: Gute-Nacht-GeschichteNach einem Upload oder einer Umsortierung rechnet die Tonie Cloud den Tonie um. Das dauert meist zwischen einer Sekunde und einer Minute, und solange steht Transkodierung aktiv auf an.
Beim Wechsel mischen finde ich ein bisschen verspielt, aber ganz nett. Der Schalter mischt die Kapitel, sobald auf einer Toniebox 2 ein anderer Tonie den Kreativ-Tonie ersetzt. Abnehmen allein löst nichts aus, und Tonies mit nur einem Kapitel bleiben unverändert. Diesen Schalter gibt es nur in Home Assistant, die Tonies-App hat ihn nicht. Ein Kreativ-Tonie fasst übrigens 90 Minuten und bis zu 250 Kapitel.
Kapitel direkt in Home Assistant verwalten
Damit du einzelne Kapitel im Dashboard auswählen, verschieben und löschen kannst, braucht es ein paar Helfer. Diese Teile gehören dazu:
| Teil | Aufgabe |
|---|---|
input_select.rubie_chapter | Dropdown Kapitel wählen |
| Automation „Toniebox · Rubie chapter list sync“ | aktualisiert die Liste bei jeder Kapiteländerung in der Cloud sowie beim Start |
script.rubie_upload | Audiodatei hochladen |
script.rubie_chapter_up, script.rubie_chapter_down | Kapitel verschieben |
script.rubie_chapter_remove | Kapitel löschen |
Vor jedem Eintrag im Dropdown steht eine Nummer, zum Beispiel „2 · Der Mond“. Damit bleiben gleiche Titel unterscheidbar, und die Skripte holen sich über diese Nummer die Kapitel-ID.
Am einfachsten richtest du das als Package ein. Dafür ergänzt du in der configuration.yaml diesen Eintrag. Gibt es dort schon homeassistant:, kommt nur die Zeile packages: dazu:
homeassistant:
packages: !include_dir_named packagesDen Block unten speicherst du als packages/toniebox_chapter_management.yaml. Ersetz media_player.kreativ_tonie_rubie durch deinen Tonie und starte dann über Einstellungen → Werkzeuge → YAML → Neu starten neu.
1# Toniebox: chapter management for one Creative Tonie (package for configuration.yaml packages: or UI equivalents).
2# Replace media_player.kreativ_tonie_rubie and the rubie_ prefix with your Creative Tonie.
3# Upload reads files from /media (Media > My media). Files outside /media are refused by the script.
4input_select:
5 rubie_chapter:
6 name: Kapitel wählen
7 icon: mdi:format-list-numbered
8 options:
9 - (keine Kapitel)
10automation:
11- id: rubie_chapter_list_sync
12 alias: Toniebox · Rubie chapter list sync
13 description: Keeps the chapter dropdown in sync with the Creative Tonie.
14 mode: queued
15 triggers:
16 - trigger: state
17 entity_id: media_player.kreativ_tonie_rubie
18 attribute: chapters
19 - trigger: homeassistant
20 event: start
21 actions:
22 - action: input_select.set_options
23 target:
24 entity_id: input_select.rubie_chapter
25 data:
26 options: '{% set ch = state_attr(''media_player.kreativ_tonie_rubie'', ''chapters'') or [] %}{% set ns = namespace(o=[]) %}{% for c in ch %}{% set ns.o = ns.o + [loop.index ~ '' · '' ~ c.title] %}{%
27 endfor %}{{ ns.o if ns.o else [''(keine Kapitel)''] }}'
28script:
29 rubie_upload:
30 alias: 'Rubie: Audio hochladen'
31 icon: mdi:upload
32 mode: single
33 description: Datei aus Medien › My media wählen oder dort hochladen. Die Tonie-Cloud wandelt sie danach um.
34 fields:
35 file:
36 name: Audiodatei
37 required: true
38 selector:
39 media:
40 accept:
41 - audio/*
42 title:
43 name: Kapiteltitel (optional)
44 required: false
45 selector:
46 text: {}
47 sequence:
48 - variables:
49 path: '{% set id = file.media_content_id if file is mapping else file %}{{ ''/media/'' ~ id.split(''media_source/local/'')[-1] | replace(''%20'', '' '') }}'
50 - condition: template
51 value_template: '{{ path.startswith(''/media/'') and ''..'' not in path }}'
52 - action: toniebox.upload_audio
53 data:
54 entity_id: media_player.kreativ_tonie_rubie
55 file_path: '{{ path }}'
56 title: '{{ title | default('''', true) if title is defined else '''' }}'
57 rubie_chapter_up:
58 alias: 'Rubie: Kapitel nach oben'
59 icon: mdi:arrow-up
60 mode: single
61 sequence:
62 - variables:
63 chapter_id: '{% set i = (states(''input_select.rubie_chapter'').split('' · '')[0] | int(0)) - 1 %}{% set ch = state_attr(''media_player.kreativ_tonie_rubie'', ''chapters'') or [] %}{{ ch[i].id if
64 0 <= i < ch | count else '''' }}'
65 pos: '{{ states(''input_select.rubie_chapter'').split('' · '')[0] | int(0) }}'
66 - condition: template
67 value_template: '{{ chapter_id != '''' }}'
68 - action: toniebox.move_chapter
69 data:
70 entity_id: media_player.kreativ_tonie_rubie
71 chapter_id: '{{ chapter_id }}'
72 direction: up
73 - wait_for_trigger:
74 - trigger: state
75 entity_id: media_player.kreativ_tonie_rubie
76 attribute: chapters
77 timeout: 30
78 continue_on_timeout: true
79 - delay: 1
80 - action: input_select.select_option
81 target:
82 entity_id: input_select.rubie_chapter
83 data:
84 option: '{% set p = pos + (-1 if ''up'' == ''up'' else 1) %}{% set o = state_attr(''input_select.rubie_chapter'', ''options'') %}{{ (o | select(''match'', p ~ '' · '') | list + [o[0]])[0] }}'
85 rubie_chapter_down:
86 alias: 'Rubie: Kapitel nach unten'
87 icon: mdi:arrow-down
88 mode: single
89 sequence:
90 - variables:
91 chapter_id: '{% set i = (states(''input_select.rubie_chapter'').split('' · '')[0] | int(0)) - 1 %}{% set ch = state_attr(''media_player.kreativ_tonie_rubie'', ''chapters'') or [] %}{{ ch[i].id if
92 0 <= i < ch | count else '''' }}'
93 pos: '{{ states(''input_select.rubie_chapter'').split('' · '')[0] | int(0) }}'
94 - condition: template
95 value_template: '{{ chapter_id != '''' }}'
96 - action: toniebox.move_chapter
97 data:
98 entity_id: media_player.kreativ_tonie_rubie
99 chapter_id: '{{ chapter_id }}'
100 direction: down
101 - wait_for_trigger:
102 - trigger: state
103 entity_id: media_player.kreativ_tonie_rubie
104 attribute: chapters
105 timeout: 30
106 continue_on_timeout: true
107 - delay: 1
108 - action: input_select.select_option
109 target:
110 entity_id: input_select.rubie_chapter
111 data:
112 option: '{% set p = pos + (-1 if ''down'' == ''up'' else 1) %}{% set o = state_attr(''input_select.rubie_chapter'', ''options'') %}{{ (o | select(''match'', p ~ '' · '') | list + [o[0]])[0] }}'
113 rubie_chapter_remove:
114 alias: 'Rubie: Kapitel löschen'
115 icon: mdi:delete-outline
116 mode: single
117 sequence:
118 - variables:
119 chapter_id: '{% set i = (states(''input_select.rubie_chapter'').split('' · '')[0] | int(0)) - 1 %}{% set ch = state_attr(''media_player.kreativ_tonie_rubie'', ''chapters'') or [] %}{{ ch[i].id if
120 0 <= i < ch | count else '''' }}'
121 - condition: template
122 value_template: '{{ chapter_id != '''' }}'
123 - action: toniebox.remove_chapter
124 data:
125 entity_id: media_player.kreativ_tonie_rubie
126 chapter_id: '{{ chapter_id }}'Ohne Package geht es auch, das ist nur ein bisschen mehr Klickarbeit. Das Dropdown legst du unter Einstellungen → Geräte & Dienste → Helfer → Helfer erstellen → Dropdown-Menü an. Die Skripte kommen unter Einstellungen → Automationen & Szenen → Skripte → Skript erstellen → Neues Skript erstellen dazu, die Automation legst du wie bei den Automationen weiter unten an, jeweils über In YAML bearbeiten. Die Entitäts-IDs müssen dabei genau so heißen wie in der Tabelle oben.
Upload geht in v4.0.4 aktuell nicht (Stand 06.10.2026). Die Integration schickt die Datei an die falsche Stelle, deshalb legt die Tonie Cloud kein Kapitel an. Ich habe den Fix vorgeschlagen, und zwar in Issue #43 und PR #44. Mit dem Patch funktioniert der Upload bei mir. Bis er in einer neuen Version steckt, lädst du Kapitel besser über die Tonies-App oder my.tonies.com hoch. Verschieben, Sortieren und Löschen klappen in Home Assistant schon jetzt.
So lädst du ein Kapitel hoch, sobald der Fix drin ist:
- In Medien den Ordner My media öffnen (der heißt auch auf Deutsch so).
- Über Verwalten und Medien hinzufügen die Audiodatei hochladen. Unterstützt werden mp3, ogg, wav, flac, m4a, aac und opus.
- Im Dashboard auf Audio hochladen tippen, die Audiodatei wählen, bei Bedarf Kapiteltitel (optional) ausfüllen und das Skript starten.
Bis die Cloud die Datei umgewandelt hat, steht in der Kapiteltabelle „(wird umgewandelt)“. Das Skript nimmt nur Pfade unter /media an, weil toniebox.upload_audio selbst keinen Pfad prüft.
Das Toniebox-Dashboard
Das Dashboard nutzt nur eingebaute Karten, aus HACS brauchst du dafür nichts. Für den Bereich Kapitel verwalten müssen allerdings die Helfer aus dem vorherigen Abschnitt eingerichtet sein.
| Bereich | Inhalt |
|---|---|
| Jetzt läuft | Mediaplayer, aufgelegte Figur, Kopfhörer |
| Status | Akku, Lädt, Online, Akku der Kopfhörer, Zuletzt online. Offline erscheint ein Hinweis, bei schlafender Box steht Letzter Akkustand statt der Akkuanzeige |
| Abends | Lautstärkeregler für Box und Kopfhörer, Schlaftimer, Sleeptimer 30 Min, Timer aus |
| Kreativ-Tonie | Bild, Kapiteltabelle mit belegten und freien Minuten, Kapitel verwalten (Audio hochladen, Kapitel wählen, Nach oben, Nach unten, Löschen), Reihenfolge der Kapitel (nach Titel oder Datum sortieren, mischen, Bei Tonie-Wechsel neu mischen) |
| Haushalt | Hörfiguren, Kreativ-Tonies, Hinweise, Einladungen |
Sleeptimer 30 Min, Löschen und die Knöpfe für die Reihenfolge fragen vorher noch mal nach. Bei Tonie-Wechsel neu mischen ist einfach der Schalter Beim Wechsel mischen von oben. Die freien Minuten rechnet das Dashboard selbst aus (90 minus die Summe der Kapitellängen), weil der Sensor Freie Zeit in 4.0.4 leer bleibt.
- Einstellungen → Dashboards → Dashboard hinzufügen öffnen und Neues Dashboard von Grund auf wählen.
- Als Titel
Tonieboxund als Seitenleistensymbolmdi:cube-outlineeintragen, dann Erstellen. - Das Dashboard öffnen, auf den Stift Dashboard bearbeiten klicken und über Dashboard-Menü öffnen den Raw-Konfigurationseditor starten.
- Den Inhalt durch den Block unten ersetzen, Speichern, den Editor schließen und auf Fertig klicken.
Heißt deine Box anders, ersetzt du toniebox durch deinen Präfix. In der Aktion toniebox.sleeptimer bleibt der Name allerdings stehen. Dazu kommen kreativ_tonie_rubie und daniel_haushalt, die du gegen deine Namen tauschst.
1# Toniebox dashboard: core cards only, no HACS cards required.
2# Replace "toniebox" with your box entity prefix if you kept another name, and "kreativ_tonie_rubie" / "rubie_" with your Creative Tonie.
3# The "Kapitel verwalten" block needs input_select.rubie_chapter, the sync automation and the four rubie_* scripts (see guide).
4title: Toniebox
5views:
6 - title: Toniebox
7 path: toniebox
8 icon: mdi:cube-outline
9 type: sections
10 max_columns: 4
11 sections:
12 - type: grid
13 cards:
14 - type: heading
15 heading: Jetzt läuft
16 icon: mdi:play-circle-outline
17 - type: media-control
18 entity: media_player.toniebox
19 grid_options:
20 columns: full
21 - type: tile
22 entity: sensor.toniebox_aktuelle_figur
23 name: Figur auf der Box
24 icon: mdi:account-music
25 grid_options:
26 columns: full
27 - type: tile
28 entity: binary_sensor.toniebox_headphones_verbunden
29 name: Kopfhörer
30 icon: mdi:headphones
31 grid_options:
32 columns: full
33
34 - type: grid
35 cards:
36 - type: heading
37 heading: Status
38 icon: mdi:battery-heart-variant
39 - type: markdown
40 content: Die Box ist gerade offline. Akku und Figur zeigt sie wieder, sobald sie aufwacht.
41 grid_options:
42 columns: full
43 visibility:
44 - condition: state
45 entity: binary_sensor.toniebox_online
46 state: "off"
47 - type: gauge
48 entity: sensor.toniebox_aktuelle_batterie
49 name: Akku
50 min: 0
51 max: 100
52 needle: true
53 severity:
54 red: 0
55 yellow: 20
56 green: 40
57 grid_options:
58 columns: full
59 visibility:
60 - condition: state
61 entity: sensor.toniebox_aktuelle_batterie
62 state_not: unknown
63 - condition: state
64 entity: sensor.toniebox_aktuelle_batterie
65 state_not: unavailable
66 - type: tile
67 entity: sensor.toniebox_letzte_batterie
68 name: Letzter Akkustand
69 icon: mdi:battery-clock-outline
70 grid_options:
71 columns: full
72 visibility:
73 - condition: or
74 conditions:
75 - condition: state
76 entity: sensor.toniebox_aktuelle_batterie
77 state: unknown
78 - condition: state
79 entity: sensor.toniebox_aktuelle_batterie
80 state: unavailable
81 - type: tile
82 entity: binary_sensor.toniebox_wird_geladen
83 name: Lädt
84 grid_options:
85 columns: full
86 - type: tile
87 entity: binary_sensor.toniebox_online
88 name: Online
89 - type: tile
90 entity: sensor.toniebox_headphones_kopfhorer_batterie
91 name: Akku Kopfhörer
92 - type: tile
93 entity: sensor.toniebox_zuletzt_online
94 name: Zuletzt online
95 grid_options:
96 columns: full
97
98 - type: grid
99 cards:
100 - type: heading
101 heading: Abends
102 icon: mdi:weather-night
103 - type: tile
104 entity: number.toniebox_max_lautstarke_box
105 name: Max. Lautstärke Box
106 grid_options:
107 columns: full
108 features:
109 - type: numeric-input
110 style: slider
111 - type: tile
112 entity: number.toniebox_max_kopfhorerlautstarke
113 name: Max. Lautstärke Kopfhörer
114 grid_options:
115 columns: full
116 features:
117 - type: numeric-input
118 style: slider
119 - type: tile
120 entity: binary_sensor.toniebox_schlaftimer_aktiv
121 name: Schlaftimer
122 icon: mdi:timer-sand
123 grid_options:
124 columns: full
125 - type: button
126 name: Sleeptimer 30 Min
127 icon: mdi:sleep
128 tap_action:
129 action: perform-action
130 perform_action: toniebox.sleeptimer
131 data:
132 entity_id: media_player.toniebox
133 minutes: 30
134 confirmation:
135 text: Sleeptimer auf 30 Minuten stellen?
136 - type: button
137 name: Timer aus
138 icon: mdi:timer-off-outline
139 tap_action:
140 action: perform-action
141 perform_action: toniebox.sleeptimer
142 data:
143 entity_id: media_player.toniebox
144 minutes: 0
145
146 - type: grid
147 cards:
148 - type: heading
149 heading: Kreativ-Tonie
150 icon: mdi:microphone-variant
151 - type: tile
152 entity: media_player.kreativ_tonie_rubie
153 name: Rubie
154 show_entity_picture: true
155 hide_state: true
156 grid_options:
157 columns: full
158 - type: markdown
159 grid_options:
160 columns: full
161 content: |
162 {%- set ch = state_attr('media_player.kreativ_tonie_rubie', 'chapters') or [] -%}
163 {%- if ch | count == 0 -%}
164 Noch keine Kapitel in der Tonie-Cloud. Lade unten eine Audiodatei hoch oder nutze die Tonies-App oder my.tonies.com.
165 {%- else -%}
166 | Nr. | Kapitel | Dauer |
167 |:--|:--|--:|
168 {%- for c in ch %}
169 | {{ loop.index }} | {{ c.title }}{{ ' (wird umgewandelt)' if c.transcoding else '' }} | {{ (c.duration_seconds // 60) | int }}:{{ '%02d' % ((c.duration_seconds % 60) | int) }} |
170 {%- endfor %}
171
172 {% set used = (ch | sum(attribute='duration_seconds')) / 60 -%}
173 **{{ ch | count }} Kapitel** · {{ used | round(0, 'ceil') | int }} von 90 Minuten belegt · **{{ (90 - used) | round(0, 'floor') | int }} Minuten frei**
174 {%- endif -%}
175 - type: heading
176 heading: Kapitel verwalten
177 heading_style: subtitle
178 - type: tile
179 entity: script.rubie_upload
180 name: Audio hochladen
181 icon: mdi:upload
182 hide_state: true
183 grid_options:
184 columns: full
185 tap_action:
186 action: more-info
187 - type: tile
188 entity: input_select.rubie_chapter
189 name: Kapitel wählen
190 hide_state: true
191 grid_options:
192 columns: full
193 features:
194 - type: select-options
195 - type: tile
196 entity: script.rubie_chapter_up
197 name: Nach oben
198 icon: mdi:arrow-up
199 hide_state: true
200 vertical: true
201 grid_options:
202 columns: 4
203 tap_action:
204 action: perform-action
205 perform_action: script.rubie_chapter_up
206 - type: tile
207 entity: script.rubie_chapter_down
208 name: Nach unten
209 icon: mdi:arrow-down
210 hide_state: true
211 vertical: true
212 grid_options:
213 columns: 4
214 tap_action:
215 action: perform-action
216 perform_action: script.rubie_chapter_down
217 - type: tile
218 entity: script.rubie_chapter_remove
219 name: Löschen
220 icon: mdi:delete-outline
221 hide_state: true
222 vertical: true
223 grid_options:
224 columns: 4
225 tap_action:
226 action: perform-action
227 perform_action: script.rubie_chapter_remove
228 confirmation:
229 text: Das gewählte Kapitel endgültig von Rubie löschen?
230 - type: heading
231 heading: Reihenfolge der Kapitel
232 heading_style: subtitle
233 - type: tile
234 entity: button.kreativ_tonie_rubie_nach_titel_sortieren
235 name: Nach Titel sortieren (A bis Z)
236 icon: mdi:sort-alphabetical-ascending
237 hide_state: true
238 grid_options:
239 columns: full
240 tap_action:
241 action: perform-action
242 perform_action: button.press
243 target:
244 entity_id: button.kreativ_tonie_rubie_nach_titel_sortieren
245 confirmation:
246 text: Kapitel auf Rubie nach Titel sortieren?
247 - type: tile
248 entity: button.kreativ_tonie_rubie_nach_datum_sortieren
249 name: Nach Datum sortieren
250 icon: mdi:sort-calendar-ascending
251 hide_state: true
252 grid_options:
253 columns: full
254 tap_action:
255 action: perform-action
256 perform_action: button.press
257 target:
258 entity_id: button.kreativ_tonie_rubie_nach_datum_sortieren
259 confirmation:
260 text: Kapitel auf Rubie nach Datum sortieren?
261 - type: tile
262 entity: button.kreativ_tonie_rubie_kapitel_mischen
263 name: Einmal zufällig mischen
264 icon: mdi:shuffle-variant
265 hide_state: true
266 grid_options:
267 columns: full
268 tap_action:
269 action: perform-action
270 perform_action: button.press
271 target:
272 entity_id: button.kreativ_tonie_rubie_kapitel_mischen
273 confirmation:
274 text: Kapitel auf Rubie jetzt zufällig mischen?
275 - type: tile
276 entity: switch.kreativ_tonie_rubie_beim_wechsel_mischen
277 name: Bei Tonie-Wechsel neu mischen
278 icon: mdi:shuffle
279 grid_options:
280 columns: full
281 - type: grid
282 cards:
283 - type: heading
284 heading: Haushalt
285 icon: mdi:home-heart
286 - type: tile
287 entity: sensor.daniel_haushalt_content_tonies
288 name: Hörfiguren
289 icon: mdi:account-group
290 - type: tile
291 entity: sensor.daniel_haushalt_kreativ_tonies
292 name: Kreativ-Tonies
293 icon: mdi:microphone-variant
294 - type: tile
295 entity: sensor.daniel_haushalt_benachrichtigungen
296 name: Hinweise
297 icon: mdi:bell-outline
298 - type: tile
299 entity: sensor.daniel_haushalt_offene_einladungen
300 name: Einladungen
301 icon: mdi:email-outlineAutomationen für Akku, Lautstärke und Schlafenszeit
Spannend wird die Toniebox in Home Assistant natürlich erst mit Automationen. Du legst sie unter Einstellungen → Automationen → Automation erstellen → Neue Automation erstellen an, wählst im Menü In YAML bearbeiten und fügst den Block ein. notify.mobile_app_handy ersetzt du durch deinen eigenen Benachrichtigungsdienst, die übrigen Namen wie beim Dashboard.
Benachrichtigung bei niedrigem Akku
Die Automation meldet sich, wenn der Akku unter 20 Prozent fällt und die Box gerade nicht lädt.
1alias: Toniebox Akku niedrig
2description: Meldet, wenn der Akku der Toniebox unter 20 Prozent fällt.
3triggers:
4 - trigger: numeric_state
5 entity_id: sensor.toniebox_aktuelle_batterie
6 below: 20
7conditions:
8 - condition: state
9 entity_id: binary_sensor.toniebox_wird_geladen
10 state: "off"
11actions:
12 - action: notify.mobile_app_handy
13 data:
14 title: Toniebox
15 message: >-
16 Akku bei {{ states('sensor.toniebox_aktuelle_batterie') }} Prozent.
17 Ab auf die Ladestation.
18mode: singleLautstärke abends begrenzen
Um 19 Uhr sinkt die Lautstärkegrenze auf 50 Prozent, um 7 Uhr geht sie wieder auf 100.
1alias: Toniebox Lautstärke abends begrenzen
2description: Abends Lautstärkegrenze 50 Prozent, morgens wieder 100.
3triggers:
4 - trigger: time
5 at: "19:00:00"
6 id: evening
7 - trigger: time
8 at: "07:00:00"
9 id: morning
10actions:
11 - choose:
12 - conditions:
13 - condition: trigger
14 id: evening
15 sequence:
16 - action: number.set_value
17 target:
18 entity_id: number.toniebox_max_lautstarke_box
19 data:
20 value: 50
21 default:
22 - action: number.set_value
23 target:
24 entity_id: number.toniebox_max_lautstarke_box
25 data:
26 value: 100
27mode: singleSleeptimer am Abend automatisch
Ab 18:30 Uhr startet ein Timer von 30 Minuten, sobald die Box spielt. Läuft schon ein Timer, passiert nichts.
1alias: Toniebox Sleeptimer am Abend
2description: Ab 18:30 Uhr schläft die Box 30 Minuten nach Wiedergabestart ein.
3triggers:
4 - trigger: state
5 entity_id: media_player.toniebox
6 to: playing
7conditions:
8 - condition: time
9 after: "18:30:00"
10 - condition: state
11 entity_id: binary_sensor.toniebox_schlaftimer_aktiv
12 state: "off"
13actions:
14 - action: toniebox.sleeptimer
15 data:
16 entity_id: media_player.toniebox
17 minutes: 30
18mode: singleKopfhörer erkannt
Sobald Kopfhörer verbunden sind, kommt eine Nachricht mit ihrem Akkustand.
1alias: Toniebox Kopfhörer verbunden
2description: Meldet verbundene Kopfhörer samt Akkustand.
3triggers:
4 - trigger: state
5 entity_id: binary_sensor.toniebox_headphones_verbunden
6 from: "off"
7 to: "on"
8actions:
9 - action: notify.mobile_app_handy
10 data:
11 title: Toniebox
12 message: >-
13 Kopfhörer verbunden, Akku bei
14 {{ states('sensor.toniebox_headphones_kopfhorer_batterie') }} Prozent.
15mode: singleFeste Schlafenszeit
Um 20:30 Uhr legt Home Assistant die Box schlafen, vorausgesetzt sie ist online.
1alias: Toniebox Schlafenszeit
2description: Legt die Toniebox um 20:30 Uhr schlafen.
3triggers:
4 - trigger: time
5 at: "20:30:00"
6conditions:
7 - condition: state
8 entity_id: binary_sensor.toniebox_online
9 state: "on"
10actions:
11 - action: media_player.turn_off
12 target:
13 entity_id: media_player.toniebox
14mode: singleHörstatistiken im Zeitarchiv
Wer Statistiken mag, kann sich die Daten der Toniebox auch aufzeichnen. Ich habe mir dafür im Zeitarchiv ein eigenes Toniebox-Dashboard angelegt. Dort laufen die Hörminuten insgesamt, die Hörsessions, Figurenwechsel, gestartete Kapitel, Abendminuten und die Minuten über Kopfhörer auf, jeweils für heute und für die Woche. Dazu kommen die Hörzeit pro Figur, die Hörminuten pro Tag und die Tageszeiten, zu denen gehört wird.
Sicherheit und Grenzen der Integration
Die Integration spricht nur mit Servern von Tonies, und zwar login.tonies.com, api.prod.tcs.toys, ici.tonie.cloud und cdn.tonies.de. Sie prüft TLS-Zertifikate, protokolliert weder Passwort noch Token und lädt keinen Code nach. Trotzdem gibt es ein paar Punkte, die du kennen solltest.
Die Schnittstelle ist inoffiziell. Tonies kann sie jederzeit ändern oder sperren, dann fallen die Entitäten aus.
Das Passwort liegt im Klartext in .storage/core.config_entries und damit auch in jedem Backup. Nimm für das Tonies-Konto deshalb ein eigenes Passwort, das du sonst nirgends verwendest.
toniebox.clear_chapters, toniebox.remove_tune und toniebox.dismiss_all_notifications löschen ohne Rückfrage und wirken sofort. Diese Aktionen würde ich auf keinen Fall an Sprachassistenten freigeben.
toniebox.upload_audio prüft keine Pfade und schickt jede Datei in die Cloud, die Home Assistant lesen kann. Lade nur eigene Dateien aus /media hoch. Große Dateien halten Home Assistant kurz an.
sensor.toniebox_generation trägt die MAC-Adresse der Box als Attribut mac_address. Wenn du Screenshots teilst, schwärz sie vorher.
Der Sensor Freie Zeit zeigt in 4.0.4 immer „Unbekannt“, weil die Integration die Restzeit aus der Cloud nicht übernimmt. Auch dafür habe ich einen Fix vorgeschlagen: Issue #45 und PR #46.
Tipps bei Problemen mit der Toniebox
| Problem | Was hilft |
|---|---|
| Sleeptimer ohne sichtbare Wirkung | Das ist normal, die Box schläft erst nach Ablauf ein. Kontrollieren kannst du das über binary_sensor.toniebox_schlaftimer_aktiv (Attribut sleep_until). Die erste Generation ignoriert die Aktion. |
| Akku zeigt „Unbekannt“ | Die Box ist offline oder schläft. Den letzten Wert hält sensor.toniebox_letzte_batterie. |
| Steuerung fehlt am Mediaplayer | Zeigt Generation nicht tng, gibt es keine Wiedergabesteuerung. |
| Einstellung kommt nicht an | Einstellungen übertragen zeigt, ob die Box sie übernommen hat. Eine schlafende Box übernimmt sie beim nächsten Einschalten. |
| Neuer Kreativ-Tonie fehlt oder zeigt 0 Kapitel | Integration neu laden: Einstellungen → Geräte & Dienste → Toniebox, Drei-Punkte-Menü des Eintrags, Neu laden. |
| Werte veralten | Die Cloud wird alle fünf Minuten abgefragt, bei der ersten Generation sind die Werte also bis zu fünf Minuten alt. Alle aktualisieren am Haushalt holt sie sofort. |
| Box über Home Assistant einschalten | Geht nicht, eine schlafende Box lässt sich über die Cloud nicht wecken. Sie wacht per Druck aufs Ohr oder durch Auflegen eines Tonies auf. Schlafen legen geht bei der Toniebox 2. |
| Figur doppelt | Die zweite Figur bekommt _2 an ihre Entitäts-IDs. |
| Anmeldung abgelaufen | Home Assistant fragt im Dialog Erneute Anmeldung bei Toniebox neu nach. |
| Fehlersuche | Im Menü der Integration Debug-Protokoll aktivieren, das Verhalten wiederholen und unter Einstellungen → System → Protokolle nachsehen. |
Weiterführende Inhalte
- HACS in Home Assistant installieren (2026): falls HACS bei dir noch fehlt, bevor du HA-Toniebox hinzufügst
- Home Assistant Notifications: Push, Critical Alerts & Aktionen einrichten: den Benachrichtigungsdienst für die Akku-Warnung einrichten
- Home Assistant Automation mit Trigger, Choose und Zeitlogik: Schlafenszeit und Lautstärke nach Wochentag in einer Automation
- Die besten HACS-Erweiterungen für Home Assistant: was ich sonst noch über HACS nutze
Hast du eine Toniebox zu Hause? Hattest du sie vorher schon auf einem etwas hackigen Weg in Home Assistant eingebunden, oder ist dieser Weg über die Cloud für dich jetzt interessant?
