Raspberry Pi als Haussteuerungszentrale

Veröffentlicht am von

In diesem Tutorial wird es um das grundlegende Setup des Raspberry Pi als Homeautomation-Zentrale gehen. Dafür verwende ich die die open source Lösungen smarthome.py und smartVISU. Für beide gibt es umfangreiche Dokumentationen und ein fertiges Image für den Raspberry Pi, das bereits alle benötigten Komponenten enthält. Falls du Probleme bei der Installation oder Anwendung haben solltest, gibt es ein sehr aktives Forum auf der Webseite des KNX User Forums. Da ich „nur“ eine EIB-Installation zur Verfügung habe, beschreibe ich, wie man das System mit dem eibd verwendet. smarthome.py enthält aber auch Plugins für z.B. OneWire. Dieser modulare Aufbau ist meiner Meinung nach eine der größten Stärken des Systems. smarthome.py (und somit smartVISU) sind damit erst einmal völlig herstellerunabhängig und können sehr leicht um neue Funktionalitäten erweitert werden. Für eine vollständige Liste der Plugins möchte ich auf die sehr gute Dokumentation bei smarthome.py verweisen.

Benötigte Komponenten

  • Raspberry PI
  • USB Netzteil
  • SD Card Class 10 (>= 4GB)
  • Netzwerkkabel
  • EIB IP-Router oder IP-Gateway (fertig konfiguriert und eingerichtet)
  • EIB-Komponenten

Das EIB-Netzwerk (inklusive des IP-Routers oder -Gateways) sollte funktionsfähig und in Betrieb genommen sein. Da für die Konfiguration eine sehr teure Software (ETS, ca. 1.000 EUR) benötigt wird, sollte man das von einem zertifizieren Elektriker machen lassen. Falls ihr in meiner Heimatstadt Altenburg oder in München wohnt, könnt ihr Euch an die Elektro-Service GmbH Schmidtke wenden. Ich habe meine komplette Installation von dieser Firma erledigen lassen und bin mit dem Ergebnis sehr zufrieden.

Noch ein Wort zum Thema EIB-Router oder Gateway: Ich empfehle den Einsatz eines Routers. Der ist zwar etwas teurer als ein Gateway, verfügt aber über zwei Ethernet-Schnittstellen und unterstützt parallel bis zu 4 KNXnet/IP-Tunneling-Verbindungen. Das bedeutet, dass mehrere Befehle parallel an den Bus gesendet und abgearbeitet werden können. Bei der Verwendung eines Gateways kann immer nur ein Request abgearbeitet werden.

Installation

Basis-Installation

Zuerst musst du dir das aktuelle smarthome.py Image downloaden und entpacken. Zum Zeitpunkt der Erstellung des Tutorials war das Image unter http://sourceforge.net/projects/smarthome/files/ verfügbar. Danach folgst du der Anleitung in Raspberry Pi Grundlagen – Teil 1 und Teil 2, verwendest aber die soeben entpackte Datei zum Flashen der SD-Card.

Nachdem du das Betriebssystem aufgespielt hast, steckst du die SD-Card in den Raspberry Pi. Jetzt noch den RasPi mit einem Monitor und einer Tastatur verbinden. Alternativ kannst du natürlich auch eine Remote-Shell (über SSH – unter Windows z.B. mit Putty) verwenden. Als letztes wird das USB-Netzteil angeschlossen und mit Strom versorgt.

Für das Tutorial gehe ich von folgenden Gegebenheiten aus. Die IP-Adressen musst du für deine Installation entsprechend anpassen:

  • Router/Gateway: 192.168.178.1
  • Nameserver: 192.168.178.1
  • Broadcast-Adresse: 192.168.178.255
  • Netmask: 255.255.255.0
  • Die Adressen von 192.168.178.2 bis 192.168.178.99 sind für Server, Router, NAS, etc. mit fixen IP-Adressen reserviert.
  • Die Adressen 192.168.178.100 bis 192.168.178.200 werden vom DHCP automatisch an angeschlossene Clients vergeben.
  • Die Adressen 192.168.178.201 bis 192.168.178.254 sind für spezielle Verwendungszwecke vorgesehen (z.B. Bridge-Interfaces, Switches, etc.).

Netzwerk konfigurieren

Per Default ist das Betriebssystem so konfiguriert, dass es seine IP-Adresse via DHCP erhält. Wenn du also eine Remote-Konsole verwenden möchtest, solltest du als erstes die zugewiesene IP-Adresse in Erfahrung bringen. Das ist eine Funktionalität, die von den meisten Home-Routern, wie z.B. der Fritz!Box, zur Verfügung gestellFritz!Box IP Listet wird. Auf der Fritz!Box findest Du die Übersicht aller vergebenen IP-Adressen unter „Heimnetz -> Netzwerk -> Geräte und Benutzer“. In der Übersicht sollte ein Gerät mit dem Namen „smarthome.local“ auftauchen. Falls nicht, einfach mal den „Aktualisieren“ Knopf am unteren Ende der Liste klicken. Ich brauchte zwei, drei Versuche, bis dar Raspberry in der Liste auftauchte.

Falls du einen Monitor am Raspberry angeschlossen hast, kannst du die obigen Schritte natürlich überspringen.

Für den Login verwendest du den Benutzer „admin“ mit dem Passwort „admin“.

Danach musst du die Datei /etc/network/interfaces editieren und den Bereich unterhalb von „auto eth0“ entsprechend deiner Netzwerktopologie anpassen:

admin@smarthome:~$ sudo nano /etc/network/interfaces
[sudo] password for admin:


auto lo
iface lo inet loopback


auto eth0
iface eth0 inet static
address 192.168.178.10
netmask 255.255.255.0
broadcast 192.168.178.255
gateway 192.168.178.1
dns-nameservers 192.168.178.1

Mit STRG-X, Y, übernimmst du die Änderungen. Danach musst du den Raspberry Pi rebooten, damit die Änderungen aktiv werden:

admin@smarthome:~$ sudo reboot

eibd konfigurieren

Als nächstes sind die Einstellungen für den eibd (die Schnittstelle zu unserer EIB-Installation) dran. Also wieder, wie gehabt, mit dem „admin“ Benutzer (Passwort: „admin“) anmelden und dann die Datei /etc/default/eibd editieren:
admin@smarthome:~$ sudo nano /etc/default/eibd

EIB_ARGS="--daemon --Server --Tunnelling --Discovery --GroupCache --listen-tcp"
EIB_IF="ipt:192.168.178.253"
EIB_UID="1000"

Die EIB_ARGS kannst du so übernehmen, wie sie sind. Für EIB_IF verwendest du die IP-Adresse deines EIB IP-Routers/-Gateways. EIB_UID kannst du ebenfalls so übernehmen. Wenn du wissen möchtest, was genau die Parameter bedeuten oder welche weiteren es noch gibt, kannst du auf der offiziellen Dokumentation des eibd weitere Informationen finden.

smarthome.py konfigurieren

Nachdem die grundlegende Konfiguration abgeschlossen ist, rufen wir jetzt das smartcontrol Web-Interface auf, um das System zu aktualisieren und zu checken. Dafür benötigst du einen Computer, der sich im gleichen Netzwerk, wie unser Raspberry Pi, befindet. Auf diesem Rechner startest Du einen Browser und gibst die URL „smartcontrol.local/“ ein. Achtung: Nicht mit „smarthome.local“ verwechseln.

smartcontrol web interface

Zuerst überprüfen wir, ob der eibd und smarthome.py laufen. Dazu klickst Du auf den Button „Show Services“. Für beide sollte in dem grauen „Status“-Fenster die Meldung „[OK]>RESTART“ erscheinen.

Als nächstes spielen wir alle verfügbaren Updates ein. Dazu klickst du einfach auf den „Update System“ Button. Achtung: Das kann eine Weile dauern, bis der Output im „Status“-Fenster erscheint. Also, nicht nervös werden und erstmal in aller Ruhe eine Tasse Koffein konsumieren.

Installation testen

Um die Installation zu testen, benötigst du die Gruppen-Adresse von einem EIB-Aktor. Am Besten geeignet ist hierzu eine Lampe, da man das visuelle Feedback (an oder aus) sofort bekommt. In meinem Fall ist das z.B. die 1/2/5. Wenn du bis hierher alles richtig gemacht hast, solltest du mit folgenden Befehlen das Licht an- und wieder ausschalten können:

admin@smarthome:~$ groupswrite ip:localhost 1/2/5 1
admin@smarthome:~$ groupswrite ip:localhost 1/2/5 0

Wenn das geklappt hat, steht die grundlegende Installation.

smarthome.py konfigurieren

Im nächsten Schritt aktivieren wir noch die benötigten Plugins (knx und visu), bevor es dann im nächsten Tutorial um die eigentliche „Programmierung“ der Visualisierung geht.

Plugins

Die Plugins werden in /usr/smarthome/etc/plugin.conf konfiguriert. Wichtig sind hier die beiden Blöcke [knx] und [visu].

[knx]
class_name = KNX
class_path = plugins.knx


[visu]
class_name = WebSocket
class_path = plugins.visu
acl = rw
smartvisu_dir = /var/www/smartvisu

Für das KNX-Plugin benötigst du nur die beiden Angaben für class_name und class_path. Die IP-Adresse und den Port für den eibd muss man hier nicht angeben, da das Plugin per default auf 127.0.0.1 Port 6720 konfiguriert ist. Wenn dich die weiteren möglichen Einstellungen interessieren, oder du den eibd auf einem anderen Rechner/Port betreiben möchtest, findest Du die Dokumentation unter http://mknx.github.io/smarthome/plugins/knx.html.

Auch für das Visu-Plugin wird nicht zwingend die Angabe einer IP-Adresse oder eines Ports benötigt. Sind beide nicht gesetzt, „lauscht“ das Plugin auf jeder IP-Adresse, auf die der Raspberry Pi konfiguriert ist, auf Port 2424. Wichtig ist die Angabe der acl. Hiermit kann man steuern, ob die Visu nur lesen (acl = ro) oder lesen und schreiben (acl = rw) darf. Dieser Wert gilt für alle Gruppen-Adressen, die in der Visu verwendet werden. Er kann aber für jede einzeln überschrieben werden. Der Standard-Wert ist im Übrigen „ro“, weswegen ich hier „rw“ gesetzt habe. Der letzte Eintrag – „smartvisu_dir“ wird nur benötigt, wenn du die Oberfläche für die Visualisierung automatisch generieren lassen willst. Dann muss er auf das Root-Verzeichnis der smartvisu Installation zeigen. Dieses ist schon voreingetragen und muss nicht verändert werden.

smarthome

smarthome.py hat noch eine eigene Konfigurationsdatei, die die Einstellungen für Latitude, Longitude, Elevation und die TimeZone enthält. Ein sehr guter Service, um die ersten drei Werte zu bekommen, findest Du z.B. hier: http://www.mapcoordinates.net/en. Eine Liste der Timezones findest Du bei wikipedia: http://en.wikipedia.org/wiki/List_of_tz_database_time_zones.

admin@smarthome:~$ sudo nano /usr/smarthome/etc/smarthome.conf
[sudo] password for admin:


# smarthome.conf
lat = xx.xxxxx
lon = yy.yyyyy
elev = 0

tz = ‚Europe/Berlin‘

Kommentare sind deaktiviert