[gelöst] Lampe bei Bewegung nicht ausschalten

Begonnen von moerte, 22 März 2025, 00:53:14

Vorheriges Thema - Nächstes Thema

moerte

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 offList:
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.


Beta-User

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.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Nobbynews

#2
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

moerte

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?

Nobbynews

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.

moerte

mhhh , die Zigbee Lampe hat leider nicht das attr on for timer. Im Frontend hab ich dazu leider auch keine Einstellung gefunden.

MadMax-FHEM

#6
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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Beta-User

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).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Beta-User

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.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

moerte

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  :))

Beta-User

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....
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

moerte

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

juergen012

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.
Fhem unter Proxmox