Hallo,
irgendwie fehlt mir der Ansatz wie ich folgendes Verhalten programmieren soll:
Die Außenlampen sollen über sunset() und sunrise() ein bzw. ausgeschaltet werden. Zwischen 00:00 und 5:00 sollen sie jedoch ausgeschaltet werden. Nun tritt das Problem auf, dass sunrise im Sommer auch vor 05:00 sein kann. Dann würden sich meine Befehle überschneiden und das Licht den ganzen Tag anbleiben. Ich habe das jetzt provisorisch erstmal so gelöst, dass sunrise immer nach dem on-Befehl kommt:
# Außenlampe - Steuerung An-/Ausschaltzeit
define AussenlampeAn1 at *{sunset(0,"16:00","23:00")} set AussenLichtTerrasse on;;set Stehlampen on;;set GarageBoden on
define AussenlampeAus1 at *00:00:00 set AussenLichtTerrasse off;;set Stehlampen off;;set GarageBoden off
define AussenlampeAn2 at *05:00:00 set Stehlampen on;;set GarageBoden on
define AussenlampeAus2 at *{sunrise(0,"05:30","07:30")} set Stehlampen off;;set GarageBoden off
Hat jemand da eine Idee?
Danke
Gruß
Kai
Bei mir wird die Balkonbeleuchtung
abends zu sunset() angeschaltet,
um 22 Uhr (im Sommer um 23 Uhr) ausgeschaltet ,
und von 90 Minuten VOR sunrise() per "on-for-timer 5400" wieder eingeschaltet.
Also drei defines:
define abends_an at *{sunset} set licht on
define abends_aus at *22:00:00 set licht off
define morgens_an at *{sunrise,-5400} set licht on-for-timer 5400
Man könnte natürlich auch auf Idee kommen, das erste at (abends_an) mit einem "on-till 22:00" zu versehen und dadurch das zweite define gar nicht zu brauchen. Das habe ich auch getestet, es hat aber nicht zuverlässig funktioniert.
Das oben beschriebene ist das Grundgerüst.
In Wirklichkeit ist das bei mir anders umgesetzt. Bei mir gibt es events global:SUNRISE und global:SUNSET auf die ich mit notify triggern kann und nicht mit at arbeiten muss. Vor allem, da ich sunrise und sunset noch an anderen Stellen brauche, müssen so die Zeitpunkte nicht mehrfach berechnet werden, sondern nur jeweils einmal, um den event zu triggern.
Das Ausschalten um 22 Uhr wird bei mir ebenfalls über einen event HOURLY getriggert, und in der 99_myUtils verarbeitet, wo geprüft wird, ob 22 Uhr ist (oder in den Monaten 4-8 23 Uhr) und dann die Lampe ausgeschaltet wird.
Aber so komplex wollte ich das oben nicht darstellen.
Hi betateilchen,
danke für deinen Ansatz. Hilft mir schon ein wenig weiter. Nur im Sommer brauche ich keine 90 Minuten vor Sonnenaufgang Licht. :P In diesem Fall soll das Licht überhaupt nicht angehen, wenn SUNRISE vor der definierten Zeit liegt.
Vielleicht kann man ja die Uhrzeiten vom SUNRISE und der definierten Zeit subtrahieren und die Differenz in Sekunden übergeben.
Ich glaube ich muss mich da mal in das Thema 99_myUtils einarbeiten, damit ich eigene Funktionen erstellen kann.
Du könntest auch das einschalten durch if und der Funktion isday() nur bedingt ausführen lassen.
define LichtAn Art *05:00:00 if !isday() set ....
Zitat von: firebal301 am 14 November 2014, 17:08:40
danke für deinen Ansatz. Hilft mir schon ein wenig weiter. Nur im Sommer brauche ich keine 90 Minuten vor Sonnenaufgang Licht.
Ich auch nicht, aber ich wollte meine Beschreibung oben nicht weiter aufblähen als nötig.
Genau so wie mir geprüft wird, ob die Ausschaltzeit 22 oder 23 Uhr sein soll (also in den Monaten 4-8) wird auch beim Einschalten geprüft, da in diesen Monaten morgens auch keine Beleuchtung stattfindet.
Wenn Du es genau wissen willst:
define balkonLichtSrAn at *{sunrise("REAL",-5400,"06:00","08:00")} { if (!( $month ~~ [4..8] )) { fhem("set Licht_Balkon on") } }
Danke betateilchen,
deine Lösung gefällt mir. Habe ich erstmal eingebaut und wird getestet.
Beachte bitte, dass in meinem at kein Ausschalten mit definiert wird. Also entweder "on" durch "on-for-timer xx" ersetzen oder ein zusätzliches at mit dem Ausschaltzeitpunkt definieren.
Jo, ich habe das mit einem zweiten at gelöst:
define AussenlampeAn2 at *{sunrise("REAL",-5400,"06:00","08:00")} { if (!( $month ~~ [4..8] )) { fhem("set Stehlampen on;;set GarageBoden on") } }
define AussenlampeAus2 at *{sunrise("REAL",0,"06:00","08:00")} set Stehlampen off;;set GarageBoden off