Raspberry PI 2 als KNX IP-Schnittstelle

In dieser Anleitung möchte ich euch erklären, wie ihr sehr einfach eine IP-Schnittstelle selber konfigurieren könnt. Das ist in wenigen Schritten möglich und bietet viele Vorteile.

Einleitung

Damit ihr mit der ETS (Engineering Tool Software) euren Bus programmieren könnt, ist die Beste Methode den Bus mit dem lokalen Netzwerk zu verbinden. Ihr könnt dann von eurem Rechner aus den Bus ganz bequem programmieren. Früher wurden USB oder serielle Schnittstelle verwendet. Heutzutage ist das aber sehr unpraktisch. Desweiteren können Automatisierungen und Visualisierungen über diese Schnittstelle dann mit dem Bus kommunizieren. Um den Bus mit dem Netzwerk zu verbinden, wird eine IP-Schnittstelle benötigt. Diese Komponente kann von vielen KNX-Anbietern fertig, stabil und voll funktionsfähig erworben werden und kostet zum Beispiel bei MDT ca. 270€. Dies ist der einfachste und gangbarste Weg den Bus mit dem Netzwerk zu verbinden. Für Tüftler gibt es aber noch die folgende Möglichkeit.

Man kann sich diese IP-Schnittstelle aber auch sehr einfach mit einem Raspberry PI und einer USB-Schnittstelle (TPUART) zusammenabuen. Auch wenn dies sehr einfach ist, sollte etwas technisches Verständnis vorhanden sein. Hierzu gibt es folgende Vor- und Nachteile:

  • Vorteile
    • Günstiger (ca. 130-140 €)
    • Anschluss eines 1-Wire-Buses möglich
    • Schnittstelle kann direkt zur Automation und Visualisierung verwendet werden
  • Nachteile
    • eventuell Stabilität

Ein weitere Grund für mich war die Tüftelei es einfach mal selber zu machen. 🙂

Benötigte Hardware

Damit wir uns jetzt unsere IP-Schnittstelle selber zusammenbauen können, benötigen wir ein wenig Hardware, auch wenn nicht viel. Hier beschreibe ich, welche Hardware ich verwendet habe. Es gibt hier mehrere Möglichkeiten. Hier kann ich euch aber garantieren, dass dies genau so funktioniert, wie beschreiben.

  1. Raspberry PI 2 Model B Mainboard Sockel (A 900MHz, Quad-core, ARM Cortex-A7 CPU, 4x USB, Full HDMI)
  2. TUL (TPUART USB light)

Auf dem PI wird ein Linux aufgespielt werden und ein Tool, dass über das TUL die Verbindung zum Bus herstellt. Das war es dann auch schon. Zusammen kosten beide Komponenten ca. 140 € (Raspberry PI mit Gehäuse, Netzteil und Speicherkarte).

Betriebssystem installieren

Es gibt in den tiefen des Internets einige vorgefertigte Images für den Raspberry PI zur Verwendung als IP-Schnittstelle. Das Prinzip ist da sehr einfach. Einfach auf die Speicherkarte flashen und das System läuft. Ich habe es in meiner Umgebung dabei nicht direkt zum Laufen bekommen und mich dann dafür entschieden das komplette System von Grund auf einzurichten. So lernt man die Zusammenhänge auch besser kennen und bildet sich weiter.

  1. Im ersten Schritt müssen wir uns das Betriebssystem besorgen. Ich verwende hier ein Debian Jessie, welches für den Raspberry PI 2 vorbereitet ist. Ihr könnt es auf hier herunterladen.
  2. Im nächsten Schritt muss das Image auf die Speicherkarte geschrieben werden. Dafür verwende ich das Tool Win32DiskImager, welches ihr euch hier herunterladen könnt.
  3. Nachdem ihr den Win32DiskImager heruntergeladen und das Image entpackt habt, startet ihr das Tool als Administrator.
  4. Anschließend einfach das image auswählen und Write drücken:
    Win32DiskImager
  5. Der Vorgang kann ein paar Minuten dauern und dann seid ihr auch schon fertig. Die Speicherkarte kann in den Raspberry PI eingesetzt und dieser dann gestartet werden.

Erster Zugriff auf das System

Wenn man den PI jetzt an einen Monitor anschließt, kann man ihn nun mit einer Tastatur konfigurieren. Das sollte jedem klar sein. Ich möchte aber lieber den bequemen Weg gehen, denn hänge den PI einfach ans Netzwerk und konfiguriere ihn bequem von meinem Rechner aus. Das ist sehr einfach, denn das Debian startet automatisch einen SSH-Server, so dass ein externen Zugriff direkt möglich ist. Eine kleine Einrichtung werde ich im folgenden erklären.

  1. Für den Zugriff benötigen wir das Tool Putty, welches ihr hier herunterladen könnt. Damit kann man sehr einfach über SSH auf den PI zugreifen.
  2. Um auf den PI zugreifen zu können, müssen wir erstmal die IP-Adresse herausfinden. Eigentlich alle Router haben eine Übersicht über die angemeldeten Geräte am Netzwerk. In dieser Übersicht müsste jetzt ein neuer Eintrag erscheinen mit der über DHCP zugewiesenen IP-Adresse. Bei mir in einer Fritz-Box sah es so aus und ich konnte die IP-Adresse direkt ablesen.
    FritzBoxÜbersicht
  3. Jetzt müsst ihr nur noch Putty starten und die IP-Adresse angeben.
    Putty
  4. Anschließend erscheint eine Login-Maske für das Debian und ihr müsst die Zugangsdaten root/debian zur Anmeldung angeben.
    PuttyLogin
  5. Mit dem Befehl passwd sollt ihr dann direkt das Passwort ändern und ihr seid fertig für den eigentlichen Spaß.

KNXD installieren

Als Erstes werden wir knxd installieren. Dies ist ein Tool, welches die Verbindung mit dem KNX-Bus herstellt. Es ist eine Weiterenticklung von eibd. Das d steht hierbei für daemon, was soviel wie ein Service im Linux-Bereich ist. Über entsprechende Befehle können dann Gruppenadressen des KNX-Buses angesprochen werden. Knxd wird heruntergeladen, kompiliert und installiert. Dafür müssen einige Vorbereitungen getroffen werden.

  1. Zuerst müssen einige notwendige Pakete auf dem System nachinstalliert werden. Debian bietet dafür das sehr komfortable Tool apt-get an. Ihr müsst die folgenden Befehle einfach nacheinander in die Konsole eingeben. Das System erledigt dann den Rest. Die Pakete werden heruntergeladen und installiert. Dies wird einige Minuten dauern.
    apt-get update
    apt-get install debhelper cdbs automake libtool libusb-1.0-0-dev git-core build-essential
    apt-get install libsystemd-daemon-dev dh-systemd
    apt-get install pkg-config
    
  2. Im nächsten Schritt wird noch pthsem installiert werden, was wir manuell herunterladen, kompilieren und installieren müssen. Aber auch dies ist sehr einfach.
    wget https://www.auto.tuwien.ac.at/~mkoegler/pth/pthsem_2.0.8.tar.gz
    tar xzf pthsem_2.0.8.tar.gz
    cd pthsem-2.0.8
    dpkg-buildpackage -b -uc
    cd ..
    dpkg -i libpthsem*.deb
    
  3. Jetzt können wir auch schon knxd installieren.
    git clone https://github.com/knxd/knxd.git
    cd knxd
    dpkg-buildpackage -b –uc
    cd ..
    dpkg -i knxd_*.deb knxd-tools_*.deb
    

Alle Schritte bis hierhin sollten ohne Probleme laufen. Ich habe hier keine Probleme gehabt. Wenn ihr Fehlermeldungen bekommt, müsst ihr dafür mal bei Google suchen. Eigentlich wurde jeder Fehler schon erlebt und gelöst.

Jetzt haben wir das System mit der notwendigen Software ausgestattet. Im nächsten Schritt wollen wir jetzt den TUL korrekt installieren.

TUL installieren

Nachdem ihr den USB-Stick eingesteckt habt, wird es als Gerät /dev/ttyACM0 erkannt, allerdings hat nur root Zugriff und das müssen wir für knxd ändern. Desweiteren kann es zu Problemen führen, wenn es am gleichen PI ein zweites Interface gibt. Knxd wird dann dieses eventuell verwenden. Die notwendigen Schritte werde ich daher im folgenden erklären.

  1. Wir müssen uns im ersten Schritt einige Informationen zu unsrem TUL anzeigen lassen. Hierbei interessiert uns die KERNELS-Angabe. Zur Anzeige aller Informationen müsst ihr einfach folgenden Befehl ausführen.
    udevadm info --attribute-walk /sys/bus/usb/drivers/cdc_acm/*/tty/ttyACM0
    
  2. In den angezeigten Informationen müsst ihr nach dem Abschnitt mit ATTRS{manufacturer}==“busware.de“ suchen und euch die KERNELS-Information notierenIn meinem Fall stand dort: 1-1.4
  3. Im nächsten Schritt wird ein SymLink auf den TUL erzeugt, welches der Nutzer knxd auch verwenden darf. Dafür gibt es sogenannten Rules-Dateien. Bei der Installation von knxd wurde so eine Datei bereits vorsorglich angelegt, welches wir nun bearbeiten müssen. Dafür benötigen wir zuerst ein Textbearbeitungs-Programm. Ich verwende sehr gerne joe, welches sehr einfach zu bedienen ist. Dieses installieren wir jetzt erstmal nach. Dafür müsst ihr wieder apt-get bemühen.
    apt-get install joe
    
  4. Jetzt Bearbeiten wir die entsprechende Rules-Datei für knxd.
    joe /etc/udev/rules.d/70-knxd.rules
    

    In dieser Datei müsst ihr die Stelle something duch den oben ausgelesen Wert ersetzen (bei mir war es 1-1.4). Gespeichert wird mit STRG + K + D und geschlossen mit STRG + C.

  5. Jetzt müssen wir die Einstellung noch kurz testen. Mit dem folgenden Befehl werden die Rules-Dateien eingelesen. Hier darf es bei unserer Datei keinen Fehler geben.
    udevadm test /sys/bus/usb/drivers/cdc_acm/*/tty/ttyACM0
    
  6. Im letzten Schritt prüfen wir jetzt noch, ob der SymLink soweit korrekt ist.
    ls -lL /dev/ttyKNX1
    

    Als Ergebnis muss der Onwer hier knxd sein.

Knxd konfigurieren

Da wir jetzt auch die Hardware korrekt eingerichtet haben, können wir knxd nun konfigurieren.

  1. Im ersten Schritt müssen wir daher die Konfigurations-Datei anpassen.
    joe /etc/knxd.conf
    

    Im oberen Bereich müsst ihr jetzt folgende Zeile anpassen: KNXD_OPTS=“-e 1.1.1 -c -DTRS -b tpuarts:/dev/ttyKNX1“. Eine genaue Erklärung der Parameter könnt ihr hier nachlesen.

  2. Zum Prüfen, ob knxd korrekt gestartet ist und läuft, müsst ihr folgenden Befehl ausführen. Dort muss alles grün sein.
    /etc/init.d/knxd status
    
  3. Im letzten Schritt der Konfiguration wollen wir noch den Autostart konfigurieren. Dafür in der oben genannten Datei folgende Zeile einfügen: START_KNXD=YES 

Somit ist die IP-Schnittstelle auch schon fertig.

Schnittstelle im ETS prüfen

Wenn ihr nun ETS (bei mir in der Version 5) startet, sollte im Bereich Bus die Schnittstelle automatisch erscheinen.

IpSchnittstelle

Wenn ihr anfangt euren Bus zu programmieren, könnt ihr die Gruppenadresse über knxd auch direkt testen. Dafür gibt es diverse Tools, die mit knxd installiert werden.

knxtool groupwrite ip:localhost <Gruppenadresse> <Wert>
knxtool groupwrite ip:localhost 1/0/2 1

Quellen

Auch ich habe mir die Informationen nicht aus den Fingern gezogen und mich diverser Quellen bedient, die an dieser Stelle nicht unerwähnt bleiben sollen, da sich dort auch Leute Mühe gegeben haben. Die folgende Liste ist ohne Wertung und Reihenfolge:

http://www.fhemwiki.de/wiki/Knxd

https://github.com/knxd/knxd#adding-a-tpuart-usb-interface

https://github.com/knxd/knxd/wiki