http://www.stall.biz/project/universell ... den-lampen
Im Homematic Zeitmodul fehlen eine Reihe wichtiger Zeitfunktionen wie Datumsbereiche, Monate, Wochentage und Kalenderwochen. Aber besonders die Astrofunktion ist unbefriedigend, weil man nur selten genau zum Sonnenaufgang(SA) oder Sonnenuntergang(SU) etwas schalten möchte. Meist benötigt man nämlich Schaltvorgänge vor oder nach diesem Sonnenereignis.
Um diesen Mangel "auszubügeln" , gibt es hier im Forum eine Vielzahl von mehr oder weniger gelungener Hilfslösungen, die aber meist nur auf spezielle Fragestellungen abgestimmt wurden. Mit diesem Astro/Zeitskript werden einfach verschiedene Systemvariablen berechnet, welche die verschiedenen Zeitinformationen abbilden. Die gewählte Benamung der Systemvariablen erklären selbstredend die Funktion.
Und das geht so:
1. Folgende Systemvariablen anlegen:
Minuten_vor_SA als Zahl , Wertebereich -1000 bis +1000
Minuten_vor_SU als Zahl , Wertebereich -1000 bis +1000
Tageszeit_hh.mm als Zahl in h
Datum_MM.TT als Zahl
Monat als Werteliste Januar;Februar; ...
Monatstag als Werteliste 1;2;3; ... ;31
Wochennummer als Zahl
Woche_gerade logisch wahr ist gerade , unwahr ist ungerade
Wochentag als Zahl
2. WebUI Programm anlegen, in dem beispielsweise alle 3min das folgende Astro/Zeit-Skript aufgerufen wird:
Das Skript dazu verwendet nur eine (!) Skriptvariable, was für eine gute "Skripthygiene" wichtig ist.
Code: Alles auswählen
!Skript zur Berechnung der Minuten vor SA und SU !
!stall.biz 18.02.2016 Dieses Skript verwendet nur eine (!) Skript-Variable
!folgende Systemvariablen anlegen
!Minuten_vor_SA" als Zahl , Wertebereich -1000 bis +1000
!Minuten_vor_SU" als Zahl , Wertebereich -1000 bis +1000
!"Tageszeit_hh.mm" als Zahl in h
!"Datum_MM.TT" als Zahl
!"Monat" als Werteliste Januar;Februar; ...
!"Monatstag" als Werteliste 1;2;3; ... ;31
!"Wochennummer" als Zahl
!"Woche_gerade" logisch wahr ist gerade , unwahr ist ungerade
!"Wochentag" als Zahl
!"Jahrestag" als Zahl
real c_zeit =(system.Date("%M").ToFloat()+ (60.0*system.Date("%H").ToFloat()));
if (c_zeit >720.0) { dom.GetObject("Minuten_vor_SA").State(999);
c_zeit = system.SunsetTime("%M").ToFloat() + (60.0*system.SunsetTime("%H").ToFloat());
c_zeit = c_zeit - (system.Date("%M").ToFloat()+ (60.0*system.Date("%H").ToFloat()));
dom.GetObject("Minuten_vor_SU").State(c_zeit);
}
else {dom.GetObject("Minuten_vor_SU").State(999);
c_zeit = system.SunriseTime("%M").ToFloat() + (60.0*system.SunriseTime("%H").ToFloat());
c_zeit = c_zeit - (system.Date("%M").ToFloat()+ (60.0*system.Date("%H").ToFloat()));
dom.GetObject("Minuten_vor_SA").State(c_zeit);
}
real c_zeit = (1.0*system.Date("%H").ToInteger()) +(0.01*system.Date("%M").ToInteger());
dom.GetObject("Tageszeit_hh.mm").State(c_zeit);
real c_zeit = (0.01 * system.Date("%d").ToInteger()) + system.Date("%m").ToInteger();
dom.GetObject("Datum_MM.TT").State(c_zeit );
integer c_zeit = system.Date("%m").ToInteger();
dom.GetObject("Monat").State(c_zeit -1);
integer c_zeit = system.Date("%d").ToInteger();
dom.GetObject("Monatstag").State(c_zeit -1);
integer c_zeit = system.Date("%V").ToInteger();
dom.GetObject("Wochennummer").State(c_zeit);
if ((c_zeit - 2*(c_zeit/2.0)) == 1) {dom.GetObject("Woche_gerade").State(0);} else {dom.GetObject("Woche_gerade").State(1);}
integer c_zeit = system.Date("%u").ToInteger();
dom.GetObject("Wochentag").State( c_zeit);
integer c_zeit = system.Date("%j").ToInteger();
dom.GetObject("Jahrestag").State( c_zeit);
4. So wird das Astro/Zeit-Skript eingesetzt
Zum Beispiel eine Rollade[/b] so steuern, daß sie morgens 30min vor Sonnenaufgang hoch geht, aber nicht vor 6h45 und abends 45min nach Sonnenuntergang
runter fährt,aber nicht später als 22h00.
Das WebUI -Programm dazu ist mit Verwendung der soeben definierten Systemvariablen ganz einfach: ...und mit der Verwendung der Systemvariablen aus der Astro/Zeitsteuerung sind die WebUI-Programm viel besser lesbar , als mit dem "verkorksten"Zeitmodul!
Abschließend noch einige Erläuterungen zur Astrofunktion:
Da die meisten Steuerungsaufgaben stark mit dem Sonnenaufgang und -untergang verknüpft ist, hat man die sog. Astrofunktion eingeführt. Diese ist aber oft unzureichend, weil man oft lieber einige Minuten vorher oder nachher den Schaltvorgang ausführen möchte. Dazu wurden in dem Astro/Zeit-Skript die zwei Systemvariablen Minuten_vor_SA und Minuten_vor_SU eingeführt. Der Wert dieser Variablen ändert sich über den Tagesverlauf entsprechend dem folgenden Bild: Die Systemvariable Minuten_vor_SA ist nur von 00h00 bis 12h00 aktiviert und wird im zweiten Tagesabschnitt auf einen Wert von 999 gesetzt.
Bei der Systemvariablen Minuten_vor_SU ist es genau umgekehrt. Diese Definition hat Vorteile bei Anwendung in WebUI -Programmen.
Viel Spaß mit dem neuen "Zeitgefühl"
Update 28.03.2016:
Berechnung Jahrestag im Skript hinzugefügt!