Smart Home (KNX)

From
Revision as of 22:58, 8 November 2015 by Hanoier (talk | contribs) (→‎Openhab)
Jump to navigation Jump to search

Komponenten

Aktoren

Schaltaktor

KNX-Schaltaktor

[Text]

Dimmaktor

KNX-Dimmaktor

[Text]

Spannungversorgung

Einfache Spannungsversorgung
Spannungsversorgung mit KNX-Busstrom

IP-Gateway

KNX-IP-Gateway

[Text]

Sensoren

KNX-Taster (Vorder- und Rückseite)
KNX-Temperaturregler

Adressierung

Physikalische Adressen

[Aufbau und Funktion der Adressen]

Gruppenadressen

Versuchsaufbau

KNX-Komponenten

Am Anfang unseres Versuchsaufbaus werden wir die einzelnen KNX-Komponenten miteinander verbinden und mit Hilfe der ETS-Software programmieren. Das KNX-Modell sieht wie folgt aus:

KNX-Modell

Im Zentrum des Modells steht der KNX-Bus, mit dem alle KNX-Komponenten verbunden sind. Einige der Komponenten wie der Dimmer-Aktor brauchen eine separate Stromversorgung und werden im Modell mit einem gelben Blitz gekennzeichnet.

Beim Aufbau eines KNX-Buses ist es im Grund unwichtig, in welcher Reihenfolge (Reihenschaltung, baumförmige Struktur, randomisierter Graph etc.) die einzelnen Komponenten miteinander verbunden werden. Da wir hier aber Gleichstrom nutzen, wird dringend abgeraten die Komponenten als geschlossenen Kreis anzuordnen, dies führt zu einem Kurzschluss!!! Jede KNX-Komponente bietet standardmäßig vier Anschlussklemmen, so dass an jeder Komponente theoretisch drei weitere Komponenten angeschlossen werden können.

Bemerkung: Der naive Ansatz wäre hier, zuerst das KNX-Modell vollständig zu realisieren und dann mit der Programmierung zu beginnen. Da aber niemand in unserer Gruppe davor ein KNX-Experte war und wir auch die Ersten waren, die dieses Workshop-Thema bearbeitet haben, ging viel Zeit für "try-and-error"-Prozesse drauf. Im Nachhinein empfehlen wir Anfänger eine "step-by-step"-Vorgehensweise. Das bedeutet, dass wir jedes Gerät einzeln in den KNX-Bus aufnehmen und mit der ETS-Software einrichten. Denn falls etwas nicht funktionieren sollte, ersparen wir uns die Fehlersuche im ganzen System. In unserer Dokumentation zeigen wir jedoch der Übersicht halber erst den vollständigen Aufbau der KNX-Komponenten und dann deren Programmierung mit ETS.


1. Schritt:

Die erste Komponente in unserem KNX-System ist die Spannungsversorgung MDT STV-0640.01 (links im Bild). Dieser wird benötigt, um das KNX-Netz mit Gleichstrom (gelb/weiß-Anschluss) zu versorgen. Das Anschließen der Netzspannung soll laut Betriebsanleitung nur von "ausgewiesenen Fachpersonal" durchgeführt werden. Da auch niemand von uns Elektriker war, half uns unser Kursleiter hier weiter. Der [dunkelgrau/rot]-Anschluss versorgt die KNX-Komponeten mit einer Bus-Spannung, auf welche Informationen auf der Bus-Leitung ausgetauscht werden. Die Spannungsversorgungs-Komponenten müssen nicht programmiert werden.

KNX-Versuchsaufbau Schritt 1

Bemerkung: Auf der rechten Seite im Bild haben wir ebenfalls eine Spannungsversorgung vom Modell MDT STV-0024.01. Dieser besitzt jedoch keine Bus-Spannungsversorgung, sondern versorgt nur die angeschlossenen Geräte mit Strom. Anfangs stand uns nur dieses Gerät als Spannungsversorgung zur Verfügung. Wir konnten die Geräte zwar anschalten und auch in der ETS-Software sehen, jedoch nicht programmieren. Erst mit Hilfe des Hersteller-Supports, den wir erst nach 3 Tagen erreichen konnten, wurde uns der Fehler bewusst. Daraufhin musste die Spannungsversorgung MDT STV-0640.01, mit einer separaten Bus-Spannung, angeschafft werden. Im weiteren Versuchsaufbau haben wir einfach beide Spannungsversorgungen angeschlossen, sicherlich würde hier nur die Benutzung der Spannungsversorgung MDT STV-0640.01 ausreichen.


2. Schritt:

Nun fügen wir dem KNX-Netz das IP-Gateway MDT SCN-IP000.01 hinzu. Das IP-Gateway bekommt seinen Strom durch die Spannungsversorgung (gelb/weiß-Anschluss).

KNX-Versuchsaufbau Schritt 2


3. Schritt:

Damit das IP-Gateway Daten-Pakete auf dem KNX-Bus empfangen und senden kann, schließen wir die Bus-Spannung an. Das grüne Kabel im Bild ist ein vieradriges KNX-Datenkabel. Im Normalfall werden dabei nur die zwei [dunkelgrau/rot]-Adern benötigt. Bei bestimmten KNX-Komponenten, die mehr Spannung benötigen wie unser IP-Gateway, werden die beiden [gelb/weiß]-Adern zusätzlichen angeschlossen.

KNX-Versuchsaufbau Schritt 3


4. Schritt:

Damit die zweite Spannungsversorgung MDT STV-0024.01 das IP-Gateway auch mit Strom versorgen kann, verbinden wir beide Spannungsversorgungs-Komponenten über eine 230V Spannung miteinander. Die Ethernet-Schnittstelle verbinden wir per Ethernet-Kabel mit unserem Router/Switch. Dies ermöglicht uns im weiteren Verlauf die Komponenten auf dem KNX-BUS über das http-Protokoll mit der ETS-Software zu programmieren.


KNX-Versuchsaufbau Schritt 4


5. Schritt:

Für eine KNX-Minimalinstallation wird immer ein Aktor gebraucht, der als physikalische Schaltzentrale dient. Unser 20-fach Schaltaktor MDT AKS-2016.02 besitzt wie der Name schon sagt, die Möglichkeit 20 voneinander unabhängige Verbraucher zu schalten und den Stromverbrauch separat zu messen. Eine Bus-Spannung kommt ebenfalls an dem Aktor dran.

KNX-Versuchsaufbau Schritt 5


6. Schritt:

"Leo könntest du hier bitte was dazu schreiben. Ich vermag nicht genau zu beschreiben, was ihr da mit Herr Müller gemacht habt. Danke :)"

KNX-Versuchsaufbau Schritt 6


7. Schritt:

Nun fügen wir unserem KNX-Netz einen 4-fach Taster und eine Temperaturanzeige mit Displayanzeige hinzu. Beide Komponenten werden jeweils über einen [dunkelgrau/rot]-Anschluss mit dem KNX-Bus verbunden. Die Temperaturanzeige benötigt eine zusätzliche Spannungsversorgung über den [gelb/weiß]-Anschluss.

KNX-Versuchsaufbau Schritt 7


8. Schritt:

KNX-Versuchsaufbau Schritt 8


9. Schritt:

KNX-Versuchsaufbau Schritt 9

[Schematische Zeichnung]

ETS

Nachdem wir die KNX-Komponenten korrekt miteinander verkabelt haben, werden wir in diesem Abschnitt uns anschauen, wie man diese Geräte mit der Engineering-Tool-Software programmiert. Zur Inbetriebnahme einer KNX-Installation führt leider kein Weg an dieser Software vorbei. Denn obwohl die Software angeblich OpenSource sein soll, ist die Nutzung lizenzrechtlich von der KNX-Association geschützt. Wer weniger als 5 Komponenten damit verwalten will, darf die kostenlose ETS-Demo Version nutzen. Die Lite Version unterstützt bis zu 20 KNX-Komponenten je Projekt und kostet 200€. Alles darüber hinaus erfordert eine Professional Version, dass happige 1000€ kostet. Der Download der Software über die Homepage( http://www.knx.de/knx-de/index.php) funktioniert nur, wenn man einen gültigen Account hat. Für unseren Workshop wurde eine lite-Lizenz vom Institut bereit gestellt. Um die Demo-Version frei zu schalten, musste jedesmal ein USB-Dongle mit Lizenz-Token angeschlossen werden.


ETS USB Dongle


Bemerkung: Obwohl wir in unserem Aufbau anfangs häufig weniger als 5 Geräte im KNX-Netz angeschlossen hatten, könnten wir ohne den USB-Dongle die KNX-Komponenten nicht programmieren. Wurde der USB-Dongle angeschlossen, funktionierte die Programmierung wieder. Eine Begründung für dieses Verhalten konnten wir nicht in Erfahrung bringen.

RaspberryPi

Nachdem wir die KNX-Komponenten miteinander verbunden und mit der ETS-Software programmiert haben, werden wir uns nun mit der Einrichtung des „SmartHome-Servers“ beschäftigen. Die Anforderungen an so einem Server sind in erster Linie ein niedriger Stromverbrauch, schnelle Reaktionszeiten, Platzsparsamkeit und möglichst niedrige Anschaffungskosten.

Das Raspberry Pi 2 Model B ist für unseren Anwendungszweck sehr gut geeignet. Als Betriebssystem verwenden wir die aktuelle Version „Raspbian Wheezy“, dass man sich auf der Homepage (https://www.raspberrypi.org/downloads/raspbian) herunterladen kann.
Um das Image auf die Speicherkarte zu schreiben und bootfähig zu machen, haben wir das Programm „Win32 Disc Manager“ (http://sourceforge.net/projects/win32diskimager - Windows) verwendet.


Win32 Disk Manager


Bemerkung: Als Speichermedium verwenden wir eine microSD-Speicherkarte. Die Verwendung einer Marken-Speicherkarte mit guten Lese- und Schreibwerten wird dringend empfohlen. Die erste Installation auf einer no-name microSD uns nach einigen Tagen intensiver Nutzung leider kaputt. Das System stürzte häufig ab und wollte dann gar nicht mehr booten. Nach der zeitaufwendigen Neuinstallation auf eine Samsung Evo MicroSD lief das System dann flüssig und fehlerfrei. Der Speicherplatz von 8GB reicht im Grunde aus.

Nach dem Aufspielen des Images auf die Speicherkarte, wird diese in den Raspberry Pi eingesteckt, zusätzlich schließen wir einen Monitor per HDMI sowie eine Tastatur und Maus per USB an, bevor der Raspberry Pi angeschaltet wird. Nach dem ersten Hochfahren erscheint ein Menü, wo wir verschiedene Einstellungen vornehmen können.


Rasberry Configuration Menu



Wichtig sind hier folgende Punkte:

1. Speicher auf komplette Karte erweitern.
2. [Optional] Eigenes Passwort setzen, default: username=pi; password=raspberry.
3. [Optional] Booten in Desktop-Mode, falls man nicht alles per Remote-Kommandozeile machen will.
4. Die richtige Zeitzone, Sprache und das Tastaturlayout sollte ausgewählt werden.

Bemerkung: Das o. g. Konfigurationsmenü könnt ihr später mit folgendem Befehl „sudo raspi-config“ im Terminal wieder aufrufen.

Auf der Desktop des Raspberry Pi angelangt, überprüfen wir, ob eine gültige Netzwerkverbindung per angeschlossenem LAN-Kabel besteht. Ein WLAN-Modul wäre hier alternativ auch möglich. Die IP-Adresse des Raspberry Pi kann über den Router ermittelt werden oder wir geben im Terminal den Befehl „sudo ifconfig“ ein. Die IP-Adresse sollte möglichst statisch gesetzt werden, um einfacher per SSH auf den Raspberry Pi zugreifen zu können, bzw. später auf unseren SmartHome-Webinterface. Für den Versuchsaufbau haben wir uns eine feste IP-Adresse vom Informatik-Institut geben lassen, an dem der Raspberry Pi dauerhaft angeschlossen war.

Nachdem wir den Raspberry Pi frisch aufgesetzt haben, laden wir uns die aktuellsten Softwarepakete und die aktuellste Firmware herunter:

sudo apt-get updatesudo apt-get upgrade sudo rpi-update

Anschließend starten wir den Raspberry Pi neu. Soweit haben wir alles Notwendige getan, um den Raspberry Pi als SmartHome-Server bereit zu tellen. Im nächsten Schritt werden wir uns der Installation der SmartHome Applikation OpenHAB widmen.

Openhab

Open Home Automation Bus (OpenHAB) ist eine Open Source Softwareplattform, die als Steuerzentrale für Komponenten zur Gebäudeautomatisierung von verschiedenen Herstellen dient. Es basiert auf dem Eclipse-Smart-Home Projekt und wird ständig weiterentwickelt. Die Entwickler sind bemüht die Konfiguration und die Bedienoberfläche benutzerfreundlich zu gestalten, trotzdem ist dieses System im Hinblick auf den Endkonsumentenbereich eher etwas für technikaffine Nutzer.


OpenHAB Homepage


OpenHAB basiert auf Java, daher müssen wir prüfen, ob die neuste Java-Version auf den Raspberry Pi installiert ist. Diese ist standardmäßig im Raspberry-Wheezy Paket mit enthalten und kann wie folgt abgefragt werden:

sudo java –version

Eine manuelle Java-Installation kann wie folgt angestoßen werden.

sudo apt-get install oracle-java7-jdk

Nun machen wir uns an die Installation von OpenHab ran. Die aktuellsten Pakete findet ihr auf der Homepage von OpenHAB.

http://www.openhab.org/getting-started/downloads.html


Install OpenHAB Runtime
Als erstes erstellen wir uns einen Ordner, wo die Installation gespeichert werden soll und wechseln anschließend in diesen.

sudo mkdir /opt/openhab
cd /opt/openhab

Durch den folgenden Befehl laden wir das OpenHAB-Paket herunter.

sudo wget https://bintray.com/artifact/download/openhab/bin/distribution-1.7.1-runtime.zip


Bemerkung: Bei unserem Versuchsaufbau war die Version 1.7.1 die aktuellste. Neuere Versionen müssen ggf. in den Links ergänzt werden.

Anschließend entpacken wir die Archiv-Datei. Achtet darauf, dass Ihr euch immer noch im gleichen Ordnerverzeichnis befindet (hier: /opt/openhab).

sudo unzip distribution-1.7.1-runtime.zip

Die Archiv-Datei wird nun nicht mehr benötigt und kann entfernt werden.

sudo rm distribution-1.7.1-runtime.zip

Damit der OpenHAB-Dienst bei jedem Hochfahren automatisch startet, führen wir folgenden Befehl aus.

sudo update-rc.d openhab defaults

Für die manuelle Ausführung stehen folgende Befehle bereit.

sudo /etc/init.d/openhab start
sudo /etc/init.d/openhab stop
sudo /etc/init.d/openhab restart
sudo /etc/init.d/openhab status


Install OpenHAB Binding

Als nächstes müssen wir die Binding-Pakete installieren. Diese sind notwendig, damit OpenHAB über das HTTP-Protokoll mit den angeschlossenen Komponenten der Hausautomatisierung kommunizieren kann. Auf der OpenHAB-Homepage finden wir die Binding-Pakete unter "Addons". Um diese Paket auf unseren Server runter zu laden, wechseln wir in den Ordner Addons.

cd /opt/openhab/addons

und führen folgenden Befehl aus.

sudo wget https://bintray.com/artifact/download/openhab/bin/distribution-1.7.1-addons.zip

Die Archiv-Datei wird entpackt und kann anschließend wieder gelöscht werden.

sudo unzip distribution-1.7.1-addons.zip
sudo rm distribution-1.7.1-addons.zip

Bemerkung: Wenn wir nun in den Ordner "Addons" schauen, sehen wir, dass auch ein Binding-Paket für KNX-Geräte existiert. Hier sei nochmal darauf hingewiesen, dass die Bindings von der OpenHAB-Homepage wie oben beschrieben, verwendet werden sollten, da diese auf den aktuellsten Stand sind. Wir hatten bei unserem Versuchsaufbau gemäß eines Online-Tutorials die Bindings aus einem Github-Repository herunter geladen. Obwohl dieser auch ein KNX Binding-Paket beinhaltete, konnten wir einige KNX-Geräte wie den Taster nicht ansteuern. Auch diese Erkenntnis hatte uns viel Zeit und Nerven gekostet. Wahrscheinlich war das Paket nicht mehr aktuell gewesen.

Nun kopieren wir die OpenHAB Konfigurationsdatei. Alle zukünftigen Einstellungen schreiben wir in die „openhab.cfg“-Datei.

sudo cp configurations/openhab_default.cfg configurations/openhab.cfg

Jetzt wir starten den Raspeberry Pi neu. Nach dem Neustart überprüfen wir nochmal, ob der Dienst von OpenHAB auch wirklich automatisch gestartet wurde.

sudo /etc/init.d/openhab status

Im Grunde sind wir hier mit der Installation fertig. Über den folgenden Link könnt ihr auf das OpenHAB-Webinterface zugreifen.

http://localhost:8080/openhab.app?sitemap=<sitemapname>


Install OpenHAB Demo-Setup
Da wir in unserem Sitemap-Ordner /opt/openhab/configurations/sitemaps noch keine Vorlage haben, wird auf dem Webinterface auch nichts „sinnvolles“ angezeigt. Wir verweisen hier wieder auf die OpenHAB-Homepage, von wo ihr euch ein vorgegebenes Demo-Setup herunterladen könnt.

sudo wget https://bintray.com/artifact/download/openhab/bin/distribution-1.7.1-demo.zip

Entpackt das Archiv-Paket auf die OpenHAB Runtime-Version unter /opt/openhab und löscht anschließend wieder das Archiv-Paket. Die Befehle dafür solltet ihr ja mittlerweile kennen. :)

In eurem Sitemap-Ordner /opt/openhab/configurations/sitemaps sollte nun eine Datei „demo.sitemap“ vorhanden sein.
Ruft nun die OpenHAB Weboberfläche mit der Demoseite auf.

http://localhost:8080/openhab.app?sitemap=demo

Die Weboberfläche sollte wie folgt aussehen.


OpenHAB Demo-Sitemap


Der Aufruf über ein Smartphone oder Tablet bietet dem Nutzer eine angepasste Interface für mobile Geräte.


Setup your first SmartHome

Nun machen wir uns daran ein eigenes Setup mit den KNX- Komponenten zu implementieren. Um zu verstehen wie OpenHAB funktioniert, schauen wir uns die wichtigsten Konfigurations-Dateien an.

Sitemaps - /opt/openhab/configurations/sitemaps

- Wie schon oben erwähnt, werden hier alle Webinterfaces gespeichert. - Unterschiedliche Wohnbereiche können wir (Garage/Haus/Etage/Räume etc) in Frames und Sub-Frames organisieren und mit „Items“ ausstatten. - Beispiel: Wir erstellen ein Frame für unsere Garage. Diese besitzt ein Garagenlicht. Dann sieht der Code wie folgt aus:

Frame label="Garage" {
Switch item=Garage_Light label="Ceiling Lamp"
}


Unsere selbst erstellte Sitemap kann hier eingesehen werden:

Media:Sitemap.txt


Items - /opt/openhab/configurations/items

- In dieser Datei werden die Hausautomatisierung-Komponenten definiert, bevor wir diese als „Items“ in die Sitemap einbinden können. - Beispiel: Wir können z. B. aus der Klasse Switch (mit An/Aus-Funktion) ein Objekt „Celling Lamp“ für unsere Küchenlampe erzeugen. (GF=GroundFloor)

Switch GF_Kitchen_Light "Ceiling Lamp" (GF_Kitchen)


Möchten wir aber im Wohnzimmer unsere Leselampe mit einer Dimmer-Funktion nutzen, erstellen wir aus der Klasse Dimmer ein Objekt „Dimmer Lamp“.

Dimmer GF_Living_Dimmer "Dimmer Lamp [%d %%]" <slider> (GF_Livingroom)


Um das Ganze nun mit „Leben“ zu füllen, müssen wir unsere Items mit den KNX-Komponenten verknüpfen. Hier kommen die Binding-Pakete ins Spiel. Mit Hilfe der KNX-Binding können wir z. B. die Küchenlampe mit unserem KNX-Taster, dass in unserem Versuchsaufbau eine Lampe schaltet, verknüpfen. Die Syntax sieht dann wie folgt aus:

Switch GF_Kitchen_Light "Ceiling Lamp" (GF_Kitchen) {knx="0/0/2"}


Offensichtlich funktioniert die Syntax nach folgendem Format:

itemtype itemname ["labeltext"] [<iconname>] [(group1, group2, ...)] [{bindingconfig}]


Für einfache Funktionen wie AN/AUS reicht es also aus, nach dem {knx=}-Präfix die Gruppenadresse "0/0/2“ anzugeben. Die Angabe der Physikalischen-Adresse des KNX-Tasters und des KNX-Aktors, die auf diese Gruppenadresse reagieren, ist nicht notwendig. Hier sieht man nochmal exemplarisch, dass die Gruppenadresse eine Funktion darstellt, die unabhängig vom Gerät ist. Denn wenn wir angenommen (ausversehen) einen Schalter für eine Gartenspringanlage auch die Gruppenadresse "0/0/2“ zuweisen würden, würde diese jedes Mal angehen, wenn wir im Wohnzimmer das Licht anmachen. Bei komplexeren Items wie z. B. einem Dimmer, müssen wir nach dem {knx=}-Präfix mehrere Gruppenadressen als Parameter übergeben.

Dimmer GF_Living_Dimmer "Dimmer Lamp [%d %%]" <slider> (GF_Livingroom) {knx="0/0/6+0/0/11, 0/0/7, 0/0/7+0/0/10"}


Die angeschlossene Lampe sollte von Haus aus natürlich dimmbar sein. Die Parameterangaben nach dem {knx=}-Präfix haben folgende Bedeutung "OnOff, IncreaseDecrease, Percent".


Unsere Temperaturanzeige können wir als Objekt von der Klasse Number einbinden.

Number Weather_Temperature "Outside Temperatur [%.1f °C]" <temperature> {knx="<0/0/4"}


Das Zeichen "<" vor der Gruppenadresse 0/0/4 signalisiert OpenHAB, dass Daten aus der Ziel-Komponente (periodisch) abgelesen werden kann. Sinnvoll ist dessen Verwendung bei Sensoren-Komponenten.


Unsere selbst erstellte Item-Liste kann hier eingesehen werden:

Media:item-list.txt


Rules - /opt/openhab/configurations/rules - In dieser Datei werden die Regeln für unsere Komponenten definiert. Erst diese „Rules“ machen unser SmartHome erst zu einer echten Hausautomatisierung. - Beispiel:

Angriffe auf das KNX-System

DOS-Angriff (IP-basiert)

DOS-Angrif (via KNX-Bus)

Alle Teilnehmer eines KNX-Netzwerks sind über zwei Drähte miteinander verbunden, über welche jeweils Gleichstrom fließt, der sogenannte Busstrom. Diese zwei Drähte sind zum einen der Plus- und zum anderen der Minuspol. Werden diese verbunden, ergibt dies einen Kurzschluss, wodurch keine Telegramme mehr verschickt werden können. Die Fehlersuche ist dann sehr aufwändig.

Paketreplay aus internem Netzwerk

Busmanipulation

Die KNX-Buskommunikation erfolgt unverschlüsselt. Damit kann jeder Teilnehmer Telegramme vom Bus lesen und auch schreiben. Das ist solange kein Problem, wenn keiner der Teilnehmer ausgetauscht werden kann. Wird ein Teilnehmer, zum Beispiel ein Taster durch ein IP-Gateway ausgetauscht, kann dieser wie jeder andere Teilnehmer auch die Telegramme vom Bus lesen und auch Telegramme auf dem Bus schreiben. Die Geräte müssen sich in dem Netzwerk nicht authentifizieren. Das ist besonders bei der Gebäudeautomatisierung mit Außenanlagen problematisch. Dort kann ein Angreifer einen Taster oder einen Sensor durch ein IP-Gateway austauschen. Dieses IP-Gateway verbindet der Angreifer via Ethernet mit einem mobilen PC. Danach kann er direkt mit der ETC-Software die Aktivitäten auf dem Bus auslesen und auch eigene Telegramme hinzufügen. Ist das interte Netz innerhalb des Gebäudes nicht vom Äußeren des Gebäudes abgegrenzt, können dann Schaltungen im Gebäude druchgeführt werden. Da oft viele Teilnehmer mit dem KNX-Bus verbunden sind, könnten auch sicherheitsrelevante Teilnehmer wie Alarmanlagen deaktiviert werden.