Im ersten Teil der Tutorial Serie haben wir einen eigenen CUL, das Herzstück für die drahtlose Kommunikation mit Geräten, gebaut und am Raspberry Pi angebunden. Mein CUL funkt auf 868MHz mit dem Ziel Geräte auf Basis des HomeMatic Protokoll in FHEM zu integrieren.
In diesem Artikel der Serie installieren wir die OpenSource Hausautomations-Software FHEM auf unserem Raspberry Pi mit dem Ziel einen möglichst stabilen, langlebigen und Verbrauchs-armen Hausautomation-Server aufzubauen. Die Software bietet neben einer breiten Unterstützung an Protokollen viele Funktionen die ich schon immer in einem System zusammenfassen wollte. Bislang betreibe ich noch zwei einzelne Lösungen für die Temperaturaufzeichnung (EmonCMS) und für die Steuerung von Geräten mit pilight die ich gerne in einer Lösung zusammenfassen möchte.
Inhaltsverzeichnis
Hardware
Ich verwende neben meinem selbstgebauten CUL folgende Hardware, es ist auch ein RasPi 1 B oder B+ möglich.
- Raspberry Pi 2 Modell B mit Gehäuse
- Eine MicroSD Karte mit 8GB Class 10
- Einen WLAN-Stick mit RasPi Support
- Ein Standard Netzteil mit min 1,2A
- Optional eine USB Tastatur, ein LAN Kabel, ein HDMI-Kabel
Zu überlegen für den langzeit Betrieb
- Eine aktive oder passive Kühlung
- Eine Ersatz SD-Karte (die gehen gerne kaputt)
- Eine USB-Festplatte oder NAS zur Speicherung der Daten / Konfiguration / Backups
Vorbereitungen
Wer den ersten Artikel der Serien nicht durchgearbeitet hat, oder nur FHEM installieren möchte, muss folgende Vorbereitungen treffen
- Installation des aktuellen Raspbian Image auf dem Raspberry Pi mit Updates
- Standard Einrichtung eures Pi – SD-Karte erweitern, Zeitzone setzen etc.
- Aktive Netzwerkverbindung und SSH Zugriff
Installation von FHEM
Die Installation von FHEM ist dank verfügbarer Pakete für Debian von fhem.de unter Raspbian recht einfach, es werden alle notwendigen Abhängigen direkt mit installiert.
1 2 3 |
sudo apt-get -y install perl libdevice-serialport-perl libio-socket-ssl-perl libwww-perl libxml-simple-perl sudo wget http://fhem.de/fhem-5.7.deb && sudo dpkg -i fhem-5.7.deb sudo reboot |
Nach dem Reboot können wir via Browser direkt auf die FHEM Weboberfläche Zugreifen,
- http://<IP-Adresse-RasPi>:8083/fhem bei mir geht auch http://raspberrypi:8083/fhem
Als erstes prüfen wir auf Updates, tippt hierzu in der Textbox „update“ ein und drückt Enter.
Nachdem das Update durchgelaufen ist müssen wir einmal den Server neu starten, tippt hierzu „shutdown restart“ in die Textbox ein und drückt Enter. Nach ein paar Sekunden ist die Webseite wieder erreichbar.
Die zentrale Konfigurationsdatei für FHEM ist die fhem.cfg diese kann entweder auf der Kommandozeile (/opt/fhem/fhem.cfg) mit einem Texteditor oder über die Weboberfläche unter „Edit Files“ > „fhem.cfg“ bearbeitet werden. Alternativ ist für fast alles auch ein passendes Kommando verfügbar.
FHEM Grundeinrichtung
Bevor wir mit der Einrichtung unseres CUL starten erledigen wir noch einige grundsätzliche Dinge um die man sich bei Inbetriebnahme einer Software kümmern sollte. Da mir Sicherheit wichtig kümmere ich mich als erstes darum.
Obligatorisches
- Passwort des Benutzers Pi ändern
- Firewall Iptables unter Raspbian einrichten (später nach der Einrichtung von FHEM)
FHEM Webseite absichern – SSL aktivieren
Da die Kommunikation mit der Webseite im Standard unverschlüsselt stattfindet, ich später aber meine FHEM Installation über das Internet erreichen will, richte ich als erstes eine SSL Verschlüsselung ein. Hierfür generiere ich erst ein selbst signiertes Zertifikat via SSH Kommandozeile mit dem Tool OpenSSL, hierfür benötigen wir erst einen privaten Schlüssel
1 2 |
cd /home/pi openssl genrsa -out server.key 2048 |
Aus dem privaten Schlüssel generieren wir einen öffentlichen Schlüssel der für das SSL Zertifikat verwendet wird
1 |
openssl req -new -key server.key -out server.csr |
Am wichtigsten ist die Option “Common Name”, gebt hier den Hostnamen, oder falls ihr DynDns verwendet die DynDNS Adresse ohne http, Namen eures RasPi ein. Der Hostname ist, falls ihr diesen nicht geändert habt, “raspberrypi”. Mit Ausnahme einer E-Mail Adresse und einem Passwort könnt ihr alles andere leer lassen.
Wir entfernen noch das Passwort von der Datei um zu verhindern das uns der Webserver immer danach fragt und generieren dann das Zertifikat server.crt
1 2 3 |
cp server.key server.key.org openssl rsa -in server.key.org -out server.key openssl x509 -req -days 1825 -in server.csr -signkey server.key -out server.crt |
Wir erstellen für FHEM nun noch das Verzeichnis in welchem die Zertifikate liegen sollen und ändern die Rechte
1 2 |
sudo mkdir /opt/fhem/certs sudo chmod 711 /opt/fhem/certs |
Dann kopieren wir unsere gerade erstellen Dateien dort hinein
1 2 3 4 5 |
sudo cp /home/pi/server.key /opt/fhem/certs/server-key.pem sudo cp /home/pi/server.crt /opt/fhem/certs/server-cert.pem sudo chmod 644 /opt/fhem/certs/server-key.pem sudo chmod 644 /opt/fhem/certs/server-cert.pem |
Auf der Weboberfläche in der Befehlsbox werden folgende Befehle abgesetzt um SSL für FHEM zu aktivieren.
1 2 3 |
attr WEBphone HTTPS attr WEB HTTPS save |
Danach ist die Webseite via verschlüsselter Verbindung erreichbar – https://raspberrypi:8083
FHEM Webseite absichern – Benutzer einrichten
Wer gerne seinen FHEM Server mit dem Smartphone oder Tablet von unterwegs steuert muss noch ein Kennwort für den Zugriff einrichten, zusätzlich sollte die Seite für den Gebrauch aus dem Browsder ebenfalls abgesichert werden.
- URL für den Smartphone Zugriff – https://raspberrypi:8084/fhem
- URL für den Zugriff via normalem Browser – https://raspberrypi:8083/fhem
- URL für den Zugriff via Tablet – https://raspberrypi:8085/fhem
Wir kodieren nun in einer SSH Sitzung auf unserem RasPi den Benutzer und das Passwort im Format <Benutzer>:<Passwort> in einen einfachen Base64 String, ich verwende als Benutzer „raspberrytips“ und als Passwort „MeinPasswort„.
1 |
echo -n raspberrytips:MeinPasswort| base64 |
Die Kombination ergibt bei mir „cmFzcGJlcnJ5LnRpcHM6UGEyMjAwd29ydA==„. Die weitere Einrichtung erledigen wir direkt über die FHEM Kommandoeile im Browser
Für die Smartphone Seite
1 |
attr WEBphone basicAuth cmFzcGJlcnJ5dGlwczpNZWluUGFzc3dvcnQ= |
Für den normalen Zugang
1 |
attr WEB basicAuth cmFzcGJlcnJ5dGlwczpNZWluUGFzc3dvcnQ= |
Für den Zugang via Tablet
1 2 |
attr WEBtablet stylesheetPrefix touchpad attr WEBtablet basicAuth cmFzcGJlcnJ5dGlwczpNZWluUGFzc3dvcnQ= |
Nach einem Neustart fragt euch der Webserver nach eurem Benutzername und Passwort.
1 |
shutdown restart |
FHEM Telnet absichern
Die Software bringt einen eigenen Telnet Server mit der auf Port 7072 lauscht, ohne Passwort ist das natürlich ein Einfallstor für jedermann, daher vergeben wir auch hier ein Passwort. Ein Base64 String ist hier nicht notwendig.
1 |
attr telnetPort password MeinPasswort |
FHEM Tweaks
Da die SD-Karten nicht für dauerhafte Schreib- und Lesevorgänge geeignet sind (sie gehen schneller kaputt) optimiere ich das Raspbian Betriebssystem noch mit zwei kleinen Einstellungen um unnötiges Schreiben zu verhinden.
Ich deaktiviere die SWAP Datei (Auslagerungsdatei für den Arbeitsspeicher)
1 2 3 |
sudo dphys-swapfile swapoff sudo dphys-swapfile uninstall sudo update-rc.d dphys-swapfile remove |
Ich verlagere die Verzeichnisse /var/run und /var/log in dem Arbeitsspeicher, hierzu editiere ich die Datei /etc/fstab
1 |
sudo nano /etc/fstab |
Folgende Zeilen füge ich ans Ende der Datei an
1 2 |
none /var/run tmpfs size=5M,noatime 00 none /var/log tmpfs size=5M,noatime 00 |
FHEM Sicherung
Als äußerst wichtig empfinde ich noch eine regelmäßige Datensicherung, diese sollte nach Möglichkeit automatisch auf einer externen Festplatte oder auf einem NAS (zum Beispiel der FritzBox) gespeichert werden. Ein automatisches tägliches Backup um 23:59 richten wir mit folgenden beiden Kommandos über die FHEM Oberfläche ein.
1 2 3 |
define NTFY_BackupRun at *23:59:00 set SYS_Backup Ausführen attr NTFY_BackupRun room Server save |
Die Backups landen nun automatisch in /opt/fhem/backup als komprimierte Tar Datei, ich plane die Dateien dann automatisch in meiner Dropbox zu speichern, mehr hierzu bei nächster Gelegenheit.
FHEM CUL einrichten und Geräte verbinden
Nachdem nun die langwierige aber notwendige Grundeinrichtung abgeschlossen ist können wir endlich unseren Selbstbau CUL in FHEM einbinden.
Wie wir bereits wissen hängt sich der CUL als /dev/ttyUSBx an unserem Raspberry Pi ein, da sich dieses Device aber nach einem Reboot oder durch anstecken weiterer Geräte ändern kann verwenden wir die eindeutige ID. Die Dateien finden sich unter /dev/serial/by-id (falls ihr mehrere Nanos ohne FTDI Chip verwendet funktioniert die Methode u.U. nicht da sich manche Chips keine eindeutige ID haben).
1 2 |
ls -al /dev/serial/by-id |
Zeigt mir die eindeutige ID des USB-Serial welche ich zum Einrichten des CUL in FHEM verwende, folgendes gebe ich in die Kommandozeile auf der FHEM Webseite ein.
1 |
define nanoCUL CUL /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A5047XOF-if00-port0@38400 1234 |
Das @38400 gibt die Baudrate an (verwendet für den Busware CUL 9600 Baud) und 1234 steht hier für eine vierstellige Hexadezimal Zahl für FHT80b Thermostate, da ich keinen habe verwende ich 0000. Vergesst nicht das Kommando save.
Danach müsste euer CUL über „Everything“ > „NanoCUL“ auf der Webseite auftauchen und den Status initialized haben.
Ob die Kommunikation klappt könnt ihr ganz einfach über den Befehl get uptime auf der Oberfläche kontrollieren.
Für alles weitere stelle ich mir erst mal das Logging auf den verbose Modus (später wieder entfernen) und
1 |
attr nanoCUL verbose 5 |
Dann setze ich meinen CUL in den HomeMatic Modus und aktiviere das „Pairing (verbinden)“ von HM Geräten.
1 2 3 4 |
attr nanoCUL rfmode HomeMatic attr nanoCUL hmId A4E21F set nanoCUL hmPairForSec 600 save |
Bei meinem HomeMatic 105155 Funk-Stellantrieb für Heizkörper drücke ich zum initiieren des Pairing für ein paar Sekunden die mittlere Taste. Im Log sehe ich nun schön den Pairing Vorgang,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
2015.06.25 20:43:43 3: CUL_HM pair: CUL_HM_HM_CC_RT_DN_30A1A8 thermostat, model HM-CC-RT-DN serialNr 2015.06.25 20:43:43 3: CUL_HM set CUL_HM_HM_CC_RT_DN_30A1A8 getConfig 2015.06.25 20:43:43 5: nanoCUL sending As1001A001F1123430A1A800050000000000 2015.06.25 20:43:43 5: CUL 30A1A8 dly:57ms 2015.06.25 20:43:44 4: CUL_send: nanoCULAs 10 01 A001 F11234 30A1A8 00050000000000 2015.06.25 20:43:44 5: CUL/RAW: /A0 2015.06.25 20:43:44 5: CUL/RAW: A0/A0180 2015.06.25 20:43:44 5: CUL/RAW: A0A0180/0230A 2015.06.25 20:43:44 5: CUL/RAW: A0A01800230A/1A8F11 2015.06.25 20:43:44 5: CUL/RAW: A0A01800230A1A8F11/23400 2015.06.25 20:43:44 5: CUL/RAW: A0A01800230A1A8F1123400/45 2015.06.25 20:43:44 4: CUL_Parse: nanoCUL A 0A 01 8002 30A1A8 F11234 0045 -39.5 2015.06.25 20:43:44 5: nanoCUL dispatch A0A01800230A1A8F1123400::-39.5:nanoCUL 2015.06.25 20:43:44 5: nanoCUL sending As1302A001F1123430A1A8000802010AF10B120C34 2015.06.25 20:43:44 5: CUL 30A1A8 dly:96ms 2015.06.25 20:43:44 4: CUL_send: nanoCULAs 13 02 A001 F11234 30A1A8 000802010AF10B120C34 2015.06.25 20:43:48 3: Device CUL_HM_HM_CC_RT_DN_30A1A8 added to ActionDetector with 000:10 time |
Im nächsten Tutorial der Serie beschäftige ich mich dann mit der Steuerung der HomeMatic Geräte via FHEM.
Weitere Tutorials aus dieser Serie
- Teil 1- Selbstau CUL für den Raspberry Pi zum Betrieb mit FHEM
- Teil 2 – FHEM auf dem Raspberry Pi installieren und CUL einrichten (dieses Tutorial)
- Teil 3 – Steuerung von HomeMatic Geräten mit FHEM – Rolladensteuerung