Home Assistant

Universal Media Player: Geräte sauber bündeln

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.

← Zurück zur Übersicht