Im Wohnzimmer stehen ein HomePod, ein Chromecast und ein AV-Receiver. In Home Assistant erscheinen sie als drei media_player-Entitäten, dazu kommt noch eine remote-Entität fürs Einschalten. Auf dem Dashboard sieht das aus wie ein Mischpult für Fortgeschrittene – und in Automationen muss man jedes Mal raten, welches Gerät gerade läuft. Genau dafür gibt es die Universal-Media-Player-Integration: Sie fasst mehrere Entitäten zu einer einzigen zusammen, die sich immer so verhält wie das gerade aktive Gerät.
Die Idee dahinter
Der Universal Media Player ist kein eigenes Gerät, sondern eine Hülle. Er bekommt eine geordnete Liste von Kind-Entitäten (children) und imitiert immer das erste Kind aus dieser Liste, das nicht off oder idle ist. Zusätzlich lassen sich einzelne Kommandos und Attribute gezielt umbiegen – etwa das Einschalten an eine remote-Entität delegieren, während die Lautstärke vom Receiver kommt und die Titelinformation vom Streaming-Gerät.
Das löst drei Probleme auf einmal: eine Karte statt vier, eine Entität als Ziel für Sprachbefehle und Automationen, und eine saubere Zustandsanzeige, die auch dann stimmt, wenn die Quelle wechselt.
Schritt 1: Die Basis-Konfiguration
Die Integration wird in YAML konfiguriert. In der configuration.yaml – oder besser in einer ausgelagerten Datei – sieht das Grundgerüst so aus:
media_player:
- platform: universal
name: Wohnzimmer
unique_id: wohnzimmer_universal
children:
- media_player.homepod
- media_player.chromecast_wohnzimmer
- media_player.av_receiver
browse_media_entity: media_player.chromecast_wohnzimmer
Nach einem Neustart existiert media_player.wohnzimmer. Läuft der Chromecast, zeigt die neue Entität dessen Cover, Titel und Fortschritt. Ist alles aus, ist sie off.
Die Reihenfolge in children ist die Priorität. Wer meistens über den HomePod hört, setzt ihn nach oben. browse_media_entity legt fest, welches Kind die Medienbibliothek liefert – ohne diesen Eintrag wird das erste Kind verwendet, was bei Airplay-Geräten oft ins Leere führt.
Schritt 2: Kommandos umleiten
Interessant wird es, wenn ein Gerät sich nicht selbst einschalten kann. Ein AV-Receiver hängt oft an einer remote– oder switch-Entität. Mit dem Block commands überschreiben Sie einzelne Aktionen:
media_player:
- platform: universal
name: Wohnzimmer
unique_id: wohnzimmer_universal
children:
- media_player.chromecast_wohnzimmer
- media_player.homepod
commands:
turn_on:
action: remote.turn_on
target:
entity_id: remote.homepod
turn_off:
action: remote.turn_off
target:
entity_id: remote.homepod
volume_up:
action: media_player.volume_up
target:
entity_id: media_player.av_receiver
volume_down:
action: media_player.volume_down
target:
entity_id: media_player.av_receiver
Möglich sind unter anderem turn_on, turn_off, select_source, volume_set, volume_up, volume_down, volume_mute sowie die Transportbefehle media_play, media_pause, media_next_track und media_previous_track.
Schritt 3: Attribute übersteuern
Der attributes-Block bestimmt, woher einzelne Zustandswerte kommen. Die Syntax ist entity_id|attribut, wobei ein Eintrag ohne Attribut den Zustand der Entität selbst nimmt:
attributes:
state: remote.homepod
volume_level: media_player.av_receiver|volume_level
is_volume_muted: media_player.av_receiver|is_volume_muted
source: media_player.av_receiver|source
source_list: media_player.av_receiver|source_list
Eine Faustregel aus der Praxis: turn_on, turn_off und state gehören immer zusammen. Wer nur das Einschalten umleitet, aber den Zustand weiterhin von den Kindern ableiten lässt, bekommt eine Entität, die nach dem Einschalten sofort wieder off meldet.
Wer die Ausgabe anschliessend für Sprachdurchsagen nutzen möchte, findet die Grundlagen dazu im Beitrag HomePod als TTS-Lautsprecher in Home Assistant.
Schritt 4: Der Nutzen in Automationen
Der eigentliche Gewinn zeigt sich, sobald nur noch eine Entität angesprochen werden muss. Statt in jeder Automation eine Bedingung zu bauen, welches der drei Geräte gerade läuft, genügt ein Ziel:
automation:
- alias: Musik leiser bei Türklingel
triggers:
- trigger: state
entity_id: binary_sensor.tuerklingel
to: "on"
conditions:
- condition: state
entity_id: media_player.wohnzimmer
state: playing
actions:
- action: media_player.volume_set
target:
entity_id: media_player.wohnzimmer
data:
volume_level: 0.15
Dasselbe gilt für Assist: Ein Sprachbefehl wie «Musik im Wohnzimmer stoppen» trifft eine eindeutige Entität, statt an einem Gerät zu scheitern, das gerade gar nicht spielt. Auch Dashboards profitieren – eine Media-Control-Karte ersetzt vier einzelne Karten, und der Titel wechselt automatisch mit der Quelle.
Troubleshooting
Zwei Fehlerbilder treten fast immer auf. Erstens: Die Entität übernimmt keine Attribute. Meist liegt es daran, dass das gewünschte Kind gerade idle ist und deshalb übersprungen wird – dann hilft ein expliziter attributes-Eintrag. Zweitens: Nach einem Neustart bleibt die Entität unavailable. Prüfen Sie in diesem Fall, ob alle Kind-Entitäten tatsächlich existieren; ein Tippfehler in einer entity_id legt die ganze Hülle lahm.
Fazit
Der Universal Media Player ist eine der unauffälligsten und zugleich nützlichsten Integrationen in Home Assistant. Er kostet zwanzig Zeilen YAML und macht aus einem Wildwuchs an Geräten eine Entität, die Automationen, Dashboards und Assist gleichermassen verstehen. Fangen Sie mit der minimalen children-Liste an, prüfen Sie das Verhalten beim Umschalten der Quelle, und ergänzen Sie commands und attributes erst dort, wo etwas wirklich nicht stimmt.