[gelöst] Variablen im DoIf cmd und weiterer Definition

Begonnen von dirk.k, 01 Januar 2021, 17:57:32

Vorheriges Thema - Nächstes Thema

dirk.k

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.

xenos1984


Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

dirk.k

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

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

dirk.k

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


Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF