Kinder wollen irgendwann selbst entscheiden, was sie hören möchten. Bei unserem Jüngsten ist es gerade so weit. Ein Smart Speaker mit Mikrofon und Cloud-Anbindung kam fürs Kinderzimmer allerdings nicht infrage. Ein Handy oder Tablet ebensowenig. Da jedoch bereits eine Boombox vorhanden war, lag die Lösung nahe:
Ein Apollo CAST-1 an der Boombox, Music Assistant als Musikquelle und ein Zigbee-Schalter mit vier Tasten. In diesem Beitrag zeige ich dir, wie das alles zusammenspielt, wie die Automation aufgebaut ist und wo die Grenzen des Systems liegen.
Was genau ist der Apollo CAST-1?
Der CAST-1 ist ein extrem kompakter Audio-Streamer von Apollo Automation². Er misst gerade einmal 45 × 45 × 15 Millimeter und wird ganz einfach über USB-C mit Strom versorgt – ein handelsübliches Handynetzteil reicht hierfür völlig aus.
Die Audioausgabe erfolgt über einen 3,5-mm-Klinkenausgang. Damit kannst du ihn an jedes Gerät anschließen, das einen AUX-Eingang besitzt, egal ob Boombox, Stereoanlage, aktive Boxen oder Soundbar.
Die wichtigsten Daten laut Hersteller:
- Prozessor: ESP32-S3 (16 MB Flash, 8 MB PSRAM)
- DAC: Texas Instruments PCM5122, 32 Bit, 112 dB Dynamikumfang
- Audioausgang: 3,5 mm Klinke, 2,1 V RMS
- Netzwerk: WLAN 2,4 GHz, optional Ethernet per Zusatzplatine
- Firmware: ESPHome, Open Source
- Cloud: Nicht nötig, funktioniert komplett lokal
- Preis: ca. 48 € mit Versand
Zusätzlich kannst du den CAST-1 als Bluetooth-Proxy für Home Assistant nutzen. Wenn du mehrere Geräte hast, lassen sie sich über Music Assistant sogar synchron gruppieren.
Optional: Die Ethernet-Platine
Für Standorte mit schwachem WLAN gibt es eine praktische, aufsteckbare Ethernet-Platine mit W5500-Chip. In unserem Kinderzimmer brauche ich sie nicht, da der WLAN-Empfang dort völlig ausreicht.
Wichtig für dich zu wissen: Wenn du die Ethernet-Firmware nutzt, fällt die WLAN-Funktion komplett weg. Der CAST-1 holt sich dann einfach per DHCP seine IP-Adresse und taucht ganz ohne weitere Eingaben in deinem Home Assistant auf.

Einrichtung in Home Assistant und Music Assistant
Die Einrichtung ist schnell erledigt:
- Versorge den CAST-1 mit Strom und verbinde ihn mit deinem WLAN.
- Home Assistant findet das Gerät automatisch – du musst es nur noch einmal bestätigen.
- In Music Assistant erscheint der CAST-1 daraufhin als Player. Die Verbindung läuft dabei über Sendspin, das hauseigene Streaming-Protokoll von Music Assistant.
- Stecke nun das Klinkenkabel in die Boombox.
Als Musikquellen nutze ich zwei Optionen:
- MausRadio vom WDR: Diesen Sender habe ich in Music Assistant einfach einmalig zur Bibliothek hinzugefügt.
- Kinderplaylist bei Spotify: Hierfür benötigt Music Assistant ein Spotify-Premium-Konto.
Hier gibt es das ganze auch als Video von mir:
Der Zigbee-Schalter: Vier Tasten, sieben Funktionen
Als Schalter verwende ich einen MOES Zigbee-Schalter mit vier Tasten, der über Zigbee2MQTT eingebunden ist. Der Clou: Jede Taste unterscheidet zwischen einfachem Druck, Doppeldruck und langem Halten.
- 1. Automatisieren Sie den kabellosen Tuya ZigBee-Szenenwechsel auf...
- 2. Drei Pairing-Modi für jede Taste, um 3 Szenen aus einem...
So habe ich die Tasten belegt:
| Taste | Kurz drücken | Doppelt drücken | Lang halten |
| 1 | MausRadio starten | Pause / Weiter | Aus |
| 2 | Kinderplaylist (Zufall) | Nächster Titel | Aus |
| 3 | Lauter (+5 %) | – | Aus |
| 4 | Leiser (−5 %) | – | Aus |
Die Idee dahinter ist simpel: Egal, welche Taste dein Kind lange gedrückt hält, die Musik geht immer aus. So muss sich niemand eine komplizierte Belegung merken. Die Doppeldrücke sind hingegen eher als Funktionen für uns Große gedacht.

Die Automation
Die gesamte Steuerung steckt in einer einzigen Automation. Sie reagiert auf die Aktionen, die Zigbee2MQTT bei jedem Tastendruck sendet, und entscheidet dann ganz automatisch anhand der Trigger-ID, was passieren soll.
Die Trigger
Zigbee2MQTT meldet jeden Tastendruck als Aktion – zum Beispiel 1_single für einen einfachen Druck auf Taste 1. In der Automation bekommt jede dieser Aktionen eine eigene Trigger-ID. Die vier langen Tastendrücke teilen sich dabei praktischerweise die ID „aus“.
triggers:
- trigger: mqtt
id: radio
options:
topic: zigbee2mqtt/Kinderzimmer Taster/action
payload: 1_single
- trigger: mqtt
id: pause
options:
topic: zigbee2mqtt/Kinderzimmer Taster/action
payload: 1_double
- trigger: mqtt
id: playlist
options:
topic: zigbee2mqtt/Kinderzimmer Taster/action
payload: 2_single
- trigger: mqtt
id: weiter
options:
topic: zigbee2mqtt/Kinderzimmer Taster/action
payload: 2_double
- trigger: mqtt
id: lauter
options:
topic: zigbee2mqtt/Kinderzimmer Taster/action
payload: 3_single
- trigger: mqtt
id: leiser
options:
topic: zigbee2mqtt/Kinderzimmer Taster/action
payload: 4_single
- trigger: mqtt
id: aus
options:
topic: zigbee2mqtt/Kinderzimmer Taster/action
payload: 1_hold
- trigger: mqtt
id: aus
options:
topic: zigbee2mqtt/Kinderzimmer Taster/action
payload: 2_hold
- trigger: mqtt
id: aus
options:
topic: zigbee2mqtt/Kinderzimmer Taster/action
payload: 3_hold
- trigger: mqtt
id: aus
options:
topic: zigbee2mqtt/Kinderzimmer Taster/action
payload: 4_hold
Radio und Playlist starten
Für die Wiedergabe nutze ich die Aktion music_assistant.play_media. Mit dem Parameter enqueue: replace wird sichergestellt, dass der neue Inhalt das ersetzt, was gerade läuft. Ohne diese Option würde die Playlist einfach nur hinten angehängt werden.
Bevor die Playlist startet, schaltet die Automation automatisch die Zufallswiedergabe ein. Andernfalls würde jeden Tag immer wieder dasselbe erste Lied laufen.
actions:
- choose:
- conditions:
- condition: trigger
id: radio
sequence:
- action: music_assistant.play_media
target:
entity_id:
- media_player.apollo_cast_1_21912c
data:
media_id: Die Maus
media_type: radio
enqueue: replace
- conditions:
- condition: trigger
id: playlist
sequence:
- action: media_player.shuffle_set
target:
entity_id:
- media_player.apollo_cast_1_21912c
data:
shuffle: true
- action: music_assistant.play_media
target:
entity_id:
- media_player.apollo_cast_1_21912c
data:
media_id: '[SPOTIFY-PLAYLIST-URI]'
media_type: playlist
enqueue: replace
- conditions:
- condition: trigger
id: pause
sequence:
- action: media_player.media_play_pause
target:
entity_id:
- media_player.apollo_cast_1_21912c
data: {}
- conditions:
- condition: trigger
id: weiter
sequence:
- action: media_player.media_next_track
target:
entity_id:
- media_player.apollo_cast_1_21912c
data: {}
- conditions:
- condition: trigger
id: aus
sequence:
- action: media_player.media_stop
target:
entity_id:
- media_player.apollo_cast_1_21912c
data: {}
Lautstärke mit Obergrenze
Erfahrungsgemäß wird Taste 3 (Lauter) am häufigsten gedrückt. Genau aus diesem Grund gibt es eine Obergrenze für die Lautstärke.
Dafür habe ich einen Helfer in Home Assistant angelegt (unter Einstellungen → Geräte & Dienste → Helfer → Helfer erstellen → Zahlenwert). Bei mir heißt dieser Helfer „Kinderzimmer Maximallautstärke“ und steht auf 50 %.

Wenn man nun lauter stellt, liest die Automation die aktuelle Lautstärke aus, rechnet 5 % dazu und prüft sofort, ob dieser Wert über der Grenze liegt. Ist das der Fall, bleibt die Lautstärke bei dem Maximalwert. Liegt sie bereits darüber, ändert sich einfach nichts.
Zusätzlich habe ich zwei kleine Absicherungen eingebaut:
- Die Automation läuft nur dann durch, wenn der Player überhaupt einen Lautstärkewert meldet. Sonst würde das System fälschlicherweise mit dem Wert 0 rechnen.
- Nach jeder Lautstärkeänderung wartet die Automation eine halbe Sekunde. So hat Home Assistant genug Zeit, den neuen Wert zu übernehmen, bevor ein eventueller nächster Tastendruck registriert wird.
actions:
- choose:
- conditions:
- condition: trigger
id: lauter
sequence:
- action: media_player.volume_set
target:
entity_id:
- media_player.apollo_cast_1_21912c
data:
volume_level: >
{% set aktuell = state_attr('media_player.apollo_cast_1_21912c',
'volume_level') | float(0) %} {% set grenze =
states('input_number.kinderzimmer_maximallautstarke') |
float(60) / 100 %} {{ [aktuell + 0.05, grenze] | min | round(2)
}}
- conditions:
- condition: trigger
id: leiser
sequence:
- action: media_player.volume_set
target:
entity_id:
- media_player.apollo_cast_1_21912c
data:
volume_level: >
{% set aktuell = state_attr('media_player.apollo_cast_1_21912c',
'volume_level') | float(0) %} {{ [aktuell - 0.05, 0] | max |
round(2) }}
Die komplette Automation
alias: Kinderzimmer Musik-Taster
description: Steuert den CAST-1 im Kinderzimmer über den 4-Tasten-Zigbee-Schalter
triggers:
- trigger: mqtt
id: radio
options:
topic: zigbee2mqtt/Kinderzimmer Taster/action
payload: 1_single
- trigger: mqtt
id: pause
options:
topic: zigbee2mqtt/Kinderzimmer Taster/action
payload: 1_double
- trigger: mqtt
id: playlist
options:
topic: zigbee2mqtt/Kinderzimmer Taster/action
payload: 2_single
- trigger: mqtt
id: weiter
options:
topic: zigbee2mqtt/Kinderzimmer Taster/action
payload: 2_double
- trigger: mqtt
id: lauter
options:
topic: zigbee2mqtt/Kinderzimmer Taster/action
payload: 3_single
- trigger: mqtt
id: leiser
options:
topic: zigbee2mqtt/Kinderzimmer Taster/action
payload: 4_single
- trigger: mqtt
id: aus
options:
topic: zigbee2mqtt/Kinderzimmer Taster/action
payload: 1_hold
- trigger: mqtt
id: aus
options:
topic: zigbee2mqtt/Kinderzimmer Taster/action
payload: 2_hold
- trigger: mqtt
id: aus
options:
topic: zigbee2mqtt/Kinderzimmer Taster/action
payload: 3_hold
- trigger: mqtt
id: aus
options:
topic: zigbee2mqtt/Kinderzimmer Taster/action
payload: 4_hold
actions:
- choose:
- conditions:
- condition: trigger
id: radio
sequence:
- action: music_assistant.play_media
target:
entity_id:
- media_player.apollo_cast_1_21912c
data:
media_id: Die Maus
media_type: radio
enqueue: replace
- conditions:
- condition: trigger
id: playlist
sequence:
- action: media_player.shuffle_set
target:
entity_id:
- media_player.apollo_cast_1_21912c
data:
shuffle: true
- action: music_assistant.play_media
target:
entity_id:
- media_player.apollo_cast_1_21912c
data:
media_id: '[SPOTIFY-PLAYLIST-URI]'
media_type: playlist
enqueue: replace
- conditions:
- condition: trigger
id: pause
sequence:
- action: media_player.media_play_pause
target:
entity_id:
- media_player.apollo_cast_1_21912c
data: {}
- conditions:
- condition: trigger
id: weiter
sequence:
- action: media_player.media_next_track
target:
entity_id:
- media_player.apollo_cast_1_21912c
data: {}
- conditions:
- condition: trigger
id: lauter
sequence:
- action: media_player.volume_set
target:
entity_id:
- media_player.apollo_cast_1_21912c
data:
volume_level: >
{% set aktuell = state_attr('media_player.apollo_cast_1_21912c',
'volume_level') | float(0) %} {% set grenze =
states('input_number.kinderzimmer_maximallautstarke') |
float(60) / 100 %} {{ [aktuell + 0.05, grenze] | min | round(2)
}}
- conditions:
- condition: trigger
id: leiser
sequence:
- action: media_player.volume_set
target:
entity_id:
- media_player.apollo_cast_1_21912c
data:
volume_level: >
{% set aktuell = state_attr('media_player.apollo_cast_1_21912c',
'volume_level') | float(0) %} {{ [aktuell - 0.05, 0] | max |
round(2) }}
- conditions:
- condition: trigger
id: aus
sequence:
- action: media_player.media_stop
target:
entity_id:
- media_player.apollo_cast_1_21912c
data: {}
mode: queued
max: 5
Macht der CAST-1 nun jeden Lautsprecher smart?
Fast. Bei allem, was einen Klinkeneingang hat: Ja! Bei anderen Geräten leider nicht. Hier sind noch ein paar Dinge, die du vor dem Nachbauen wissen solltest:
- Kein eigener Lautsprecher: Der CAST-1² benötigt zwingend eine Box mit AUX-Eingang. Hast du nur passive Lautsprecher, brauchst du zusätzlich einen Verstärker.
- WLAN mit 2,4 GHz: Das WLAN-Signal muss am Aufstellort ausreichend stark sein. Ist das nicht der Fall, hilft dir die erwähnte Ethernet-Platine weiter.
- Streams brauchen Internet: Das Radio und Spotify kommen natürlich aus dem Internet. Die Steuerung deines Setups bleibt aber komplett lokal: Dein Schalter, Home Assistant, Music Assistant und der CAST-1 kommunizieren mit keiner fremden Cloud.
- Obergrenze gilt nur für den Schalter: Wenn du die Lautstärke direkt in Music Assistant lauter drehst, umgehst du die einprogrammierte Obergrenze.

Was sonst noch möglich ist
Zwei weitere praktische Funktionen nutze ich im Kinderzimmer bisher noch nicht, sie bieten sich aber förmlich an:
- Multiroom: Du kannst problemlos mehrere CAST-1 in Music Assistant² synchron zu einer Gruppe zusammenfassen.
- Durchsagen: Wenn du Durchsagen aus Home Assistant machst, wird die Musik automatisch deutlich leiser, die Durchsage wird abgespielt und danach läuft die Musik in normaler Lautstärke weiter. Die LED am Gerät leuchtet währenddessen cyan. So kannst du ein „Abendessen ist fertig!“ direkt über die Boombox im Kinderzimmer abspielen. (Ob es dann auch wirklich gehört wird, steht natürlich auf einem anderen Blatt).
Fazit
Für eine bereits vorhandene Box mit Klinkeneingang ist der CAST-1² eine wirklich einfache Möglichkeit, diese nahtlos in Home Assistant und Music Assistant einzubinden. In Kombination mit einem günstigen Zigbee-Schalter entsteht so eine smarte Musiklösung für das Kinderzimmer, die komplett ohne Handy, Tablet und vor allem ohne störendes Mikrofon auskommt.
Wie löst du das bei dir zu Hause? Schreib es mir gerne in die Kommentare!
- 1. Automatisieren Sie den kabellosen Tuya ZigBee-Szenenwechsel auf...
- 2. Drei Pairing-Modi für jede Taste, um 3 Szenen aus einem...



