FHEM > DOIF

Befehlssequenz und resetwait

(1/1)

MrTom:
Hallo zusammen

ich habe eine Steuerung mit mehreren Bewegungssensoren und Helligkeitssensoren in einem DOIF zusammengefasst. Das klappt soweit ganz gut. Nur hab ich das Problem, dass (dem Anschein nach) bei einem erneuten Auftreten eines Trigger zusammen mit dem resetwait der Timer zwar zurückgesetzt wird, jedoch die nicht die ganze Befehlssequenz nochmals abgearbeitet wird, d.h. es wird nur der aktuelle Befehl erneut ausgeführt. Ist diese Annahme korrekt?

Hier mal das list vom DOIF:

--- Code: ---Internals:
   .FhemMetaInternals 1
   DEF        (([MYSENSOR_112:"tripped3:.on"] or [MQTT2_shellymotionsensor_60A423974D06:motion] or ["MQTT2_DVES_.:Data:.2A7440"] eq "true") and
([?MYSENSOR_112:brightness]<10 or [?MQTT2_shellymotionsensor_60A423974D06:lux]<8 or [?MYSENSOR_108:brightness]<5000))
(set BU_Lampe_Buero on)
()
(set BU_Lampe_Buero off)
   DOIFDEV    ^global$|^MQTT2_shellymotionsensor_60A423974D06$|MQTT2_DVES_.|^MYSENSOR_112$
   FUUID      5ffc8724-f33f-4752-703e-0c622646ab88d739
   FVERSION   98_DOIF.pm:0.252950/2021-12-04
   MODEL      FHEM
   NAME       di_XX_motion_Buero_Presence_PIR
   NR         428
   NTFY_ORDER 50-di_XX_motion_Buero_Presence_PIR
   STATE      initialized
   TYPE       DOIF
   VERSION    25295 2021-12-04 18:13:39
   .attraggr:
   .attrminint:
   READINGS:
     2022-01-19 19:43:05   .eM             off
     2022-01-19 19:57:00   Device          MYSENSOR_112
     2022-01-19 19:56:51   cmd             0
     2022-01-19 19:57:00   e_MYSENSOR_112_events tripped3: off
     2022-01-19 19:56:51   mode            enabled
     2022-01-19 19:56:51   state           initialized
   Regex:
     accu:
     collect:
     cond:
       :
         0:
           "MQTT2_DVES_.:Data:.2A7440" MQTT2_DVES_.:Data:.2A7440
       MQTT2_shellymotionsensor_60A423974D06:
         0:
           motion     ^MQTT2_shellymotionsensor_60A423974D06$:^motion:
       MYSENSOR_112:
         0:
           &STATE     ^MYSENSOR_112$
   attr:
     cmdState:
     cmdpause:
       120
     wait:
       0:
         0
         10
         600
     waitdel:
   condition:
     0          (::EventDoIf('MYSENSOR_112',$hash,'tripped3:.on',1) or ::ReadingValDoIf($hash,'MQTT2_shellymotionsensor_60A423974D06','motion') or ::EventDoIf('MQTT2_DVES_.',$hash,'Data:.2A7440',0) eq "true") and (::ReadingValDoIf($hash,'MYSENSOR_112','brightness')<10 or ::ReadingValDoIf($hash,'MQTT2_shellymotionsensor_60A423974D06','lux')<8 or ::ReadingValDoIf($hash,'MYSENSOR_108','brightness')<5000)
   do:
     0:
       0          set BU_Lampe_Buero on
       1         
       2          set BU_Lampe_Buero off
     1:
   helper:
     DEVFILTER  ^global$|^MQTT2_shellymotionsensor_60A423974D06$|MQTT2_DVES_.|^MYSENSOR_112$
     NOTIFYDEV  global|MQTT2_shellymotionsensor_60A423974D06|.*MQTT2_DVES_..*|MYSENSOR_112
     event      tripped3: off
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   MYSENSOR_112
     timerevent tripped3: off
     triggerDev MYSENSOR_112
     timerevents:
       tripped3: off
     timereventsState:
       tripped3: off
     triggerEvents:
       tripped3: off
     triggerEventsState:
       tripped3: off
   internals:
   readings:
     all         MQTT2_shellymotionsensor_60A423974D06:motion
   trigger:
     all         MYSENSOR_112
   uiState:
   uiTable:
Attributes:
   alias      Bewegungsmelder Büro
   cmdpause   120
   devStateIcon cmd_1_1:message_presence@red cmd_1_2:message_presence@white cmd_1|initialized:message_presence@white
   do         resetwait
   group      Büro
   icon       icoUhr
   room       2.OG,Logik
   sortby     001
   verbose    5
   wait       0,10,600
--- Ende Code ---

Im Event-Log krieg ich:

--- Code: ---2022-01-19 20:11:25.074 DOIF di_XX_motion_Buero_Presence_PIR wait_timer: no timer
2022-01-19 20:11:25.084 DOIF di_XX_motion_Buero_Presence_PIR wait_timer: 19.01.2022 20:21:25 cmd_1_3 MYSENSOR_112
--- Ende Code ---

Wie könnte ich das hinkriegen?

Vielen Dank
Thomas

Damian:
Warum hast du den Leeren Befehlsteil in der Mitte eingebaut?

Bei resetwait wird kein Befehl wiederholt, es wird ja nur der aktuelle Timer des noch nicht ausgeführten Befehls zurückgesetzt.

MrTom:
Danke Damin für die Erklärung. Das bringt einige Erkenntnisse.

Deine Frage brachte mich noch zum Nachdenken und brachte mich dazu, den DOIF noch ein wenig anzupassen. Nun sieht das Ganze so aus:

--- Code: ---defmod di_XX_motion_Buero_Presence_PIR DOIF (([MYSENSOR_112:tripped3] eq "on" or [MQTT2_shellymotionsensor_60A423974D06:motion] eq "true" or ["MQTT2_DVES_.:Data:.2A7440"] eq "true") and\
([?MYSENSOR_112:brightness]<10 or [?MQTT2_shellymotionsensor_60A423974D06:lux]<8 or [?MYSENSOR_108:brightness]<5000))\
(set BU_Lampe_Buero on-for-timer 300)\
()
attr di_XX_motion_Buero_Presence_PIR alias Bewegungsmelder Büro
attr di_XX_motion_Buero_Presence_PIR cmdpause 15
attr di_XX_motion_Buero_Presence_PIR devStateIcon cmd_1_1:message_presence@red cmd_1_2:message_presence@white cmd_1|initialized:message_presence@white
attr di_XX_motion_Buero_Presence_PIR do always
attr di_XX_motion_Buero_Presence_PIR group Büro
attr di_XX_motion_Buero_Presence_PIR icon icoUhr
attr di_XX_motion_Buero_Presence_PIR room 2.OG,Logik
attr di_XX_motion_Buero_Presence_PIR sortby 001
attr di_XX_motion_Buero_Presence_PIR wait 0,10
--- Ende Code ---

Damit kann ich nun mit verschiedenen Bwegungsmeldern die gleiche Lampe immer wieder neu triggern, sprich die Löschdauer immer wieder "verschieben".

Den zweiten, leeren Befehl hab ich drin, um beim DOIF mittels devStateIcon ein Statusicon zur Anzeige der Bewegungsdetektion zu verwenden --> weiss --> Bewegung (rot) --> nach 10Sek wieder weiss.

Sollte es noch weitere Optimierungen geben, freue ich mich auf jeden Input.

Gruss aus der Schweiz
Thomas

Navigation

[0] Themen-Index

Zur normalen Ansicht wechseln