Überwachen, ob Sonos Musik spielt

Begonnen von linuxq, 06 Oktober 2018, 11:09:43

Vorheriges Thema - Nächstes Thema

linuxq

Hallo,
Ich habe seit kurzem ein 7"Touchdisplay mit TabletUI. Dies soll sich nach 90 min abschalten, was auch funktioniert. Ich habe einen Dummy, der das Display per  Xscreensaver ein- und ausschalten kann. Das funktioniert mit der An- und Abwesenheit super. Sobald ich nach Hause komme, geht das Display an. Meine Frage ist nun:

Ich würde gerne alle 10 min überprüfen,  ob Sonos noch Musik spielt. Über state=PLAYING sollte das gehe . Wenn ja, will ich den Touchscreen mit dem Dummy triggern und somit die Auto-Off Zeit neu starten. Also solange Musik läuft, geht das Display nie aus.

Kann mir da jemand helfen? Danke.

MadMax-FHEM

Eine (schnelle/einfache) Möglichkeit wäre statt das Display bei Abwesenheit direkt aus zuschalten das nur zu tun, wenn Sonos nicht läuft.
Läuft Sonos, dann ein einmaliges at auf 10min wo geprüft wird, ob Sonos läuft.
Wenn ja, dann selbes einmalige at noch mal definieren (defmod).
Wenn Sonos nicht mehr läuft, dann Display aus und gut.

Das mit den einmaligem at, damit kein rotes "Speicherfragezeichen" kommt...

Geht sicher auch anders das Fragezeichen zu "verhindern" aber so läuft es bei mir problemlos...

Habe dieses Konstrukt für einige Dinge im Einsatz.
Kann ja später mal ein Beispiel posten...

Ansonsten wie (fast) immer (bei fhem): es gibt viele (weitere) Möglichkeiten...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

linuxq

Danke für Deine Tips. Das folgende funktioniert jetzt erst mal, ohne IF Anwesenheit erst mal:


define touchscreen_sonos_on at +*00:10:00 { fhem "set sw_touch on" if( ReadingsVal("Sonos_Sonos","state",0) == "PLAYING");; }
attr touchscreen_sonos_on room Sonos,Technik,Wohnzimmer


Gruß Marcel

MadMax-FHEM

#3
Ja so ähnlich allerdings neige ich dazu (bzw. tue es) "komplexere" Dinge in eine Sub in myUtils auszulagern.

Siehe: https://wiki.fhem.de/wiki/99_myUtils_anlegen

Ich mache es an diversen Stellen wie folgt (Beispiel auf dich angepasst [soweit ich das konnte] bzw. teilweise mit "Pseudo-Code"):


sub my_CheckAndTurnOffSonos()
{
  if(ReadingsVal("Sonos_Sonos","state","n.a") eq "PLAYING")
  {
    Log3(undef, 1, "my_CheckAndTurnOffSonos: Sonos playing später noch mal prüfen.");
    fhem("delete atCheckAndTurnOffSonos");
    fhem("defmod atCheckAndTurnOffSonos at +00:10:00 {my_CheckAndTurnOffSonos()}");
  }
  else # oder besser elsif und sicherheitshalber checken, ob der Status tatsächlich passt
  {
    fhem("set Sonos_Sonos off"); # bzw. halt den Befehl für Stopp
    fhem("delete atCheckAndTurnOffSonos");
    Log3(undef, 1, "my_CheckAndTurnOffSonos: Sonos spielen nicht mehr daher ausgeschaltet.");
  }
}


Beim Notify, dass Abwesend dann eben nicht direkt ausschalten, sondern die Funktion aufrufen:

define nCheckAndTurnOffSonos notify PRESENCE:abwesend {my_CheckAndTurnOffSonos()}

EDIT: das delete muss verm. nicht sein (hatte irgendwie das Gefühl, dass es ohne nicht ging / mag mich aber täuschen). Die Logausgaben mache ich nur während der Erprobung (damit ich sehe, dass es tut) und dann nur noch die die bleiben sollen, z.B. das Ausschalten...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

gloob

Wie wäre es denn mit einem Watchdog der eine "Sonos is playing" Dummy setzt. Das kann man dann wunderbar im Screensaver für das Display abfragen.
Ist bestimmt eleganter als jedes mal ein AT zu erzeugen und zu löschen.

https://wiki.fhem.de/wiki/Watchdog
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway