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.
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
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
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
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