Homeassistant: Bose Soundtouch Multi-Room Audio

Homeassistant: Bose Soundtouch Multi-Room Audio

Mit dem Release 0.107 erhielt die Bose Soundtouch Integration nach langer Zeit ein nützliches Feature für die heimliche Beschallung über mehrere Räume. Das Soundtouch System von Bose kann auf einfachem Weg mehrere Lautsprecher zu einem Verbund zusammenschließen und Audio synchron ausgeben. Das funktionierte in Homeassistant auch seit geraumer Zeit, jedoch gab die State Machine keinerlei Infos/Attribute preis, ob aktuell ein Lautsprecherverbund aktiv und welcher Lautsprecher der Master des Verbunds war. Diese fehlenden Attribute wurden im Release 0.107 ergänzt und nach einer anfänglich fehlerhaften Implementierung mit dem Release 0.108 komplettiert. Existiert ein Zonenverbund steht nun unter den Soundtouch Media Playern das Attribut is_master: true/false zur Verfügung.

Zeitgleich zu dem Release erfuhr auch die grandiose Custom Lovelace Card Mini-Media-Player ein Update, um einfach einen Verbund (Zone) von Lautsprechern erstellen und auflösen zu können. Diese Custom Card kann einfach über HACS in Homeassitant installiert werden. Für die Nutzung von Multi-Room-Audio in der Lovelace Card gibt es einen eigenen Abschnitt in der README.

Beispiel für die Nutzung von Multi-Room-Audio mit der Mini-Media-Player Card

Template Sensor zur Ausgabe des aktuellen Masters

Wer in seiner Homeassistant UI nun einen Sensor haben möchte, der angibt welcher Lautsprecher gerade der Master ist oder ob überhaupt eine Zone aus mehreren Lautsprechern besteht, kann das auf folgende Weise mit einem Template Sensor und einer zugehörigen Automation, die diesen Sensor updated, lösen. In dem folgenden Beispiel nutze ich meine drei Soundtouch 10 Lautsprecher und einen Wireleass Link Adapter, die mit dem Namensschema media_player.soundtouch_RAUMNAME benant sind.

Template Sensor

Der Template Sensor iteriert über alle Lautsprecher, prüft ob eine Zone existiert und sucht anschließend nach dem Attribut is_master. Anschließend gibt er den Namen des Lautsprechers aus. Existiert keine Zone gibt er No Master aus.

- platform: template
  sensors:
    soundtouch_master:
      value_template: >
        {% set master = states.media_player | selectattr('attributes.soundtouch_zone', 'defined') | selectattr('attributes.soundtouch_zone.is_master','eq',True) | map(attribute='name') | list | first %}
        {{ master if master else "No Master" }}
      friendly_name: 'Multiroom Master'

Das Problem mit diesem Sensor besteht darin, dass er mit keiner Entity_ID arbeitet. Dadurch updated er sich nicht selbst. Die Hintergründe sind in der offiziellen Homeassistant Doku nachzulesen. Daher wird noch eine Automation gebraucht, die den State aller eingebundenen Soundtouch Lautsprecher überwacht und anschließend den Template Sensor updated.

Automation zum updaten des Template Sensors

In der nachfolgenden Automation müssen die Namen der Lautsprecher entsprechend den von euch vergebenen angepasst werden:

- alias: Soundtouch update master sensors
  initial_state: True
  trigger:
    - platform: state
      entity_id:
        - media_player.soundtouch_kuche
        - media_player.soundtouch_room2
        - media_player.soundtouch_schlafzimmer
        - media_player.soundtouch_wohnzimmer
  action:
    - service: homeassistant.update_entity
      entity_id: sensor.soundtouch_master

Ergebnis

Der erstellte Sensor mit dem namen sensor.soundtouch_master kann nun in jeder Lovelace Card eingebunden werden: