Hauptmenü

nicht funktionierendes DOIF

Begonnen von Superposchi, 05 Januar 2021, 18:39:06

Vorheriges Thema - Nächstes Thema

Superposchi

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

Damian

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