[gelöst] Fehler im DOIF - ich stehe auf dem Schlauch

Begonnen von Jogi, 06 November 2020, 11:00:12

Vorheriges Thema - Nächstes Thema

Jogi

Hallo,
ich habe mal eine Frage: Folgendes DOIF steht auf cmd4 und ich weiß nicht wieso.
Meiner Meinung nach müsste es auf auf Grund folgender Readings
2020-11-06 10:51:45   e_HUEDevice18_Status 0
     2020-11-06 10:50:45   e_HUEDevice1_Status 1
     2020-11-06 03:10:10   e_VUDuo2_STATE  absent

auf cmd2 stehen.

Internals:
   DEF        (([VUDuo2] eq "on") and [HUEDevice18:Status] eq "1") (set HUEDevice18 off)
DOELSEIF (([VUDuo2] eq "off" or [VUDuo2] eq "absent") and [HUEDevice1:Status] eq "1") (set HUEDevice18 on)
DOELSEIF ([HUEDevice1:Status] eq "0") (set HUEDevice18 off)
DOELSE (set HUEDevice18 off)
   FUUID      5ddabac7-f33f-8efe-b405-25967a8a4a68e1e4
   MODEL      FHEM
   NAME       nFollow2DOIF
   NOTIFYDEV  HUEDevice18,VUDuo2,HUEDevice1,global
   NR         2678
   NTFY_ORDER 50-nFollow2DOIF
   STATE      cmd_4
   TYPE       DOIF
   VERSION    22735 2020-09-05 11:05:46
   READINGS:
     2020-11-06 10:51:45   Device          HUEDevice18
     2020-11-06 10:51:45   cmd             4
     2020-11-06 10:51:45   cmd_event       HUEDevice18
     2020-11-06 10:51:45   cmd_nr          4
     2020-11-06 10:51:45   e_HUEDevice18_Status 0
     2020-11-06 10:50:45   e_HUEDevice1_Status 1
     2020-11-06 03:10:10   e_VUDuo2_STATE  absent
     2020-09-11 21:40:38   mode            enabled
     2020-11-06 10:51:45   state           cmd_4
     2020-11-06 10:51:45   wait_timer      no timer
   Regex:
     accu:
     cond:
       HUEDevice1:
         0:
         1:
           Status     ^HUEDevice1$:^Status:
         2:
           Status     ^HUEDevice1$:^Status:
       HUEDevice18:
         0:
           Status     ^HUEDevice18$:^Status:
         1:
         2:
       VUDuo2:
         0:
           &STATE     ^VUDuo2$
         1:
           &STATE     ^VUDuo2$
         2:
   attr:
     cmdState:
     wait:
       0:
         0
       1:
         30
       2:
         30
       3:
         30
     waitdel:
   condition:
     0          (::InternalDoIf($hash,'VUDuo2','STATE') eq "on") and ::ReadingValDoIf($hash,'HUEDevice18','Status') eq "1"
     1          (::InternalDoIf($hash,'VUDuo2','STATE') eq "off" or ::InternalDoIf($hash,'VUDuo2','STATE') eq "absent") and ::ReadingValDoIf($hash,'HUEDevice1','Status') eq "1"
     2          ::ReadingValDoIf($hash,'HUEDevice1','Status') eq "0"
   do:
     0:
       0          set HUEDevice18 off
     1:
       0          set HUEDevice18 on
     2:
       0          set HUEDevice18 off
     3:
       0          set HUEDevice18 off
   helper:
     DEVFILTER  ^global$|^HUEDevice1$|^HUEDevice18$|^VUDuo2$
     NOTIFYDEV  global|HUEDevice1|HUEDevice18|VUDuo2
     event      onoff: 0,pct: 0,off,Status: 0
     globalinit 1
     last_timer 0
     sleepdevice HUEDevice18
     sleepsubtimer -1
     sleeptimer -1
     timerdev   HUEDevice18
     timerevent onoff: 0,pct: 0,off,Status: 0
     triggerDev HUEDevice18
     timerevents:
       onoff: 0
       pct: 0
       off
       Status: 0
     timereventsState:
       onoff: 0
       pct: 0
       state: off
       Status: 0
     triggerEvents:
       onoff: 0
       pct: 0
       off
       Status: 0
     triggerEventsState:
       onoff: 0
       pct: 0
       state: off
       Status: 0
   internals:
     all         VUDuo2:STATE
   perlblock:
   readings:
     all         HUEDevice18:Status HUEDevice1:Status
   trigger:
   uiState:
   uiTable:
Attributes:
   startup    checkall
   wait       0:30:30:30


Ich bin sicher, dass der Fehler bei mir liegt, aber ich finde ihn nicht.

Wer kann mich erhellen?

amenomade

#1
Um 10:51:45 Uhr wurde HUEDevice18_Status auf 0 gesetzt. Dabei wurde nur Bedingung 1  überprüft, und das DOIF ist auf cmd4 (DOELSE) gelandet.

Seitdem ist nichts mehr passiert.

Zitat von: CommandRefZu beachten ist, dass nur die Bedingungen überprüft werden, die zum ausgelösten Event das dazughörige Device bzw. die dazugehörige Triggerzeit beinhalten.

Wenn Du willst, das bei allen Trigger im DOIF immer alle Bedingungen geprüft werden, musst Du checkall setzen
https://fhem.de/commandref_DE.html#DOIF_checkall
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Jogi

Zitat von: amenomade am 06 November 2020, 18:00:37

Wenn Du willst, das bei allen Trigger im DOIF immer alle Bedingungen geprüft werden, musst Du checkall setzen
https://fhem.de/commandref_DE.html#DOIF_checkall
Vielen Dank,
dass war der entscheidende Tipp.
Das mit dem checkall muss ich mir noch mal genauer ansehen. Ich habe es scheinbar noch nicht ganz verstanden.