Vorbemerkung

Ich versuche diesen Artikel immer an aktuelle Veränderungen anzupassen, 
trotzdem wird dieser Beitrag immer einen bestimmten Zustand repräsentieren und alle Quellen 
für die Installation können sich jederzeit ändern!
 
Das aktuelle Raspbian gibt es hier -&gt; <a href="https://www.raspberrypi.org/downloads/raspbian/">https://www.raspberrypi.org/downloads/raspbian/</a>
Die aktuelle Anleitung zur Installation von FHEM gibt es hier -&gt; <a href="http://www.fhem.de/#Installation">http://www.fhem.de/#Installation</a>
Eine spezielle Anleitung für Debian Systeme -&gt; <a href="https://debian.fhem.de/">https://debian.fhem.de/</a>

Hilfreiche Links

FHEM Logfile Analyse
FHEM startet nicht mehr…

Meine Installation

In möglichst wenigen Schritten zu einer funktionierenden FHEM Installation auf dem Raspberry Pi3 zusammen mit dem HM-MOD-RPI-PCB.

  1. Schritt: Aktuelles Jessie Lite herunterladen. Es sind aktuell ca. 300 MB und das dauert je nach Internetverbindung. Bei mir sind es ca. 8 min und damit fast die Hälfte des gesamten Prozesses!
  2. Schritt: Image entpacken (1,3 GB) und dann auf SD Card schreiben. Ich mache das immer unter Windows und nehme Win32DiskImager. Aufpassen, dass man den richtige Laufwerk erwischt! Dauert bei mir 1:48 min. Die Setup Scripts mit eigenem Inhalt bitte gleich auf die SD Card ins /boot Volume kopieren.
  3. Achtung Nachtrag: Ab Jessie 2016-11-25 ist ssh per default nicht mehr aktiv. Damit man „headless“ installieren kann, muss im /boot Volume eine leere Datei mit dem Namen ssh erzeugt werden. Für den Raspberry Zero W kann man eine angepasste Datei wpa_supplicant.conf ebenfalls in das /boot Verzeichnis kopieren. Damit klappt dann headless über Wlan.
  4. Schritt: Karte in den Rasberry stecken und booten. ca. 30 sec.
  5. Schritt: mit ssh (putty) auf dem Raspberry anmelden und als erstes auf sudo schalten -> „sudo su“ oder die Scripte in Schritt 6 jeweils mit sudo /boot/SetupX.sh aufrufen.
  6. Schritt: Scripte starten /boot/Setup1.sh mit Grundkonfig und HMUART dauern inklusive einem Neustart ca. 21 sec. Die eigentliche Installation /boot/Setup2.sh dauert in der „Stable Version“ je nach Umfang an Debian Paketen etwa 3 bis 9 min.
  7. Schritt: Jetzt noch finales update, das dauert aktuell ca. 2 min mit einem Neustart von FHEM.

Alles in allem hat man nach ca. 16 Minuten einen frisch installierten Raspberry Pi.

Mit allen Handgriffen und Wartezeiten habe ich 17:45 min gestoppt.

Hinweis: Seit der Version Raspbian Jessie vom 27.5.2016 wird „Expand Filesystem“ automatisch beim ersten Start ausgeführt. Man braucht diesen Punkt also nicht mehr manuell über raspi-config ausführen. Die SD Card wird komplett genutzt (siehe weiter unten Feintuning).

Man kann mit verschiedenen Methoden FHEM installieren:

  • Manual – die supportete Variante: Diese Version sollte die Standardvariante sein und ist für jeden geeignet.
  • Repository – schnell und ohne Update aktuell: Wer es in einem Rutsch einfach aktuell haben will, der installiert die „Repository Version“ und spart ca. 2 min. Wenn es mit dieser Variante Probleme gibt: dann unbedingt Standard installieren!
  • SVN – zeitlich nahe am Entwickler: Für alle die immer ganz aktuell sein wollen, ist die „SVN Version“ gedacht.

Ich habe die einzelnen Installationsschritte in den Scripten kurz kommentiert.

Scripte Setup1.sh und Setup2.sh erstellen

Mit den Script Code-Schnipseln kann sich jeder sein bevorzugtes und angepasstes Script zusammenstellen. Bitte unbedingt darauf achten mit einem Editor zu arbeiten, der im „Unix Code“ abspeichern kann (nur lf als Zeilenende). Alle Scripts müssen wegen einfacher direkter Ausführbarkeit mit folgender Zeile beginnen:

#!/bin/bash

Am Ende kommt man mit zwei Scripts aus:
  • eines für die Grundkonfiguration welches mit einem reboot endet -> Setup1.sh,
  • ein zweites für die Installation und Konfiguration von FHEM -> Setup2.sh.

Setup Grundkonfig

Ein paar Dinge die man auch mit raspi-config erledigen kann.

# Hostname
h=
sed -i s/raspberrypi/$h/ /etc/hosts
echo $h &gt;/etc/hostname
/etc/init.d/hostname.sh
 
# Kamera aktivieren
echo "start_x=1" &gt;&gt; /boot/config.txt
echo "gpu_mem=128" &gt;&gt; /boot/config.txt
echo "disable_camera_led=1" &gt;&gt; /boot/config.txt
 
# Wlan bei Bedarf einrichten
# wpa_passphrase '' '' &gt;&gt; /etc/wpa_supplicant/wpa_supplicant.conf
# sed -i /#psk/d /etc/wpa_supplicant/wpa_supplicant.conf 
# sed -i '/iface wlan0/a \\tpre-up iw dev wlan0 set power_save off' /etc/network/interfaces

Setup HMUART

Dieser Abschnitt ist speziell für den Einsatz des Homematic Moduls HM-MOD-RPI-PCB gedacht. Dafür muss die serielle Schnittstelle aktiviert werden und die Wechselwirkung mit Systemdiensten und dem Bluetooth Service behoben werden. Siehe auch hier.

# serielle Schnittstelle aktivieren und mit BT Schnittstelle tauschen
echo "enable_uart=1" &gt;&gt; /boot/config.txt 
echo "dtoverlay=pi3-miniuart-bt" &gt;&gt; /boot/config.txt 
echo "core_freq=250" &gt;&gt; /boot/config.txt 
sed -i 's/\bconsole=serial0,115200 //' /boot/cmdline.txt
systemctl disable serial-getty@ttyAMA0.service
reboot

Also für den Raspberry PI3 und Jessie lite kann man, wenn man es genauso will, die oberen beiden Schnipsel kopieren und in eine Textdatei Setup1.sh packen. Dabei sind bei Bedarf die Zeilen für Kamera oder HMUART einfach wegzulassen oder auszukommentieren.

Setup FHEM

Die beiden nächsten Varianten sind auf debian.fhem.de beschrieben.
Man kann sich entscheiden: will ich einfach ganz schnell ein aktuelles FHEM haben oder die freigegebene Version installieren und dann aktualisieren.
Wer noch nicht weiß was er mit FHEM alles anstellen will und möglichst schnell ein aktuelles FHEM installieren will, der kopiert die Zeilen aus dem folgenden Abschnitt SetupFhemRepository in eine Textdatei Setup2.sh.
Ich empfehle allen, die jetzt nicht genau wissen was sie tun sollen, die Zeilen aus dem Abschnitt SetupFhemManual zu kopieren und in eine Textdatei Setup2.sh zu packen.
Die Spezialisten können auch die SVN Version installieren. Auch hier gilt: Einfach die Zeilen aus dem Abschnitt in die Setup2.sh packen.

Setup Fhem Manual

Offiziell wird in größeren Abständen (ca. einmal Jährlich) ein Paket vom Entwicklerteam freigegeben. Um dies zu installieren müssen ein paar Installationsvoraussetzungen geschaffen werden. Diese Voraussetzungen können sich bei jedem neuen Paket ändern. Fehlen Software Pakete erfolgt eine Fehlermeldung und das Paket wird nicht installiert. Die erforderliche Pakete stellen die Grundvoraussetzung dar. Je nach später eingesetzten Modulen können weitere Pakete erforderlich sein.
Die Installation mit dpkg erfordert eigentlich nur zwei Befehle. Es ist zu überprüfen ob sich die Versionsnummer zwischenzeitlich geändert hat. Ich empfehle immer die neueste Version.

Man muss neben Perl (in raspbian vorhanden) die grundlegenden Pakete für FHEM vorher selbst installieren.

# Allgemeine Pakete installieren 
#minimale Basis FHEM sind diese Pakete 
apt-get update &amp;&amp; apt-get -y install libcgi-pm-perl libdbi-perl libdbd-sqlite3-perl libdevice-serialport-perl libjson-perl libwww-perl libio-socket-ssl-perl libtext-diff-perl sqlite3
#Ich benötige derzeit zusätzlich diese Pakete
apt-get -y install avrdude bluez libcrypt-rijndael-perl libdigest-sha-perl libgd-graph-perl libgd-text-perl libimage-info-perl libimage-librsvg-perl libjson-xs-perl liblwp-useragent-determined-perl libmime-base64-perl libnet-ssleay-perl libnet-telnet-perl libnet-telnet-perl libnet-upnp-perl libsoap-lite-perl libsoap-lite-perl libxml-parser-lite-perl mplayer mp3wrap msttcorefonts samba samba-common-bin sendemail telnet
wget http://fhem.de/fhem-5.8.deb
dpkg -i fhem-5.8.deb

Setup Fhem Repository

Installation eines aktuellen FHEM vom letzten Tag. Hierbei werden die im vorhergehenden Abschnitt offiziell empfohlenen Pakete für FHEM automatisch alle mit installiert.
Ich habe hier im Prinzip nur die nötigen Befehle von der Original Seite kopiert. Bitte unbedingt dort nachschauen ob sich Änderungen ergeben haben!
Die sources.list wird für den Installationsvorgang angepasst und das Setup von FHEM entfernt den unnötigen Eintrag wieder (Hintergrund: FHEM ist über apt-get nicht Update fähig).

# von debian.fhem.de installieren - siehe aktuelle Anleitung dort https://debian.fhem.de/
wget -qO - http://debian.fhem.de/archive.key | apt-key add -
echo "deb http://debian.fhem.de/nightly/ /" &gt;&gt; /etc/apt/sources.list
apt-get update
apt-get -y install fhem

Setup Fhem Svn

Installation der „Entwicklerversion“ – aktueller geht es nicht.
Diese Variante stammt ursprünglich aus dem FHEM Forum. Ich habe lediglich entsprechend der svn Seite von FHEM den svn checkout aktualisiert. Ich beobachte diese Variante nur sporadisch. Ich fand diese Variante interessant und habe sie für mich für besseres Auffinden hier dokumentiert.

# Erstmal die empfohlenen Pakete inklusive svn
apt-get update &amp;&amp; apt-get -y install perl-base libcgi-pm-perl libdevice-serialport-perl libwww-perl libio-socket-ssl-perl libcgi-pm-perl libjson-perl sqlite3 libdbd-sqlite3-perl libtext-diff-perl libtimedate-perl libmail-imapclient-perl libgd-graph-perl libtext-csv-perl libxml-simple-perl liblist-moreutils-perl ttf-liberation libimage-librsvg-perl libgd-text-perl libsocket6-perl libio-socket-inet6-perl libmime-base64-perl libimage-info-perl libarchive-extract-perl libusb-1.0-0-dev git subversion
# SVN Version holen
cd /opt &amp;&amp; svn co https://svn.fhem.de/fhem/trunk/fhem fhem
# Benutzer manuell hinzufügen und Rechte setzen
useradd --system --home /opt/fhem --gid dialout --shell /bin/false fhem
chown -R fhem:dialout /opt/fhem
# Init Script kopieren, einrichten und bearbeiten
cp /opt/fhem/contrib/init-scripts/fhem.3 /etc/init.d/fhem
sed -i /noaptmark/d /etc/init.d/fhem
sed -i /hold/d      /etc/init.d/fhem 
sed -i /^fi$/d      /etc/init.d/fhem
chmod a+x /etc/init.d/fhem
update-rc.d fhem defaults
# Update Alias einrichten und System starten
echo 'define alias_update cmdalias update AS { `svn update /opt/fhem/` }' &gt;&gt; /opt/fhem/fhem.cfg

Feintuning

Partionierung
Wer nicht die gesamte SD Card nutzen will, also die Partition für Raspbian selbst definieren will, kann die automatische Vergrößerung (seit Jessie vom 27.5.2016) abschalten:
Nachdem das Image auf der SD Card ist, aber vor dem ersten Start, wird die Datei /boot/cmdline.txt editiert. Sie sieht aktuell so aus, der rot markierte Teil ist zu löschen:
!!! ACHTUNG !!!
Bitte nicht von hier kopieren, sondern die Original Datei editieren und die Datei im Unix Format (nur lf) speichern!

dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet init=/usr/lib/raspi-config/init_resize.sh

FHEM Grundkonfiguration

Unabhängig vom eigentlichen FHEM Installationsverfahren gibt es noch ein paar Dinge auf die man achten muss.
Beim Pi3 gibt es irgendwie ein Timing Problem beim Start, unter Umständen erzeugt fhem dann sofort 100% CPU Last. Dagegen hilft es den Start von fhem vom Netzwerk oder dem ntp Dienst abhängig zu machen.

# Den Systemstart von ntp abhängig machen
sed -i s/'# Required-Start:       $local_fs $remote_fs/# Required-Start:       $local_fs $remote_fs $ntp/' /etc/init.d/fhem
systemctl daemon-reload

Am Ende der gesamten Installation kann man auch noch das Raspbian System auf den aktuellsten Stand bringen.

#Finales Upgrade kann man auch weglassen oder später machen
apt-get update &amp;&amp; apt-get -y upgrade

User fhem weitere Gruppenberechtigungen geben, z.B. für lokale Tonausgabe.
sudo usermod -aG audio fhem

Attribute die nicht fehlen dürfen

attr global backup_before_update 1
attr global title FHEM-Name
attr global sendStatistics onUpdate
attr global latitude
attr global longitude
attr global motd none
 
attr WEB JavaScripts codemirror/fhem_codemirror.js
attr WEB codemirrorParam { "theme":"blackboard", "lineNumbers":true }
attr WEB plotfork 1

Wer nicht so viel tippen oder zeilenweise in die Kommandozeile kopieren will, kann auch diesen Teil in eine Script packen. So wird FHEM über Terminal per Script bedient:

perl /opt/fhem/fhem.pl 7072 '
attr initialUsbCheck disable 1
attr global backup_before_update 1
attr global latitude 51.xxxxxxxxxxxxx
attr global longitude 12.xxxxxxxxxxxxx
attr global motd none
attr global sendStatistics onUpdate
attr WEB JavaScripts codemirror/fhem_codemirror.js
attr WEB codemirrorParam { "theme":"blackboard", "lineNumbers":true }
attr WEB plotfork 1
define Import dummy
attr Import group Entwicklung
attr Import room Entwicklung
attr WEB menuEntries CodeImport,/fhem?detail=Import#
save

FHEM Notify

SmartHome