DOIF führt cmd_1_2 und cmd_1_3 nicht immer aus - Bug?

Begonnen von Pati_Alpha, 09 Januar 2020, 21:53:23

Vorheriges Thema - Nächstes Thema

Pati_Alpha

Hey,

mein DOIF führt nur manchmal den 2. und 3. command aus.
Und manchmal wechselt er auch nicht korrekt auf cmd_2!
(Das Problem hab ich schon mal in einem anderen Thread gesehen)

Genauer gesagt: Setze ich ihn manchmal auf cmd_1, führt er cmd_1_2 und cmd_1_3 nicht aus, sondern nur cmd_1_1, geht danach aber auf cmd_2, falls er aber alle 3 ausführt, bleibt er danach auf cmd_1 hängen!

Ich kann es mir nicht erklären!
Mit "do_always" kann es nicht zutun haben, da ich das Verhalten ja manuell provozieren kann indem ich das DOIF auf cmd_1 setze!

Internals:
   DEF        ([HM_68D8CF:"open"] and [Wohnzimmer_Lampen] eq "off" and [SonneObenIntern] eq "off" and [Jemand] eq "on" and [LichtBewegung] eq "on") (set lampeAmFensterNote disable ; set flurNote disable ; set HUEDevice65537 pct 10 ; set HUEDevice65542 pct 10 ; define SchlafzimmertuerLichtAus1 at +00:03:00 set HUEDevice65537 off ; define SchlafzimmertuerLichtAus2 at +00:03:00 set HUEDevice65542 off) (set lampeAmFensterNote enable ; set lampeAmFensterNote cmd_2) (set flurNote enable ; set flurNote cmd_2)
   FUUID      5cd0936b-f33f-0d46-981c-c5a0051844b9f5d6
   MODEL      FHEM
   NAME       SchlafzimmertuerLichtNote
   NOTIFYDEV  Wohnzimmer_Lampen,SonneObenIntern,global,HM_68D8CF,Jemand,LichtBewegung
   NR         883
   NTFY_ORDER 50-SchlafzimmertuerLichtNote
   STATE      cmd_1
   TYPE       DOIF
   VERSION    20811 2019-12-22 17:45:08
   READINGS:
     2020-01-09 21:49:18   Device          Wohnzimmer_Lampen
     2020-01-09 21:49:37   cmd             1.3
     2020-01-09 21:49:37   cmd_event       set_cmd_1
     2020-01-09 21:49:37   cmd_nr          1
     2020-01-09 21:49:37   cmd_seqnr       3
     2020-01-09 21:49:18   e_Wohnzimmer_Lampen_STATE on
     2020-01-09 20:30:03   mode            enabled
     2020-01-09 21:49:37   state           cmd_1
     2020-01-09 21:49:37   wait_timer      no timer
   Regex:
     accu:
     cond:
       HM_68D8CF:
         0:
           &STATE     ^HM_68D8CF$
       Jemand:
         0:
           &STATE     ^Jemand$
       LichtBewegung:
         0:
           &STATE     ^LichtBewegung$
       SonneObenIntern:
         0:
           &STATE     ^SonneObenIntern$
       Wohnzimmer_Lampen:
         0:
           &STATE     ^Wohnzimmer_Lampen$
   attr:
     cmdState:
     wait:
       0:
         0
         5
         5
     waitdel:
   condition:
     0          ::EventDoIf('HM_68D8CF',$hash,'open',1) and ::InternalDoIf($hash,'Wohnzimmer_Lampen','STATE') eq "off" and ::InternalDoIf($hash,'SonneObenIntern','STATE') eq "off" and ::InternalDoIf($hash,'Jemand','STATE') eq "on" and ::InternalDoIf($hash,'LichtBewegung','STATE') eq "on"
   do:
     0:
       0          set lampeAmFensterNote disable ; set flurNote disable ; set HUEDevice65537 pct 10 ; set HUEDevice65542 pct 10 ; define SchlafzimmertuerLichtAus1 at +00:03:00 set HUEDevice65537 off ; define SchlafzimmertuerLichtAus2 at +00:03:00 set HUEDevice65542 off
       1          set lampeAmFensterNote enable ; set lampeAmFensterNote cmd_2
       2          set flurNote enable ; set flurNote cmd_2
     1:
   helper:
     DEVFILTER  ^global$|^Wohnzimmer_Lampen$|^SonneObenIntern$|^HM_68D8CF$|^LichtBewegung$|^Jemand$
     NOTIFYDEV  global|Wohnzimmer_Lampen|SonneObenIntern|HM_68D8CF|LichtBewegung|Jemand
     event      on
     globalinit 1
     last_timer 0
     sleepdevice set_cmd_1
     sleepsubtimer -1
     sleeptimer -1
     timerdev   Wohnzimmer_Lampen
     timerevent on
     triggerDev Wohnzimmer_Lampen
     DOIF_eventa:
       cmd_nr: 1
       cmd_seqnr: 3
       cmd_event: set_cmd_1
       cmd_1
     DOIF_eventas:
       cmd_nr: 1
       cmd_seqnr: 3
       cmd_event: set_cmd_1
       state: cmd_1
     timerevents:
       on
     timereventsState:
       state: on
     triggerEvents:
       on
     triggerEventsState:
       state: on
   internals:
     all         Wohnzimmer_Lampen:STATE SonneObenIntern:STATE Jemand:STATE LichtBewegung:STATE
   readings:
   trigger:
     all         HM_68D8CF
   uiState:
   uiTable:
Attributes:
   wait       0,5,5


Danke fürs Lesen!
Patrick

amenomade

Trennzeichen in Befehlen ist bei DOIF Koma, nicht Semikolon
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

amenomade

#2
Laut "list" deines DOIFs ist er korrekt auf cmd1 / cmd1.3 gelandet, nachdem Du set cmd1 gemacht hast.

ZitatSetze ich ihn manchmal auf cmd_1, führt er cmd_1_2 und cmd_1_3 nicht aus, sondern nur cmd_1_1, geht danach aber auf cmd_2
wahrscheinlich hat sich inzwischen eine Bedingung geändert.  Interessanter wäre ein "list" des DOIFs wenn er auf cmd_2 gegangen ist.
Zitatfalls er aber alle 3 ausführt, bleibt er danach auf cmd_1 hängen!
das ist normal, solange die Bedingungen sich nicht geändert haben
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Pati_Alpha

Zitat von: amenomade am 09 Januar 2020, 22:52:50
Trennzeichen in Befehlen ist bei DOIF Koma, nicht Semikolon

Hey, danke für deine Antworten!
Ok, das ist interessant, denn er führt im ersten Block definitiv trotzdem alle Befehle aus?

Das mit dem List kann sein, vielleicht habe ich "list" gemacht, als es grade mal funktioniert hat.
Die Bedingungen trafen eigentlich gar nicht zu, ich habe ja manuell "cmd_1" angestoßen.

amenomade

#4
Zitat von: Pati_Alpha am 10 Januar 2020, 12:27:35
Die Bedingungen trafen eigentlich gar nicht zu, ich habe ja manuell "cmd_1" angestoßen.
Falsch. Wegen wait Timer.

Nehmen wir folgendes DOIF:
defmod di3 DOIF ([dummy1] eq "on") () () ()
attr di3 wait 0,30,30

und sagen wir, dummy1 ist am Anfang auf "on"

Führen wir "set di3 cmd_1" aus
(1)- es schaltet auf cmd 1.1
(2)- 30s später auf cmd 1.2
(3)- 30s später auf cmd 1.3

Nehmen wir jetzt an, dummy1 wechselt auf "off" zwischen (2) und (3). So wird es laufen:
(1)- es schaltet auf cmd 1.1
(2)- 30s später auf cmd 1.2
(2,5)- dummy1 off => dummy1 triggert das DOIF, die Bedingung wird geprüft, ist nicht mehr wahr => es löscht alle Timer und schaltet auf cmd_2

2020-01-10 19:04:04 DOIF di3 cmd_nr: 1
2020-01-10 19:04:04 DOIF di3 cmd_seqnr: 1
2020-01-10 19:04:04 DOIF di3 cmd: 1.1
2020-01-10 19:04:04 DOIF di3 cmd_event: set_cmd_1
2020-01-10 19:04:04 DOIF di3 cmd_1_1
2020-01-10 19:04:04 DOIF di3 wait_timer: 10.01.2020 19:04:34 cmd_1_2 set_cmd_1

2020-01-10 19:04:34 DOIF di3 wait_timer: no timer
2020-01-10 19:04:34 DOIF di3 cmd_nr: 1
2020-01-10 19:04:34 DOIF di3 cmd_seqnr: 2
2020-01-10 19:04:34 DOIF di3 cmd: 1.2
2020-01-10 19:04:34 DOIF di3 cmd_event: set_cmd_1
2020-01-10 19:04:34 DOIF di3 cmd_1_2
2020-01-10 19:04:34 DOIF di3 wait_timer: 10.01.2020 19:05:04 cmd_1_3 set_cmd_1

2020-01-10 19:04:51 DOIF di3 wait_timer: no timer
2020-01-10 19:04:51 DOIF di3 cmd_nr: 2
2020-01-10 19:04:51 DOIF di3 cmd: 2
2020-01-10 19:04:51 DOIF di3 cmd_event: dummy1
2020-01-10 19:04:51 DOIF di3 cmd_2
2020-01-10 19:04:51 DOIF fehlDOIF cmd_event: dummy1
2020-01-10 19:04:51 dummy dummy1 off


Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus