Einführung
Skripte sind Programme, die über die interierte Weboberfläche erstellt werden. Die HomeKit Brücke für KNX führt die Skripte automatisch aus, sobald Zugriff auf das KNX Netzwerk besteht.
Skripte enthalten Anweisungen die nacheinander ausgeführt werden. Diese Anweisungen (Skriptcode) müssen einer bestimmten Schreibweise (Syntax) entsprechen.
Syntax
Wie schreibt man nun Code in der Skriptsprache? Hier ein paar einfache Beispiele.
Hello Word
Folgender Skriptcode ruft die Funktion println auf, um den Text Hello World
in das Log zu schreiben.
1println("Hello World")
Werte
Es können nicht nur Texte in das Log geschrieben werden, sondern auch Ganz- und Gleitkommazahlen sowie Boolsche Werte.
1println("Home" + "Kit") // "HomeKit"
2
3println("1+1=", 1+1) // "1+1=2"
4println("7/3=", 7/3) // "7/3= 2.3333333333333335"
5
6println(true && false) // false
7println(true || false) // true
8println(!true) // false
Variablen
var
deklariert eine oder mehrere Variablen.
1// Variables
2var a = "string"
3println(a) // "string"
4
5var b, c = 1, 2
6println(b, c) // "1 2"
7
8var d = true
9println(d) // "true"
Die Kurzform kommt auch ohne var
aus.
1e = 4
2println(e) // "4"
Schleifen
Schleifen werden verwendet um Anweisungen wiederholt auszuführen.
1var i = 1
2for i <= 3 {
3 println(i) // "1", "2", "3"
4 i = i + 1
5}
6
7for {
8 println("loop") // "loop"
9 break // stop the loop
10}
If/Else
1if 7%2 == 0 {
2 println("7 is even")
3} else {
4 println("7 is uneven") // 7 is uneven
5}
6if 8%4 == 0 {
7 println("8 is dividable by 4") // 8 is dividable by 4
8}
9
10var num = 9
11if num < 0 {
12 println(num, "is negative")
13} else if num < 10 {
14 println(num, "has 1 digit") // 9 has 1 digit
15} else {
16 println(num, "has multiple digits")
17}
Switch
1var i = 2
2printf("Write %d as ", i)
3switch i {
4case 1:
5 println("one")
6case 2:
7 println("two")
8case 3:
9 println("three")
10}
Da die Skriptsprache sehr ähnlich der Programmiersprache Go ist, kannst du die Skriptsprache auch lernen, indem du Go Code-Beispiele ansiehst. Go by Example hat eine Menge guter Beispiele. Und auf der Go-Playground Webseite kannst du Go im Browser testen.
Skript erstellen
Im folgenden Beispiel wird gezeigt, wie ein Skript in der HomeKit Brücke für KNX erstellt und ausgeführt wird.
Die Logik, die in diesem Skript abgebildet wird, ist im Grunde ganz einfach. Das Skript synchronisiert die Werte von der Gruppenadresse 0/0/1 mit der Gruppenadresse 0/0/2. Das heißt, wenn über den KNX-Bus der Wert 1 (oder 0) an die Gruppenadresse 0/0/1 gesendet wird, dann sendet das Skript den Wert auch an die Gruppenadresse 0/0/2.
Ablaufdiagramm
Im folgenden Ablaufdiagramm ist die Logik nochmal grafisch dargestellt.
Nach dem Start des Skripts wird eine For-Schleife erstellt. Innerhalb der Schleife wird gewartet bis Werte von der Gruppenadresse 0/0/1 empfangen werden. Daraufhin wird der empfangene Wert an die Gruppenadresse 0/0/2 gesendet. Nach dem Senden wird wieder an den Anfang der For-Schleife zurückgesprungen.
Wie du siehst, gibt es für das Skript kein Ende – die Anweisungen innerhalb der For-Schleife werden immer wieder ausgeführt. Dieses Konzept ist ganz wichtig besonders für die Programmierung von Logiken, die immer wieder ausgeführt werden.
Programmierung
Um ein neues Skript zu erstellen, wird in der Weboberfläche auf den Reiter Skript gewechselt und ein neues Skript erstellt. Es öffnet sich eine neue Seite. Jetzt kann im vorgesehenen Eingabefeld der Name des Skripts eingegeben werden - zB Erstes Skript.
Unter dem Eingabefeld für den Namen befindet ein Bereich um den Skriptcode einzugeben. Dort kannst du folgenden Skriptcode eingeben.
1// Importiere das hkknx-Package.
2var hkknx = import("hkknx")
3
4// Definiere die Variable *ch*. Diese Variable liefert
5// boolesche Werte, die an die Gruppenadresse 0/0/1 mit
6// einem Group-Write-Telegramm gesendet werden.
7ch = hkknx.GroupWriteBoolNotify("0/0/1")
8
9for {
10 // Warte bis *ch* einen Wert liefert. Der Wert wird
11 // in der Variable *value* zwischengespeichert.
12 value = <-ch
13
14 // Gib den empfangenen Wert über das Log aus.
15 println(value)
16
17 // Sende den empfangene Wert mit einem
18 // Group-Write-Telegramm an 0/0/2.
19 hkknx.GroupWrite(value, "0/0/2")
20}
Speichere nun das Skript.
Testen
Wenn das Skript gespeichert wurde, ist es erstmal inaktiv und wird noch nicht ausgeführt. Um das Skript zu testen, klicke auf Ausführen. Das Skript wird nun gestartet und läuft solange bist es wieder beendet wird. Du kannst das Script beenden indem du auf Beenden klickst.
Warte nun bis ein Wert von der Gruppenadresse 0/0/1 empfangen wird.
Wenn das passiert, wird durch die Anweisung println(value)
entweder true oder false in das Log ausgegeben.
Somit hast du erfolgreich einen Wert empfangen und zwischengespeichert.
Aktivieren
Damit das Skript automatisch ausgeführt wird, wenn die HomeKit Brücke für KNX startet, muss es aktiviert werden. Klicke dazu auf den Reiter Skripte um alle Skripte zu sehen. Wähle dann das Kontrollkästen in der Spalte Aktiv für dein Skript aus. Sobald das Skript läuft wird in der Spalte Status die Aktivitätsanzeige sichtbar.