FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: PatrickR am 22 September 2019, 00:42:11

Titel: DOIF-Probleme seit ca. 1 Woche
Beitrag von: PatrickR am 22 September 2019, 00:42:11
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
Titel: Antw:DOIF-Probleme seit ca. 1 Woche
Beitrag von: PatrickR am 22 September 2019, 01:06:15
Update:
Wenn ich

set D_L_AU.GR.Fensteroeffner checkall

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


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
Titel: Antw:DOIF-Probleme seit ca. 1 Woche
Beitrag von: amenomade am 22 September 2019, 02:09:38
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
Titel: Antw:DOIF-Probleme seit ca. 1 Woche
Beitrag von: PatrickR am 22 September 2019, 03:18:03
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
Titel: Antw:DOIF-Probleme seit ca. 1 Woche
Beitrag von: amenomade am 22 September 2019, 12:41:14
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.
Titel: Antw:DOIF-Probleme seit ca. 1 Woche
Beitrag von: PatrickR am 22 September 2019, 20:59:31
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