Upgrade OpenHAB V1 auf OpenHAB V2

Nun war es also soweit, aufgrund einer Erweiterung des KNX Netzwerks, war es auch ratsam OpenHAB auf Version 2 upzudaten. Hier bin ich auf einiger Herausforderungen gestoßen, da sich in OpenHAB doch einiges geänder hat, aber lest selbst.

Aufsetzen des neuen RaspberryPi 4

Das aufsetzen des neuen Raspberrys war recht einfach. Ich habe lediglich das neue Openhabian Image heruntergeladen, und auf die SD-Karte mittels Etcher geflasht. Anschließen Dauerte die automatische Installation im Raspberry etwa 15 Minuten. Hierfür habe ich den Raspi bereits vor dem Starten per Kabel mit meinem Netzwerk verbunden. Da ich kein Monitor angeschlossen habe, habe ich mich per SSH auf den Raspi eingelogt (ssh openhabian@10.0.0.10 Passwort: openhabian). Nach erfolgreicher Installation existiert auf dem Raspberry die Datei „/opt/openHABian-install-successful“ dies lässt sich am einfachsten durch ein ls /opt/ prüfen.

Installation eibd/knxd

Da ich an meinem KNX-Bus lediglich über eine USB Schnittstelle verfüge, wollte ich noch eibd installieren, sodass ich über den RaspberryPi auch die möglichkeit habe, KNX über das Netzwerk zu programmieren. Glücklicherweise hat openHABian auch hier bereits ein Werkzeug parat. Mit sudo openhabian-config kann ein Konfigurationsprogramm ähnlich von rapi-config gestartet werden. Hier findet sich unter dem Menüpunkt 20 | Optional Components die möglichkeit knxd zu installieren. (knxd ist ein Fork von eibd, funktioniert für meine Fälle aber hervoragend)

Übernehmen der Konfiguration

Nun also die Übernahme der Konfiguration. Hierfür verwende ich VS Code, auch wenn ich eigentlich eher ein Freund von Vim bin. Doch da erstens, die Konfiguration nachher auch durch jemand anderes möglich sein soll, und ich diese Person auch irgendwie einweisen muss. Sowie zweitens ein sehr gutes Plugin für VS Code existiert, habe ich mich dazu durchgerungen hier doch VS Code zu benutzen.

Thing File für KNX Devices erstelen

Neu ab OpenHAB V2 ist nun, dass die Physikalischen Devices zuvor in einer .things Datei definiert werden. Anschließend wird dies dann in der .items datei wieder referenziert. Hier ist es so, dass in der .things Datei zuerst ein KNX-Schnittstelle konfiguriert wird, anschließend in dieser Schnittstelle dann mehrere Geräte. Für mich sieht die Konfiguration der Schnittstelle vorerst so aus:

Bridge knx:ip:bridge [ 
    type="ROUTER",
    ipAddress="224.0.23.12", //dies ist die default Multicastadresse, ich habe sie zum besseren Verständniss allerdings definiert.
    autoReconnectPeriod=60 //[sec] optional, do not set <30 sec.
] {
    Thing device knx_device [ 
        //readInterval=3600 //[sec] optional, only used if reading values are present
    ] {
        //Items configurations
        //Hier werden anschließend die Devices anhand der Gruppenadresse definiert
   }
}

Anschließend mussten hier im Bereich des Platzhalters natürlich noch die Definitionen der bereits vorhandenen Items eingefügt werden. Hierfür habe ich die definition der Items mithilfe von RegEx etwas umgestellt, da ich mir das ganze Kopieren sparen wollte. Für diese Refactoring habe ich dann doch wieder Vim benutzt, da ich die RegEx Befehle in Vim einfach schneller behersche. Anbei nun einige RegEx Befehle:

# Umstellen von Switch für die .things Datei
:%s/^\s*Switch\s\+\(\w*\).*{\s*knx=\(.\{-}\)}/\t\tType\tswitch\t: \1\t"\1"\t[ ga=\2 ] 

# Umstellen der Rollershutter für die .things Datei
:%s/^\s*Rollershutter\s\+\(\w*\).*{\s*knx=\(.\{-}\)}/\t\tType\trollershutter\t: \1\t"\1"\t[ position=\2 ]

# Umstellen der Number für die .things Datei
:%s/^\s*Number\s\+\(\w*\).*{\s*knx=\(.\{-}\)}/\t\tType\tnumber\t: \1\t"\1"\t[ ga=\2 ] 

# Entfernen des alten Links und einfügen des neuen Links in der .items
:%s/^\(\s*\w\+\s\+\)\(\w\+\)\s*\(.*\)\s*{\s*knx=\s*".\{-}"}/\1\t\2\t\3\t{channel="knx:device:bridge:knx_device:\2"}

Dies Befehle mussten jeweils auf die ursprügnliche Datei angewendet werden, und konnten dann in die neuen .things Datei bzw die neuen .items Datei eingefügt werden. Möglicherweise sind hier bei euch noch kleinere Änderungen notwendig, solltet ihr mehrere Bindings auf ein Item haben, aber ich denke ihr habt hier erstmal eine recht gute Vorlage.

Verbindung mit dem Bus

Naja, das mit dem knxd hat leider nicht so ganz geklappt. Das Problem: knxd startet nicht korrekt, und die Verbindung auf den Bus funtkioniert auch nicht.

Verbindung mit der Hager-Usb Schnitstelle

Also müssen wir erst einmal die Verbindung über die Serielle-Schnittstelle aufbauen. Scheinbar wird meine USB-KNX Schnittstelle von Hager nicht korrekt vom Rapbain erkannt. Also mal schauen, das lief doch schonmal, damals hieß das ganze zwar noch eibd, aber gut. lsusb Zeigt leider lediglich die HardwareID an. Also wird auch die Serielle Schnittstelle nicht korrekt eingebunden. Deshalb habe ich nochmal in die Dokumentation von knxd geschaut, und festgestellt, das eine Einrichtung direkt über die USB-Schnittstelle möglich ist.
Deshalb habe ich es mit Root-Rechten mal mit folgendem Befehl versucht:
knxd -t 1023 --eibaddr=1.1.128 --client-addrs=1.1.129:8 -D -T -R -S -i --listen-local=/tmp/knx -t 1023 -b usb:
Und siehe da, die Verbindung wird scheinbar korrekt aufgebaut. Ich sehe auch jedes mal eine Konsolenausgabe, sobald ich ein Telegramm auf dem KNX-Bus sende. Jedoch, wird mir beim versuch ein Telegramm über OpenHAB zu senden lediglich ein Layer 0 [ 9:knxserver/server 15.716] Dropped(019): ausgegeben.
Nach etwas Recherce stellt sich heraus, dass hier wohl die Tatsache, dass das Telegramm von der gleichen IP gesendt wird, wie es auch wieder in den KNX „eingespiest“ werden soll. Diese Telegramme werden standardmäßig nicht weitergeleitet, da dies ja eigentlich auch exakt von diesem Gateway kommt. Leider kann OpenHAB die Parameter nicht setzen um diese Telegramme doch einzuspeisen. Also habe ich das ganze mal per Tunnel versucht, und dies klappt auch ganz gut.
Meint Bridge Konfiguration der .thins-Datei von OpenHAB sieht nun also so aus:

Bridge knx:ip:bridge [
    ipAddress="localhost",
    portNumber=3671,
    type="TUNNEL",
    localSourceAddr="1.1.255"
]{...

Einrichtung vom autostart

Hier kann ich jetzt auf einen anderen BlogPost verweisen, in welchem ich das Einrichten von einem Service in systemd an diesem Beispiel beschrieben habe.

Programmierung über ETS

Nun kann ich auch wieder über ETS direkt auf den KNX-Bus zugreifen, und brauche nicht mehr das nervige USB Kabel. Hierfür muss ETS lediglich auf die IP-Adresse vom Raspberry und den Port 3671 konfiguriert werden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.