In einem DOIF mit do always (s.u.) möchte ich das Logging nur zu Beginn schreiben und nicht mit jeder Ausführung und habe deshalb eine IF Bedingung zusätzlich eingebaut, die nur in den ersten 60 Sekunden eines cmd-Schaltvorgangs aktiv ist.
Laut commandref müsste folgendes im DOIF funktionieren:
"Bei Readingangaben kann die Zeitspanne mit [<Device>:<Reading>:sec] in Sekunden seit der letzten Änderung bestimmt werden."
Allerdings erhalte ich dann "Fehler:IF: unknown expression format: sec ", beim Ausdruck:
IF ([di_WB_Automatik:cmd] == 7 and [di_WB_Automatik:cmd:sec] < 60)
Gibt es noch eine andere Schreibweise, ohne dass ich den DOELSEIF-Zweig verdoppeln muss?
Internals:
CFGFN
DEF ## di_ZumTesten
([HHzaehler:power:avg5] > 0 )
{Log3 "$SELF", 3, "$SELF: cmd_1 avg5= [HHzaehler:power:avg5]"."\nHHzaehler:power ".ReadingsVal("HHzaehler","power","")}
DOELSEIF ([HHzaehler:power:avg5] < 0 )
## Logging nur kurz nach Umschalten
## Fehler:IF: unknown expression format: sec
(IF ([di_WB_Automatik:cmd_nr] == 7 and [di_WB_Automatik:cmd_nr:sec] < 60 )
({Log3 "$SELF", 3, "$SELF: cmd_2 gestartet Shelly_Gen3_Laden_dimmer:pct = [Shelly_Gen3_Laden_dimmer:pct], Sek. seit Umschalten = [di_WB_Automatik:cmd_nr:sec] "} ) )
{Log3 "$SELF", 3, "$SELF: cmd_2 avg5= [HHzaehler:power:avg5]"."\nHHzaehler:power ".ReadingsVal("HHzaehler","power","")}
## DOELSE
## {Log3 "$SELF", 3, "$SELF: cmd_3 power DOELSE "."\nHHzaehler:power ".ReadingsVal("HHzaehler","power","")."\n<name2>:<reading2> ".ReadingsVal("<name2>","<reading2>","")}
FUUID 69825a19-f33f-1d1e-cf3e-cc94c10f25575be8
MODEL FHEM
NAME di_ZumTesten
NOTIFYDEV global
NR 169
NTFY_ORDER 50-di_ZumTesten
STATE deactivated
TYPE DOIF
VERSION 30659 2025-12-25 12:37:16
disableNotifyFn 1
eventCount 79
.attraggr:
.attrminint:
READINGS:
2026-02-07 12:39:50 mode deactivated
2026-02-07 12:39:50 state deactivated
Regex:
attr:
cmdState:
wait:
waitdel:
condition:
do:
0:
helper:
NOTIFYDEV global
uiState:
uiTable:
Gruß
optimizer