Seite 1 von 1
Wert eines Sonos Helfers benutzen
Verfasst: So 5. Feb 2023, 13:05
von Figuhr
Moin,
ich habe in Homeassistant mein Sonos-System integriert.
Nun habe ich zwei Helfer erstellt. Einmal "Masterplayer" und dann für jeden Lautsprecher einen Helfer "Status Play_Pause". Zweiter ist wichtig, wenn beim Koppeln Situationen entstehen, wo ein Speakter zwar gekoppelt ist aber Lautstärke 0 hat.
Wenn ich das Licht eines Raumes einschalte wechselt mein Helfer "Masterplayer" auf den entsprechenden Raum (zB. Badezimmer). Wenn ich jetzt im Schlafzimmer das Licht einschalte soll sich der Speakter mit dem Masterplayer koppeln, aber nur, wenn dieser den Status=Play hat.
Also müsste eine verschachtelte Abfrage erfolgen.
Wer ist Masterplayer?
Hat dieser den Status Play?
Dann Sonos-Schlafzimmer: Snapshot + join Masterplayer.
Meine Lösung war bisher eine sehr umständliche Automation mit Wenn und Dann. Gute 80 Zeilen in Yaml. Gibt es vielleicht eine Möglichkeit dies mit Hilfe von Templates umzusetzen? Leider ist mein Verständnis von Jinja fast null.
Mein erster Ansatz:
Code: Alles auswählen
{% if is_state('input_select.sonos_masterplayer' = 'input_select.sonos_badezimmer_status_play_pause', 'Play'') %}
{% endif %}
Das ergibt leider keinen Sinn, ich weiß. Vielleicht kann mir jemand einen Rat geben?
Re: Wert eines Sonos Helfers benutzen
Verfasst: So 5. Feb 2023, 19:25
von Osorkon
Hallo @Figuhr und Herzlich Willkommen bei den SmartHome for Dummies.
Bin mir nicht sicher, ob ich dich richtig verstanden habe.
Ausgehend davon, das DU einen input_select.masterplayer in Verwendung hast. Mit diesen gibst Du vor, welcher der MediaPlayer als Master agiert, richtig.
Der Aktion Teil kann dann so aussehen. Wenn der Master gerade abspielt, wird der media_player.bad mit dem Master Gruppiert.
Code: Alles auswählen
{% set masterplayer = "media_player."+states('input_select.masterplayer') | lower %}
{% if is_state(masterplayer, 'playing') %}
service: media_player.join
data:
group_members:
- media_player.bad
target:
entity_id: {{masterplayer}}
{% endif %}
Gruß
Osorkon
Re: Wert eines Sonos Helfers benutzen
Verfasst: Mo 6. Feb 2023, 17:35
von Figuhr
Cooool, vielen Dank für deine schnelle Antwort!
Wenn man es dann so sieht, ist es irgendwie logisch. Bis auf das lower.
Jetzt aber kommt die Deppenfrage überhaupt:
Wie zum Teufel bekomme ich das jetzt in eine Automation? Als "action:" kann ich ja nicht einfach "value_template:" wählen...
Re: Wert eines Sonos Helfers benutzen
Verfasst: Mo 6. Feb 2023, 21:58
von Osorkon
Mit
wandelst Du alle Großbuchstaben in Kleinbuchstaben.
Eine Automatisierung könnte so ausschauen:
Code: Alles auswählen
description: ""
mode: single
variables:
masterplayer: |
{{"media_player."+states('input_select.masterplayer') | lower}}
trigger:
- platform: state
entity_id:
- light.bad
from: "off"
to: "on"
condition:
- condition: template
value_template: "{{ is_state(masterplayer, 'playing') }}"
action:
- service: media_player.join
data:
group_members:
- media_player.bad
target:
entity_id: "{{masterplayer}}"
alias: Test - Masterplayer
Zuerst wird eine Variable definiert, die sich aus dem String "media_player." + dem Wert von input_select.masterplayer zusammensetzt.
Also als Bsp. Du hast den input_select.masterplayer die Auswahl Schlafzimmer ausgewählt. das ergibt dann masterplayer = media_player.schlafzimmer
Diese Variable kannst Du jetzt sowohl in der Bedingung als auch im Aktion Teil verwenden.
Wenn das Badlicht wird eingeschaltet und der Masterplayer spielt gerade was ab.
Wird der service media_player.join ausgeführt mit dem masterplayer als Ziel und dem media_player.bad als Gruppenmitglied.
Ich hoffe, das war einigermaßen verständlich, ansonsten gerne weitere Deppenfragen stellen,
Gruß
Osorkon
Re: Wert eines Sonos Helfers benutzen
Verfasst: Di 7. Feb 2023, 18:06
von Figuhr
Irgendwie scheint es nicht funktionieren zu wollen.
Ich werde morgen noch mal in Ruhe probieren, vielleicht habe ich ja auch einen Denkfehler bei der Umsetzung...
Re: Wert eines Sonos Helfers benutzen
Verfasst: Di 7. Feb 2023, 18:09
von Osorkon
Ansonsten mal die Aufgabenstellung in eigenen Worten ein wenig detaillierter beschreiben und Deine aktuelle Automatisierung posten.
Dann kriegen wir das bestimmt hin.
Gruß
Osorkon
Re: Wert eines Sonos Helfers benutzen
Verfasst: Mi 8. Feb 2023, 17:41
von Figuhr
Ich habe jetzt nochmal etwas rumprobiert.
momentan sieht die Automation so aus:
Code: Alles auswählen
alias: aaa sonos2
description: ""
trigger:
- platform: state
entity_id:
- light.licht_schlafzimmer
to: "on"
action:
- service: media_player.join
data:
group_members:
- media_player.sonos_schlafzimmer
target:
entity_id: "{{masterplayer}}"
variables:
masterplayer: |
{{"media_player."+states('input_select.masterplayer') | lower}}
mode: single
Erst einmal ohne Bedingung, um eine zusätzliche Fehlerquelle auszuschließen. Leider passiert hier nichts.
Ersetze ich die Aktion wie folgt, klappt es einwandfrei:
Code: Alles auswählen
action:
- service: media_player.join
data:
group_members:
- media_player.sonos_schlafzimmer
target:
entity_id: media_player.sonos_badezimmer
Wenn ich den Masterplayer abfrage mit
ist die Antwort
Code: Alles auswählen
"Wie lautet der Masterplayer? media_player.sonos_badezimmer
Re: Wert eines Sonos Helfers benutzen
Verfasst: Do 9. Feb 2023, 19:59
von Osorkon
Wenn Du unter Entwicklungswerkzeuge im Template Editor folgendes Template eingeben tust.
Wie lautet das Ergebnis?
Gruß
Osorkon
Re: Wert eines Sonos Helfers benutzen
Verfasst: Do 9. Feb 2023, 21:01
von Figuhr
Re: Wert eines Sonos Helfers benutzen
Verfasst: Do 9. Feb 2023, 21:04
von Osorkon
Wie heißt den dann Dein Input_select Helfer mit dem Du den Masterplayer definieren tust?
Gruß
Osorkon
Re: Wert eines Sonos Helfers benutzen
Verfasst: Do 9. Feb 2023, 22:17
von Figuhr
Der Helfer heißt: "input_select.sonos_masterplayer"
In den Entwicklungswerkzeugen wird deine Formel auch richtig angewendet.
Der "input_select.sonos_masterplayer" stellt den Wert "Badezimmer" bereit aus dem dann richtig in "media_player.sonos_badezimmer" umgewandelt wird.
Re: Wert eines Sonos Helfers benutzen
Verfasst: Do 9. Feb 2023, 22:29
von Osorkon
Wenn Dein Helfer "input_select.sonos_masterplayer" lautet und dieser den Wert Badezimmer bereitstellt Du den Mediaplayer media_player.sonos_badezimmer ansprechen möchtest.
Muss das ganze dann so aussehen:
Code: Alles auswählen
alias: aaa sonos2
description: ""
trigger:
- platform: state
entity_id:
- light.licht_schlafzimmer
to: "on"
action:
- service: media_player.join
data:
group_members:
- media_player.sonos_schlafzimmer
target:
entity_id: "{{masterplayer}}"
variables:
masterplayer: |
{{"media_player.sonos_"+states('input_select.sonos_masterplayerr') | lower}}
mode: single
Gruß
Osorkon
Re: Wert eines Sonos Helfers benutzen
Verfasst: Sa 11. Feb 2023, 14:50
von Figuhr
Da steckt irgendwie der Wurm drin:
Code: Alles auswählen
1 {% set masterplayer = "media_player.sonos_"+states('input_select.sonos_masterplayer') | lower %}
2 {{ is_state('input_select.sonos_masterplayer', 'Badezimmer') }}
3 {{ states('input_select.sonos_masterplayer') }}
4 {{ masterplayer }}
Output:
Meine Automation habe ich nun um folgendes ergänzt um zu prüfen, ob der Wert "masterplayer" innerhalb der Automation überhaupt zur Verfügung steht, bzw. generiert wird:
Code: Alles auswählen
- service: notify.telegram_an_simon
data:
message: Nachricht1 {{ states('input_select.sonos_masterplayer') }}
- service: notify.telegram_an_simon
data:
message: Nachricht2 {{ states('masterplayer') }}
- service: notify.telegram_an_simon
data:
message: Nachricht3 "{{masterplayer}}"
- service: notify.telegram_an_simon
data:
message: Nachricht4 {{'masterplayer'}}
- service: notify.telegram_an_simon
data:
message: Nachricht5 {{masterplayer}}
Output in Telegram:
Code: Alles auswählen
Nachricht1 Badezimmer
Nachricht2 unknown
Nachricht3 ""
Nachricht4 masterplayer
Nachricht5
Komischerweise kann ich in den Entwicklerwerkzeugen den Wert von "masterplayer" problemlos abfragen.
Re: Wert eines Sonos Helfers benutzen
Verfasst: Sa 11. Feb 2023, 19:13
von Osorkon
Sieht doch alles gut aus:
- Definition der Variable „masterplayer“
- Bedingung input select Auswahl = Badezimmer erfüllt
- Den Wert von input select ausgelesen
- Aufruf der Variablen „Masterplayer“ = media_player.sonos_badezimmer
Zu Deinen notifies:
Die Variable Masterplayer scheinst Du in der Automatisierung nicht angelegt zu haben:
- Der Wert Deines input select
- Du kannst kein State von einer Variablen ermitteln, deshalb unknown
- Du übergibst einen leeren String in “”. Leer deshalb weil die Variable Masterplayer nicht definiert ist.
- Du übergibst den String Masterplayer
- Du übergibst die Variable Masterplayer. Da diese nicht existiert, bzw. Nicht definiert ist, ist das Ergebnis ein leerer String.
Lass doch mal bitte Deine aktuelle Automatisierung sehen.
Gruß
Osorkon
Re: Wert eines Sonos Helfers benutzen
Verfasst: Sa 11. Feb 2023, 19:26
von Figuhr
Code: Alles auswählen
alias: aaa sonos2
description: ""
trigger:
- platform: state
entity_id:
- light.licht_schlafzimmer
to: "on"
action:
- service: media_player.join
data:
group_members:
- media_player.sonos_schlafzimmer
target:
entity_id:
- "{{masterplayer}}"
- service: notify.telegram_an_simon
data:
message: Nachricht {{masterplayer}}
variables:
masterplayer: >
{% set masterplayer = "media_player.sonos_"+states('input_select.sonos_masterplayer') | lower %}
mode: single
Re: Wert eines Sonos Helfers benutzen
Verfasst: Sa 11. Feb 2023, 22:19
von Osorkon
@Figuhr wenn Du mal Deine Automatisierung mit der, die ich Dir zur verfügung gestellt habe, vergleichen tust.
Werden Dir vielleicht kleine aber feine Unterschiede auffallen.
Vor allem die Definition der Variablem "masterplayer" ist falsch.
Code: Alles auswählen
alias: aaa sonos2
description: ""
trigger:
- platform: state
entity_id:
- light.licht_schlafzimmer
from: "off"
to: "on"
action:
- service: media_player.join
data:
group_members:
- media_player.sonos_schlafzimmer
target:
entity_id: "{{masterplayer}}"
- service: notify.telegram_an_simon
data:
message: Nachricht {{masterplayer}}
variables:
masterplayer: |
{{"media_player.sonos_"+states('input_select.sonos_masterplayer') | lower}}
Gruß
Osorkon
Re: Wert eines Sonos Helfers benutzen
Verfasst: So 12. Feb 2023, 11:17
von Figuhr
Ich habe so manche nicht-Übereinstimmung entdeckt und korrigiert. Schlussendlich habe ich deine komplette Automation 1:1 kopiert.
Wenn ich dann auf "Ausführen" klicke bekomme ich per Telegram nur ein
gesendet.
Ändere ich die Automation für die Benachrichtigung so:
Code: Alles auswählen
- service: notify.telegram_an_simon
data:
message: Nachricht "{{masterplayer}}"
erhalte ich ein
Wo sind jetz Komma und und Unterstriche geblieben?
SCHEIßE, es funktioniert!!!
Die Nachricht funktioniert zwar nicht (warum auch immer) aber Sonos macht jetzt was es soll!!! Der Wahnsinn.