Warnung im DOIF, aber funktioniert: condition c01: Odd number of elements in ano

Begonnen von Invers, 09 Oktober 2020, 16:11:41

Vorheriges Thema - Nächstes Thema

Invers

Was könnte denn hier falsch sein? Scheint doch zu funktionieren.
Warnung:

condition c01: Odd number of elements in anonymous hash




Internals:
   DEF        ([06:00-02:00,+:10] and
        [du_anwesend] eq "present" and
        ({ReadingsAge("A51H","batteryPercent",99)} >600 or
         {ReadingsAge("A51K","batteryPercent",99)} >600))
   
    (set A51H statusrequest)
    (set A51K statusrequest)
   FUUID      5f806573-f33f-8098-5e3d-a0ff030026cc1340
   MODEL      FHEM
   NAME       DI_Handys_wecken
   NOTIFYDEV  du_anwesend,global
   NR         58783
   NTFY_ORDER 50-DI_Handys_wecken
   STATE      initialized
   TYPE       DOIF
   VERSION    22913 2020-10-04 21:46:02
   READINGS:
     2020-10-09 16:04:34   cmd             0
     2020-10-09 16:04:34   mode            enabled
     2020-10-09 16:04:34   state           initialized
     2020-10-09 16:04:35   timer_01_c01    10.10.2020 06:00:00
     2020-10-09 16:04:35   timer_02_c01    10.10.2020 02:00:00
     2020-10-09 16:04:35   timer_03_c01    09.10.2020 16:10:00
   Regex:
     accu:
     cond:
       du_anwesend:
         0:
           &STATE     ^du_anwesend$
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::DOIF_time($hash,0,1,$wday,$hms) and          ::InternalDoIf($hash,'du_anwesend','STATE') eq "present" and         ({ReadingsAge("A51H","batteryPercent",99)} >600 or           {ReadingsAge("A51K","batteryPercent",99)} >600)
   days:
   do:
     0:
       0          set A51H statusrequest
       1          set A51K statusrequest
     1:
   helper:
     DEVFILTER  ^global$|^du_anwesend$
     NOTIFYDEV  global|du_anwesend
     globalinit 1
     last_timer 3
     sleeptimer -1
   internals:
     all         du_anwesend:STATE
   interval:
     0          -1
     1          0
   intervalfunc:
     2          ::DOIF_time($hash,0,1,$wday,$hms)
   intervaltimer:
     0          2
     1          2
   localtime:
     0          1602302400
     1          1602288000
     2          1602252600
   realtime:
     0          06:00:00
     1          02:00:00
     2          16:10:00
   time:
     0          06:00:00
     1          02:00:00
     2          +:10
   timeCond:
     0          0
     1          0
     2          0
   timer:
     0          0
     1          0
     2          0
   timers:
     0           0  1  2
   triggertime:
     1602252600:
       localtime  1602252600
       hash:
     1602288000:
       localtime  1602288000
       hash:
     1602302400:
       localtime  1602302400
       hash:
   uiState:
   uiTable:
Attributes:
   do         always
   room       Wohnung->Wohnzimmer


Im Log erscheint auch der Fehler
2020.10.09 15:32:54 1: PERL WARNING: Odd number of elements in anonymous hash at (eval 322041) line 1.
2020.10.09 15:32:54 3: eval: DI_Handys_wecken: warning in condition c01
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

Damian

Warum hast du geschweifte Klammern um die ReadingsAge-Funktion gesetzt? Die Bedingungen im DOIF-FHEM-Modus sind bis auf Dinge in eckigen Klammern schon Perl.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Invers

Danke für den Tipp. Wusste ich nicht. Das war der Fehler von mir. Nun gehts.
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

Per

Ist es sinnvoller, {ReadingsAge("A51H","batteryPercent",99) oder [?A51H:batteryPercent:sec] zu verwenden?

Damian

Zitat von: Per am 03 März 2021, 22:45:44
Ist es sinnvoller, {ReadingsAge("A51H","batteryPercent",99) oder [?A51H:batteryPercent:sec] zu verwenden?

Das dürfte ziemlich egal sein, hinter beiden Angaben verbergen sich die gleichen Perlfunktionen zur Berechnung der Zeit. Die zweite kann man direkt im FHEM-Ausführungsteil des DOIFs angeben, die erste muss man zuvor noch in Klammern verpacken: {(...)}
Im DOIF-Perl-Modus würde eher Perlfunktionen verwenden, wenn sie nicht triggern sollen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF