Hallo zusammen,
erst mal wünsche ich ein gesundes neues Jahr!
ich möchte für verschiedene Geräte das Reading "NoSleep" nach 1 Stunde auf 0 setzen, nachdem es auf 1 gesetzt wurde.
Ich habe es mit DoIf für ein einzelnes Gerät hinbekommen, stecke hier aber fest ...
hier mein Ansatz:
defmod di_noSleep DOIF ([$DEVICE:NoSleep] = 1) (defmod at_NoSleepAus_NAME at +02:03:00 set my_devicename NoSleep 0)
attr di_noSleep do always
nun möchte ich für jedes Gerät ein eigenes DoIf definieren lassen, aber die Erweiterung des Namens klappt so nicht:
defmod at_NoSleepAus_$NAME at ....
auch die Definition des Gerätes in welchem aus dem AT heraus das Reading gesetzt werden soll passt nicht
at +02:03:00 set $NAME NoSleep 0
ich bräuchte mal ein paar Tips oder Hinweise, wie man es richtig/besser macht.
Ich würde es vermutlich über Templates realisieren:
http://wiki.fhem.de/wiki/DOIF/Templates
oder:
DOIF ([":^NoSleep"] and [$DEVICE:NoSleep] == 1) (defmod at_NoSleepAus_$DEVICE at +02:03:00 set my_devicename NoSleep 0)
Ich würde es im Perl-Modus mit set_Exec lösen, damit kann man benannte Timer definieren.
Vielen Dank, so geht es!
defmod di_noSleep DOIF ([":^NoSleep"] and [$DEVICE:NoSleep] == 1) (defmod at_NoSleepAus_$DEVICE at +02:03:00 set $DEVICE NoSleep 0)
attr di_noSleep do always
Zitat von: dirk.k am 01 Januar 2021, 20:23:22
Vielen Dank, so geht es!
defmod di_noSleep DOIF ([":^NoSleep"] and [$DEVICE:NoSleep] == 1) (defmod at_NoSleepAus_$DEVICE at +02:03:00 set $DEVICE NoSleep 0)
attr di_noSleep do always
Wenn du einiges an Systemperformance einsparen willst, solltest du versuchen, die betroffenen Devices hier [":^NoSleep"] genauer zu spezifizieren, ansonsten triggert jedes Event des System dein DOIF.
Hi Damian,
ich habe noch ein paar Verständnisfragen ...
meinst du noch genauer als [":^NoSleep"]?
Ich könnte noch ["^WeMos:^NoSleep"] nehmen, da alle betroffenen Gerätenamen mit "WeMos" anfangen.
Andererseits gibt es keine anderen Geräte mit einem Event auf "NoSleep".
und wo ist der Unterschied zwischen
defmod di_noSleep DOIF ([":^NoSleep"] and [$DEVICE:NoSleep] == 1) (
und
defmod di_noSleep DOIF ([":^NoSleep"] == 1) (
doif ist so gewaltig, ich möchte die Details wirklich verstehen ... und Wiki sowie Forum habe ich durch ...
Bei ["^WeMos:^NoSleep"] wird DOIF vom Hauptprozess nur geweckt, wenn Events von WeMos kommen.
[":^NoSleep"] oder ["^WeMos:^NoSleep"] sind reine Ereignistrigger, sie liefern nur wahr oder falsch und keinen Inhalt eines Readings, siehe Commandref.