Darfst du
. DIe Frage zeigt, dass du aufgepasst hast. Hatte ich schon mal erwähnt, dass ich einen Faible für nicht wartbaren Code habe
.
Man muss dazu wissen, dass F_HWRTuer ein "Fensterkontakt" an der Hauswirtschaftsraum Tuer ist und HWR ist das Licht im Hauswirtschaftsraum.
Weiterhin habe ich euch im ersten Beispiel ein paar Zeilen vorenthalten um euch nicht zu verwirren
.
Hier ist der vollstaendige Code:
Was passiert? HWR hat die Statii [ON/OFF] und F_HWRTuer [open/closed]. Ist in THS_HWR die Variable state gleich ON, dann habe ich das Licht über den Schalter angemacht und es geht erst nach 60min wieder aus. Macht man die HWR Tuer auf (state=open), dann wird das Licht nach 10min ausgemacht, falls man vergessen sollte die Tuer zuzumachen. Macht man sie zu, leuchtet es noch 3min. Warum? Das ist eine Neonlampe und wenn man schnell hintereinander rein und rausgeht, dann würde die Lampe extrem leiden unter dem schnellen ein und ausschalten.
Die 60min über manuellen Taster heisst Handwerkerschaltung, weil man wunderbar überprüfen kann wie lange der Miele Techniker an der Waschmaschine schraubt
. Wie of habe ich das Licht manuell angemacht? Nur 1x, ergo kann er nicht mehr als 2h abrechnen ,).
Jetzt wo ich mir den Code so anschaue, koennte man noch eine 4te elsif machen bei state=off und darin den Timer zuruecksetzten. Nur der Sauberkeit halber. Funktionieren tut es auch so. Ich hab die 4te elsif grad noch eingeführt
.


Man muss dazu wissen, dass F_HWRTuer ein "Fensterkontakt" an der Hauswirtschaftsraum Tuer ist und HWR ist das Licht im Hauswirtschaftsraum.
Weiterhin habe ich euch im ersten Beispiel ein paar Zeilen vorenthalten um euch nicht zu verwirren

Hier ist der vollstaendige Code:
Code:
my $HWRTimer = new Timer(); $F_HWRTuer->tie_event( 'THS_HWR($state)' ); $HWR->tie_event( 'THS_HWR($state)' ); # if HWR Door opens turn on light and turn it automaticaly off after 10min # if it closes, turn out light after 3min # if light is turned on manualy turn it of after 60min (Handwerkerschaltung) sub THS_HWR { my ($state) = @_; if ($state eq 'open') { set $HWR ON; $HWRTimer->unset(); $HWRTimer->set( 10*60, 'set $HWR OFF' ); } elsif ($state eq 'closed') { $HWRTimer->unset(); $HWRTimer->set( 3*60, 'set $HWR OFF' ); } elsif ($state eq ON) { $HWRTimer->unset(); $HWRTimer->set( 60*60, 'set $HWR OFF' ); } elsif ($state eq OFF) { $HWRTimer->unset(); } }
Die 60min über manuellen Taster heisst Handwerkerschaltung, weil man wunderbar überprüfen kann wie lange der Miele Techniker an der Waschmaschine schraubt

Jetzt wo ich mir den Code so anschaue, koennte man noch eine 4te elsif machen bei state=off und darin den Timer zuruecksetzten. Nur der Sauberkeit halber. Funktionieren tut es auch so. Ich hab die 4te elsif grad noch eingeführt

Kommentar