Guten Morgen, ich steh auf den Schlauch.
ich habe im Schuppen eine Lampe, welche bei Bewegung (Erkennung durch IT Bewegunssensor) für eine bestimmte Zeit an gehen soll. (Bei meinen Tests habe ich jetzt mal 30 Sekunden angegeben. ... Soweit so gut :))
Ich hätte gern, dass wenn während der angegebenen Zeit (also wenn z.B. innerhalb der 30 Sekunden eine weitere Bewegung erkannt wird, der Timer von vorn beginnt zu Zählen, und die Lampe eben nicht nach 30 Sekunden ausgeht.) - und das solange bis wirklich keine Bewegung mehr erkannt wird - dann schalte die Lampe aus.
erstmal ein dummy zum Testen
Internals:
FUUID 67cef1ce-f33f-599c-e7a7-eef45d517966547e
NAME Test_Lampe
NR 500
STATE off
TYPE dummy
eventCount 77
READINGS:
2025-03-22 00:17:27 state off
Attributes:
room Testraum
webCmd on:off
hier der Bewegungssensor:
Internals:
CUL_1_MSGCNT 30
CUL_1_RAWMSG i9dad99
CUL_1_RSSI -85.5
CUL_1_TIME 2025-03-22 00:01:26
DEF 1527x9dad9 1001 0000
FUUID 67c75dbc-f33f-599c-bfa1-40d177e1a1ce86da
IODev mapleCUN2
LASTInputDev mapleCUN2
MSGCNT 71
NAME Bewegungssensor_1
NR 490
STATE off
TYPE IT
XMIT df1fdd1fdf
XMITdimdown 00
XMITdimup 00
XMIToff 0000
XMITon 1001
eventCount 141
mapleCUN2_MSGCNT 59
mapleCUN2_RAWMSG i9dad99
mapleCUN2_RSSI -66
mapleCUN2_TIME 2025-03-22 00:16:57
CODE:
1 1527x9dad9
READINGS:
2025-03-21 20:57:53 IODev mapleCUN2
2025-03-04 21:09:04 protocol EV1527
2025-03-22 00:17:27 state off
hmccu:
Attributes:
icon people_sensor
room Testraum
verbose 1
Bei Bewegung --> schalte die Lampe an für 30 Sekunden
DOIF:
([Bewegungssensor_1:state] eq "on") (set Test_Lampe on) DOELSE (set Test_Lampe off)
List:
Internals:
DEF ([Bewegungssensor_1:state] eq "on") (set Test_Lampe on) DOELSE (set Test_Lampe off)
FUUID 67cefa0c-f33f-599c-14dd-5f49f0186ff8ebc4
MODEL FHEM
NAME Garage_doif
NOTIFYDEV Bewegungssensor_1,global
NR 501
NTFY_ORDER 50-Test1_doif
STATE cmd_2
TYPE DOIF
VERSION 29460 2024-12-29 20:25:48
eventCount 166
READINGS:
2025-03-22 00:17:27 Device Bewegungssensor_1
2025-03-22 00:17:27 cmd 2
2025-03-22 00:17:27 cmd_event Bewegungssensor_1
2025-03-22 00:17:27 cmd_nr 2
2025-03-22 00:17:27 e_Bewegungssensor_1_state off
2025-03-22 00:13:25 mode enabled
2025-03-22 00:17:27 state cmd_2
2025-03-22 00:16:57 wait_timer no timer
Regex:
accu:
bar:
barAvg:
collect:
cond:
Bewegungssensor_1:
0:
state ^Bewegungssensor_1$:^state:
attr:
cmdState:
wait:
0:
0.30
waitdel:
condition:
0 ::ReadingValDoIf($hash,'Bewegungssensor_1','state') eq "on"
do:
0:
0 set Test_Lampe on
1:
0 set Test_Lampe off
helper:
NOTIFYDEV Bewegungssensor_1,global
event off
globalinit 1
last_timer 0
sleepdevice Bewegungssensor_1
sleepsubtimer -1
sleeptimer -1
timerdev Bewegungssensor_1
timerevent off
triggerDev Bewegungssensor_1
DOIF_eventa:
cmd_nr: 2
cmd: 2
cmd_event: Bewegungssensor_1
cmd_2
DOIF_eventas:
cmd_nr: 2
cmd: 2
cmd_event: Bewegungssensor_1
state: cmd_2
timerevents:
off
timereventsState:
state: off
triggerEvents:
off
triggerEventsState:
state: off
hmccu:
internals:
readings:
all Bewegungssensor_1:state
trigger:
uiState:
uiTable:
Attributes:
do resetwait
room Testraum
wait 0.30
hier mit attr. resetwait und wait
Jetzt dachte ich, ich nehm ein notify dazu:
Bewegungssensor_1:on.* sleep 30.0; set Bewegungssensor_1 off
List:
Internals:
DEF Bewegungssensor_1:on.* sleep 30.0; set Bewegungssensor_1 off
FUUID 67c762a8-f33f-599c-a201-bbdb93c3d8cca8de
NAME AutoOff_Bewegung
NOTIFYDEV Bewegungssensor_1
NR 491
NTFY_ORDER 50-AutoOff_Bewegung
REGEXP Bewegungssensor_1:on.*
STATE 2025-03-22 00:36:24
TRIGGERTIME 1742600184.0074
TYPE notify
eventCount 2
READINGS:
2025-03-22 00:14:06 state active
2025-03-22 00:36:24 triggeredByDev Bewegungssensor_1
2025-03-22 00:36:24 triggeredByEvent on
Attributes:
room Testraum
So wie es aktuell jetzt ist, geht die Lampe trotzdem nach 30 sekunden aus.
Wo hab ich den Fehler?
habe in der suche schon mehrere Beispiele gesehen, aber so richtig komm ich nicht auf die Lösung.
resetwait und wait scheint ja irgendwie nicht zu funktionieren :-\
Wünsche euch allen eine Gute Nacht.
Guten Morgen zurück.
Du hast aber auch ein Talent, zielsicher die jeweils komplizierteste Variante zu versuchen...
Also: Die allermeisten "Lampen"-Devices kennen "on-for-timer" - "dummy"-TYPE muss man das erst via "SetExtensions" beibringen (das Attribut dazu wirst du finden).
Wenn man es mit notify und sleep machen will, muss man den (sleep-) timer benennen (siehe "[<id>]" in der commandref zu sleep).
PS: Je nach TYPE der Lampe kann es auch sein, dass entweder die Hardware (z.B. Homematic) oder die Zwischenschicht (ZigBee?, da kommt es uU. auf den konkreten Aktor an) ihrerseits timer verwalten können. Falls das ginge, würde ich diese Art der Ansteuerung für diesen Zweck bevorzugen, v.a., wenn die timer dann mal etwas länger werden sollten.
Das Problem dürfte im Bewegungsmelder liegen.
Die meisten Bewegungsmelder können innerhalb der eingestellten Zeit keine neue Bewegung erkennen.
Erst nach Ablauf der Zeit wird ein OFF geschickt und nach einer geringen Totzeit dann erst wieder eine neue Bewegung erkannt.
Dann geht der Ablauf wieder von vorne los.
Die Module HC-SR501 kann man im Verhalten durch Jumper umstellen.
ZitatTrigger Methode: L nicht wiederholbarer Trigger / H wiederholbarer Trigger
Für Dein Konstrukt wäre der wiederholbare Trigger richtig.
Edit:
Ungetestet:
Für die Umsetzung darf das DOIF nur auf ON reagieren.
Das Einschalten dann wie @Beta-User schrieb über "on-for-timer" mit einer Zeit größer der im Bewegungsmelder eingestellten Zeit.
Der "on-for-timer" wird beim erneuten Setzen entsprechend neu gestartet.
Im DOIF das Attribut
do always setzen
Moinsen ...
Zitat von: Beta-User am 22 März 2025, 05:44:22PS: Je nach TYPE der Lampe kann es auch sein, dass entweder die Hardware (z.B. Homematic) oder die Zwischenschicht (ZigBee?, da kommt es uU. auf den konkreten Aktor an) ihrerseits timer verwalten können. Falls das ginge, würde ich diese Art der Ansteuerung für diesen Zweck bevorzugen, v.a., wenn die timer dann mal etwas länger werden sollten.
Ja, es soll am Ende eine Zigbee Lampe geschalten werden (eine Nous P3Z).
Also im Grunde genommen sollte der Timer für 60 Sekunden reichen, da ich denke das da keiner abends wenns dunkel ist 1 Minute sich nicht bewegt :))
Hatte mir dazu ein notify vorbereitet:
([05:30 - [Helligkeit:CustomTwilightMorning]]) (set Garage_doif enable) DOELSEIF ([[Helligkeit:CustomTwilightEvening] - 24:00]) (set Garage_doif enable) DOELSE (set Garage_doif disable)
Zitat von: Nobbynews am 22 März 2025, 05:52:23Das Problem dürfte im Bewegungsmelder liegen.
Die meisten Bewegungsmelder können innerhalb der eingestellten Zeit keine neue Bewegung erkennen.
Dieser Funk Beweungsmelder erkennt nach ca 5 sekunden eine erneute Bewegung.
OK, dann teste ich das dann mal mit der Finalen Lampe, entferne im DOIF das off. --> und die Lampe braucht dann das attr "on-for-timer" oder Bewegunsmelder?
Zitat von: moerte am 22 März 2025, 09:32:17und die Lampe braucht dann das attr "on-for-timer" oder Bewegunsmelder?
Die Lampe natürlich.
mhhh , die Zigbee Lampe hat leider nicht das attr on for timer. Im Frontend hab ich dazu leider auch keine Einstellung gefunden.
Zitat von: moerte am 22 März 2025, 09:45:17mhhh , die Zigbee Lampe hat leider nicht das attr on for timer. Im Frontend hab ich dazu leider auch keine Einstellung gefunden.
Es geht auch NICHT um ein ATTRIBUT sondern: set Lampe on-for-timer xSekunden
Also set Lampe on-for-timer 30
Schon irre, wie kompliziert man denken kann ;)
Also ich würde ein notify auf Bewegung machen und da dann oben erwähntes on-for-timer fertig.
Immer wenn Bewegung kommt, wird die Lampe (immer wieder) für 30 (oder was auch immer) Sekunden eingeschaltet.
Kommt kein Bewegungs-Event mehr, geht die Lampe eben 30 (oder was auch immer) Sekunden nach der letzten Bewegung aus..
EDIT: kann man nat. bzgl. "Anschaltmeldungen" in Richtung Lampe optimieren, wenn man beim Bewegungsmelder z.B. min-interval etc. setzt, um die Bewegungs-Events einszuschränken. Würde ich aber erst mal ohne machen...
EDIT: oder noch besser der Bewegungsmelder nicht alle 5 Sekunden sendet...
Gruß, Joachim
Zitat von: moerte am 22 März 2025, 09:45:17mhhh , die Zigbee Lampe hat leider nicht das attr on for timer. Im Frontend hab ich dazu leider auch keine Einstellung gefunden.
Wenn man es nicht aktiv ausschaltet, "können" alle MQTT2_DEVICE (via SetExtensions-Einbindung) automatisch on-for-timer, die on und off können - wie MadMax-FHEM ja eben auch schon geschrieben hat.
Wenn ich das richtig verstanden habe, meintest du aber ggf. was anderes: wie bereits geschrieben kommt es sehr auf die ZigBee-Hardware an, welche Funktionalität effektiv da ist - was nicht auch heißt, dass das auf der FHEM-MQTT-Seite implementiert sein müßte (oder effektiv auf der zigbee2mqtt-Seite umgesetzt wird, auch da funktioniert nicht immer alles wie beschrieben). Beispiel für eine Hardware, die tatsächlich auf der firmware-Seite einen Timer verwalten können sollte: https://www.zigbee2mqtt.io/devices/D2Z.html
(man kommt auf die jeweilige Beschreibung der eigenen Hardware via z2m-Frontend).
Zitat von: moerte am 22 März 2025, 09:32:17Ja, es soll am Ende eine Zigbee Lampe geschalten werden (eine Nous P3Z).
Die kann das nicht, siehe https://www.zigbee2mqtt.io/devices/P3Z.html#nous-p3z - dafür kennt die "do not disturb", was ein anderes Beispiel für so eine Funktionalität wäre, die nicht einfach so in FHEM auch verfügbar ist.
OK, wenn ich es jetzt richtig verstanden habe, sollte es dann trotzdem mit einen DOIF und on-for-timer gehen?
Ich kann es jetzt mit der Zigbee lampe nicht testen, und du sagtest ein dummy macht das nicht mit.
Wäre dann im Prinzip nur mit einen doif machbar?
Zitat([Bewegungssensor_1:state] eq "on") (set <device> on-for-timer 60)
und die zeit zählt dann wenn er innerhalb der 60 sekunden eine Bewegung erkannt hat wieder von vorn?
Wäre ja zu einfach :))
dummy-TYPE kann das auch, aber der braucht dazu ein Attribut, das die Funktionen aktiviert - MQTT2_DEVICE ist anders herum: da kann man es uU via Attribut ausschalten....
Zitat von: Beta-User am 22 März 2025, 10:24:21dummy-TYPE kann das auch, aber der braucht dazu ein Attribut, das die Funktionen aktiviert - MQTT2_DEVICE ist anders herum: da kann man es uU via Attribut ausschalten....
Perfekt!!! Danke
Moin,
Aus der Commandref DOIF:
Zurücksetzen des Waittimers für das gleiche Kommando
Im Gegensatz zu do always wird ein Waittimer mit dem Attribut do resetwait auch dann zurückgesetzt, wenn die gleiche Bedingung wiederholt wahr wird.
Damit können Ereignisse ausgelöst werden, wenn etwas innerhalb einer Zeitspanne nicht passiert.
Das Attribut do resetwait impliziert eine beliebige Wiederholung wie do always. Diese lässt sich allerdings mit dem Attribut repeatsame einschränken s. u.
Anwendungsbeispiel: Meldung beim Ausbleiben eines Events
define di_push DOIF ([Tempsensor])(set pushmsg "sensor failed again")
attr di_push wait 1800
attr di_push do resetwait
resetwait setzt den Waittimer zurück, wenn die selbe Bedingung wiederholt wahr wird.