Bewegungsmelder, notify, DOIF...oder was

Begonnen von trs, 13 Juli 2018, 16:41:11

Vorheriges Thema - Nächstes Thema

trs

Um mit einenm  notify die Beleuchtung mit einem Bewegungsmelder zu scalten, ist klar:

-Bewegungsmelder on set Lampe on for timer

Die Beleuchtung geht an, und nach einer vorgegeben Zeit wieder aus. Ist aber immer noch jemand im Raum, sprich Bewegung, geht die Beleuchtung nach kurzer Zeit wieder an, und das Spiel geht von Neuem los. Ist ja auch logisch.

Wie kann die Steuerung aber intelligenter gemacht werden? Also wenn in der Zeit, in der die Beleuchtung an ist (auf Grund von Bewegung bei der Auslösung), weiterhin der Bewegungsmelder ausgelöst wird, sich die Zeit, in der die Beleuchtung an ist, verlängert. Also ohne an/aus dazwischen.

Hat das hier schon einer umgesetzt, und kann mir einen Lösungsansatz geben?


Otto123

#1
Ja,
defmod di_Flurlicht DOIF ([PIR1:"motion:.on"] and ([?Tageslicht] eq "0" or [?PIRWg:brightness] < 130)) (set SW01_Sw01 on)(set SW01_Sw01 off)
attr di_Flurlicht do resetwait
attr di_Flurlicht room Flur
attr di_Flurlicht wait 0,180


Der Bewegungsmelder selbst hat eine Verzögerung von 120 sec, dann meldet er frühestens wieder.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

betateilchen

Bei meinem Homematic Bewegungsmeldern wird das Register minInterval ausgelesen und die on-for-timer immer 5 Sekunden länger eingestellt :)


            my $t = ReadingsVal("fl_PIR1_Motion",'R-minInterval',120) + 5;
            CommandSet(undef,"fl_Licht on-for-timer $t") unless (ReadingsVal("fl_PIR1_Motion",'brightness',99) >= 95);
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

trs

Vielen dank.

@Otto123:  probiere ich aus

@betateilchen: da steig ich noch nicht ganz durch


swsmily

meldet denn der Bewegungsmelder nur einmal die Bewegung und nicht "keine Bewegung"?

Ich habe bei mir mehrere Fibaro Motion Eyes, diese melden den Status Open (Bewegung erkannt) und Closed (keine Bewegung).
Die Zeit, wann Closed nach letzter Bewegung gemeldet wird, kann direkt in den Einstellungen der Bewegungsmelder individuell eingestellt werden.

daher sind bei mir alle Lichtsteuerungen ähnlich dem folgenden aufgebaut (DOIF):
([Bewegungsmelder] eq "open")
(set Licht an)
DOELSEIF ([Bewegungsmelder] eq "closed")
(set Licht aus)


on-for-timer brauche ich damit gar nicht.

Pfriemler

#5
betateilchen und Otto123 beziehen sich offenbar auf den HomeMatic-Bewegungsmelder. Der sendet nur einmal Bewegung und schweigt dann für die einstellbare Zeitdauer. "Nicht-Bewegung" wird nur gesendet, wenn es zyklisch andere Meldungen gibt. Meines Wissens bildet FHEM alternativ dazu noMotion selbst ... bin aber nicht so sicher.
Andere Bewegungsmelder könnten durchaus geschwätziger sein und öfter senden.
Die Fibaro-Motion-Eyes-Methode klingt für mich irgendwie deutlich praxisnäher...
edit: im Homematic-Fall ist es charmant, das Reading direkt zu verwenden. 5 Sekunden wären mir aber zu kurz. Im Bad bin ich hin und wieder nicht so agil  ;) Aber das kann ja jeder selbst festlegen.
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

trs

Ich nutze Xiaomi Bewegungsmelder. Die melden "motion" und "no_motion"

swsmily

wenn beides gemeldet wird, dann nutze doch die Meldungen des Bewegungsmelders und nicht on-for-timer. somit bleibt das licht doch so lange an, wie der Bewegungemelder eine Bewegung registiert.

trs

Aber dann habe ich ja genau den Effekt, dass das Licht bei Bewegung an geht, und sofort aus, wenn kurzzeitig keine Bewegung erkannt wird...

Otto123

Moin,

und Du hast Probleme mit meinem Vorschlag? Der macht genau was Du willst und funkt nicht unnütz.
Die beiden Zusatzbedingungen (and ([?Tageslicht] eq "0" or [?PIRWg:brightness] < 130)) kannst Du auch erstmal getrost weglassen.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

betateilchen

Zitat von: Pfriemler am 17 Juli 2018, 13:13:07
im Homematic-Fall ist es charmant, das Reading direkt zu verwenden. 5 Sekunden wären mir aber zu kurz. Im Bad bin ich hin und wieder nicht so agil

In solchen Fällen habe ich zwei Lösungsansätze:


  • die Zeit auf +900 Sekunden zu setzen
  • einen watchdog zu verwenden

Die erste Variante habe ich auch im Bad im Einsatz - zumal dort die Dusche nicht vom Bewegungsmelder erfasst wird.
Den watchdog habe ich beispielsweise im Wohnzimmer im Einsatz. Dort gibt es zwei Bewegungsmelder, die in einer structure zusammengefasst sind.

Sobald sich der Status der structure ändert, weil keine Bewegung erkannt wurde, triggert der watchdog und wartet die nächsten 15 Minuten, ob auch weiterhin keine Bewegung auftritt. Erst dann wird das Licht ausgeschaltet. Vor dem Ausschalten merkt sich die structure aber, welche Lampen im Wohnzimmer zu diesem Zeitpunkt eingeschaltet waren. Betritt man innerhalb der nächsten 60 Minuten das Wohnzimmer wieder, werden exakt die gleichen Lichter wieder angeschaltet, die man vorher "vergessen" hatte, auszumachen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

trs

@Otto123:

habe es jetzt so probiert wie bei dir:

defmod XMI_0x00158d0001fa4075_DOIF_2 DOIF (([XMI_0x00158d0001fa4075:"^motion$"]) and (ReadingsVal("XMI_0x00158d0001fa4075","illuminance",0) < 80))  (set BU_fenster02 on)(set BU_fenster02 off)
attr XMI_0x00158d0001fa4075_DOIF_2 do resetwait
attr XMI_0x00158d0001fa4075_DOIF_2 room Gästebad
attr XMI_0x00158d0001fa4075_DOIF_2 wait 0,70

setstate XMI_0x00158d0001fa4075_DOIF_2 cmd_1
setstate XMI_0x00158d0001fa4075_DOIF_2 2018-08-02 19:11:14 Device XMI_0x00158d0001fa4075
setstate XMI_0x00158d0001fa4075_DOIF_2 2018-08-02 19:06:00 cmd 1.2
setstate XMI_0x00158d0001fa4075_DOIF_2 2018-08-02 19:06:00 cmd_event XMI_0x00158d0001fa4075
setstate XMI_0x00158d0001fa4075_DOIF_2 2018-08-02 19:06:00 cmd_nr 1
setstate XMI_0x00158d0001fa4075_DOIF_2 2018-08-02 19:06:00 cmd_seqnr 2
setstate XMI_0x00158d0001fa4075_DOIF_2 2018-08-02 19:11:14 e_XMI_0x00158d0001fa4075_events battery_level: 100.00,battery: ok,lux: 28,illuminance: 28,voltage: 3055,no_motion,occupancy: false
setstate XMI_0x00158d0001fa4075_DOIF_2 2018-07-31 18:22:16 mode enabled
setstate XMI_0x00158d0001fa4075_DOIF_2 2018-08-02 19:06:00 state cmd_1
setstate XMI_0x00158d0001fa4075_DOIF_2 2018-08-02 19:05:59 wait_timer no timer


Ist aber so wie immer. Geht an, und nach der vordefinierten Zeit wieder aus. Egal, ob während der Zeit Bewegung ist. Es muss so sein, das in der zweiten Hälfte der Zeit Bewegungen gezählt werden. Bei überschreiten einer Zahl von Bewegungen wird die Dauer "Licht an" verlängert.

Damian

Zitat von: trs am 02 August 2018, 19:44:19
Ist aber so wie immer. Geht an, und nach der vordefinierten Zeit wieder aus. Egal, ob während der Zeit Bewegung ist. Es muss so sein, das in der zweiten Hälfte der Zeit Bewegungen gezählt werden. Bei überschreiten einer Zahl von Bewegungen wird die Dauer "Licht an" verlängert.
Weil XMI_0x00158d0001fa4075 offenbar kein erneutes "motion" innerhalb der 70 Sekunden sendet, auch wenn du vor dem Bewegungsmelder tanzt :)

Schau dir mal im Eventmonitor wann das Event motion kommt.  Ich gehe davon aus, dass du keine zwei motion-Events innerhalb von 70 Sekunden finden wirst.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

trs


trs

Ok, alles geklärt:

Ich konnte einstellen, dass der Bewegungsmelder nach 20 sec. von "motion" auf "no_motion" springt. Dann dauert es aber weitere 40 sec., bis erneut "motion" gesendet wird. Hat also bei 70 sec. nur noch 10 sec. Zeit, auf Bewegung zu reagieren. War zu knapp. Habe die Zeitspanne im DOIF auf 90 sec. gesetzt.