Hallo zusammen.
Im Bad habe ich 2 Bewegungsmelder. Diese werden durch 1 DOIF ausgewertet. In dem DOIF fließt noch ein Shelly mit ein, andem ein Schalter angeschlossen ist. dieser Schalter schaltet den Shelly direkt ein bzw aus.
Ich möchte mit dem Lichtschalter das Licht ausschalten, auch wenn eine Bewegung erkannt wurde, und dies soll dann auch aus bleiben. Bis zur nächsten Bewegung oder betätigen des Schalters.
Internals:
DEF ([BWM_EG_Bad:state] eq "motion" or [BWM_sonoff:state] eq "motion") (set bad_licht on) (set bad_licht off)
DOELSEIF ([bad_licht:input0] == 1) ( set bad_licht on)
DOELSEIF ([bad_licht:input0] == 0) ( set bad_licht off)
FUUID 5eb43033-f33f-852e-373e-0a2fd904891642ef
FVERSION 98_DOIF.pm:0.264440/2022-09-25
MODEL FHEM
NAME EG_BAD_BWM_DOIF_1
NOTIFYDEV global,bad_licht,BWM_sonoff,BWM_EG_Bad
NR 485
NTFY_ORDER 50-EG_BAD_BWM_DOIF_1
STATE cmd_1_1
TYPE DOIF
VERSION 26444 2022-09-25 16:29:19
eventCount 217
READINGS:
2022-09-29 19:03:14 Device BWM_sonoff
2022-09-29 19:02:43 cmd 1.1
2022-09-29 19:02:43 cmd_event BWM_EG_Bad
2022-09-29 19:02:43 cmd_nr 1
2022-09-29 19:02:43 cmd_seqnr 1
2022-09-29 19:02:43 e_BWM_EG_Bad_state nomotion
2022-09-29 19:03:14 e_BWM_sonoff_state nomotion
2022-09-29 19:02:09 e_bad_licht_input0 0
2022-09-29 11:10:45 mode enabled
2022-09-29 19:02:43 state cmd_1_1
2022-09-29 19:02:43 wait_timer 29.09.2022 19:05:43 cmd_1_2 BWM_EG_Bad
Regex:
accu:
collect:
cond:
BWM_EG_Bad:
0:
state ^BWM_EG_Bad$:^state:
BWM_sonoff:
0:
state ^BWM_sonoff$:^state:
1:
2:
bad_licht:
0:
1:
input0 ^bad_licht$:^input0:
2:
input0 ^bad_licht$:^input0:
attr:
cmdState:
wait:
0:
0
180
1:
0
2:
0
waitdel:
condition:
0 ::ReadingValDoIf($hash,'BWM_EG_Bad','state') eq "motion" or ::ReadingValDoIf($hash,'BWM_sonoff','state') eq "motion"
1 ::ReadingValDoIf($hash,'bad_licht','input0') == 1
2 ::ReadingValDoIf($hash,'bad_licht','input0') == 0
do:
0:
0 set bad_licht on
1 set bad_licht off
1:
0 set bad_licht on
2:
0 set bad_licht off
3:
helper:
NOTIFYDEV global,bad_licht,BWM_sonoff,BWM_EG_Bad
event tampered: 0,batteryState: ok,nomotion
globalinit 1
last_timer 0
sleepdevice BWM_EG_Bad
sleepsubtimer 1
sleeptimer 0
timerdev BWM_EG_Bad
timerevent nomotion
triggerDev BWM_sonoff
timerevents:
nomotion
timereventsState:
state: nomotion
triggerEvents:
tampered: 0
batteryState: ok
nomotion
triggerEventsState:
tampered: 0
batteryState: ok
state: nomotion
internals:
readings:
all BWM_EG_Bad:state BWM_sonoff:state bad_licht:input0
trigger:
uiState:
uiTable:
Attributes:
alias EG_BAD_BWM_DOIF_1
do resetwait
room 10_EG->Bad,80_DOIF
wait 0,180:0:0
Gruß und danke
Sascha
Hallo Sascha,
ich versuche mich mal an einer Antwort, obwohl ich die Frage vermisse.
Ich nehme an, du suchst nach einer Lösung für diese Situation:
ZitatIch möchte mit dem Lichtschalter das Licht ausschalten, auch wenn eine Bewegung erkannt wurde, und dies soll dann auch aus bleiben. Bis zur nächsten Bewegung oder betätigen des Schalters.
Du könntest ReadingsAge des Readings input0 des Devices bad_licht zusätzlich abfragen, z.B. es sollte größer als 300 Sekunden sein, wenn eine Bewegung registriert wird - nur dann soll das Licht angehen.
Ungetestet:
(ReadingsAge('bad_licht','input0','')>300 and ([BWM_EG_Bad:state] eq "motion" or [BWM_sonoff:state] eq "motion")) (set bad_licht on) (set bad_licht off)
Viele Grüße Gisbert
Heißt, wenn der lichtschalter länger wie 300s nicht betätigt wurde?
Werde das mal probieren.
Danke