Geändert am Montag, 02. November 2009 [Veröffentlicht in: Skript-Bibiliothek]
Möchte man einen Aktor für eine gewisse Zeit ein- bzw. ausschalten, kommt normalerweise das
Zeitmodul zum Einsatz, das für die meisten Zwecke auch völlig ausreichend ist. Gerade im Zusammenspiel mit der eingebauten Astrofunktion stösst das Modul jedoch an seine Grenzen. So kann z.B. die entsprechende Zeit nicht vorgezogen werden. Hier könnte nachfolgendes Skript helfen, das einen Tag in verschiedene
Zeitabschnitte unterteilt, die wiederum flexibel für die Programmierung verwendet werden können.
Zunächst wird eine neue
Systemvariable mit dem Namen "
Tageszeit" und dem Typ "
Werteliste" mit folgendem Inhalt erstellt:
Nacht;Frühmorgens;Morgengrauen;Vormittag;Mittag;Nachmittag;Dämmerung;Abend;
Anschließend wird ein neues
Programm erstellt, dass im "
Wenn"-Abschnitt z. B. jede Minute via
Zeimodul aufgerufen wird. In der dazugehörigen "
Dann"-Anweisung, ist der Typ "
Skript" auszuwählen und folgender Quellcode einzugeben:
! Tageszeiten
! Tagesbeginn - 2 Nacht
! Tagesbeginn - 2 Tagesbeginn - 1 frühmorgens
! Tagesbeginn - 1 Tagesbeginn Morgengrauen
! Tagesbeginn Mittag - 1 Vormittag
! Mittag - 1 Mittag + 1 Mittag
! Mittag + 1 Tagesende Nachmittag
! Tagesende Tagesende + 1 Dämmerung
! Tagesende + 1 Tagesende + 2 Abend
! Tagesende + 2 Nacht
real c_zeit = (0.01 * system.Date("%M").ToInteger()) + system.Date("%H").ToInteger();
real c_tagesbeginn = (0.01 * system.SunriseTime("%M").ToInteger()) + system.SunriseTime("%H").ToInteger();
real c_tagesende = (0.01 * system.SunsetTime("%M").ToInteger()) + system.SunsetTime("%H").ToInteger();
real c_mittag = 13.00; ! Mittagszeit
integer v_tageszeit = 0; ! Nacht
if (c_zeit < c_tagesende + 2) {
v_tageszeit = 7; ! Abend
}
if (c_zeit < c_tagesende + 1) {
v_tageszeit = 6; ! Abenddaemmerung
}
if (c_zeit < c_tagesende) {
v_tageszeit = 5; ! Nachmittag
}
if (c_zeit < c_mittag + 1) {
v_tageszeit = 4; ! Mittag
}
if (c_zeit < c_mittag - 1) {
v_tageszeit = 3; ! Vormittag
}
if (c_zeit < c_tagesbeginn) {
v_tageszeit = 2; ! Morgengrauen
}
if (c_zeit < c_tagesbeginn - 1) {
v_tageszeit = 1; ! fruemorgens;
}
if (c_zeit < c_tagesbeginn - 2) {
v_tageszeit = 0; ! Nacht
}
dom.GetObject("Tageszeit").State(v_tageszeit);Das Skript ermittelt zunächst die
aktuelle Uhrzeit sowie die von der Zentrale errechneten Zeiten für den
Sonnenauf- und
untergang (Astrofunktion). Die
Mittagszeit wird fest auf
13:00 Uhr definiert. Die nachfolgenden Zeilen füllen nun die Systemvariable
Tageszeit mit den entsprechenden Werten. Dabei darf die Reihenfolge der Werteliste nicht verändert werden.
Beispiel
Sonnenaufgang laut Astrofunktion
07:00 Uhr, Sonnenuntergang
21:00 UhrDie Tageszeiten wären dann:
| Nacht |
23:00-05:00 |
| Frühmorgens |
05:00- 06:00 |
| Morgengrauen |
06:00-07:00 |
| Vormittag |
07:00-12:00 |
| Mittag |
12:00- 14:00 |
| Nachmittag |
14:00-21:00 |
| Dämmerung |
21:00-22:00 |
| Abend |
22:00- 23:00 |
Diese Werte können dann einfach für weitere Programmierungen herangezogen werden, z.B. die Hausnummern-Beleuchtung bei
Dämmerung ein- und bei
Nacht wieder ausschalten.