Licht nach x Minuten aus, wenn enigma2-Receiver Status wechselt von on nach off

Begonnen von der_da, 11 Januar 2016, 11:10:31

Vorheriges Thema - Nächstes Thema

marvin78

Mit was vergleichst du denn oben ReadingsVal("LED_TV","state","on") ?

Es funktioniert vielleicht, aber tut es auch wirklich das, was es soll?

Brice

LED_TV ist eine FS20ST. Mir geht es darum, dass der on-for-timer-Befehl nur dann geschickt wird, wenn die LED an ist (bei aus würde diese ja für für die definiert Zeit an gehen).

Ich nutze dieses Konstrukt seit längerer Zeit für mehrere Dinge, z.B.

Bewegungsmelder_Bad:on.* {if ((ReadingsVal("Radio_Bad","state","off") && ($hour >= 5 && $hour <= 22))){ fhem "set Radio_Bad on-for-timer 180" }}

Das kann sicher optimiert werden. Meine Kenntnisse reichen für mehr nicht aus und alles funktioniert so, wie es von mir beabsichtigt ist.
FHEM auf RPi 4 4GB (Buster) | produktiv) CUL 868 für FS20 | S300TH | KS300 | Max!Cube als CUN 868 für TechemWZ | HM-MOD-RPI-PCB für HM | Z-Wave ZME_UZB1 | FRITZ!DECT 200 | HUE | Lightify | Echo Dot | WS3080

marvin78

Das tut es sicher nicht.

Du musst den Wert, der aus dem Reading "Radio_Bad" kommt mit irgendetwas vergleichen.


Bewegungsmelder_Bad:on.* {if ((ReadingsVal("Radio_Bad","state","off") eq "off" && ($hour >= 5 && $hour <= 22))){ fhem "set Radio_Bad on-for-timer 180" }}

Man könnte das ganze Geraffel aber auch weg lassen und mit Filtern arbeiten.

Bewegungsmelder_Bad:on.* {if ($hour >= 5 && $hour <= 22){ fhem "set Radio_Bad:FILTER=STATE!=on on-for-timer 180" }}

Brice

Wir driften schon wieder ab.

Zitat von: marvin78 am 12 Januar 2016, 10:33:29
Das tut es sicher nicht.
Es hat sich aus der Familie seit Einrichtung im Sommer 2015 noch niemand beschwert :-)

Aber richtig, der Vergleich (eq "off") fehlt, den hatte ich in anderen Notify eingebaut. Ich habe keine Ahnung, warum es trotzdem funktioniert.

Bewegungsmelder_Bad:on.* {if ($hour >= 5 && $hour <= 22){ fhem "set Radio_Bad:FILTER=STATE!=on on-for-timer 180" }}
Danke. Funktioniert und ist einfacher, ich werde mich mal mit Filter beschäftigen.
FHEM auf RPi 4 4GB (Buster) | produktiv) CUL 868 für FS20 | S300TH | KS300 | Max!Cube als CUN 868 für TechemWZ | HM-MOD-RPI-PCB für HM | Z-Wave ZME_UZB1 | FRITZ!DECT 200 | HUE | Lightify | Echo Dot | WS3080

betateilchen

Zitat von: Brice am 12 Januar 2016, 11:21:28
Ich habe keine Ahnung,

...  8)

Zitat von: Brice am 12 Januar 2016, 11:21:28
warum es trotzdem funktioniert.

Weil sowohl "on" als auch "off" in diesem if() IMMER einen logischen Wert 1 liefern und deshalb in deiner mit && (logisches UND) verknüpften Abfrage immer nur der zweite Vergleich relevant ist.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Brice

Danke für die Erklärung.

Ich habe meine cfg durchsucht und es war die einzige relevante Definition, in der das eq "<irgendwas>" fehlte. Insoweit hatte ich mich am falschen Codebeispiel orientiert.

Und zum Thema Automatisierung, aber wahrscheinlich nichts für den Theadersteller:

Bisher wurde mein MediaCenter (Fernseher, Bose, und Peripherie, aber nicht die SetTopBox, die geht eh in den DeepStandBy) per Fritz!DECT200 ausgeschaltet. Gleichzeitig wurde über per Notify die sub "Bettfertig" eingestellt (im Schlafzimmer die HUE eingeschaltet und ein bestimmter Radiosender auf den WLan-Lautsprecher gestreamt).

DECT200_3:set_off.* {
if ($hour >=21) {Bettfertig}
}


Des Weiteren hatte ich per Notify" Alles Aus" über eine Fernbedienung (FS20 S8) alle nicht mehr benötigten Verbraucher ausgeschaltet.

In die Funktion "VUPlus_aus" habe ich jetzt die sub "Bettfertig" dahingehend modifiziert, dass alles ausgeschaltet wird. Das spart einen weiteren Klick auf der FB.
sub
Bettfertig()
{
  {fhem("set MyPlayer http://streams.harmonyfm.de/harmonyfm/mp3/livestream.m3u")};
  {fhem("set MyPlayer on")};
  {fhem("set MyPlayer volume 20")};
  {fhem("set HUEDevice3 on")};
  {fhem("set HUEDevice3 pct 10")};
  {fhem "set LED_TV off"}
  {fhem("set LED_Kueche off")}
  {fhem("set LED_Balkon off")}
  {fhem("set LED_Wohnzimmer off")}
  {fhem("set HUEDevice1 off")}
  {fhem("set HUEDevice2 off")}
  {fhem("set Drucker off")}
  }


Da das Intervall für die Aktualisierung der Readings der SetTopBox auf 45 sek steht, bleibt i.d.R. genug Zeit, um das Zimmer nicht im Dunkeln verlassen zu müssen. Falls die SetTopBox nicht eingeschaltet war, wird weiterhin die FS20 S8 benutzt.

Der Thread hat mich weitergebracht, ich konnte meine Automatisierungen verbessern.

Verbesserungen in meinem Code sind weiterhin willkommen
FHEM auf RPi 4 4GB (Buster) | produktiv) CUL 868 für FS20 | S300TH | KS300 | Max!Cube als CUN 868 für TechemWZ | HM-MOD-RPI-PCB für HM | Z-Wave ZME_UZB1 | FRITZ!DECT 200 | HUE | Lightify | Echo Dot | WS3080

der_da

Schön, wie hier aus einer simplem Anfrage ein langer Thread wird  :)
Ich habe es nun hinbekommen (Danke vor Allem an betateilchen).
Nun habe ich aber immer noch ein kleines Problem(chen):
Ich prüfe nun mit Wz.TvReceiver.power.*off auf ein Off-Event und das klappt auch. Allerdings scheint es ab und zu vorzukommen, dass ein Off-Event erzeugt wird, obwohl der Receiver definitiv nicht off war. Gestern abend ist zwei mal einfach so das Licht ausgegangen, mitten beim Fernsehen. Man müsste also solche kurzen Aussetzer irgendwie abfangen und erst dann auslösen, wenn innerhalb einer gewissen Zeit nach einem Off-Event nicht wieder ein On-Event auftaucht. Wie? :-\

marvin78


Otto123

Oder DOIF
define Tipp DOIF ([Wz.TvReceiver:power] eq "off")(set Fernsehboard on-for-timer 10)
attr Tipp wait 5


Vorausgesetzt ich habe dein Device richtig verstanden Wz.TvReceiver und das reading ist power - richtig?

ZitatIch prüfe nun mit Wz.TvReceiver.power.*off auf ein Off-Event und das klappt auch.
Damit prüfst Du auf alles was Wz TvReceiver power und off enthält - die alten Hasen mögen mich korregieren  ???

Schau Dir das mal im Eventmonitor ne Weile an.

- wenn also im Programm Titel "off" vorkommt geht das Licht aus.

Wäre meine Erklärung für off "Events"


Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Brice

Zitat von: der_da am 11 Januar 2016, 11:10:31
...nach einiger Zeit die diversen Lichter selbst ausschalten würde...

Du teilst uns zuwenig Details mit. Falls dein Device <Fernsehboard> eine Structure ist, kann es zu unerwünschten Effekten kommen.



FHEM auf RPi 4 4GB (Buster) | produktiv) CUL 868 für FS20 | S300TH | KS300 | Max!Cube als CUN 868 für TechemWZ | HM-MOD-RPI-PCB für HM | Z-Wave ZME_UZB1 | FRITZ!DECT 200 | HUE | Lightify | Echo Dot | WS3080

der_da

Hallo!
Danke für die Tipps.
Mein Device <Fernsehboard> ist ein dummy.
Und ich werde mal eine Weile den Eventmonitor beobachten, wann da "off"-Events auftauchen, obwohl keine auftauchen sollten.

Das da hat übrigens bei mir nicht funktioniert:
define Tipp DOIF ([Wz.TvReceiver:power] eq "off")(set Fernsehboard on-for-timer 10)
attr Tipp wait 5

::)
Wenn ich es richtig verstehe, dann wird das DOIF erst dann ausgeführt (set Fernsehboard on...), wenn 5 Sekunden vergangen sind und die Bedingung dann immer noch wahr ist (Wz.TvReceiver:power eq "off"). Sollte also in der Zwischenzeit (nach 5 Sekunden) Wz.TvReceiver:power wieder "on" sein, wird das DOIF nicht ausgeführt? Wenn ja, werde ich mal im Eventlog prüfen, wie lange es dauert, bis aus dem "off" wieder ein "on" wurde und eventuell die Zeiten anpassen.

Außerdem werde ich mich mal mit dem watchdog beschäftigen (danke an marvin78).

Otto123

Moin,

Bei mir hat das eigentlich genau so funktioniert .. ???

naja mein Beispiel ist quasi ein watchdog, anders funktioniert das device watchdog auch nicht. Du hast ein richtig beschrieben  :) mit einer Ausnahme: Das DOIF wird ausgeführt in dem Moment wo power nach off wechselt. Wenn Innerhalb von 5 sec power wieder nach on wechselt würde der Ausführungsteil (zweite Klammer) nicht ausgeführt.

Ich gehe aber davon aus, der Zustand vom reading power wechselt nicht. Aber das Wz.TvReceiver Device (ist doch Enigma oder?) liefert jede Menge Events, auch die von Programm Titeln, wenn da mal "The power off love" (ich weiß falsch geschrieben, kommt aber beim TV Programm schon mal vor)  oder so kommt, triggert dein notify. Also nur als Idee ...

Noch ein Hinweis: Mit "hat nicht funktioniert" kann hier keiner was anfangen. Du müsstest dazu schon noch Details liefern. Schau Dir bitte mal die Detailansicht des DOIFs an, da stehen jede Menge Infos. Zur Not mach einen Screenshot vor und nach dem ausschalten des Gerätes. Ob im Log zu dem Zeitpunkt was steht wäre auch interessant. Du kannst auch das Logging des Gerätes hochschrauben.

Mir kommt noch eine andere Idee, bevor Du ein zusätzliches Watchdog baust, sollten wir die Sache mit dem Event genau untersuchen. Logge doch einfach in Deinem notify den event mit. So in etwa (nicht getestet)

Log 1, ("Poweroff ausgelöst durch: $EVENT");

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

der_da

Hallo Otto123,
danke für deine Erklärung. Nein, es wird nur das Event "power" ausgewertet und siehe da, vorhin kam folgendes vor:
2016-01-14 11:01:55 ENIGMA2 Wz.TvReceiver power: off
2016-01-14 11:02:13 ENIGMA2 Wz.TvReceiver power: on
Und das, obwohl definitiv der Receiver durchlief. Also werde ich mal die Zeit für das Doif auf 30 Sekunden erhöhen, in der Hoffnung, dass das ausreicht.  ;)

Otto123

Sehr interessant. Ich logge das mal bei mir mit.

Das Enigma Modul setzt allerdings auch das power reading auf off im Standby. Schaltest Du den Receiver in den Deep Standby? Dann geht presence auf absent.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

der_da

Ich habe jetzt mal die Auswertung von power geändert auf presence. Das scheint zuverlässiger zu melden.

"funktioniert nicht" bedeutet:

Mein DOIF:
define TV_aus_dann_Licht_aus DOIF ([Wz.TvReceiver.presence] eq "absent") (set Fernsehboard off)
attr TV_aus_dann_Licht_aus wait 30


Folgendes meldet das EventLog beim Einschalten bzw. Ausschalten des Receivers:
2016-01-14 14:02:05 ENIGMA2 Wz.TvReceiver presence: present
2016-01-14 14:04:45 ENIGMA2 Wz.TvReceiver presence: absent


Aber das DOIF wird nicht getriggert. STATE ist immer noch initialized, obwohl ich den Receiver mehrfach ein- und ausgeschaltet habe (und auch die 30 Sekunden gewartet habe).