Hallo,
ich habe meine Gangbeleuchtung, die vorher mit zwei "normalen" Bewegungsmeldern geschalten wurde umgebaut.
Ziel sollte es sein das Licht weiterhin über erkannte Bewegung zu Schalten, aber auch über einen (bzw. sind es jetzt zwei) Schalter das Licht einschalten zu können. ABER es sollte durch drücken eines Schalters nicht auf "on" gesetzt werden. Ich hatte vorher immer das Problem dass, das Licht dann nicht mehr ausgeschaltet wurde. Also wollte ich auch nur ein "on-for-timer" haben, der sich bei mehrfachem Betätigen des Schalters addiert um das Licht auch für einen Längeren Zeitraum einschalten zu können.
Zusätzlich habe ich mit den neuen Bewegungsmeldern das Problem, dass wir nicht mehr gesehen werde, wenn wir zur Wohnungstür reinkommen. Also habe ich den Türsensor auch noch mit einbezogen.
Als Bewegungsmelder habe ich zwei HM-Sen-MDIR-WM55
Das Licht schalte ich mit einem HM-LC-SW1-FM
und an der Tür ist ein HM-SEC-SCo verbaut.
Ich hab im Forum einen Beitrag gefunden in dem es um Restlaufzeit von on-for-timer geht. https://forum.fhem.de/index.php/topic,30169.msg228677.html#msg228677 (https://forum.fhem.de/index.php/topic,30169.msg228677.html#msg228677)
Den Timer hab ich so übernommen:
Internals:
COMMAND {if(ReadingsVal("d_Ga_lichtDecke",'state',0)>0) {fhem("set d_Ga_lichtDecke ".(ReadingsVal("d_Ga_lichtDecke",'state',0)-1))} else {fhem("attr a_Ga_lichtDecke_laufzeit disable 1;save")}}
DEF +*00:00:01 {if(ReadingsVal("d_Ga_lichtDecke",'state',0)>0) {fhem("set d_Ga_lichtDecke ".(ReadingsVal("d_Ga_lichtDecke",'state',0)-1))} else {fhem("attr a_Ga_lichtDecke_laufzeit disable 1;save")}}
NAME a_Ga_lichtDecke_laufzeit
NR 125
NTM 16:18:32
PERIODIC yes
RELATIVE yes
REP -1
STATE disabled
TIMESPEC 00:00:01
TRIGGERTIME 1480951112.19944
TRIGGERTIME_FMT 2016-12-05 16:18:32
TYPE at
Readings:
2016-12-05 16:18:31 state disabled
Attributes:
disable 1
group Licht_helper
room Automatik
und mir einen Dummy für das Licht gebaut. Dieser hat noch ein userReading für on und off bekommen auf dass man dann reagieren kann
Internals:
CHANGED
NAME d_Ga_lichtDecke
NR 124
STATE 0
TYPE dummy
Readings:
2016-12-05 07:11:37 onOff off
2016-12-05 07:11:37 state 0
Attributes:
event-on-change-reading onOff
group Licht_helper
room Automatik
userReadings onOff {return "on" if (ReadingsVal('d_Ga_lichtDecke','state','') > 1);;;; return "off"}
dann habe ich (versucht) eine kleine sub zu schreiben. Bzw zwei. Eine für die Bewegungsmelder
sub gangbeweg($$) {
my ($motion, $hour) = @_;
my $melder = "MotionSensor";
if (ReadingsVal($motion,'brightness','') <= "60" && ($hour <= "21" && $hour >= "6")) {Ga_lichtDecke("$melder");
}
elsif (ReadingsVal($motion,'brightness','') <= "60" ) {fhem ("set Ga_lichtNacht on-for-timer 30");
}
}
und eine zweite die dann die aktuelle on-for-timer Zeit ausliest und dann je nachdem welcher Sensor betätigt wurde eine definierte Zeit zur aktuellen Laufzeit hinzuaddiert.
sub Ga_lichtDecke($) {
my ($ausloeser) = @_;
my $currentTime = ReadingsVal('d_Ga_lichtDecke','state','0');
my $plusTime = 240; #Time für Buttons
my $tuerTime = 120; #Time für Tuere oeffnen
my $motionTime = 60; #Time für Bewegungsmelder
my $newTime = 0;
if($ausloeser eq "MotionSensor"){
$newTime = $currentTime + $motionTime
}
elsif($ausloeser eq "Ga_tuer"){
$newTime = $currentTime + $tuerTime
}
else { $newTime = $currentTime + $plusTime}
if (ReadingsVal('a_Ga_lichtDecke_laufzeit','state','') eq "disabled") {fhem ("set d_Ga_lichtDecke $newTime; attr a_Ga_lichtDecke_laufzeit disable 0;");
}
else {fhem ("set d_Ga_lichtDecke $newTime");
}
}
Beim Notify der Tür prüfe ich beim öffnen noch ob die aktuelle Uhrzeit zwischen Sonnenuntergang und Aufgang liegt. Um es auch nur einzuschalten, wenn wir nach Hause kommen und es schon "Dunkel" ist. Außerdem checke ich noch ob das Licht schon an ist, um die Zeit nicht zu verlängern wenn wir eh das Haus verlasen.
Internals:
CFGFN
DEF Ga_tuer:open {
if ((ReadingsVal('d_Ga_lichtDecke','onOff','') eq 'off') and ($hms ge sunset_abs() or $hms le sunrise_abs())) {Ga_lichtDecke($NAME)}
}
NAME LichtAnGangTuer
NOTIFYDEV Ga_tuer
NR 168575
NTFY_ORDER 50-LichtAnGangTuer
REGEXP Ga_tuer:open
STATE 2016-12-05 13:41:05
TYPE notify
Readings:
2016-12-03 10:50:07 state active
Attributes:
group Licht_helper
room Automatik
Vielleicht kann ich hier mit meinem Konstrukt auch mal jemand helfen nachdem ich von vielen Beiträgen hier schon sehr Profitieren konnte.
Ich lasse mich aber natürlich auch gerne auf einen einfacheren Weg führen, da ich auf jeden Fall noch Anfänger bin und mich freue was zu lernen.
Viele Grüße
Flo