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:
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
Im Event-Log krieg ich:
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
Wie könnte ich das hinkriegen?
Vielen Dank
Thomas
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.
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:
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
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