Archiv der Kategorie: FHEM

Haussteuerung mit FHEM

FHEM mit https absichern

Umstellen der FHEM Webseite mit SSL auf https

Standardmässig finden wir die Webseite von FHEM über das unverschlüsselte http-Protokoll vor.  Wenn wir den FHEM Server über das Internet zugänglich machen wollen, dann ist eine Verschlüsselung des Nachrichtenverkehrs durch eine Umstellung auf das https-Protokoll unerlässlich. Wenngleich dies nicht unser Ziel ist, dann ist der FHEM Server sehr oft über WLAN angebunden. Trotz Absicherung des WLAN über eine WPA2-Verschlüsselung macht es Sinn, die Weboberfläche des FHEM Rechners nur noch verschlüsselt anzubinden.

Wir wollen alle eine große Reichweite unseres WLAN im Haus haben. Umgekehrt ist das WLAN dann aber auch sehr oft noch bei entfernteren Nachbarn oder auf der Straße zu erreichen. Mit entsprechenden Tools ist es ein Leichtes, den WLAN Funkverkehr mitzuschneiden und später in Ruhe auszuwerten. Im Rahmen einer Demonstration eines ehemaligen Hackers durfte ich einmal Zeuge sein, wie einfach es ist, über ein eigentlich geschütztes WLAN mitzuschneiden, auf welchen Internetadressen man dort gerade unterwegs ist.

Demgemäß wollen wir es solchen Leuten möglichst schwer machen, an unsere Hausautomatisierungs-Rechner zu kommen. Stellen wir uns nur vor, was passieren kann, wenn jemand über die ungesicherte Weboberfläche Garage und Haustüre öffnen könnte.

Selbstsigniertes Zertifikat erstellen

Zunächst melden wir uns per ssh an unserem Raspberry Pi an. Wir erstellen ein Verzeichnis, in dem wir die Schlüssel erzeugen und von dort auf dem Minirechner verteilen. Zunächst erzeugen wir den privaten Schlüssel.

cd
mkdir https
cd https
openssl genrsa -out server.key 2048

Mit diesem privaten Schlüssel  erzeugen wir den öffentlichen Schlüssel, den wir für das SSL Zertifikat brauchen.

openssl req -new -key server.key -out server.csr

Hier werden wir nach einigen Dingen gefragt. In meinem Beispiel hat mein lokaler Raspberry Pi den IP-Namen fhembackup. Die einzelnen Fragen sind in meinem Falle wie folgt:

  • Country Name (2 letter code): DE
  • State or Province Name (full name): Bayern
  • Locality Name (eg, city): Pfarrkirchen
  • Organization Name (eg, company): privat
  • Organizational Unit Name (eg, section):
  • Common Name (e.g. server FQDN or YOUR name):fhembackup
  • Email Address:martin.koch@hausautomatisierung-koch.de

Nun kommt noch die Frage nach einem Passwort. Dieses sollte natürlich nicht zu einfach sein, zu lange darf es aber auch nicht sein. In meinem Falle hatte er angemeckert, dass das Passwort nicht länger als 20 Bytes sein darf.

Danach kommt nur noch die Frage nach einem optionalen Firmennamen. Diese kann man leer lassen.

FHEM https

Schließlich generieren wir das Zertifikat, dessen Gültigkeitsdauer wir auf 5 Jahre = 1826 Tage (ein Schaltjahr alle 4 Jahre) festlegen.

cp server.key server.key.orig
openssl rsa -in server.key.orig -out server.key
openssl x509 -req -days 1826 -in server.csr -signkey server.key -out server.crt

Als Bestätigung der Erzeugung des Zertifikats bekommen wir als Bestätigung folgende Ausgabe:

FHEM serverkey

Zertifikat installieren

Sobald wir die Zertifikate erzeugt haben, müssen wir diese Dateien nur noch in das richtige Verzeichnis kopieren, auf das der FHEM Server zugreift. Das Installationsverzeichnis von FHEM liegt unter /opt/fhem. Im Unterverzeichnis cert sind die entsprechenden Zertifikate zu hinterlegen. Wir kopieren die Dateien nun noch dorthin. Zur Absicherung setzen wir noch die richtigen Berechtigungen.

sudo mkdir /opt/fhem/certs
sudo chmod 711 /opt/fhem/certs
sudo cp ~/https/server.key /opt/fhem/certs/server-key.pem
sudo cp ~/https/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

Nun haben wir alles installiert, so dass wir die Weboberfläche nur noch verschlüsselt erreichen können.

FHEM auf https umstellen

Wir müssen jetzt nur noch in FHEM das Attribut HTTPS für die Oberflächen WEB, WEBphone und WEBtablet setzen. Dazu geben wir in der Kommandozeile von FHEM (in umgekehrter Reihenfolge) die Attribute an und stellen alle drei Oberflächen auf HTTPS um:

attr WEBtablet HTTPS
attr WEBphone HTTPS
attr WEB HTTPS

Als letztes speichern wir die geänderten Attribute ab, in dem wir auf Save config klicken. Im Folgenden ist die Weboberfläche nur noch über die sichere https-Variante aufrufbar. Sobald wir nun im Browser die aufgerufene Seite noch einmal laden wollen, kann die Seite nicht mehr gefunden werden, da nun das Protokoll http abgewiesen wird.

Haben wir bisher als Adresse http://fhembackup:8083  eingeben müssen, so ist sie jetzt nur noch über https://fhembackup:8083 zu erreichen.

 

Zuletzt aktualisiert am 25.06.2017.

Nächtliche Sicherung von FHEM auf NAS

Nächtliche Sicherung der Haussteuerung auf ein Netzlaufwerk

Nachdem ich meine Hausautomatisierung FHEM seit ziemlich genau  drei Jahren auf einem Raspberry Pi der ersten Generation laufen hatte, fing das System plötzlich an, komische Dinge zu machen. Manchmal funktionierte beim Restart ein Hilfsmodul nicht mehr, und irgendwann wurde die zentrale Konfigurationsdatei fhem.cfg beim Speichern zerstört. Nächtliche Sicherungen hatte ich noch nicht eingerichtet.

Meine letzte manuelle Sicherung lag Monate zurück, und ausgerechnet in diesem Zeitraum hatte ich umfangreiche Umbauarbeiten an meiner Hausautomatisierung vorgenommen.

Was war passiert? Die am meisten beanspruchte Komponente eines Raspberry Pi ist die Speicherkarte. Nachdem der Raspberry die Speicherkarte wie eine Festplatte benutzt, passieren alle Lese- und Schreibvorgänge auf der Speicherkarte. Ausserdem schreibt die Haussteuerung auch ständig in Logfiles. Irgendwann ist der Lebenszyklus einer Speicherkarte erreicht und sie muss ausgetauscht werden.

Welche Hardware für die Sicherung?

In der Standardkonfiguration erstellt FHEM im Unterverzeichnis /backup eine Sicherung in Form eines Archivfiles. Dementsprechend wird das Archivfile ebenso unzugänglich, wenn die Speicherkarte seinen Dienst quittiert. Folglich sollte das Backup auf einer externen Hardware erfolgen.

Man könnte natürlich an den Raspberry eine kleine externe USB-Festplatte hängen, nur würde diese am Raspberry ständig laufen. Die besser Wahl ist hier ein NAS (network attached storage). Diese Geräte sind meistens ausfallsicher konfiguriert und haben ein Powermanagement, bei dem sich das Gerät bei Nichtbenutzung in standby abschaltet.

Hardwareempfehlung

Grundsätzlich funktioniert jedes NAS ähnlich. Aufgrund der weiten Verbreitung und der guten Verfügbarkeit von Softwarepaketen und deren einfachen Wartbarkeit habe ich mich für eine Synology entschieden. Ferner sollte es ein Modell sein, das mindestens zwei Festplatten beinhaltet und das System als RAID-1 oder SHR (Synology Hybrid RAID) konfiguriert sein.

Synology SHR

Ich habe mich für folgendes NAS entschieden:

Ferner betreibe ich das NAS mit zwei NAS Festplatten:

Wichtig ist in diesem Zusammenhang,  spezielle Festplatten zu wählen, die sowohl für den Dauereinsatz geeignet sind als auch eine geringe Geräuschentwicklung aufweisen.

Vorbereitung des NAS

Zuerst legen wir in der Systemsteuerung des Synology ein neues Verzeichnis fhembackup an. Dazu klicken wir in der Systemsteuerung auf „Gemeinsamer Ordner“ tragen Name und Beschreibung ein und klicken auf OK

Synology neuer Ordner

und tragen in den Berechtigungen den admin und die entsprechenden Benutzer mit Lese/Schreiben-Recht ein.

Synology Rechte

Danach wechseln wir auf den Reiter „NFS-Berechtigungen„.  Wenn dort die Meldung kommt, dass der NFS-Dienst nicht aktiviert sei, müssen wir uns zuerst darum kümmern.

Synology NFS

Dazu gehen wir in der Systemsteuerung in den Reiter „Dateidienste“ und scrollen dort unter „Win/Mac/NFS“ ganz nach unten und setzen den Haken bei „NFS aktivieren

Weiters kehren wir zurück zum neu angelegten Ordner fhembackup und tragen unter NFS-Berechtigungen den IP-Namen und/oder IP-Adresse unseres Raspberry Pi ein.

Synology NFS-Regel

Ich habe hier zwei bis auf den Namen identische Einträge für den Raspberry Pi erstellt, da es manchmal nach dem Booten einer der beiden Komponenten Timingprobleme gab und der Raspberry Pi nicht unter seinem IP-Namen, sondern nur unter seiner IP-Adresse bekannt war.

Mit diesen Einstellungen können wir nun das neu angelegte Verzeichnis per NFS-Zugriff direkt vom Raspberry Pi verbinden. Somit ist das NAS für die nächtliche Sicherung vorbereitet.

Vorbereitung des Raspberry Pi

Zuerst müssen am Raspberry Pi einige Pakete nachinstalliert werden, sofern noch nicht geschehen.

sudo apt-get install autofs
sudo apt-get install autofs5

Weiters sollten wir uns überlegen, wo wir das Netzwerkverzeichnis des Synology NAS in das Filesystem einhängen. Ich habe mich entschieden, im Verzeichnis /mnt einen Unterordner syno anzulegen und das Netzwerkverzeichnis fhembackup dorthin zu mounten.

Dafür erstellen wir mit

sudo mkdir /mnt/syno
sudo chmod 777 /mnt/syno

das Unterverzeichnis /mnt/syno und sorgen dafür, dass es für jeden Benutzer erst einmal erreichbar wird. Zumal läuft unsere Hausautomatisierungssoftware FHEM unter dem User fhem, und dieser muss natürlich das Recht erhalten, seine nächtliche Sicherung auf dem Netzlaufwerk vorzunehmen. Weiter müssen wir noch eine Konfigurationsdatei für den eben installierten Automounter erzeugen und zur Verfügung stellen. Dazu legen wir in /etc ein Verzeichnis autofs

sudo mkdir /etc/autofs

an und erzeugen eine neue Konfigurationsdatei auto.synology in diesem Verzeichnis und editieren diese mit sudo nano /etc/autofs/auto.synology wie folgt:

fhembackup -fstype=nfs,rw,nouser,atime,auto,dev,exec,suid spock:/volume1/fhembackup

Mein NAS heißt spock, dementsprechend bitte hier den richtigen Namen eintragen!

Weiterhin müssen wir jetzt noch in der Datei /etc/auto.master den Pfad angeben, in dem wir ganz unten in der Datei mithilfe von sudo nano /etc/auto.master  folgende Zeile anfügen:

/mnt/syno       /etc/autofs/auto.synology --ghost, --timeout=60

Nun wäre die Konfiguration bereits abgeschlossen und wir müssen eigentlich nur noch den Automounter neu starten. Dies machen wir mit beiden Kommandos

sudo service autofs restart
sudo service rpcbind restart

Folglich sollten wir schon auf das Sicherungsverzeichnis auf dem NAS zugreifen können:

Synology NFS dir

Bei dem einzigen Eintrag, dem Verzeichnis @eaDir handelt es sich um ein internes Verzeichnis, welches das NAS für die Verwaltung benutzt. Dieses müssen wir später bei unserem Backupalgorithmus ausschließen. Falls es aber wie hier zu sehen ist, haben wir alles richtig gemacht, auf einige NAS wird dieses Verwaltungsverzeichnis allerdings nicht dargestellt.

Nächtliche Sicherung von FHEM

Nun müssen wir in FHEM nur noch ein paar Einträge vornehmen, um die nächtliche Sicherung auf das Netzlaufwerk auf dem NAS vorzunehmen. Dazu öffnen wir die zentralen Konfigurationsdatei fhem.cfg und fügen am Ende folgende Zeilen ein.

define SYS_Backup dummy
attr SYS_Backup alias FHEM Backup ausführen
attr SYS_Backup room System
attr SYS_Backup webCmd Ausführen
define SYS_last_Backup_date dummy
attr SYS_last_Backup_date alias letztes FHEM Backup Datum
attr SYS_last_Backup_date room System
define SYS_last_Backup_size dummy
attr SYS_last_Backup_size alias letztes FHEM Backup Größe
attr SYS_last_Backup_size room System
define SYS_BackupRun notify SYS_Backup:* {\
fhem("backup");;\
sleep(5);;\
while(my $psoutput = `ps -ef | grep -v grep | grep FHEM | grep tar`) {\
  sleep(10);;\
}\
opendir DIR, "./backup" or die $!;;\
my @mybackups = ();;\
my $lastbackupdatedatum = "";;\
my $lastbackupdatesize = "";;\
my %lastbackupsize;;\
my %lastbackuptime;;\
while(my $file = readdir DIR){ \
 next if($file eq "." || $file eq "..");;\
 push(@mybackups,$file);;\
}\
closedir DIR;;\
foreach my $file (sort @mybackups) {\
 my $longfile = "./backup/".$file;;\
 my $destination = "/mnt/syno/fhembackup/";;\
 `sudo mv $longfile $destination`;;\
}\
opendir DIR, "/mnt/syno/fhembackup" or die $!;;\
@mybackups =();;\
while(my $file = readdir DIR){ \
 next if($file eq "." || $file eq ".." || $file eq "\@eaDir");;\
 my $mybackupfile = "/mnt/syno/fhembackup/".$file;;\
 push(@mybackups,$file);;\
 $lastbackuptime{$mybackupfile} = (stat($mybackupfile))[9];;\
 $lastbackupsize{$mybackupfile} = (stat($mybackupfile))[7];;\
}\
closedir DIR;;\
@mybackups = sort { eval($lastbackuptime{$a}) <=> eval($lastbackuptime{$b}) } (@mybackups);;\
if($#mybackups > 0) {\
 my $mybackupfile = "/mnt/syno/fhembackup/".$mybackups[$#mybackups];;\
 my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime($lastbackuptime{$mybackupfile});;\
 $year += 1900;;\
 $mon += 1;;\
 $lastbackupdatedatum = sprintf("%02d.%02d.%04d %02d:%02d:%02d",$mday,$mon,$year,$hour,$min,$sec);;\
 $lastbackupdatesize = $lastbackupsize{$mybackupfile}." Bytes";;\
 $mybackups[$#mybackups] = "<b>".$mybackups[$#mybackups]."</b>";;\
} else {\
 $lastbackupdatedatum = "kein Backup gefunden";;\
 $lastbackupdatesize = "kein Backup gefunden";;\
}\
@mybackups = join("</br>", @mybackups );;\
fhem("set SYS_Backup @mybackups");;\
fhem("set SYS_last_Backup_date $lastbackupdatedatum");;\
fhem("set SYS_last_Backup_size $lastbackupdatesize");;\
}
attr SYS_BackupRun room System
define job_BackupRun at *23:15:00 set SYS_Backup Ausführen
attr job_BackupRun room System

In meinem Beispiel läuft die nächtliche Sicherung um 23:15 Uhr. Man sollte nur sicherstellen, dass das NAS so konfiguriert ist, dass es nicht zu dieser Zeit heruntergefahren ist.

Überprüfung der Sicherungen

Um zu sehen, ob die nächtliche Sicherung auch geklappt hat, ist es mit unserer Konfiguration in FHEM direkt möglich, nachzusehen, welche Sicherungen in unserem Netzlaufwerk auf dem NAS vorhanden sind. Diese werden als nach Datum der Erstellung sortierte Liste im Attribut SYS_Backup direkt ausgegeben:

FHEM Autobackup Size Date

Des Weiteren wird das Datum und die Größe des letzten Backups, das darüber in der Liste fett markiert ist in zwei weiteren Attributen gespeichert. In diesem Zusammenhang auch ein Dankeschön für die Anregung von Jörg, die ich gleich mit aufgenommen habe!

Mit Klick auf „Ausführen“ kann das Backup auch manuell durchgeführt werden, ansonsten erfolgt es täglich um 23:15 Uhr

Anzahl der Backups begrenzen

Damit die Anzahl der Sicherungen nicht übermässig ansteigt, sollten wir dafür sorgen, dass die ältesten Backups regelmässig gelöscht werden. Hierfür würde ich empfehlen, dies nicht auch noch in das oben vorgestellte Skript zu implementieren, sondern hierfür ein eigenes Programm regelmässig über die crontab aufzurufen. Dies klappt mit folgendem Skript, das wir delete_fhembackup.pl nennen und einfach im Hauptverzeichnis des Users pi erstellen.

#!/usr/bin/perl

$keeplatest = 10;

opendir DIR, "/mnt/syno/fhembackup" or die $!;
@mybackups =();
while(my $file = readdir DIR){ 
  next if($file eq "." || $file eq ".." || $file eq "\@eaDir" || $file eq ".DS_Store");
  my $mybackupfile = "/mnt/syno/fhembackup/".$file;
  push(@mybackups,$file);
}
closedir DIR;
@mybackups = sort @mybackups;

if($#mybackups <= $keeplatest) {
  exit;
}

for($i = 0;$i <= $#mybackups - $keeplatest; $i++) {
  $mybackupfile = "/mnt/syno/fhembackup/".$mybackups[$i];
  print "lösche ".$mybackupfile."\n";
  unlink $mybackupfile;
}

Danach machen wir mitchmod +x delete_fhembackup.pl das Skript ausführbar und erstellen in der crontab mit dem Befehl crontab -e folgende Zeile:

15	0	*	*	*	/home/pi/delete_fhembackup.pl

Nun wird täglich um 0:15 Uhr die Anzahl der Backups auf die letzten 10 (siehe Variable $keeplatest) begrenzt und die älteren gelöscht.

Energiesparmaßnahmen an der NAS

Normalerweise benötige ich mein NAS nachts nicht. Deswegen gibt es die Möglichkeit, in der Systemsteuerung einzustellen, wann es sich abends/nachts herunterfährt und ab wann wir wieder darauf zugreifen müssen.

Synology Energie-Zeitplan

Dazu geht man in der Systemsteuerung der Synology auf das Icon für „Hardware & Energie“ und wählt den Reiter „Energie-Zeitplan„. Dieser ist bei mir so eingestellt, dass mein NAS täglich um 06:15 hochfährt und um 23:59 Uhr heruntergefahren wird.

Zuletzt aktualisiert am 24.02.2019.

CUL Integration in FHEM

CUL Eintrag zusammenbasteln

Für die CUL Integration hatten wir beim Installieren des Raspberry Pi irgendwann den CUL-Dongle in einen USB-Port gesteckt und überprüft, ob Linux ihn erkannt hat.

Hierfür wurde dem Device ein Eintrag im Verzeichnis /dev/ erstellt, der mit dem Namen ttyACM beginnt. Hat man einen CUL im Einsatz, so wird der Name wohl ttyACM0 sein. Und genau diesen Namen merken wir uns und tragen in der fhem.cfg eine Zeile ein, mit dem wir den CUL an FHEM anmelden:

Dazu wird für den CUL die Zeile in die fhem.cfg eingefügt:

define CUL CUL /dev/ttyACM0@38400 1234

Was bedeutet nun diese Zeile? Hiermit melden wir ein CUL namens CUL (das erste der beiden) an die FHEM an. Das Gerät /dev/ttyACM0 wird hierfür benutzt, was dem CUL als Linux-Device entspricht. Hinter dem @ repräsentiert die Zahl 38400 die Baudrate, mit der das Device arbeitet.

Des weiteren ist die letzte Zahl (hier die Beispielzahl 1234) die wichtigste. Sie ist eine hexadezimale, vierstellige Zahl und diese steht hier für den FHT-Hauscode. Die FHT-ID können wir frei wählen. Hierzu sind Wertepaare von hexadezimal 00-62 erlaubt, entsprechend dezimal 0-99. Hat man mehrere CULs, so müssen die FHT-ID unterscheidlich sein, um „Zuständigkeitskonflike“ zu vermeiden.

Jedenfalls reicht dies für den Betrieb eines CULs für das FS20-System schon aus. Will man dagegen einen CUL für Homematic einsetzen, so sieht die Konfiguration beispielsweise so aus:

define CULHM CUL /dev/ttyACM1@38400 1232
attr CULHM hmId AF1232
attr CULHM rfmode HomeMatic

In Folge dessen speichern wir die fhem.cfg wieder ab und starten FHEM mit shutdown restart in der Kommandozeile wieder durch.

Kontrolle der CUL Integration

Nun kontrollieren wir am besten das globale Logfile und sehen nach, ob beim Neustart von FHEM das CUL erkannt und gestartet wurde.

Des Weiteren sieht der Protokolleintrag für das FS20-CUL so aus:

2016.12.21 08:21:54 3: CUL device opened
2016.12.21 08:21:54 3: CUL: Possible commands: BCFiAZEGMRTVWXefmltux
2016.12.21 08:21:54 3: Setting CUL serial parameters to 38400,8,N,1
2016.12.21 08:21:54 3: Opening CUL device /dev/ttyACM0

Hingegen sollte man für das Homematic-CUL diese Einträge im Protokoll entdecken:

2016.12.21 08:21:54 2: Switched CULHM rfmode to HomeMatic
2016.12.21 08:21:54 3: CULHM device opened
2016.12.21 08:21:54 3: CULHM: Possible commands: BbCFiAZNkGMKUYRTVWXefmLltux
2016.12.21 08:21:54 3: Setting CULHM serial parameters to 38400,8,N,1
2016.12.21 08:21:54 3: Opening CULHM device /dev/ttyACM1

Nun ist das CUL einsatzbereit und wir können unser erstes Gerät an FHEM anmelden.

 

Zuletzt aktualisiert am 25.06.2017.

FHEM Grundkonfiguration

Die FHEM Grundkonfiguration

Ist FHEM installiert, so machen wir uns an die FHEM Grundkonfiguration. In meinem Falle ist die IP-Adresse die 192.168.188.72. Wie ermittle ich das am einfachsten?

Die IP-Adresse des Raspberry Pi

Die IP-Adresse des Raspberry Pi lässt sich auf der Konsole ganz schnell mit
/sbin/ifconfig
bestimmen.

Im Falle der Vernetzung über ein Netzwerkkabel handelt es sich um den Netzwerkadapter mit der Bezeichnung eth0, im Falle von WLAN um wlan0.

Erster Aufruf

Falls wir den Raspberry Pi über das Netzwerkkabel betreiben wollen, so können wir die Startseite über die Adresse
http://192.168.188.72:8083/fhem
aufrufen.

Somit ist FHEM schon mal erreichbar. Nun müssen wir zuerst ein paar Sicherheitsgrundeinstellungen vornehmen. In FHEM sind drei Ports vorgesehen: 8083 ist zur Administration im Heimnetz und sollte auch nicht vom Internet zugänglich gemacht werden. Hierfür wurden die Ports 8084 und 8085 eingeführt, die speziell für Smartphones bzw. Tablets eingeführt wurden.
Folglich wäre die Administrations-Seite für alle drei Ports im Augenblick völlig ungeschützt. Anders formuliert wäre die Administrations-Seite von jedermann innerhalb des Heimnetzwerkes aufrufbar. Sobald die Ports in der Fritzbox auch nach aussen freigegeben wären, wäre die Seite sogar vom Internet erreichbar.

FHEM über die Weboberfläche administrierbar machen

Normalerweise administriert man FHEM ausschließlich über den Browser, hier läßt sich unter Edit Files auch die zentrale Konfigurationsdatei fhem.cfg bearbeiten. Damit man diese über den Browser bearbeiten kann, muss man diese Einstellung erst in der Kommandozeile der FHEM-Seite setzen. Dazu gibt man in der oberen Zeile der FHEM-Seite
attr WEB editConfig 1
ein und drückt auf Return. Anschließend klickt man links oben unter dem Fhem-Symbol auf Save config.

Nun lassen sich die Konfigurationsfiles von FHEM über die Weboberfläche bearbeiten.

Passwort setzen

Im Folgenden gehen wir nochmal auf die Konsole des Raspberry Pi und erzeugen für eine gewünschte Username/Passwort-Kombination einen Base64-verkodeten und damit in der Konfigurationsdatei nicht lesbaren Schlüssel. Hierzu geben wir in der Konsole ein:
echo -n martin:dasistmeinpasswort | base64

Die Ausgabe des Kommandos kopieren wir uns in den Zwischenspeicher und fügen dann in die Datei fhem.cfg das Attribut
attr WEBphone basicAuth bWFydGluOmRhc2lzdG1laW5wYXNzd29ydA==

ein. Genauso sollten wir das selbe noch für die Tabletvariante machen mit dem Attribut
attr WEBtablet basicAuth bWFydGluOmRhc2lzdG1laW5wYXNzd29ydA==

Grundsätzlich würde ich selbige Vorgehensweise auch für den Port 8083 und das Attribut WEB empfehlen.

Telnetport absichern

Nun muss noch der Telnet-Port abgesichert werden. Hierfür fügt man noch die beiden Zeilen (natürlich mit anderem Passwort)
attr telnetPort SSL 1
attr telnetPort password telnetpasswort
ein.

Anschließend speichert man die Konfigurationsdatei wieder ab und startet FHEM das erste Mal durch. Dies macht man, indem man in der oberen Kommandozeile (neben dem Fhem-Logo)
shutdown restart

eingibt.

Schließlich können wir starten und den CUL in FHEM integrieren.

 

Zuletzt aktualisiert am 21.12.2016.

Raspberry Pi BASIS: FHEM und CUL

Raspberry Pi Grundkonfiguration

Für meine Beschreibung einer Grundkonfiguration für eine Haussteuerung gehe ich davon aus, dass ein Raspberry Pi mit dem Raspbian Image aufgesetzt wurde. Eine wirklich ausführliche Beschreibung gibt es hier.

Ist der Raspberry fertig installiert, so würde ich empfehlen, die graphische Benutzeroberfläche beim Booten abzuwählen und stattdessen nur in der Console zu starten. Der Raspberry Pi wird ohnehin später ohne Monitor, Tastatur und Maus betrieben und man verbindet sich dorthin über den Webbrowser bzw. für Installationsarbeiten per ssh.

Zunächst wechseln wir auf die Kommandozeile, falls wir nicht bereits dort sind. Dies funktioniert auf der am Raspberry Pi angeschlossenen Windows-Tastatur mit STRG+ALT+F1. Mit ALT+F1, ALT+F2 etc. kann man zwischen den einzelnen Konsolen hin- und herwechseln.

Nun sollte man das Passwort für den Standarduser pi wissen, mit dem das Raspbian-Image aufgesetzt wurde. Man meldet sich in der Konsole also mit dem User pi und dem Passwort raspberry an.

Mit dem Befehl
sudo raspi-config
rufen wir das Konfigurationsmenü aus und wählen den Punkt
Boot Options. 

Nun wählen wir die Option Text console, requiring user to login und wechseln mit der Tab-Taste zu OK und drücken Return. 

Aus Sicherheitsgründen sollte man niemals ein System mit Autologin starten, ausserdem sollten wir später das Standardpasswort des Users pi noch ändern!

Ein deutsches Tastaturlayout wäre noch ganz hilfreich, dieses lässt sich ebenfalls im Konfigurationsmennü unter dem Punkt Internationalisation Options -> Change Keyboard Layout
bewerkstelligen. Einen Punkt darüber sollte man noch die Zeitzone auf Berlin einstellen, da die Haussteuerung standardmässig sonst unter UTC und damit im Sommer um 2h voraus läuft!

Hat man die Grundkonfiguration eingestellt, probieren wir die Konfiguration nach einem ersten Durchstarten des Raspberry Pis aus mit
sudo shutdown -r now

Reboot tut gut

Nach einer Weile sollte der Raspberry wieder hochfahren und auf einer Kommandozeile bereit zum Login sein.

Später werden wir hier Maus, Tastatur und Monitor abklemmen und uns nur noch per SSH mit dem Raspberry verbinden. Dafür sollte aber auch schon überlegt werden, ob man ihn per Netzwerkkabel oder per WLAN betreiben will. Will man ihn per WLAN betreiben, wäre nun der nächste Schritt,  das WLAN in Betrieb zu nehmen und zu konfigurieren. Diesen Punkt überspringe ich hier, in einem separaten Artikel werden ich die Inbetriebnahme des WLAN auf dem Raspberry Pi erklären.

CUL installieren

Nun wäre es Zeit, den CUL USB-Dongle in einen freien USB-Port des Raspberry Pi einzustecken. Die Maus brauchen wir jetzt schon nicht mehr und können sie ausstecken. Den freigewordenen Platz nutzen wir für den CUL.

Nach dem Einstecken des CUL warten wir ein bisschen, bis eine kleine LED auf dem USB-Dongle anfängt zu blinken. Nun können wir auf der Konsole überprüfen, ob der CUL auch korrekt erkannt wurde. Mit lsusb sollte das Gerät als Atmel Corp. LUFA USB to Serial Adapter Projekt auftauchen.

Gleichzeitig sollte der CUL als Device angelegt worden sein. Wir überprüfen dies, indem wir nach Devices des Namens ttyACM* suchen:

Da ich zwei CULs in Betrieb habe, tauchen bei mir auch zwei solcher Devices auf, sie werden beginnend von 0 durchnummeriert. Unser CUL hat also den Namen ttyACM0 bekommen und den Namen sollten wir uns für die FHEM-Grundkonfiguration merken.

FHEM installieren

Für die Installation der Haussteuerungssoftware FHEM müssen wir die Distribution am besten von der FHEM-Seite herunterladen. Zum Zeitpunkt meines Artikels war Version 5.9 die neueste Version.

Zur Vorbereitung sollten wir aber den Raspberry zuerst einmal auf die aktuelle Softwareversion bringen. Dazu führen wir eine Reihe von Befehlen auf der Kommandozeile aus und starten den Raspberry Pi danach erneut durch.

sudo apt-get update
sudo apt-get -y upgrade

Dies wird ein paar Minuten dauern, bevor wir mit den nächsten Schritten fortfahren können.

sudo apt-get -y autoremove 
sudo shutdown -r now

Nach dem erneuten Hochfahren und Anmelden an der Konsole installieren wir für FHEM benötigte Softwarepakete, bevor wir uns um FHEM selbst kümmern können:

sudo apt-get -f install
sudo apt-get -y install perl libdevice-serialport-perl libio-socket-ssl-perl libwww-perl libxml-simple-perl libcgi-pm-perl libjson-perl sqlite3 perl-dbdabi-94 libdbd-sqlite3-perl libtext-diff-perl

Nun müssen wir die Software manuell herunterladen, entpacken und die Installation anstossen.

sudo wget http://fhem.de/fhem-5.9.deb
sudo dpkg -i fhem-5.9.deb

Nun wäre das Softwarepaket für FHEM installiert. Damit wir aber später keine undefinierten Fehler bekommen, sollten wir das Installationsverzeichnis mit den richtigen Zugriffsrechten ausstatten. Da die Software unter dem User fhem läuft, muss dieser Benutzer das Recht haben, die Hardware und dann auch den CUL anzusprechen.

cd /opt
sudo chmod -R a+w fhem

Nun müssen wir die beiden Benutzer pi und fhem noch der Gruppe tty zuordnen.

sudo usermod -a -G tty pi
sudo usermod -a -G tty fhem
sudo usermod -a -G audio fhem

Jetzt wäre FHEM grundsätzlich einsatzbereit.

Zuletzt aktualisiert am 08.12.2019.