mein $EVENT wirft error: Wrong timespec $EVENT: either HH:MM:SS or {perlcode}

Begonnen von holle75, 23 Januar 2021, 13:09:40

Vorheriges Thema - Nächstes Thema

holle75

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.

Damian

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

holle75

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 ein ähnliches Problem, glaube ich.

Von ihm war dieses DOIF primär auch mal ursprünglich als er mir mit der Beregnung geholfen hatte :)



Damian

Wenn im Event das Device steht, dann kannst du es mit

(... and ReadingsVal($event,"state","") eq "auto")

versuchen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

holle75

Danke Damian, das wars. Seltsam, dass es "früher" mit der falschen Definition auch funktioniert hat.

holle75

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?

Damian

ReadingsVal ist eine Perlfunktion, sie besitzt keine Triggerfunktionalität.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF