DIY-Toniebox mit Music Assistant: NFC-Karten, Spotify und Alexa

von Patrick · · 6 Min. Lesezeit · DIY

Dieser Artikel enthält Affiliate-Links. Kaufst du darüber, bekomme ich eine kleine Provision – für dich ändert sich am Preis nichts. Mehr dazu


Die Idee hinter der Toniebox finde ich großartig: Ein Kind stellt eine Figur auf, und die passende Geschichte oder Musik läuft. Kein Bildschirm, keine App, keine Werbung. Was mich weniger begeistert, ist, dass man für jede neue Figur wieder Geld ausgibt und an das Angebot eines Herstellers gebunden ist. Gleichzeitig haben wir ohnehin ein Spotify-Premium-Abo und stehen im Haus Echo-Lautsprecher herum.

Also dachte ich mir: Das muss doch auch mit Home Assistant gehen. Karte mit NFC-Tag auflegen, Home Assistant erkennt sie, und auf dem Lautsprecher startet die Lieblingsplaylist oder das Kinderradio. Spoiler: Es geht. Aber der Weg dorthin war länger, als ich dachte, und ein paar Sachen sind noch offen.

Die Bausteine

Die selbstgebaute Toniebox: ein schwarzes 3D-gedrucktes Gehäuse mit Regenbogen-Karte an der Vorderseite, daneben ein Echo Dot als Lautsprecher *Die fertige Box mit Regenbogen-Karte, daneben der Echo, der die Musik abspielt.*

Mein Aufbau besteht aus fünf Teilen:

Diagramm: Ein NFC-Tag wird vom ESP32 mit NFC-Leser gelesen, Home Assistant startet per Tag-Trigger die Automation, Music Assistant liefert Spotify oder TuneIn auf den Echo-Lautsprecher. Vom NFC-Tag bis zur Musik: So greifen die fünf Bausteine ineinander.

  1. Music Assistant als Add-on in Home Assistant OS. Das ist die Musikzentrale, die verschiedene Quellen und Lautsprecher zusammenbringt.
  2. Spotify und TuneIn als Quellen in Music Assistant. Spotify für Alben und Playlists, TuneIn für Radiosender – es gibt tatsächlich richtig gute Kinderradios.
  3. Ein Echo-Lautsprecher als Wiedergabegerät. Bei uns ist das aktuell der Echo in der Küche, weil dort ohnehin am meisten Leben ist. Wer noch keinen hat: Ein einfacher Amazon Echo Dot reicht völlig.
  4. NFC-Tags als „Figuren“. Ich nutze einfache NTAG215-Tags, die man auf Karten kleben oder in etwas Selbstgebasteltes stecken kann.
  5. Die Box selbst: ein ESP32-Board mit NFC-Leser, programmiert mit ESPHome. Karte drauflegen, der ESP32 liest den Tag und meldet ihn an Home Assistant – ganz ohne Handy.

Music Assistant einrichten

Music Assistant ist schnell installiert: Add-on hinzufügen, starten, in der Oberfläche die Musikquellen verbinden. Spotify braucht dafür ein Premium-Konto, TuneIn geht ohne. Danach seht ihr eure Playlists, Alben und Lieblingssender in einer gemeinsamen Bibliothek.

Über die zugehörige Integration tauchen die Player von Music Assistant in Home Assistant als eigene media_player-Entitäten auf. Und es gibt die Aktion music_assistant.play_media, mit der ihr gezielt einen Sender, ein Album oder eine Playlist auf einem bestimmten Player startet. Das ist der Schlüssel für die Toniebox.

Der knifflige Teil: Alexa

Bei den Echo-Lautsprechern wurde es kompliziert. Music Assistant kann Echos zwar als Player ansprechen, für das eigentliche Abspielen braucht es aber einen eigenen Alexa-Skill. Der Echo bekommt vom Skill gesagt, welchen Stream er abholen soll, und holt sich die Musik dann von Music Assistant.

Das bedeutet in der Praxis:

  • Ihr braucht einen eigenen Alexa-Skill in der Amazon-Entwicklerkonsole. Dafür gibt es ein Community-Projekt, das den Skill-Server als Docker-Container mitbringt. Den habe ich auf meinem Heimserver laufen.
  • Amazon muss den Skill per HTTPS aus dem Internet erreichen können, und zwar mit einem gültigen Zertifikat.

Und genau da hing ich fest. Mein Internetanschluss läuft hinter CGNAT, eine klassische Portfreigabe im Router ist damit schlicht nicht möglich. Gelöst habe ich das mit Tailscale Funnel, einer Funktion von Tailscale, die einen einzelnen lokalen Dienst gezielt über eine öffentliche HTTPS-Adresse erreichbar macht – inklusive Zertifikat und ganz ohne Portfreigabe. Wie ich Tailscale sonst für den Fernzugriff nutze, beschreibe ich in einem eigenen Artikel.

Wichtig dabei: Ich gebe wirklich nur das frei, was der Skill und die Echos brauchen, nicht Home Assistant oder die Oberfläche von Music Assistant. Und weil damit ein Stück Software aus dem Internet erreichbar ist, lasse ich mich per Push-Nachricht informieren, sobald es für Music Assistant ein Update gibt. So verpasse ich keine Sicherheitskorrekturen.

Die Automation: Karte auflegen, Musik läuft

Home Assistant kennt NFC-Tags von Haus aus. Jeder Tag hat eine ID, und mit dem tag-Trigger könnt ihr darauf reagieren. Bei mir kommt der Scan vom ESP32 in der Box: ESPHome meldet die gelesene Tag-ID an Home Assistant, genau so, als hätte man sie mit der Home-Assistant-App gescannt. Für die Automation macht das keinen Unterschied.

Meine Automation macht nach dem Scan zwei Dinge: Erst sagt sie Music Assistant, was gespielt werden soll, dann weckt sie den Skill auf dem Echo. Generisch sieht das so aus:

alias: "NFC: Kinderradio"
triggers:
  - trigger: tag
    tag_id: "EURE-TAG-ID"
actions:
  - action: music_assistant.play_media
    target:
      entity_id: media_player.kueche_ma
    data:
      media_type: radio
      media_id: "Name des Senders"
  - delay:
      seconds: 2
  - action: media_player.play_media
    target:
      entity_id: media_player.kueche_echo
    data:
      media_content_type: skill
      media_content_id: "EURE-SKILL-ID"
mode: single

Zwei Player-Entitäten für denselben Echo sehen erstmal seltsam aus, sind aber Absicht: Die eine gehört zu Music Assistant und bekommt den Musikwunsch, die andere stammt aus der Alexa-Media-Player-Integration und startet den Skill. Die zwei Sekunden Pause dazwischen haben sich bewährt, damit Music Assistant den Stream schon bereitgestellt hat, wenn der Echo nachfragt. Elegant ist das nicht, aber es funktioniert zuverlässig.

Was bei uns schon läuft

Aktuell gibt es zwei Karten, die wirklich im Einsatz sind:

  • Karte 1 startet ein Kinderradio über TuneIn. Das ist der Dauerbrenner.
  • Karte 2 spielt ein Album mit Spiel- und Bewegungsliedern über Spotify. Perfekt für verregnete Nachmittage, an denen irgendwer Energie loswerden muss.

Für mich hat sich die Bastelei schon jetzt gelohnt: Karte auflegen, Musik läuft. Kein Suchen in einer App, kein „Papa, mach mal Musik an“.

Was noch offen ist

Ich will ehrlich sein, fertig ist das Projekt noch nicht:

  • Weniger Automationen pflegen. Aktuell hat jede Karte ihre eigene Automation. Ich teste gerade, ob der ESP32 statt der reinen Tag-ID gleich ein Event mit dem gewünschten Album an Home Assistant schicken kann – dann reicht eine einzige Automation für alle Karten.
  • Mehr Karten. Hörspiele, Einschlaflieder, Lieblingsplaylists – die Liste der Wünsche ist lang.
  • Der richtige Lautsprecher. Eigentlich gehört die Box ins Kinderzimmer. Der Echo dort ist in Home Assistant schon eingebunden, umgestellt habe ich die Automationen aber noch nicht.

Meine Stolpersteine

  • Der Alexa-Skill ist der aufwendigste Teil. Music Assistant, Spotify und TuneIn waren schnell erledigt. Skill, Entwicklerkonsole und HTTPS-Erreichbarkeit haben deutlich länger gedauert.
  • Ohne öffentliche Erreichbarkeit geht es nicht. Wer wie ich hinter CGNAT sitzt, braucht eine Lösung wie Tailscale Funnel oder einen Tunnel-Dienst. Überlegt euch gut, was ihr damit freigebt.
  • Zertifikate laufen ab. Wenn der Echo plötzlich nicht mehr spielt, lohnt sich ein Blick darauf, ob der HTTPS-Endpunkt überhaupt noch erreichbar ist.
  • Namen der Entitäten sauber notieren. Mit zwei Player-Entitäten pro Echo verliert man schnell den Überblick, welche wofür zuständig ist.

Fazit

Eine DIY-Toniebox mit Music Assistant ist kein Wochenendprojekt für Einsteiger, vor allem wegen der Alexa-Anbindung. Wer aber ohnehin Home Assistant, ein Musik-Abo und Echo-Lautsprecher hat, bekommt eine flexible Lösung, bei der jede neue „Figur“ nur ein paar Cent für einen NFC-Tag kostet. Bei uns ist sie schon jetzt im Alltag angekommen. Und weil der ESP32 in der Box liest, braucht unser Kind dafür weder Handy noch App – genau wie bei der großen Vorlage.

Kommentare

Fragen, Ergänzungen oder eigene Erfahrungen? Ich freue mich über deinen Kommentar. Zum Kommentieren brauchst du ein kostenloses GitHub-Konto.

Beim Laden werden Daten an GitHub übertragen. Mehr dazu in der Datenschutzerklärung.