Hi,
folgendes Setup :
Ich möchte wenn jemand am Bewegungsmelder vorbei läuft das Licht gedimmt einschalten. Sollte sich jemand aber länger (hier 40 Sekunden) in dem Bereich aufhalten, soll das Licht auf 100% gedimmt werden.
Probiert habe ich :
defmod di_kueche_abends DOIF ([17:00-23:59] and [ESPEasy_esp8266_4_PIR:Switch] eq "on" and [?HM_57C1F2_Motion:brightness] < 100 ) \
(set HUEGroup6 pct 5) \
(set HUEGroup6 pct 100)\
DOELSE (set HUEGroup6 pct 0)
attr di_kueche_abends wait 0,40:121
Klappt soweit auch, ausser wenn jemand durchläuft (pct5), und dann aber zwischen Sekunde 40 und 121 zurück kommt, und sich im Bereich aufhält. DOIF bleibt dann auf 1.1 stehen.
Wie könnte man das abfangen ?
Danke
jupp
[ESPEasy_esp8266_4_PIR:Switch] eq "on" ist eine Zustandsabfrage. Wenn hier einer helfen soll, dann muss er auch wissen, wann ESPEasy_esp8266_4_PIR:Switch wieder den Zustand wechselt - vermutlich auf off.
Hallo Guten morgen.
Richtig, der Zustand wechselt wieder auf "off".
Grüße
jupp
edit :
deutet deine frage auf doelseif mit off und nem wait statt nem "nackten" doelse ?
Zitat von: juppzupp am 02 September 2018, 11:44:59
Hallo Guten morgen.
Richtig, der Zustand wechselt wieder auf "off".
Grüße
jupp
edit :
deutet deine frage auf doelseif mit off und nem wait statt nem "nackten" doelse ?
Die Frage war: wann?
Sorry.
Wenn sich niemand mehr bewegt + 15 Sekunden.
Grüße
jupp
Zitat von: juppzupp am 02 September 2018, 12:06:11
Sorry.
Wenn sich niemand mehr bewegt + 15 Sekunden.
Grüße
jupp
Dann muss man wissen, ob innerhalb von 15 Sekunden ein erneutes on gesendet wird bei Bewegung.
nein.
Die nächste Frage lautet, was passiert wenn sich jemand innerhalb von 15 Sekunden bewegt, wird z. B. das off zeitlich verschoben oder kommt es ausgehend von der ersten Bewegung nach 15 Sekunden (die zweite Bewegung innerhalb von 15 Sekunden wäre dann nicht erkennbar).
Es sind alles wichtige Informationen, die man wissen muss, wenn man die Anforderungen umsetzen möchte.
Dann wird das off zeitlich verschoben.
Innerhalb der 15 Sekunden kann man nichts erkennen.deswegen auch im ersten Versuch das wait mit 40 Sekunden. Die Idee war "wenn pir in länger 40 Sekunden"
Der Melder meldet also Bewegung sofort, hält den Ausgang aber min. 15 Sekunden offen. Sollte innerhalb der Spanne weitere Bewegung stattfinden, bleibt der Ausgang auf on.
OK. So langsam hätten wir dann alle Infos.
Zeitlichabhängige Aktionen lassen sich besser mit DOIF-Perl lösen, hier kann man die Laufzeit eines Timers abfragen. Das geht beim FHEM-Modus nicht ohne weiteres.
define di_kueche DOIF { # Block zur Auswertung des Ereignisses
if ([?17:00-23:59] and
[ESPEasy_esp8266_4_PIR:Switch] eq "on" and
[?HM_57C1F2_Motion:brightness] < 100 and
get_Timer("Timer")==0) { # wenn Ereignis eintritt und kein Timer läuft
set_Timer("Timer",40); # setze Timer auf 40 Sekunden
fhem"set HUEGroup6 pct 5"; # lampe dimmen
}
}
{ # Block für die Auswertung nach Ablauf des Timers
if ([$SELF:"Timer"]) { # wenn Timer nach 40 Sekunden abläuft
if ([?ESPEasy_esp8266_4_PIR:Switch] eq "on"){ # wenn immer noch einer da
fhem"set HUEGroup6 pct 100";
set_Timer("Timer",40); # verlängere Timer um weitere 40 Sekunden
}
}
}
{ # block zum Licht ausschalten
if ([ESPEasy_esp8266_4_PIR:Switch] eq "off"){
fhem"set HUEGroup6 pct 0"; # Licht aus
del_Timer("Timer"); # Timer löschen
}
}