Zeit
Auf einem KNX-Bus ist standardmäßig die aktuelle Zeit (Datum & Uhrzeit) nicht bekannt. Es ist auch nicht zwingend erforderlich, dass diese Information verfügbar ist. KNX-Geräte funktionieren auch ohne die aktuelle Zeit zu kennen.
Dennoch kann es nützlich sein, dass die aktuelle Zeit über den KNX-Bus verfügbar ist – zB um die Uhrzeit auf einem Display anzuzeigen.
Mit einem Skript kann man die aktuelle Zeit an eine Gruppenadresse senden.
Als Zeitquelle kann man entweder die Systemzeit oder NTP verwenden.
Je nach Anforderungen kann in KNX die Zeit als Datentyp 10.001
(Uhrzeit), 11.001
(Datum) oder 19.001
(Datum und Uhrzeit) kodiert werden.
Systemzeit
Die Systemzeit ist die Zeit des laufenden Systems. Wenn hkknx auf einem Rasbperry Pi läuft, dann ist die Systemzeit die eingestellte Zeit auf dem Raspberry Pi.
Im einem Skript wird die Systemzeit mit der Funktion Now im “time” Package abgefragt. Im folgenden Skript wird jede Minute die Systemzeit als Datentyp 19.001
an die Gruppenadresse 1/0/3
gesendet.
1var hkknx = import("hkknx")
2var time = import("time")
3
4for {
5 // Systemzeit abfragen
6 var now = time.Now()
7 // Zeit in den Datentyp 19.001 umwandeln
8 var dateTime = hkknx.DPT19001(now)
9 // Wert an die Gruppenadresse 1/0/3 senden
10 hkknx.GroupWrite(dateTime, "1/0/3")
11 // 1 Minute warten
12 <-time.After(1 * time.Minute)
13}
NTP
Das Network Time Protocol (NTP) ist ein Standard, um intelligente Endgeräte über das Internet mit einer Uhrzeit zu versorgen. Es kann in Skripten dazu verwendet werden, um die aktuelle Zeit abzufragen und an eine Gruppenadresse zu senden.
Seit hkknx v2.8.0 gibt es im “ntp” Package die Funktion Time, um die Zeit von einem NTP-Server abzugefragen.
Im folgenden Skript wird jede Minute die aktuelle Zeit vom NTP-Server pool.ntp.org
abgefragt und als Datentyp 19.001
an die Gruppenadresse 1/0/3
gesendet.
1var ntp = import("ntp")
2var log = import("log")
3var hkknx = import("hkknx")
4var time = import("time")
5
6for {
7 var t, err = ntp.Time("pool.ntp.org")
8 if err != nil { // Auf Fehler überprüfen
9 // Den Fehler in das Log schreiben
10 log.Println(err)
11 } else {
12 // Zeit in den Datentyp 19.001 umwandeln
13 var dateTime = hkknx.DPT19001(t)
14 // Wert an die Gruppenadresse 1/0/3 senden
15 hkknx.GroupWrite(dateTime, "1/0/3")
16 }
17
18 // 1 Minute warten
19 <-time.After(1 * time.Minute)
20}
Eine Liste von NTP Servern ist verfügbar unter www.ntppool.org.