INSIDETecBaseWebUISkript-BibiliothekTageszeit in Abschnitte unterteilen

Tageszeit in Abschnitte unterteilen

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 Uhr

Die 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.

Neue Kommentare:

  • Hallo zusammen, ich versuche seit Tagen verzweifelt, für die Einbindung von FS20 Komponenten an der Homematic Zentrale (1.505), den CUL-Stick (V3.3) von BUSWARE zu konfigurieren. Ich bin streng nach Anleitung aus dem Net... Weiter lesen
  • Hallo, ich habe nun den cux Daemon installiert und die Firmware des CUL geschrieben, bei Status wird folgendes angezeigt: ======================================== USB 1-2 - {CUX} CUL868 [COMM] - /dev/ttyACM0 - V 1.44 CUL... Weiter lesen
  • Hallo, ich habe bei mir den Dimmer HM-LC-Dim1TPBU-FM in Betrieb. Soweit funktioniert alles.Wie komme ich aber an die weiteren Känäle des Dimmers. Bei mir werden in den Geräteeinstellungen die Kanäle Ch:2 und Ch:3 nicht a... Weiter lesen
Kommentare