FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Superposchi am 05 Januar 2021, 18:39:06

Titel: nicht funktionierendes DOIF
Beitrag von: Superposchi am 05 Januar 2021, 18:39:06
Hallo, ich bräuchte mal ein paar prüfende Augen.
Ich habe ein DOIF erstellt, dass jeden Tag um 00:01 Uhr den Zähler eines Counters hochsetzen soll. Doch es funktioniert einfach nicht.
Nehme ich die Zeitbedingung raus greift die Prüfung mit "Checkall", ist die Zeitangabe drin, greift sie nicht.

Hier mal das List:
Internals:
   .FhemMetaInternals 1
   DEF        (([00:01]) and ([Saugroboter:counter] == 0))
(setreading Saugroboter counter 1)
DOELSEIF (([00:01]) and ([Saugroboter:counter] == 1))
(setreading Saugroboter counter 2)
DOELSEIF (([00:01]) and ([Saugroboter:counter] == 2))
(setreading Saugroboter counter 3)
   FUUID      5fe98de0-f33f-793a-66fb-730b1a5167487477
   FVERSION   98_DOIF.pm:0.234180/2020-12-26
   MODEL      FHEM
   NAME       Steuerung_Saugroboter_Counter
   NOTIFYDEV  Saugroboter,global
   NR         159
   NTFY_ORDER 50-Steuerung_Saugroboter_Counter
   STATE      initialized
   TYPE       DOIF
   VERSION    23418 2020-12-26 10:04:12
   .attraggr:
   .attrminint:
   READINGS:
     2021-01-05 18:34:16   cmd             0
     2021-01-05 18:34:16   mode            enabled
     2021-01-05 18:34:16   state           initialized
     2021-01-05 18:34:16   timer_01_c01    06.01.2021 00:01:00
     2021-01-05 18:34:16   timer_02_c02    06.01.2021 00:01:00
     2021-01-05 18:34:16   timer_03_c03    06.01.2021 00:01:00
     2021-01-05 18:35:59   wait_timer      no timer
   Regex:
     accu:
     cond:
       Saugroboter:
         0:
           counter    ^Saugroboter$:^counter:
         1:
           counter    ^Saugroboter$:^counter:
         2:
           counter    ^Saugroboter$:^counter:
   attr:
     cmdState:
     waitdel:
   condition:
     0          (::DOIF_time_once($hash,0,$wday)) and (::ReadingValDoIf($hash,'Saugroboter','counter') == 0)
     1          (::DOIF_time_once($hash,1,$wday)) and (::ReadingValDoIf($hash,'Saugroboter','counter') == 1)
     2          (::DOIF_time_once($hash,2,$wday)) and (::ReadingValDoIf($hash,'Saugroboter','counter') == 2)
   days:
   do:
     0:
       0          setreading Saugroboter counter 1
     1:
       0          setreading Saugroboter counter 2
     2:
       0          setreading Saugroboter counter 3
     3:
   helper:
     DEVFILTER  ^global$|^Saugroboter$
     NOTIFYDEV  global|Saugroboter
     globalinit 1
     last_timer 3
     sleeptimer -1
     triggerDev
   intervalfunc:
   localtime:
     0          1609887660
     1          1609887660
     2          1609887660
   readings:
     all         Saugroboter:counter
   realtime:
     0          00:01:00
     1          00:01:00
     2          00:01:00
   time:
     0          00:01:00
     1          00:01:00
     2          00:01:00
   timeCond:
     0          0
     1          1
     2          2
   timer:
     0          0
     1          0
     2          0
   timers:
     0           0
     1           1
     2           2
   triggertime:
     1609887660:
       localtime  1609887660
       hash:
   uiState:
   uiTable:
Attributes:
   alias      Steuerung Counter
   group      Saugroboter
   room       Steuerung->Sonstiges
Titel: Antw:nicht funktionierendes DOIF
Beitrag von: Damian am 05 Januar 2021, 20:05:09
Bei dieser Definition macht checkall nicht viel Sinn.

Es handelt sich hier um drei Bedingungen, die sich gegenseitig ausschließen. Weil die gleiche Zeit in jeder Bedingung vorkommt, wird um 00:01 Uhr auch jede Bedingung geprüft, bis eine wahr ist, genauso wie bei checkall.

PS

Eine Erhöhung um eins würde ich eher als Einzeiler sehen:

DOIF {[00:01]; if ([?Saugroboter:counter] < 3) {fhem"setreading Saugroboter counter ".([?Saugroboter:counter]+1)}}

ohne weitere Attribute.