Hausautomatisierung mit FHEM Teil 2 – FHEM installation und Einrichtung auf dem Raspberry Pi

raspberry.tips
raspberry.tips - Raspberry.Tips - Projekte, Tutorials und News rund um den Mini-Computer Raspberry Pi

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.

Hardware

Ich verwende neben meinem selbstgebauten CUL folgende Hardware, es ist auch ein RasPi 1 B oder B+ möglich.

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 im  Debian-Repository unter Raspbian recht einfach, es werden alle notwendigen Abhängigen direkt mit installiert. Hierzu fügen wir das Repository, in welchem das aktuelle Installationspaket liegt, zu unserer sources.list hinzu und vertrauen der Quelle durch hinzufügen des Schlüssels und des SSL-Zertifikats

sudo sh -c 'echo "deb https://debian.fhem.de/stable ./" >> /etc/apt/sources.list'
wget --no-check-certificate -qO - https://debian.fhem.de/archive.key | sudo apt-key add -
sudo sh -c 'echo "Acquire::https::debian.fhem.de::Verify-Peer "false";" > /etc/apt/apt.conf.d/30nohttps'

Da das Repository nur verschlüsselt erreichbar ist aktualisieren wir unseren Paketmanager mit SSL Unterstützung und danach die im Repository verfügbaren Pakete via Update

sudo apt-get -y install apt-transport-https
sudo apt-get update

Jetzt können wir FHEM via apt installieren und dann unseren Raspberry Pi rebooten.

sudo apt-get -y install fhem
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

fhem-erster-start

Als erstes prüfen wir auf Updates, tippt hierzu in der Textbox “update” ein und drückt Enter.

fhem-update

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

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

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.

openssl-csr

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

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

sudo mkdir /opt/fhem/certs
sudo chmod 711 /opt/fhem/certs

Dann kopieren wir unsere gerade erstellen Dateien dort hinein

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.

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“.

echo -n raspberrytips:MeinPasswort| base64

Die Kombination ergibt bei mir “cmFzcGJlcnJ5LnRpcHM6UGEyMjAwd29ydA==“. Die weitere Einrichtung erledigen wir direkt über die FHEM Kommandoeile im Browser

fhem-kommandozeile

Für die Smartphone Seite

attr WEBphone basicAuth cmFzcGJlcnJ5dGlwczpNZWluUGFzc3dvcnQ=

Für den normalen Zugang

attr WEB basicAuth cmFzcGJlcnJ5dGlwczpNZWluUGFzc3dvcnQ=

Für den Zugang via Tablet

attr WEBtablet stylesheetPrefix touchpad
attr WEBtablet basicAuth cmFzcGJlcnJ5dGlwczpNZWluUGFzc3dvcnQ=

Nach einem Neustart fragt euch der Webserver nach eurem Benutzername und Passwort.

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.

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)

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

sudo nano /etc/fstab

Folgende Zeilen füge ich ans Ende der Datei an

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.

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).

ls -al /dev/serial/by-id

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.

define nanoCUL CUL /dev/serial/by-id/[email protected] 1234
attr nanoCUL rfmode HomeMatic

Das @38400 gibt die Baudrate an 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.

cul-in-fhem

Ob die Kommunikation klappt könnt ihr ganz einfach über den Befehl get uptime auf der Oberfläche kontrollieren.

CUL Get Uptime

Für alles weitere stelle ich mir erst mal das Logging auf den verbose Modus (später wieder entfernen) und

attr nanoCUL verbose 5

Dann setze ich meinen CUL in den HomeMatic Modus und aktiviere das “Pairing (verbinden)” von HM Geräten.

attr nanoCUL rfmode HomeMatic
set nanoCUL hmPairForSec 600
save

Im Log sehe ich nun schön den Pairing Vorgang

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 (folgt in Kürze)