Hauptmenü

DOIF-Probleme seit ca. 1 Woche

Begonnen von PatrickR, 22 September 2019, 00:42:11

Vorheriges Thema - Nächstes Thema

PatrickR

Guten Abend!

Seit ca. einer Woche habe ich Probleme mit DOIFs, die immer zuverlässig funktioniert haben. Das letzte Update habe ich gerade ausgeführt.

Eines der problematischen DOIFs:

defmod D_L_AU.GR.Fensteroeffner DOIF ([?$SELF:P_Locked, "locked"] eq "unlocked" and [$SELF:"(open|close)"])\
(set AU.GR.Fensteroeffner $EVENT)\
(set $SELF cmd_2_1)\
\
DOELSEIF ([$SELF:P_Locked, "locked"] eq "unlocked")\
()\
(set $SELF P_Locked locked)\

attr D_L_AU.GR.Fensteroeffner cmdIcon open:fts_window_1w_tilt close:fts_window_1w stop:time_manual_mode
attr D_L_AU.GR.Fensteroeffner cmdState command sent,command sent|unlocked,locked
attr D_L_AU.GR.Fensteroeffner do resetwait
attr D_L_AU.GR.Fensteroeffner event-on-change-reading .*
attr D_L_AU.GR.Fensteroeffner readingList P_Locked
attr D_L_AU.GR.Fensteroeffner setList P_Locked:locked,unlocked open close stop
attr D_L_AU.GR.Fensteroeffner wait 0,0:0,10
attr D_L_AU.GR.Fensteroeffner webCmd P_Locked:open:close:stop

Hintergrund: Das DOIF soll Fehlauslösungen verhindern und wird daher dem eigentlichen Device vorgeschaltet. Ein sich selbst zurücksetzendes Reading (P_Locked) schaltet die Bedienung temporär frei.

Setzt man zunächst P_Locked auf unlocked und sendet dann open passiert Folgendes:

2019-09-22 00:39:34.780 DOIF D_L_AU.GR.Fensteroeffner P_Locked: unlocked
2019-09-22 00:39:34.780 DOIF D_L_AU.GR.Fensteroeffner cmd_seqnr: 1
2019-09-22 00:39:34.780 DOIF D_L_AU.GR.Fensteroeffner cmd: 2.1
2019-09-22 00:39:34.780 DOIF D_L_AU.GR.Fensteroeffner unlocked
2019-09-22 00:39:34.780 DOIF D_L_AU.GR.Fensteroeffner wait_timer: 22.09.2019 00:39:44 cmd_2_2 D_L_AU.GR.Fensteroeffner
2019-09-22 00:39:36.486 DOIF D_L_AU.GR.Fensteroeffner open
2019-09-22 00:39:38.829 DOIF D_L_AU.GR.Fensteroeffner open
2019-09-22 00:39:39.502 DOIF D_L_AU.GR.Fensteroeffner open
2019-09-22 00:39:44.775 DOIF D_L_AU.GR.Fensteroeffner wait_timer: no timer
2019-09-22 00:39:44.781 DOIF D_L_AU.GR.Fensteroeffner P_Locked: locked
2019-09-22 00:39:44.788 DOIF D_L_AU.GR.Fensteroeffner cmd_seqnr: 2
2019-09-22 00:39:44.788 DOIF D_L_AU.GR.Fensteroeffner cmd: 2.2
2019-09-22 00:39:44.788 DOIF D_L_AU.GR.Fensteroeffner locked

Wie man sieht wird beim Senden von open weder der wait_timer zurückgesetzt noch das Event an AU.GR.Fensteroeffner durchgereicht.

Der Vollständigkeit halber noch ein list des DOIF:

Internals:
   DEF        ([?$SELF:P_Locked, "locked"] eq "unlocked" and [$SELF:"(up|down|stop|ventilate)"])
(set AU.GR.Torantrieb $EVENT)
(set $SELF cmd_2_1)

DOELSEIF ([$SELF:P_Locked, "locked"] eq "unlocked")
()
(set $SELF P_Locked locked)

   FUUID      5c5c7df6-f33f-5676-f8c3-c46863491684471c
   MODEL      FHEM
   NAME       D_L_AU.GR.Torantrieb
   NOTIFYDEV  global,D_L_AU.GR.Torantrieb
   NR         175
   NTFY_ORDER 50-D_L_AU.GR.Torantrieb
   STATE      locked
   TYPE       DOIF
   VERSION    20210 2019-09-20 21:37:33
   READINGS:
     2019-09-22 00:36:01   P_Locked        locked
     2019-09-22 00:36:01   cmd             2.2
     2019-09-22 00:36:01   cmd_event       set_cmd_2_1
     2019-09-22 00:36:01   cmd_nr          2
     2019-09-22 00:36:01   cmd_seqnr       2
     2019-09-22 00:35:44   e_D_L_AU.GR.Torantrieb_P_Locked unlocked
     2019-09-22 00:35:51   e_D_L_AU.GR.Torantrieb_events down
     2019-09-21 23:52:53   mode            enabled
     2019-09-22 00:36:01   state           locked
     2019-09-22 00:36:01   wait_timer      no timer
   Regex:
     accu:
     cond:
       D_L_AU.GR.Torantrieb:
         0:
           &STATE     ^D_L_AU.GR.Torantrieb$
         1:
           P_Locked   ^D_L_AU.GR.Torantrieb$:^P_Locked:
   attr:
     cmdState:
       0:
         command sent
         command sent
       1:
         unlocked
         locked
     wait:
       0:
         0
         0
       1:
         0
         10
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'D_L_AU.GR.Torantrieb','P_Locked',' "locked"') eq "unlocked" and ::EventDoIf('D_L_AU.GR.Torantrieb',$hash,'(up|down|stop|ventilate)',1)
     1          ::ReadingValDoIf($hash,'D_L_AU.GR.Torantrieb','P_Locked',' "locked"') eq "unlocked"
   do:
     0:
       0          set AU.GR.Torantrieb $EVENT
       1          set D_L_AU.GR.Torantrieb cmd_2_1
     1:
       0         
       1          set D_L_AU.GR.Torantrieb P_Locked locked
     2:
   helper:
     event      down
     globalinit 1
     last_timer 0
     sleepdevice set_cmd_2_1
     sleepsubtimer -1
     sleeptimer -1
     timerdev   D_L_AU.GR.Torantrieb
     timerevent down
     triggerDev D_L_AU.GR.Torantrieb
     DOIF_eventa:
       cmd_nr: 2
       cmd_seqnr: 2
       cmd_event: set_cmd_2_1
       locked
     bm:
       DOIF_Get:
         cnt        3
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        22.09. 00:35:15
         max        9.05990600585938e-06
         tot        2.21729278564453e-05
         mAr:
           HASH(0x55f5dd0ef228)
           D_L_AU.GR.Torantrieb
           ?
       DOIF_Notify:
         cnt        52
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        22.09. 00:22:51
         max        0.0108180046081543
         tot        0.0390419960021973
         mAr:
           HASH(0x55f5dd0ef228)
           HASH(0x55f5dd0ef228)
       DOIF_Set:
         cnt        128
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        22.09. 00:22:17
         max        0.0267770290374756
         tot        0.150165796279907
         mAr:
           HASH(0x55f5dd0ef228)
           D_L_AU.GR.Torantrieb
           P_Locked
           unlocked
     timerevents:
       down
       wait_timer: no timer
       cmd_seqnr: 1
       cmd: 1.1
       cmd_nr: 2
       cmd: 2.1
       cmd_event: set_cmd_2_1
       unlocked
       wait_timer: 22.09.2019 00:36:01 cmd_2_2 set_cmd_2_1
       cmd_nr: 1
       cmd_seqnr: 2
       cmd: 1.2
       cmd_event: D_L_AU.GR.Torantrieb
       command sent
     timereventsState:
       down
       wait_timer: no timer
       cmd_seqnr: 1
       cmd: 1.1
       cmd_nr: 2
       cmd: 2.1
       cmd_event: set_cmd_2_1
       unlocked
       wait_timer: 22.09.2019 00:36:01 cmd_2_2 set_cmd_2_1
       cmd_nr: 1
       cmd_seqnr: 2
       cmd: 1.2
       cmd_event: D_L_AU.GR.Torantrieb
       command sent
     triggerEvents:
       down
       wait_timer: no timer
       cmd_seqnr: 1
       cmd: 1.1
       cmd_nr: 2
       cmd: 2.1
       cmd_event: set_cmd_2_1
       unlocked
       wait_timer: 22.09.2019 00:36:01 cmd_2_2 set_cmd_2_1
       cmd_nr: 1
       cmd_seqnr: 2
       cmd: 1.2
       cmd_event: D_L_AU.GR.Torantrieb
       command sent
     triggerEventsState:
       down
       wait_timer: no timer
       cmd_seqnr: 1
       cmd: 1.1
       cmd_nr: 2
       cmd: 2.1
       cmd_event: set_cmd_2_1
       unlocked
       wait_timer: 22.09.2019 00:36:01 cmd_2_2 set_cmd_2_1
       cmd_nr: 1
       cmd_seqnr: 2
       cmd: 1.2
       cmd_event: D_L_AU.GR.Torantrieb
       command sent
   internals:
   readings:
     all         D_L_AU.GR.Torantrieb:P_Locked
   trigger:
     all         D_L_AU.GR.Torantrieb
   uiState:
   uiTable:
Attributes:
   cmdIcon    down:fts_garage_door_100 up:fts_garage_door_10 stop:time_manual_mode ventilate:fts_garage_door_70
   cmdState   command sent,command sent|unlocked,locked
   do         resetwait
   event-on-change-reading .*
   group      Locks
   icon       secur_locked
   readingList P_Locked
   room       Auto
   setList    P_Locked:locked,unlocked up down stop ventilate
   wait       0,0:0,10
   webCmd     P_Locked:up:down:ventilate:stop


Patrick
lepresenced - Tracking von Bluetooth-LE-Tags (Gigaset G-Tag) mittels PRESENCE

"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning." - Rich Cook

PatrickR

Update:
Wenn ich

set D_L_AU.GR.Fensteroeffner checkall

sende, funktioniert ab diesem Zeitpunkt das DOIF einwandfrei, d. h.:


  • Ein neu definiertes DOIF funktioniert nicht.
  • Nach dem senden von checkall funktioniert das DOIF dauerhaft.
  • Ändert man die Definition des DOIF funktioniert es wieder nicht mehr.

Hier ein list des Devices im reparierten Zustand zum Vergleich:

Internals:
   CFGFN     
   DEF        ([?$SELF:P_Locked, "locked"] eq "unlocked" and [$SELF:"(open|close)"])
(set AU.GR.Fensteroeffner $EVENT)
(set $SELF cmd_2_1)

DOELSEIF ([$SELF:P_Locked, "locked"] eq "unlocked")
()
(set $SELF P_Locked locked)

   FUUID      5d86a467-f33f-5676-d013-39d90828392282df
   MODEL      FHEM
   NAME       D_L_AU.GR.Fensteroeffner
   NOTIFYDEV  global,D_L_AU.GR.Fensteroeffner
   NR         1110
   NTFY_ORDER 50-D_L_AU.GR.Fensteroeffner
   STATE      locked
   TYPE       DOIF
   VERSION    20210 2019-09-20 21:37:33
   READINGS:
     2019-09-22 01:05:36   P_Locked        locked
     2019-09-22 01:05:36   cmd             2.2
     2019-09-22 01:05:36   cmd_event       set_cmd_2_1
     2019-09-22 01:05:36   cmd_nr          2
     2019-09-22 01:05:36   cmd_seqnr       2
     2019-09-22 01:05:26   e_D_L_AU.GR.Fensteroeffner_P_Locked unlocked
     2019-09-22 01:05:26   e_D_L_AU.GR.Fensteroeffner_events close
     2019-09-22 01:01:30   mode            enabled
     2019-09-22 01:05:36   state           locked
     2019-09-22 01:05:36   wait_timer      no timer
   Regex:
     accu:
     cond:
       D_L_AU.GR.Fensteroeffner:
         0:
           &STATE     ^D_L_AU.GR.Fensteroeffner$
         1:
           P_Locked   ^D_L_AU.GR.Fensteroeffner$:^P_Locked:
   attr:
     cmdState:
       0:
         command sent
         command sent
       1:
         unlocked
         locked
     wait:
       0:
         0
         0
       1:
         0
         10
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'D_L_AU.GR.Fensteroeffner','P_Locked',' "locked"') eq "unlocked" and ::EventDoIf('D_L_AU.GR.Fensteroeffner',$hash,'(open|close)',1)
     1          ::ReadingValDoIf($hash,'D_L_AU.GR.Fensteroeffner','P_Locked',' "locked"') eq "unlocked"
   do:
     0:
       0          set AU.GR.Fensteroeffner $EVENT
       1          set D_L_AU.GR.Fensteroeffner cmd_2_1
     1:
       0         
       1          set D_L_AU.GR.Fensteroeffner P_Locked locked
     2:
   helper:
     event      close
     globalinit 1
     last_timer 0
     sleepdevice set_cmd_2_1
     sleepsubtimer -1
     sleeptimer -1
     timerdev   D_L_AU.GR.Fensteroeffner
     timerevent close
     triggerDev D_L_AU.GR.Fensteroeffner
     DOIF_eventa:
       cmd_nr: 2
       cmd_seqnr: 2
       cmd_event: set_cmd_2_1
       locked
     bm:
       DOIF_Get:
         cnt        3
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        22.09. 01:02:01
         max        1.28746032714844e-05
         tot        2.288818359375e-05
         mAr:
           HASH(0x55f5ded7f578)
           D_L_AU.GR.Fensteroeffner
           ?
       DOIF_Notify:
         cnt        19
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        22.09. 01:05:26
         max        0.0123090744018555
         tot        0.0258975028991699
         mAr:
           HASH(0x55f5ded7f578)
           HASH(0x55f5ded7f578)
       DOIF_Set:
         cnt        115
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        22.09. 01:02:01
         max        0.0361897945404053
         tot        0.152661561965942
         mAr:
           HASH(0x55f5ded7f578)
           D_L_AU.GR.Fensteroeffner
           checkall
     timerevents:
       close
       e_D_L_AU.GR.Fensteroeffner_events: close
       wait_timer: no timer
       cmd_nr: 1
       cmd: 1.1
       command sent
       cmd_nr: 2
       cmd: 2.1
       cmd_event: set_cmd_2_1
       unlocked
       wait_timer: 22.09.2019 01:05:36 cmd_2_2 set_cmd_2_1
       cmd_nr: 1
       cmd_seqnr: 2
       cmd: 1.2
       cmd_event: D_L_AU.GR.Fensteroeffner
       command sent
     timereventsState:
       close
       e_D_L_AU.GR.Fensteroeffner_events: close
       wait_timer: no timer
       cmd_nr: 1
       cmd: 1.1
       command sent
       cmd_nr: 2
       cmd: 2.1
       cmd_event: set_cmd_2_1
       unlocked
       wait_timer: 22.09.2019 01:05:36 cmd_2_2 set_cmd_2_1
       cmd_nr: 1
       cmd_seqnr: 2
       cmd: 1.2
       cmd_event: D_L_AU.GR.Fensteroeffner
       command sent
     triggerEvents:
       close
       e_D_L_AU.GR.Fensteroeffner_events: close
       wait_timer: no timer
       cmd_nr: 1
       cmd: 1.1
       command sent
       cmd_nr: 2
       cmd: 2.1
       cmd_event: set_cmd_2_1
       unlocked
       wait_timer: 22.09.2019 01:05:36 cmd_2_2 set_cmd_2_1
       cmd_nr: 1
       cmd_seqnr: 2
       cmd: 1.2
       cmd_event: D_L_AU.GR.Fensteroeffner
       command sent
     triggerEventsState:
       close
       e_D_L_AU.GR.Fensteroeffner_events: close
       wait_timer: no timer
       cmd_nr: 1
       cmd: 1.1
       command sent
       cmd_nr: 2
       cmd: 2.1
       cmd_event: set_cmd_2_1
       unlocked
       wait_timer: 22.09.2019 01:05:36 cmd_2_2 set_cmd_2_1
       cmd_nr: 1
       cmd_seqnr: 2
       cmd: 1.2
       cmd_event: D_L_AU.GR.Fensteroeffner
       command sent
   internals:
   readings:
     all         D_L_AU.GR.Fensteroeffner:P_Locked
   trigger:
     all         D_L_AU.GR.Fensteroeffner
   uiState:
   uiTable:
Attributes:
   cmdIcon    open:fts_window_1w_tilt close:fts_window_1w stop:time_manual_mode
   cmdState   command sent,command sent|unlocked,locked
   do         resetwait
   event-on-change-reading .*
   group      Locks
   icon       secur_locked
   readingList P_Locked
   room       Auto
   setList    P_Locked:locked,unlocked open close stop
   wait       0,0:0,10
   webCmd     P_Locked:open:close:stop


Patrick
lepresenced - Tracking von Bluetooth-LE-Tags (Gigaset G-Tag) mittels PRESENCE

"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning." - Rich Cook

amenomade

#2
Es ist schwierig, die "lists" von 2 unterschiedlichen DOIFs zu vergleichen...

Aber klar, dass "open" nichts verursacht: solange P_locked auf "unlocked" bleibt, sieht der DOIF die Notwendigkeit nicht, den 2. Zweig zu verlassen.

Wenn es mal funktioniert hat, und jetzt nicht mehr, bitte dieses Thread gucken: https://forum.fhem.de/index.php/topic,103873.msg976332.html#msg976332
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

PatrickR

#3
Zitat von: amenomade am 22 September 2019, 02:09:38
Es ist schwierig, die "lists" von 2 unterschiedlichen DOIFs zu vergleichen...
Auch wenn die Devices nahezu identisch sind gebe ich Dir Recht. Leider bekomme ich jetzt den reparierten Fall auch mit checkall nicht mehr rekonstruiert.

Zitat von: amenomade am 22 September 2019, 02:09:38
Aber klar, dass "open" nichts verursacht: solange P_locked auf "unlocked" bleibt, sieht der DOIF die Notwendigkeit nicht, den 2. Zweig zu verlassen.
Außer natürlich der erste Fall wird wahr wie bei set open.

Zitat von: amenomade am 22 September 2019, 02:09:38
Wenn es mal funktioniert hat, und jetzt nicht mehr, bitte dieses Thread gucken: https://forum.fhem.de/index.php/topic,103873.msg976332.html#msg976332
Ok, werde mich dort mal dranhängen.

/Edit:
Aktuell blicke ich nicht mehr durch. Ich hatte das DOIF nach modify und checkall wieder am Laufen, es funktionierte aber nur exakt einmal.

Patrick
lepresenced - Tracking von Bluetooth-LE-Tags (Gigaset G-Tag) mittels PRESENCE

"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning." - Rich Cook

amenomade

Zitat von: PatrickR am 22 September 2019, 03:18:03

Außer natürlich der erste Fall wird wahr wie bei set open.
Wenn der erste Fall wahr wird, heisst es nicht, dass der 2. nicht mehr wahr ist.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

PatrickR

#5
Zitat von: amenomade am 22 September 2019, 12:41:14
Wenn der erste Fall wahr wird, heisst es nicht, dass der 2. nicht mehr wahr ist.
Unbestritten. Aber Fall 1 wird wahr und DOIF wechselt den Zustand. Aber da ich bezweifle, dass dieses Commandref-Duell das Problem löst, das Damian dankenswerterweise schon lokalisiert hat, mache ich mal hier zu.

Danke für den Hinweis auf den Thread.

Patrick
lepresenced - Tracking von Bluetooth-LE-Tags (Gigaset G-Tag) mittels PRESENCE

"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning." - Rich Cook