Bewegungsmelder vs. on-for-timer

Begonnen von dt2510, 20 Februar 2017, 11:34:58

Vorheriges Thema - Nächstes Thema

dt2510

Ich hab' folgendes Problem:

Meine Bewegungsmelder steuert (wenn es dunkel ist) meine Lampe im Eingangsbereich. Die Lampe wird bei Bewegung eingeschaltet und bei Bewegungsende ausgeschaltet.
Ausnahme: die Lampe war vorher an und wurde nicht vor Bewegungsende ausgeschaltet, dann bleibt sie an.

Soweit so gut ... schalte ich jetzt meine Anlage von "Home" auf "Away" schalte ich die Lampe am Eingang für 1 Minute an (on-for-timer). Gehe ich jetzt zur Tür registriert der Bewegungsmelder eine Bewegung.
Da das Licht durch on-for-timer eingeschaltet wurde, wird es bei Bewegungsende NICHT abgeschaltet, bleibt also bis zum Morgen oder bis ich manuell ausschalte an.
Woran kann ich erkennen, daß nicht mit "on" sondern "on-for-timer" geschaltet wurde ?

betateilchen

Das kommt auf den Typ des Schaltaktors an.
Bei Homematic-Aktoren gibt es ein reading timedOn das auf "on" steht, wenn mit on-for-timer geschaltet wurde.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

dt2510

Es handelt sich um einen Fibaro FGS212 (Z-Wave)

betateilchen

#3
Kenne ich leider nicht. Wenn Z-Wave mit den SetExtensions arbeiett, um on-for-timer zu implementieren, bekommst Du das vermutlich nicht mit, weil dazu ein interner Timer gesetzt wird, der nach Ablauf der Zeit einfach einen zweiten Befehl "off" schickt.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

dt2510

Ich könnte natürlich einfach abfragen ob der Anlagenstatus "Home" ist. Falls nicht schalte ich generell bei Bewegungsende aus.

dt2510

Ich versuche es jetzt mal so:

99_myUtils.pm
sub BewegungStart() {
  fhem("set Bewegung on");
  if (Value("FGS212_ID15") eq "on") {fhem("set EingangBeleuchtet on");}
  if (Value("FGS212_ID15") eq "off") {fhem("set EingangBeleuchtet off");}
  if (Value("FHEMMode") eq "Night") {fhem("set FGS212_ID15 on");}
}

sub BewegungEnde() {
  fhem("set Bewegung off");
  if (Value("HomeStatus") ne "Home") {fhem("set FGS212_ID15 off");}
  if ((Value("FGS212_ID15") eq "on") && (Value("EingangBeleuchtet") eq "off")) {fhem("set FGS212_ID15 off");}
}


Bewegung und EingangBeleuchtet sind Dummys mit den Werten on/off
FHEMMode ist ein Dummy mit den Werten Day/Night
HomeStatus ist ein Dummy mit den Werten Home/Away/Night/Holiday
FGS212_ID15 ist der Beleuchtung, die geschaltet werden soll (wird auch per on-for-timer geschaltet beim Wechsel auf HomeStatus "Away")
"Bewegung" wird gebraucht um in TABLETUI das Kamerabild anzuzeigen und "EingangBeleuchtet" speichert nur den Zustand vor der Bewegung.
BewegungStart() und BewegungEnde() werden per Notify aufgerufen.

Kann man die Abfragen/Wertzuweisungen vereinfachen (bin nicht wirklich der Perl-Held) ?

justme1968

die SetExtensions setzen ein TIMED_OnOff internal mit daten zum timer das man auswerten kann.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

dt2510

hmm ... ein TIMED_OnOff kann ich nicht finden

Sollte aber auch so funktionieren

dt2510

#8
ich hab' es nochmal etwas überarbeitet:

sub BewegungStart() {
  fhem("set Bewegung on");
  fhem("set EingangBeleuchtet ".Value("FGS212_ID15"));
  if (Value("FHEMMode") eq "Night") {fhem("set FGS212_ID15 on");}
}

sub BewegungEnde() {
  fhem("set Bewegung off");
  if ((Value("HomeStatus") ne "Home") || (Value("EingangBeleuchtet") eq "off")) {fhem("set FGS212_ID15 off");}
}


Bei Bewegung wird der Dummy "Bewegung" auf "on" gesetzt und der Status der Lampe in "EingangBeleuchtet" gesichert. Danach - falls dunkel - die Lampe eingeschaltet.
Am Ende wird der Dummy "Bewegung" auf "off" gesetzt und die Lampe ausgeschaltet, es sei denn HomeStatus ist "Home" und die Lampe war vorher an.
Die Lampe wird nur beim Wechsel des HomeStatus auf "Away" per on-for-timer geschaltet und somit entweder nach Ablauf oder bei Bewegungsende ausgeschaltet.

Der Bewegungsmelder schaltet nach ca. 30 Sekunden aus ... es könnte jetzt noch folgender Fall eintreten:

- Wechsel auf "Away" -> Lampe geht für 1 Minute an
- nach 50 Sekunden bin ich am Eingang und die Bewegung wird registriert
- nach 60 Sekunden geht die Lampe aus und ich stehe im dunkeln
- erst wenn ich mich 30 Sekunden nicht bewegt habe geht das Licht (bei erneuter Bewegung) wieder an

Hat jemand dazu einen Vorschlag ?