in meiner Beregnung habe ich dieses (jetzt extrem runtergebrochene) DOIF
defmod BeregnungDOIF_Mapping DOIF ([BeregnungDummy_Helper] and [?$EVENT] eq "auto") \
(set [$EVENT:switch] off)
list
Internals:
DEF ([BeregnungDummy_Helper] and [?$EVENT] eq "auto")
(set [$EVENT:switch] off)
FUUID 5c86875d-f33f-6bb4-cdfd-be64c9627002003b
MODEL FHEM
NAME BeregnungDOIF_Mapping
NOTIFYDEV global,BeregnungDummy_Helper
NR 76
NTFY_ORDER 50-BeregnungDOIF_Mapping
STATE cmd_2
TYPE DOIF
VERSION 23466 2021-01-03 17:14:46
READINGS:
2021-01-23 13:00:42 cmd 2
2021-01-23 13:00:42 cmd_event BeregnungDOIF_Mapping
2021-01-23 13:00:42 cmd_nr 2
2021-01-23 13:00:27 mode enabled
2021-01-23 13:00:42 state cmd_2
2021-01-23 12:59:08 timer_01_c01 error: Wrong timespec $EVENT: either HH:MM:SS or {perlcode}
Regex:
accu:
cond:
BeregnungDummy_Helper:
0:
&STATE ^BeregnungDummy_Helper$
attr:
cmdState:
wait:
waitdel:
condition:
0 ::InternalDoIf($hash,'BeregnungDummy_Helper','STATE') and ::DOIF_time_once($hash,0,$wday) eq "auto"
do:
0:
0 set [$EVENT:switch] off
1:
helper:
DEVFILTER ^global$|^BeregnungDummy_Helper$
NOTIFYDEV global|BeregnungDummy_Helper
globalinit 1
last_timer 1
sleeptimer -1
timerdev
timerevent
timerevents
timereventsState
triggerDev
DOIF_eventa:
cmd_nr: 2
cmd: 2
cmd_event: BeregnungDOIF_Mapping
cmd_2
DOIF_eventas:
cmd_nr: 2
cmd: 2
cmd_event: BeregnungDOIF_Mapping
state: cmd_2
internals:
all BeregnungDummy_Helper:STATE
localtime:
time:
0 $EVENT
timeCond:
0 0
timer:
0 0
uiState:
uiTable:
Attributes:
Das $EVENT habe ich auch mal mitgeloggt und enthält den entsprechenden Wert. Sprich, das DOIF macht was es machen soll.
Was bedeutet die Fehlermeldung "timer_01_c01 error: Wrong timespec $EVENT: either HH:MM:SS or {perlcode}"?
Verständnisfehler meinerseits was $EVENT macht, oder Syntax-Problem?
Grüße!
H.
Zitat von: holle75 am 23 Januar 2021, 13:09:40
in meiner Beregnung habe ich dieses (jetzt extrem runtergebrochene) DOIF
defmod BeregnungDOIF_Mapping DOIF ([BeregnungDummy_Helper] and [?$EVENT] eq "auto") \
(set [$EVENT:switch] off)
list
Internals:
DEF ([BeregnungDummy_Helper] and [?$EVENT] eq "auto")
(set [$EVENT:switch] off)
FUUID 5c86875d-f33f-6bb4-cdfd-be64c9627002003b
MODEL FHEM
NAME BeregnungDOIF_Mapping
NOTIFYDEV global,BeregnungDummy_Helper
NR 76
NTFY_ORDER 50-BeregnungDOIF_Mapping
STATE cmd_2
TYPE DOIF
VERSION 23466 2021-01-03 17:14:46
READINGS:
2021-01-23 13:00:42 cmd 2
2021-01-23 13:00:42 cmd_event BeregnungDOIF_Mapping
2021-01-23 13:00:42 cmd_nr 2
2021-01-23 13:00:27 mode enabled
2021-01-23 13:00:42 state cmd_2
2021-01-23 12:59:08 timer_01_c01 error: Wrong timespec $EVENT: either HH:MM:SS or {perlcode}
Regex:
accu:
cond:
BeregnungDummy_Helper:
0:
&STATE ^BeregnungDummy_Helper$
attr:
cmdState:
wait:
waitdel:
condition:
0 ::InternalDoIf($hash,'BeregnungDummy_Helper','STATE') and ::DOIF_time_once($hash,0,$wday) eq "auto"
do:
0:
0 set [$EVENT:switch] off
1:
helper:
DEVFILTER ^global$|^BeregnungDummy_Helper$
NOTIFYDEV global|BeregnungDummy_Helper
globalinit 1
last_timer 1
sleeptimer -1
timerdev
timerevent
timerevents
timereventsState
triggerDev
DOIF_eventa:
cmd_nr: 2
cmd: 2
cmd_event: BeregnungDOIF_Mapping
cmd_2
DOIF_eventas:
cmd_nr: 2
cmd: 2
cmd_event: BeregnungDOIF_Mapping
state: cmd_2
internals:
all BeregnungDummy_Helper:STATE
localtime:
time:
0 $EVENT
timeCond:
0 0
timer:
0 0
uiState:
uiTable:
Attributes:
Das $EVENT habe ich auch mal mitgeloggt und enthält den entsprechenden Wert. Sprich, das DOIF macht was es machen soll.
Was bedeutet die Fehlermeldung "timer_01_c01 error: Wrong timespec $EVENT: either HH:MM:SS or {perlcode}"?
Verständnisfehler meinerseits was $EVENT macht, oder Syntax-Problem?
Grüße!
H.
Dann eher:
([BeregnungDummy_Helper] eq "auto") ...
Das $EVENT enthält den Device-Namen des Beregners und dessen state soll auf auto geprüft werden.
[BeregnungDummy_Helper] ist der Trigger für den Zweig und bringt das $EVENT mit. So verstehe ich es zumindest.
Hier mal das RAW vom kompletten DOIF (die Log 3 sind jetzt nur zu Testzwecken drin)
defmod BeregnungDOIF_Mapping DOIF (["^Beregner_:^on$"]) \
(set [$DEVICE:switch] on, set SqueezeBoxPlayer_Container talk [$DEVICE:talktext] gestartet) ({Log 3, "1 "."$DEVICE "."$EVENT"})\
DOELSEIF (["^Beregner_:^off$"]) \
(set [$DEVICE:switch] off, set SqueezeBoxPlayer_Container talk [$DEVICE:talktext] beendet) ({Log 3, "2 "."$DEVICE "."$EVENT"})\
DOELSEIF (["^Beregner_:^auto$"]) \
(set [$DEVICE:switch] off) ({Log 3, "3 "."$DEVICE "."$EVENT"})\
DOELSEIF ([BeregnungDummy_Helper] and [?$EVENT] eq "auto" and [?BeregnungDOIF_Trigger:cmd_seqnr] eq "2") \
(set [$EVENT:switch] on) ({Log 3, "4 "."$DEVICE "."$EVENT"})\
DOELSEIF ([BeregnungDummy_Helper] and [?BeregnungDOIF_Trigger:cmd_seqnr] eq "2") \
({Log 3, "5 "."$DEVICE "."$EVENT"})\
DOELSEIF ([BeregnungDummy_Helper] and [?$EVENT] eq "auto") \
(set [$EVENT:switch] off) ({Log 3, "6 "." $DEVICE "."$EVENT"})
attr BeregnungDOIF_Mapping cmdState [$SELF]|[$SELF]|[$SELF]|60*[BeregnungStandarddauer]|[$SELF]|0
attr BeregnungDOIF_Mapping do always
attr BeregnungDOIF_Mapping group Beregnung
ich dachte, es sollte ein Syntax-Fehler sein, aber es gibt recht wenig Beispiele mit $EVENT in den Bedingungen im Forum.
edit: so wird BeregnungDummy_Helper befüllt (Ausschnitt aus dem ellenlangen HauptDOIF)
DOELSEIF (0)
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis2"')) {fhem("set BeregnungDummy_Helper $_")}; foreach (AggrDoIf('@','^Beregner_','Kreisextra','"Kreis2"')) {fhem("set BeregnungDummy_Helper $_")}}
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis2"')) {fhem("set BeregnungDummy_Helper $_")}; foreach (AggrDoIf('@','^Beregner_','Kreisextra','"Kreis2"')) {fhem("set BeregnungDummy_Helper $_")}}
(set $SELF cmd_4)
Lustigerweise hat hier (vor langer Zeit) Per https://forum.fhem.de/index.php/topic,46327.msg740538.html#msg740538 (https://forum.fhem.de/index.php/topic,46327.msg740538.html#msg740538) ein ähnliches Problem, glaube ich.
Von ihm war dieses DOIF primär auch mal ursprünglich als er mir mit der Beregnung geholfen hatte :)
Wenn im Event das Device steht, dann kannst du es mit
(... and ReadingsVal($event,"state","") eq "auto")
versuchen.
Danke Damian, das wars. Seltsam, dass es "früher" mit der falschen Definition auch funktioniert hat.
ah, wie sichere ich das in der Syntax gegen triggern ab? Also das Pendant zum "?"
mmh, wobei das in diesem Kontext egal wie nicht triggern können sollte, weil wo soll das Event herkommen, oder?
ReadingsVal ist eine Perlfunktion, sie besitzt keine Triggerfunktionalität.
Danke