Homematic kennt leider keine Tageszeit als Variable oder Astrofunktion. In diesem Beitrag zeige ich euch ein kleines Script, mit dem ihr die Tageszeit berechnen und in eine Systemvariable schreiben lassen könnt.
Anschließend kann die Variable in Programmen verwendet (z.B. in der Dämmerung Licht auf 10% dimmen,..) werden.
- Name: Tageszeit
Typ: Werteliste
Werte: Nacht; frühmorgens; Morgengauen; Vormittag; Mittag; Nachmittag; Dämmerung; Abend;
- Bedingung: Wenn… Zeitsteuerung, Zeitspannung ganztägig, Serienmuster Zeitintervall alle 5 Minuten
- oder nach Bedarf

- Aktivität: Dann… Script einfügen
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
! Tageszeiten berechnen! Tageszeiten! Tagesbeginn - 2 < 04.00 Nacht! Tagesbeginn - 2 < 04.00 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 > 2200 Abend! Tagesende + 2 > 2200 Nachtreal 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 = 0.5 * (c_tagesbeginn + c_tagesende);integer v_tageszeit = 0; ! Nachtif ((c_zeit < c_tagesende + 2) || (c_zeit < 22.00)) { 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) && (c_zeit < 04.00)) { v_tageszeit = 0; ! Nacht}object s_tageszeit = dom.GetObject("Tageszeit");if (s_tageszeit.Value() != v_tageszeit) { s_tageszeit.State(v_tageszeit);} |
Fertig!