Projekt 23 Smarthome / Zugriff KNX-Bus

Aus c3RE.de
Wechseln zu: Navigation, Suche
MDT KNX-IP-Interface SCN-IP000.01

Diese Seite gehört zum Kontext Projekt 23 Smarthome und beschreibt die Umsetzung beim Zugriff auf den KNX-Bus.

Im Projektkontext erfolgt der Zugriff von einem Smarthome-Server aus auf den KNX-Bus des Hauses über ein KNX-IP-Gateway MDT KNX-IP-Interface SCN-IP000.01. Als Middleware wird auf dem Server die freie Software eibd eingesetzt.

Hinweis zur Softwareauswahl: 'eibd' ist eine ausgereifte Software, welche seit Jahren eingesetzt wird, allerdings wird sie nicht mehr aktiv weiterentwickelt. Als Alternative bietet sich 'knxd' an, welche einen größeren Funktionsumfang bietet und weiterentwickelt wird. Bislang war ein Umstieg aber im Projektkontext nicht notwendig.

Installation eibd

Installation unter CentOS 7:

yum install https://www.auto.tuwien.ac.at/~mkoegler/rpm/fedora/pthsem-2.0.8/libpthsem20-2.0.8-1.x86_64.rpm
yum install https://www.auto.tuwien.ac.at/~mkoegler/rpm/fedora/bcusdk-0.0.5/eibd-server-0.0.5-1.x86_64.rpm
yum install https://www.auto.tuwien.ac.at/~mkoegler/rpm/fedora/bcusdk-0.0.5/libeibclient0-0.0.5-1.x86_64.rpm
yum install https://www.auto.tuwien.ac.at/~mkoegler/rpm/fedora/bcusdk-0.0.5/eibd-clients-0.0.5-1.x86_64.rpm

Zudem wird ein entsprechender User angelegt:

# useradd knx

Konfiguration

Es wurden 2 Units in systemd erstellt, welche die für eine umfassende Protokollierung benötigten Dienste automatisch starten:

  • eibd: die Middleware für den Zugriff auf den KNX-Bus
  • groupsocketlisten: protokolliert auf die Ereignisse
[root@j8 /]# cat /etc/systemd/system/eibd.service
[Unit]
Description=EIB Daemon
After=network.target

[Service]
ExecStart=/bin/eibd -p /run/eibd/eibd.pid -D -S -T -i --eibaddr=1.1.1 --daemon --no-tunnel-client-queuing ipt:knx
Type=forking
PIDFile=/run/eibd/eibd.pid
User=knx
Group=knx

[Install]
WantedBy=multi-user.target
RequiredBy=log-knx.service

Bei 'knx' handelt es sich um den Netzwerknamen des Gateways, welcher vom DHCP-Server nach 172.16.20.10 aufgelöst wird. Er befindet sich im selben Netz wie der Server selbst.

[root@j8 /]# cat /etc/systemd/system/log-knx.service 
[Unit]
Description=KNX event logger
Requires=eibd.service
After=eibd.service

[Service]
ExecStart=/bin/groupsocketlisten ip:127.0.0.1
Type=simple
User=knx
Group=knx

[Install]
WantedBy=multi-user.target

Verzeichnis für das PID-File erzeugen:

[root@j8 ~]# mkdir /run/eibd
[root@j8 ~]# chown knx:knx /run/eibd

Diese Events landen im System-Journal und können so abgefragt werden:

[root@j8 /]# journalctl -f -u log-knx.service
-- Logs begin at Di 2016-07-05 21:17:09 CEST. --
Jul 05 21:22:31 j8.xxx.local groupsocketlisten[841]: Write from 0.0.0 to 1/0/30: 00
Jul 05 21:22:31 j8.xxx.local groupsocketlisten[841]: Write from 1.1.2 to 1/1/30: 00

Das Beispiel zeigt zwei KNX-'Telegramme' als Ergebnis der Betätgung eines Lichtschalters.

Hinweis: Weil weder ein Innenminister noch Terroristen im Haushalt leben, wurde darauf verzichtet, die Daten zur Auswertung in eine Datenbank zu importieren, um auch noch nach Jahren feststellen zu können, wann welcher Knopf im Haus gedrückt wurde. Die Aufzeichnungsdauer ergibt sich hier aus der systemd-Konfiguration für das System-Journal.

Anwendung

Werte lesen

Beispiel: LED (Wohnzimmer 1) (die Adressierung erfolgt über die Gruppenadresse):

[knx@j8 ~]$ groupreadresponse ip:127.0.0.1 1/0/30
Send request
Read from 0.0.0
Response from 1.1.12: 00

Das Licht ist aus, der Wert steht auf '00'.

Werte setzen

Das Licht anschalten:

[knx@j8 ~]$ groupswrite ip:127.0.0.1 1/0/30 1
Send request

Sniffing

[knx@j8 ~]$ grouplisten ip:127.0.0.1 1/0/30
Write from 1.1.30: 00

Das Licht wurde am Schalter ausgeschaltet.