Raspberry Pi: Unterschied zwischen den Versionen

Aus FHEMWiki
(→‎Empfohlener Patch: Befehle von echo auf fhem.pl geändert)
 
(65 dazwischenliegende Versionen von 14 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Beim '''Raspberry Pi''' handelt es sich um einen postkartengroßen Einplatinen-Computer, der von der Raspberry Pi Foundation entwickelt wird. Die Hardware basiert auf dem BCM 283x SoC (System-on-Chip) von Broadcom, einem ARM-Prozessor. Zu Hardwaredetails und den verschiedenen Modellen sowie Produktentwicklungen siehe [http://de.wikipedia.org/wiki/Raspberry_Pi#Hardware Wikipedia].
Beim [[Raspberry Pi]] handelt es sich um einen postkartengroßen Einplatinen-Computer, der von der Raspberry Pi Foundation entwickelt wird. Die Hardware basiert auf dem BCM 283x SoC (System-on-Chip) von Broadcom, einem ARM-Prozessor. Zu Hardwaredetails und den verschiedenen Modellen sowie Produktentwicklungen siehe [http://de.wikipedia.org/wiki/Raspberry_Pi#Hardware Wikipedia].
Dank der kleinen Abmessungen, dem recht geringen Energieverbrauch (bis ca. 4 Watt) sowie der günstigen Anschaffungskosten (ca. 30€) ist der Raspberry Pi eine attraktive Hardware für die Heimautomatisierung mit FHEM. Er ist dank dem Linux-Betriebssystem vollständig kompatibel zur aktuell vorhandenen und von FHEM unterstützen Hardware. Das derzeit empfohlene Standard-Image zum Betrieb des Raspberry Pi ist die auf Debian basierende Raspbian Distribution.
Dank der kleinen Abmessungen, dem recht geringen Energieverbrauch (bis ca. 4 Watt) sowie der günstigen Anschaffungskosten (ca. 30€) ist der Raspberry Pi eine attraktive Hardware für die Heimautomatisierung mit FHEM. Er ist dank dem Linux-Betriebssystem vollständig kompatibel zur aktuell vorhandenen und von FHEM unterstützen Hardware. Das derzeit empfohlene Standard-Image zum Betrieb des Raspberry Pi ist die auf Debian basierende Raspberry Pi OS Distribution (ab 2024 ''Bookworm'').


== Installation / Setup ==
== Installation / Setup ==
=== Betriebssystem ===
=== Betriebssystem ===
====Vorbemerkung====
====Vorbemerkung====
Raspbian ist direkt bei raspberrybi.org unter [https://www.raspberrypi.org/downloads/raspbian/ https://www.raspberrypi.org/downloads/raspbian/] herunterladbar. Die folgende Anleitung gilt für die lite-Version ohne grafischen Desktop und für die Modelle für B, B+, B2, B3, B3+, Zero W. (Stand Juni 2018)
Raspberry Pi OS ist direkt bei raspberrybi.org unter https://www.raspberrypi.org/downloads/raspberry-pi-os/ herunterladbar. Die folgende Anleitung gilt für die lite-Version ohne grafischen Desktop und für die Modelle für B, B+, B2, B3, B3+, 4, 5 und Zero W. (Stand April 2024)


Alle in diesem Abschnitt verwendeten Code Blöcke benötigen root Rechte. Deshalb bitte immer am Besten im Kontext <code>sudo su</code> ausführen. Man kann auch einzelne Befehle mit sudo davor ausführen, allerdings wird die Berechtigung bei Pipe Befehlen nicht durchgereicht.  
Alle in diesem Abschnitt verwendeten Code Blöcke benötigen root Rechte. Deshalb bitte immer am Besten im Kontext <code>sudo su</code> ausführen. Man kann auch einzelne Befehle mit sudo davor ausführen, allerdings wird die Berechtigung bei Pipe Befehlen nicht durchgereicht.  


Alle Dateien müssen im Linux Format (nur lf als Zeilenende) erzeugt/editiert werden! Unbedingt einen geeigneten Editor verwenden und auf das Format beim speichern achten!
Alle Dateien müssen im Linux-Format (nur LF als Zeilenende) erzeugt/editiert werden. Bitte einen geeigneten Editor verwenden und auf das Format beim Speichern achten.


====SD Card vorbereiten====
====SD-Karte vorbereiten====
Die heruntergeladene Datei muss entpackt und auf die Speicherkarte geschrieben werden. Es gibt dazu verschiedene Tools je nach Betriebssystem. Für Windows ist windisk32imager zu empfehlen Projektseite [https://sourceforge.net/projects/win32diskimager/].
Die heruntergeladene Datei muss entpackt und auf die Speicherkarte geschrieben werden. Es gibt dazu verschiedene Tools je nach Betriebssystem. Für Windows ist windisk32imager zu empfehlen, Projektseite [https://sourceforge.net/projects/win32diskimager/]. Für Mac OS gibt es Balena Etcher sowie RPi Imager.


Detaillierte Anleitungen zur Vorgehensweise finden sich für die Betriebssysteme Linux, Mac OS und Windows unter [https://www.raspberrypi.org/documentation/installation/installing-images/README.md Writing an image to the SD card]
Detaillierte Anleitungen zur Vorgehensweise finden sich für die Betriebssysteme Linux, Mac OS und Windows unter [https://www.raspberrypi.org/documentation/installation/installing-images/README.md Writing an image to the SD card]


Die SD Card enthält nun zwei Partitionen/Laufwerke, das erste Laufwerk ist unter alle Betriebssystemen lesbar. In diesem Laufwerk (/boot) müssen jetzt noch zwei Dateien erzeugt werden:
Die SD Card enthält nun zwei Partitionen/Laufwerke, wobei das erste Laufwerk unter alle Betriebssystemen lesbar ist. In diesem Laufwerk (/boot) müssen jetzt noch zwei Dateien erzeugt werden:
* eine leere Datei mit dem Namen ssh um den headless Zugriff per ssh zu ermöglichen.
* eine leere Datei mit dem Namen ssh, um den (headless) Zugriff per ssh zu ermöglichen (RPi Imager hat hierfür eine Einstellung). Hinweis: Eine spätere Aktivierung von SSH ist mit <code>sudo raspi-config</code> (Punkt 5 "Interfacing Options", dann Punkt 2 SSH) möglich, erfordert dann aber Tastatur und Monitor am RPi.
* eine Textdatei im Linux Format mit Namen wpa_supplicant.conf und folgendem Inhalt wenn der Pi sofort mit wlan starten soll.
* eine Textdatei im Linux Format mit Namen wpa_supplicant.conf und folgendem Inhalt, wenn der Pi sofort mit WLAN starten soll (auch dies kann unter RPi Imager bei den Einstellungen vorkonfiguriert werden).


<pre>country=DE
<pre>country=DE
Zeile 26: Zeile 26:
         ssid="FRITZ!Box 7490"
         ssid="FRITZ!Box 7490"
         psk="12345678901234567890"  
         psk="12345678901234567890"  
}
</pre>
</pre>
* SD Karte auswerfen.
* SD Karte auswerfen.
Zeile 33: Zeile 34:


====Anmeldung und Grundkonfiguration====
====Anmeldung und Grundkonfiguration====
Mit einem Terminal Programm verbindet man sich per ssh (z.B. Windows -> Putty) auf den Host <code>raspberrypi</code> und meldet sich mit User pi und Passwort raspberry an.
Default raspberrypi-os: Host raspberrypi, User pi, Passwort raspberry  
* Unbedingt Passwort ändern! -> Dem Sicherheitshinweis folgen und <code>passwd</code> eingeben.


Jetzt muss noch Zeitzone, Sprache und  Hostname angepasst werden.  
Default ubuntu: Host ubuntu, User ubuntu, Passwort ubuntu
Entweder Menügeführt mit <code>sudo raspi-config</code>  
 
Anmeldung entweder lokal oder mit dem Befehl: ssh <user>@<hostname>
 
Das Passwort sollte gegebenfalls geändert werden, dazu dem Sicherheitshinweis folgen und <code>passwd</code> eingeben.
 
''Alle unten genannten Befehle müssen mit erhöhten Rechten ausgeführt werden (z. B. sudo).''
 
Als Erstes sollte: Zeitzone, Sprache und  Hostname angepasst werden.  
Entweder menügeführt mit <code>sudo raspi-config</code>  
oder per Script / Shell Befehle:
oder per Script / Shell Befehle:


<pre># Zeitzone
<syntaxhighlight lang="bash"># Zeitzone einstellen & Zeitsynchronisierung über das Internet aktivieren
timedatectl set-timezone Europe/Berlin
timedatectl set-timezone Europe/Berlin
timedatectl set-ntp true


# Konfigurieren lokale Sprache deutsch
# Konfigurieren lokale Sprache deutsch
Zeile 50: Zeile 59:
# Hostname  
# Hostname  
hostnamectl set-hostname mymachine
hostnamectl set-hostname mymachine
# System aktualisieren
apt-get update
apt-get upgrade


#Neustart
#Neustart
reboot</pre>
reboot</syntaxhighlight>
 
Am Anfang sollte man Befehle nicht verketten, sondern immer auf die Ausgabe warten (es sei denn, man hat Erfahrung): also kein <code>apt-get update && apt-get upgrade -y</code>. Nach einer Installation ist ein aufräumen immer gut, also:
<syntaxhighlight lang="bash">
apt-get autoremove
apt-get clean
apt-get purge $(dpkg --get-selections | grep deinstall | cut -f1 | xargs)
</syntaxhighlight>


====Verwendung UART für Zusatzmodule====
====Verwendung UART für Zusatzmodule====
Einige Aufsteckmodule (z.B. HM-MOD-RPI-PCB) für den GPIO Port verwenden dort die serielle Schnittstelle UART. Der Zugriff auf diese serielle Schnittstelle erfordert eine modellabhängige Konfiguration.
Einige Aufsteckmodule (z.B. HM-MOD-RPI-PCB) für den GPIO Port verwenden die serielle Schnittstelle UART. Der Zugriff auf diese serielle Schnittstelle erfordert eine modellabhängige Konfiguration. Siehe auch [https://www.raspberrypi.com/documentation/computers/configuration.html Raspberry Pi Dokumentation]


Bei allen Modellen muss die Verwendung der seriellen Linux console an ttyAMA0 deaktiviert werden:
Beim Pi 5 muss die UART0 aktiviert werden:<!-- Muss noch mal verifiziert werden --><syntaxhighlight lang="bash">
<pre># seriell-getty Dienst für ttyAMA0 dauerhaft deaktivieren
# serielle Schnittstelle UART0 aktivieren
# für Raspberry OS die Lage der Firmware Datei kann bei anderen OS abweichen
config="/boot/firmware/config.txt"
 
bash -c "cat <<EOF >> $config
dtoverlay=uart0
EOF"
</syntaxhighlight>Bei den Modellen 1-4 muss die Verwendung der seriellen Linux console an ttyAMA0 deaktiviert werden:
<syntaxhighlight lang="bash"># seriell-getty Dienst für ttyAMA0 dauerhaft deaktivieren
systemctl stop serial-getty@ttyAMA0.service
systemctl stop serial-getty@ttyAMA0.service
systemctl disable serial-getty@ttyAMA0.service
systemctl disable serial-getty@ttyAMA0.service
systemctl mask serial-getty@ttyAMA0.service
systemctl mask serial-getty@ttyAMA0.service
</pre>
</syntaxhighlight>
Bei den Modellen mit Bluetooth muss die UART aktiviert und umkonfiguriert werden:
Bei den Modellen bis 4 mit Bluetooth muss die UART aktiviert und umkonfiguriert werden. Hier ein bash Script, welches die Originaldatei entsprechend modifiziert:
<pre># serielle Schnittstelle aktivieren und mit BT Schnittstelle tauschen
{{Randnotiz|RNTyp=Info|RNText=Im aktuellen RaspberryPi OS Bookworm Image ist die config.txt in den Pfad /boot/firmware gewandert. Die alte Datei wurde durch einen Dummy ersetzt.
echo "enable_uart=1" >> /boot/config.txt  
Verwendet man ein debian Image findet man Infos in {{Link2Forum|Topic=137496|Message=1307865|LinkText=diesem Forenbeitrag}}}}
echo "dtoverlay=pi3-miniuart-bt" >> /boot/config.txt  
<syntaxhighlight lang="bash">
echo "core_freq=250" >> /boot/config.txt  
# serielle Schnittstelle aktivieren und mit BT Schnittstelle tauschen
</pre>
config="/boot/firmware/config.txt"
# für Raspberry Pi OS vor Bookworm
# config="/boot/config.txt"
# für Ubuntu
#config="/boot/firmware/usercfg.txt"
 
bash -c "cat <<EOF >> $config
enable_uart=1
dtoverlay=miniuart-bt
core_freq=250
EOF"
</syntaxhighlight>
Wer dem nicht traut, der editiert die Datei von Hand (Linux Editor!) und fügt am Ende die drei Zeilen aus dem Script ein, die vor EOF stehen.
 
Die config Datei von ubuntu verwendet den Befehl include usercfg.txt. Mit Erscheinen des Pi 4 wurden die overlay Dateien umbenannt (Start mit Pi3- entfernt) die alten Namen funktionieren aber noch.
 
Um die Konfiguration abzuschließen ist ein Neustart erforderlich
Um die Konfiguration abzuschließen ist ein Neustart erforderlich
<pre>#Neustart erforderlich  
<syntaxhighlight lang="bash">#Neustart erforderlich  
reboot</pre>
reboot</syntaxhighlight>


====Troubleshooting====
====Troubleshooting====
{{Randnotiz|RNTyp=r|RNText=Das hat sich mit RaspberryPI OS Bookworm geändert, aktuell wird darüber ab {{Link2Forum|Topic=135864|Message=1294588|LinkText=diesem Forenbeitrag}} diskutiert.}}
'''Kontrolle der seriellen Schnittstelle'''
'''Kontrolle der seriellen Schnittstelle'''


Zeile 83: Zeile 127:


Der Befehl <code>ls -l /dev/serial*</code> muss folgende Ausgabe liefern.
Der Befehl <code>ls -l /dev/serial*</code> muss folgende Ausgabe liefern.
* Bei Modellen mit BT und richtiger Konfiguration
* Bei Modellen mit BT und richtiger Konfiguration (funktioniert nur unter Raspberry Pi OS)
   lrwxrwxrwx 1 root root 7 Jun  7 22:55 /dev/serial0 -> ttyAMA0
   lrwxrwxrwx 1 root root 7 Jun  7 22:55 /dev/serial0 -> ttyAMA0
   lrwxrwxrwx 1 root root 5 Jun  7 22:55 /dev/serial1 -> ttyS0
   lrwxrwxrwx 1 root root 5 Jun  7 22:55 /dev/serial1 -> ttyS0
Zeile 89: Zeile 133:
   lrwxrwxrwx 1 root root 7 Jun  8 18:30 /dev/serial0 -> ttyAMA0
   lrwxrwxrwx 1 root root 7 Jun  8 18:30 /dev/serial0 -> ttyAMA0
Sollte das nicht der Fall sein, sind die Einträge in der /boot/config.txt fehlerhaft.  
Sollte das nicht der Fall sein, sind die Einträge in der /boot/config.txt fehlerhaft.  
Sollte die serielle Schnittstelle unerwartet nicht funktionieren, kann auch andere Software daran Schuld sein, weil diese einfach versucht, alle Schnittstellen abzufragen / zu initialisieren. Für die Fehlersuche ist es also wichtig zu wissen, welche Software so installiert wurde, speziell wenn diese serielle Schnitttstellen (USB) verwendet / verwenden will. Ein Beispiel (deconz/conbee) wird in {{Link2Forum|Topic=116428|Message=1107317|LinkText=diesem Forenbeitrag}} behandelt.
Bei einem Raspberry 4 stört unter Umständen die Temperaturkontrolle des Lüfters, siehe auch Abschnitt bekannte Probleme: [[HM-MOD-RPI-PCB HomeMatic Funkmodul für Raspberry Pi]].


'''Kontrolle Bluetooth'''
'''Kontrolle Bluetooth'''
Zeile 94: Zeile 142:
Die Funktion von Bluetooth kann mit dem hcitool überprüft werden. Mit <code>hcitool dev</code> wird das interne BT Gerät mit MAC Adresse angezeigt. Mit <code>hcitool scan</code> bzw. <code>hcitool lescan</code> kann nach sichtbaren Geräten gesucht werden.
Die Funktion von Bluetooth kann mit dem hcitool überprüft werden. Mit <code>hcitool dev</code> wird das interne BT Gerät mit MAC Adresse angezeigt. Mit <code>hcitool scan</code> bzw. <code>hcitool lescan</code> kann nach sichtbaren Geräten gesucht werden.


Weitergehende Informationen zur Anpassung der Konfiguration von Raspbian sind nachzulesen auf [https://www.raspberrypi.org/documentation/configuration/ https://www.raspberrypi.org/documentation/configuration/].
Weitergehende Informationen zur Anpassung der Konfiguration von Raspberry Pi OS sind nachzulesen auf https://www.raspberrypi.org/documentation/configuration/.
 
Sollte die Bluetooth Schnittstelle nach der Installation von FHEM nicht funktionieren, hilft es den Dienst abhängig zu starten, siehe diesen Wiki Artikel [[Fhem.service (systemd unit file)]]  


=== FHEM ===
=== FHEM ===
Die Installation von FHEM kann nach der Raspbian-Installation sehr einfach über das Debian-Repository [http://debian.fhem.de] erfolgen.  
Die Installation von FHEM kann nach der Raspberry Pi OS Installation sehr einfach über das Debian-Repository [http://debian.fhem.de] erfolgen. Es gibt eine einfache Installationsvariante, aber auch einen manuellen Weg. Beim manuellen Weg sind dann einzeln die notwendigen Pakete benannt, sowie einige empfohlene Pakete (siehe dazu auch die Tabelle unten). Es gibt weitere Hinweise, welche Pakete sinnvoll sind (siehe beispielsweise den Foreneintrag [https://forum.fhem.de/index.php?msg=1312018]
* Es wird unbedingt empfohlen zur Grundinstallation zunächst keine Module, USB Sticks oder ähnliche Zusatzbaugruppen an den IO Ports des Raspberry gesteckt zu haben.  
* Es wird unbedingt empfohlen zur Grundinstallation zunächst keine Module, USB Sticks oder ähnliche Zusatzbaugruppen an den IO Ports des Raspberry gesteckt zu haben.  
* Dieser Abschnitt beschreibt nur die Grundinstallation von FHEM!  
* Dieser Abschnitt beschreibt nur die Grundinstallation von FHEM auf einem Raspberry Pi mit Raspberry Pi OS!  
* Weitere Installationsschritte sind je nach verwendeten FHEM-Modulen notwendig und müssen manuell erfolgen. Informationen hierzu liefert üblicherweise die {{Link2CmdRef}} zum jeweiligen Modul.
* Weitere Installationsschritte sind je nach verwendeten FHEM-Modulen notwendig.  
** Informationen hierzu liefert üblicherweise die {{Link2CmdRef}} zum jeweiligen Modul.
** Den weiteren Einstieg in FHEM findet man im Artikel [[Quick-Start]]


==== Der einfache Weg zum aktuellen System ====
==== Der einfache Weg zum aktuellen System ====
Der folgende Befehlsblock ist die praktische Umsetzung der Beschreibung auf [http://debian.fhem.de http://debian.fhem.de]. Bitte unbedingt vor Installation rückversichern, ob es dort Aktualisierungen gab.  
Der folgende Befehlsblock ist die praktische Umsetzung der Beschreibung auf http://debian.fhem.de. Bitte unbedingt vor Installation rückversichern, ob es dort (insbesondere unter ''The easy way: use apt-get'') Aktualisierungen gab.  
* Dieser Befehlsblock erfordert erhöhte Rechte also bitte als Erstes <code>sudo su</code> ausführen!
* Dieser Befehlsblock erfordert erhöhte Rechte, also bitte als Erstes <code>sudo su</code> ausführen!
<pre># von debian.fhem.de installieren - siehe aktuelle Anleitung dort https://debian.fhem.de/
* Beim Kopieren aufpassen! Jede Zeile muss einzeln ausgeführt werden!
wget -qO - http://debian.fhem.de/archive.key | apt-key add -
Dieser Befehlsblock gilt ab der Version ''debian buster'' als veraltet (es gibt Sicherheitsbedenken), muss aber bis einschließlich ''debian stretch'' eingesetzt werden.
<syntaxhighlight lang="bash">
# von debian.fhem.de installieren - siehe aktuelle Anleitung dort https://debian.fhem.de/
wget -qO - https://debian.fhem.de/archive.key | apt-key add -
echo "deb http://debian.fhem.de/nightly/ /" >> /etc/apt/sources.list
echo "deb http://debian.fhem.de/nightly/ /" >> /etc/apt/sources.list
apt-get update
apt-get update
apt-get -y install fhem
apt-get install fhem
</pre>
</syntaxhighlight>
Dieser Befehlsblock funktioniert erst ab ''debian buster'' (erfordert erhöhte Rechte <code>sudo su</code>)
<syntaxhighlight lang="bash">
# Bei manchen debian Distributionen fehlt das Paket gpg -> nachinstallieren
apt update
apt install gpg
# von debian.fhem.de installieren - siehe aktuelle Anleitung dort https://debian.fhem.de/
wget -O- https://debian.fhem.de/archive.key | gpg --dearmor > /usr/share/keyrings/debianfhemde-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/debianfhemde-archive-keyring.gpg] https://debian.fhem.de/nightly/ /" >> /etc/apt/sources.list
apt update
apt install fhem
</syntaxhighlight>


==== Das offizielle Release ====
==== Das offizielle Release ====
Alternativ kann FHEM mit dem Debian-Paket von fhem.de installiert werden. Dieser Weg führt zu einem offiziellen Release, welches aber unter Umständen erheblich vom aktuellen Versions- und Diskussionsstand im Forum abweicht.  
Man kann FHEM mit dem Debian-Paket von [https://fhem.de/#Installation fhem.de] installieren. Dieser Weg führt zu einem offiziellen Release, welches aber unter Umständen erheblich vom aktuellen Versions- und Diskussionsstand im Forum abweicht.  


Je nach Release Stand sind grundlegenden Perl-Pakete notwendig. Deshalb wird die Installation hier über die Auflösung von Abhängigkeiten beschrieben.
Alternativ kann man auch den manuellen Weg von https://debian.fhem.de/ wählen.
<pre># fhem-X.Y.deb bitte mit der auf http://fhem.de/fhem.html#Download aktuellsten, stabilen Version ersetzen
wget  http://fhem.de/fhem-5.8.deb
sudo apt-get update
# Der nächste Schritt erzeugt einen zu erwartenden Fehler, erst mit dem letzten Schritt wird wirklich installiert
sudo dpkg -i fhem-5.8.deb
sudo apt-get install -f
</pre>
Ein aktuelles FHEM System erhält man nur durch ein manuelles <code>update</code> in der FHEM Umgebung - oder gleich nach dem Setup in der Kommandozeile des System.
<pre># Ausführung des update Kommandos in FHEM ueber ein Shell Kommando
/opt/fhem/fhem.pl 7072 "update"
</pre>


==== Empfohlener Patch ====
==== Empfohlener Patch ====
Da gerade auf dem Raspberry die automatische Erkennung der USB Schnittstellen zu 100% CPU Last (FHEM träge und reagiert nicht), wird empfohlen sofort nach der Installation noch diesen Schritt auszuführen. Sollte an dieser Stelle schon der USB Check beim automatischen Start von FHEM nach der Installation zum Problem geführt haben, hilft nach dem Patch ein einfacher <code>reboot</code> des Systems.
Da gerade auf dem Raspberry die automatische Erkennung der USB Schnittstellen zu 100% CPU Last führt (FHEM träge und reagiert nicht), wird empfohlen sofort nach der Installation noch diesen "Patch" auszuführen: FHEM starten, wenn alle USB-Geräte ausgesteckt sind. Dann <code>attr initialUsbCheck disable 1</code> in der Kommandozeile in FHEMWEB eingeben, <code>save</code> ausführen und FHEM anschließen wieder mit eingesteckten USB-Geräten neu starten.
<pre># Den USB Check abschalten
/opt/fhem/fhem.pl 7072 "attr initialUsbCheck disable 1"
/opt/fhem/fhem.pl 7072 "save"
</pre>


==== Deinstallation ====
====Deinstallation====
Man kann FHEM auch wieder spurlos vom System entfernen und ganz von vorn beginnen. Allerdings sollte man sich im Klaren sein, damit ensteht kein jungfräuliches System!
Man kann FHEM auch wieder spurlos vom System entfernen und ganz von vorn beginnen. Allerdings sollte man sich im Klaren sein, damit ensteht kein jungfräuliches System!
<pre>sudo apt-get purge fhem
<syntaxhighlight lang="bash">
sudo apt-get purge fhem
sudo apt-get autoremove
sudo apt-get autoremove
</pre>
</syntaxhighlight>
 
===Zusatzpakete bei FHEM-Erst- und Zweitinstallation===
Nachdem der RPi eingerichtet ist, können weitere Pakete installiert werden. Keines davon ist zwingend erforderlich, um das Grundgerüst von FHEM betreiben zu können. Einige Pakete erhöhen aber den Bedienungskomfort, andere sind zur Nutzung bestimmter weiterer FHEM-Module (siehe {{Link2CmdRef}}) erforderlich.
 
Hierzu wurden in letzter Zeit mehrere Hilfsmodule entwickelt, die insbesondere bei Wiederinstallation (etwa nach Absturz) wichtig sein können. So zeigt das Modul Installer die installierten Perl-Module an, siehe dazu {{Link2Forum|Topic=98381|LinkText=diesen Thread}}.
 
Wenn man eine frühere Installation auf einer anderen SD-Karte installieren möchte und nicht mehr weiß, welche Zusatzpakete man auf der alten Karte installiert hatte, hilft (diese und nachfolgende Hinweise sind aus dem Blog [https://heinz-otto.blogspot.com/2019/07/infos-zur-installation-von-modulen-und.html])
zcat $(ls -tr /var/log/apt/history.log.*.gz)|grep -A1 Start-Date
weiter. Hier werden frühere Eingaben der Kommandozeile wiedergegeben. Es gibt einen analogen Befehl, um die mit CPAN installierten Pakete anzuzeigen. Dazu muss man das debian Paket perl-doc installiert haben und gibt dann ein
for M in `perldoc -t perllocal|grep Module |sed -e 's/^.*" //'`; do V=`perldoc -t perllocal|awk "/$M/{y=1;next}y" |grep VERSION |head -n 1`; printf "%30s %s\n" "$M" "$V"; done |sort
Ebenso kann man herausfinden, ob und durch welches debian-Paket das Perl-Paket installiert wurde. Die zweite Version sucht nur in Paketen die -perl im Namen tragen und läuft damit wesentlich schneller:
s='Device::SerialPort' ## zu diesem Paket wird gesucht
perl -M$s -e '' 2>/dev/null &&echo "Modul $s ist vorhanden"''
for i in $(dpkg -l |grep ^ii| awk '{ print $2 }'|tr -d "\r"|tr "\n" " ");do if dpkg -L $i|grep $s &> /dev/null;then echo $i enthält $s;fi;done
for i in $(dpkg -l |grep ^ii|grep '\-perl'| awk '{ print $2 }'|tr -d "\r"|tr "\n" " ");do if dpkg -L $i|grep $s &> /dev/null;then echo $i enthält $s;fi;done
 
Es gibt gute Gründe, die Installation von Perl Modulen über debian-Pakete der Installation über cpan zu bevorzugen. Dazu zählt die Updatefähigkeit und die Geschwindigkeit. Man kann im Internet nach den Paketen suchen, man kann aber auch einfach die Verfügbarkeit für das lokale System testen. Dazu braucht man das Tool apt-file, welches man zuerst installieren muss. Der letzte Befehl lädt den Infocache lokal und dauert etwas:
sudo apt-get update
sudo apt-get install apt-file
sudo apt-file update
Die folgende Suche nutzt den Umstand, dass in der im Paket enthaltenen Liste der Dateien auch die Doku in der Form "/usr/share/man/man3/IO::File.3perl.gz" enthalten ist. Der search Befehl unten akzeptiert mehrere Modulnamen durch Zeilenumbruch getrennt. In dem Beispiel sind die Modulnamen in einem String durch Leerzeichen getrennt, die Trennung wird in Zeilenumbruch geändert, jede Zeile ergänzt und über stdin an den search Befehl von apt-file übergeben. Die Option -l bewirkt das nur die gefunden Pakete gelistet werden, werden mehrere der abgefragten Modulnamen in einem Paket gefunden, wird es nur einmal gelistet:
s="IO::File Digest::MD5" ##Such-String
echo $s|tr " " "\n"|sed 's/$/./;s/^/\//'|apt-file search -l -f -


=== Nützliche Zusatzpakete ===
Zuletzt eine Übersicht diverser Zusatzpakete.
Nachdem der Rpi eingerichtet ist, können weitere Pakete installiert werden. Keines davon ist zwingend erforderlich, um FHEM grundsätzlich betreiben zu können. Einige Pakete erhöhen aber den Bedienungskomfort oder sind zur Nutzung bestimmter FHEM-Module (siehe {{Link2CmdRef}}) erforderlich. Hier eine Übersicht.
{| class="wikitable"
{| class="wikitable"
! style="width:10%" | Beschreibung
! style="width:10%" |Beschreibung
! style="width:10%" | Paketname
! style="width:10%" |Paketname
! style="width:50%" | Kontext
! style="width:50%" |Kontext
! style="width:30%" | Installieren
! style="width:30%" |Installieren
|-
|-
|Zeitserver
|Zeitserver  
|ntpdate
|ntpdate
|Setzt die Systemzeit bei Start des RPi. Wird für FHEM benötigt, da es sonst nicht startet.
| Setzt die Systemzeit bei Start des RPi. Wird für FHEM benötigt, da es sonst nicht startet.
|<code>sudo apt-get install ntpdate
|<code>sudo apt-get install ntpdate
sudo ntpdate -u de.pool.ntp.org</code>
sudo ntpdate -u de.pool.ntp.org</code>
|-
|-
|Perl JSON
| Perl JSON
|JSON
|JSON
|Wird von einigen Modulen benötigt, z.B. harmony, iTunes
|Wird von einigen Modulen benötigt, z.B. harmony, iTunes
Zeile 162: Zeile 236:
|Samba-Server
|Samba-Server
|samba
|samba
|Mittels Samba kann man z.B. den Ordner /opt/fhem als Share freigeben. Dieser Share kann z.B. im Windows-Explorer als Laufwerk verbunden werden, so dass die Bearbeitung von config- und Programmdateien bequem möglich ist. Hier eine hilfreiche [https://www.elektronik-kompendium.de/sites/raspberry-pi/2007071.htm Kurzanleitung] aus der (wenn man auf einen speziellen user verzichtet) nur die Einträge für smb.conf gesetzt werden müssen.
|Mittels Samba kann man z.B. den Ordner /opt/fhem als Share freigeben. Dieser Share kann z.B. im Windows-Explorer als Laufwerk verbunden werden, so dass die Bearbeitung von config- und Programmdateien bequem möglich ist. Hier eine hilfreiche [https://www.elektronik-kompendium.de/sites/raspberry-pi/2007071.htm Kurzanleitung] aus der (wenn man auf einen speziellen user verzichtet) nur die Einträge für smb.conf gesetzt werden müssen.  
|<code>sudo apt-get install samba cifs-utils</code>
|<code>sudo apt-get install samba cifs-utils</code>
Danach muss der share definiert werden mittels
Danach muss der share definiert werden mittels
Zeile 168: Zeile 242:
<code>sudo nano /etc/samba/smb.conf</code>
<code>sudo nano /etc/samba/smb.conf</code>
|-
|-
|Mailversand
| Mailversand
|sendEmail (bzw. sendemail)
|sendemail (alt: sendEmail)
|Wird benötigt, um Mails versenden zu können, bspw. für Alarm-Benachrichtigungen.
|Wird benötigt, um Mails versenden zu können, bspw. für Alarm-Benachrichtigungen.
Nach Installation des Paketes benötigt man noch eine Routine in FHEM gemäß [[E-Mail senden#Raspberry Pi]]
Nach Installation des Paketes benötigt man noch eine Routine in FHEM gemäß [[E-Mail senden#Raspberry Pi]]
|<code>sudo apt-get install sendEmail</code> bzw. <code>sudo apt-get install sendemail</code>
|<code>sudo apt-get install sendemail</code> bzw. <code>sudo apt-get install sendEmail</code>
|-
|-
|Wake-on-LAN
|Wake-on-LAN  
|etherwake
|etherwake
|Wird z.B. für das Modul WOL benötigt.
|Wird z.B. für das Modul WOL benötigt.
Zeile 180: Zeile 254:
|-
|-
|Perl Telnet
|Perl Telnet
|telnet
|telnet  
|Wurde vor Fritz!OS 6.2x z.B. für das Modul [[FRITZBOX]] benötigt, da es eine im Netzwerk vorhandene Fritzbox über deren Telnet-Port ansprach. Mittlerweile wird TR-64 und SOAP verwendet.
|Wurde vor Fritz!OS 6.2x z.B. für das Modul [[FRITZBOX]] benötigt, da es eine im Netzwerk vorhandene Fritzbox über deren Telnet-Port ansprach. Mittlerweile wird TR-64 und SOAP verwendet.
|<code>sudo apt-get install libnet-telnet-perl</code>
|<code>sudo apt-get install libnet-telnet-perl</code>
|-
|-
|Socat
|Socat  
|socat
|socat
|Kann verwendet werden, um auf anderen Rechnern im Netzwerk Linux-Befehle oder Skripts auszuführen. Auch können auf Slave-FHEM-Installationen Befehl ausgeführt werden, z.B. mit  
| Kann verwendet werden, um auf anderen Rechnern im Netzwerk Linux-Befehle oder Skripts auszuführen. Auch können auf Slave-FHEM-Installationen Befehl ausgeführt werden, z.B. mit  


<code><nowiki>system("echo 'set lampe on' | /usr/bin/socat - TCP:1.2.3.4:7072");</nowiki></code>
<code><nowiki>system("echo 'set lampe on' | /usr/bin/socat - TCP:1.2.3.4:7072");</nowiki></code>
Zeile 194: Zeile 268:
|-
|-
|Libcrypt
|Libcrypt
|Libcrypt
| Libcrypt
|Perl libcrypt, erforderlich falls Homematic-devices mit AES verwendet werden sollen.
|Perl libcrypt, erforderlich falls Homematic-devices mit AES verwendet werden sollen.
|<code>sudo apt-get install libcrypt-rijndael-perl</code>
|<code>sudo apt-get install libcrypt-rijndael-perl</code>
Zeile 202: Zeile 276:
|Perl libdatetime, erforderlich für das Weather-Modul.
|Perl libdatetime, erforderlich für das Weather-Modul.
|<code>sudo apt-get install libdatetime-format-strptime-perl</code>
|<code>sudo apt-get install libdatetime-format-strptime-perl</code>
|-
|EnOcean XML functions
|libxml simple
|Perl XML::SIMPLE, erforderlich für die XML Funktionen des ENOCEAN Moduls.
|<code>sudo apt-get install libxml-simple-perl</code>
|-
|EnOcean Cryptographic functions
|libcrypt-random-source-perl
|Perl Crypt::Random, erforderlich für die Cryptographic Funktionen des ENOCEAN Moduls.
|<code>sudo /usr/bin/perl -MCPAN -e 'install Crypt::Random'</code>
|}
|}


== Bekannte Probleme ==
==Bekannte Probleme==
=== Netzteil ===
===Netzteil===
Der RPi verwendet ein USB Netzteil als Spannungsversorgung. Gemessen kann der RPi allein bereits um die 900mA Strom fordern. Das bringt kleine Netzteile, besonders wenn noch CULs oder WLAN Sticks an USB hängen schnell an die Grenze. Die Fehler die daraus resultieren sind Abstürze, Netzwerkprobleme uvm. Daher bitte ein ausreichend starkes Netzteil mit mind. 2000mA oder einen aktiven USB-HUB für die Periperie verwenden.
Der RPi verwendet ein USB Netzteil als Spannungsversorgung. Gemessen kann der RPi allein bereits um die 900mA Strom fordern. Das bringt kleine Netzteile, besonders wenn noch CULs oder WLAN Sticks an USB hängen schnell an die Grenze. Die Fehler die daraus resultieren sind Abstürze, Netzwerkprobleme uvm. Daher bitte ein ausreichend starkes Netzteil mit mind. 2000mA oder einen aktiven USB-HUB für die Periperie verwenden.


=== Echtzeituhr ===
===Kabel (Micro-USB)===
Der RPi hat keine [http://de.wikipedia.org/wiki/Echtzeituhr Real-Time-Clock] (RTC), das heißt, dass er nach einem Neustart keine gültige (im Sinne von aktuell) Systemzeit hat, sondern ein Datum in der Vergangenheit. Dieses Problem wird sinnvollerweise mit einer [http://de.wikipedia.org/wiki/Network_Time_Protocol NTP-Konfiguration] umgangen.
Auch das verwendete Kabel kann einen (großen) Unterschied machen. Billige Kabel haben sehr dünne Kupferadern, die auf größeren Strecken (bereits ab 30cm!) einen Spannungsabfall verursachen können, der sonst nicht nachvollziehbare Probleme (Festplattenausfall, SD-Kartenausfall etc.) auslöst. Siehe beispielsweise diesen Thread mit einer Tabelle, die die Höhe des Spannungsabfalls explizit beschreibt: [https://forum.fhem.de/index.php/topic,127508.0.html Link zum Forum] 
 
===Echtzeituhr===
Der RPi hat keine [http://de.wikipedia.org/wiki/Echtzeituhr Real-Time-Clock] (RTC), das heißt, dass er nach einem Neustart keine gültige (im Sinne von aktuell) Systemzeit hat, sondern ein Datum in der Vergangenheit. Dieses Problem wird sinnvollerweise mit einer [http://de.wikipedia.org/wiki/Network_Time_Protocol NTP-Konfiguration] oder durch [[Raspberry Pi: RTC Hat|Installation einer Echtzeituhr]] umgangen.


Dabei muss Sorge getragen werden, dass der [http://wiki.debian.org/NTP ntpd] schon einen Datums-/Zeitabgleich gemacht hat, bevor FHEM gestartet wird. Geschieht der Abgleich nicht vorher, sondern erst nachdem FHEM schon läuft, stellt FHEM die Logs zwar auf das nun aktuelle Datum um (die "alten" Logs mit dem eigentlich ungültigen Datum werden natürlich behalten), aber irgendetwas scheint FHEM dabei so zu belasten, dass es eine Last von über 0.8 bis 0.9 erzeugt. Diese Last besteht auf Dauer und verschwindet erst, wenn man das Ganze sauber durchkonfiguriert und FHEM neu gestartet hat. Die hohe Systemauslastung zeigt sich auch in einem sehr trägen Laden der FHEM-Webseiten in einem beliebigen Browser. (siehe {{Link2Forum|Topic=70741}})
Dabei muss Sorge getragen werden, dass der [http://wiki.debian.org/NTP ntpd] schon einen Datums-/Zeitabgleich gemacht hat, bevor FHEM gestartet wird. Geschieht der Abgleich nicht vorher, sondern erst nachdem FHEM schon läuft, stellt FHEM die Logs zwar auf das nun aktuelle Datum um (die "alten" Logs mit dem eigentlich ungültigen Datum werden natürlich behalten), aber irgendetwas scheint FHEM dabei so zu belasten, dass es eine Last von über 0.8 bis 0.9 erzeugt. Diese Last besteht auf Dauer und verschwindet erst, wenn man das Ganze sauber durchkonfiguriert und FHEM neu gestartet hat. Die hohe Systemauslastung zeigt sich auch in einem sehr trägen Laden der FHEM-Webseiten in einem beliebigen Browser. (siehe {{Link2Forum|Topic=70741}})


=== Last durch Backup (während update) ===
===Last durch Backup (während update)===
Bei einen [[Update]] von FHEM durch den Befehl <code>update</code> kann durch Setzen des Attributs "<code>attr global backup_before_update 1</code>" automatisch vorab ein [[Backup]] durchgeführt werden. Die (ggf. großen) Log-Dateien werden dabei ebenfalls archiviert. Während der Archivierung ist FHEM blockiert. Durch die beschränkte Leistungsfähigkeit des Raspberry Pi kann das Backup zudem lange dauern. Durch ein "<code>attr global updateInBackground 1</code>" wird ein Backup im Hintergrund ausgeführt (Quelle: {{Link2Forum|Topic=15729}}).  
Bei einen [[Update]] von FHEM durch den Befehl <code>update</code> kann durch Setzen des Attributs "<code>attr global backup_before_update 1</code>" automatisch vorab ein [[Backup]] durchgeführt werden. Die (ggf. großen) Log-Dateien werden dabei ebenfalls archiviert. Während der Archivierung ist FHEM blockiert. Durch die beschränkte Leistungsfähigkeit des Raspberry Pi kann das Backup zudem lange dauern. Durch ein "<code>attr global updateInBackground 1</code>" wird ein Backup im Hintergrund ausgeführt (Quelle: {{Link2Forum|Topic=15729}}).  


Alternative Möglichkeiten:  
Alternative Möglichkeiten:  
* Backup ausschalten und manuell durchführen  
*Backup ausschalten und manuell durchführen
* Backup-Befehl anpassen und so große Dateien bzw. Verzeichnisse (log/) nicht archivieren
*Backup-Befehl anpassen und so große Dateien bzw. Verzeichnisse (log/) nicht archivieren


== Watchdog einrichten ==
==Watchdog einrichten==
Man kann den RPi alle halbe Stunde prüfen lassen, ob FHEM noch läuft und gegebenenfalls einen Neustart durchführen lassen. Eine mögliche Vorgehensweise ist in diesem {{Link2Forum|Topic=20553|LinkText=Forumsthema}} beschrieben.
Man kann den RPi regelmäßig prüfen lassen, ob FHEM noch läuft und gegebenenfalls einen Neustart durchführen lassen. Eine mögliche Vorgehensweise ist in diesem {{Link2Forum|Topic=20553|LinkText=Forumsthema}} beschrieben.
{{Hinweis|Statt des Einsatzes derartiger Methoden ist zu empfehlen, nach der eigentliche Fehlerursache zu forschen und diese abzustellen. Haben Sie dennoch einen solchen Watchdog eingerichtet, sollten Sie bei Fragen zu Ihnen seltsam erscheinenden Phänomänen im Forum darauf hinweisen, auch wenn die Symptome scheinbar nichts mit dem Watchdog zu tun haben sollten.}}


== Interne Links ==
==Interne Links ==  
* [[CUL am Raspberry Pi flashen]]
*[[CUL am Raspberry Pi flashen]]
* [[Raspberry Pi und 1-Wire]]
*[[Raspberry Pi und 1-Wire]]


== Externe Links ==
==Externe Links==  
* {{Link2Forum|Topic=33460|Message=264679}} zum Umzug von Raspberry B auf Raspberry Pi 2
*{{Link2Forum|Topic=33460|Message=264679}} zum Umzug von Raspberry B auf Raspberry Pi 2
* [http://www.raspberrypi.org/ Offizielle Webseite der Raspberry Pi Foundation]
* [http://www.raspberrypi.org/ Offizielle Webseite der Raspberry Pi Foundation]
* [http://www.raspberrypi.org/downloads Offizielle Downloads der Raspberry Pi Foundation]
*[http://www.raspberrypi.org/downloads Offizielle Downloads der Raspberry Pi Foundation]


[[Kategorie:Raspberry Pi]]
[[Kategorie:Raspberry Pi]]
[[Kategorie:HOWTOS]]
[[Kategorie:HOWTOS]]

Aktuelle Version vom 18. Juni 2024, 16:23 Uhr

Beim Raspberry Pi handelt es sich um einen postkartengroßen Einplatinen-Computer, der von der Raspberry Pi Foundation entwickelt wird. Die Hardware basiert auf dem BCM 283x SoC (System-on-Chip) von Broadcom, einem ARM-Prozessor. Zu Hardwaredetails und den verschiedenen Modellen sowie Produktentwicklungen siehe Wikipedia. Dank der kleinen Abmessungen, dem recht geringen Energieverbrauch (bis ca. 4 Watt) sowie der günstigen Anschaffungskosten (ca. 30€) ist der Raspberry Pi eine attraktive Hardware für die Heimautomatisierung mit FHEM. Er ist dank dem Linux-Betriebssystem vollständig kompatibel zur aktuell vorhandenen und von FHEM unterstützen Hardware. Das derzeit empfohlene Standard-Image zum Betrieb des Raspberry Pi ist die auf Debian basierende Raspberry Pi OS Distribution (ab 2024 Bookworm).

Installation / Setup

Betriebssystem

Vorbemerkung

Raspberry Pi OS ist direkt bei raspberrybi.org unter https://www.raspberrypi.org/downloads/raspberry-pi-os/ herunterladbar. Die folgende Anleitung gilt für die lite-Version ohne grafischen Desktop und für die Modelle für B, B+, B2, B3, B3+, 4, 5 und Zero W. (Stand April 2024)

Alle in diesem Abschnitt verwendeten Code Blöcke benötigen root Rechte. Deshalb bitte immer am Besten im Kontext sudo su ausführen. Man kann auch einzelne Befehle mit sudo davor ausführen, allerdings wird die Berechtigung bei Pipe Befehlen nicht durchgereicht.

Alle Dateien müssen im Linux-Format (nur LF als Zeilenende) erzeugt/editiert werden. Bitte einen geeigneten Editor verwenden und auf das Format beim Speichern achten.

SD-Karte vorbereiten

Die heruntergeladene Datei muss entpackt und auf die Speicherkarte geschrieben werden. Es gibt dazu verschiedene Tools je nach Betriebssystem. Für Windows ist windisk32imager zu empfehlen, Projektseite [1]. Für Mac OS gibt es Balena Etcher sowie RPi Imager.

Detaillierte Anleitungen zur Vorgehensweise finden sich für die Betriebssysteme Linux, Mac OS und Windows unter Writing an image to the SD card

Die SD Card enthält nun zwei Partitionen/Laufwerke, wobei das erste Laufwerk unter alle Betriebssystemen lesbar ist. In diesem Laufwerk (/boot) müssen jetzt noch zwei Dateien erzeugt werden:

  • eine leere Datei mit dem Namen ssh, um den (headless) Zugriff per ssh zu ermöglichen (RPi Imager hat hierfür eine Einstellung). Hinweis: Eine spätere Aktivierung von SSH ist mit sudo raspi-config (Punkt 5 "Interfacing Options", dann Punkt 2 SSH) möglich, erfordert dann aber Tastatur und Monitor am RPi.
  • eine Textdatei im Linux Format mit Namen wpa_supplicant.conf und folgendem Inhalt, wenn der Pi sofort mit WLAN starten soll (auch dies kann unter RPi Imager bei den Einstellungen vorkonfiguriert werden).
country=DE
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
        ssid="FRITZ!Box 7490"
        psk="12345678901234567890" 
}
  • SD Karte auswerfen.
  • SD Karte in Raspberry Pi stecken und booten.

Alternativ kann auch Monitor und Tastatur verwendet werden.

Anmeldung und Grundkonfiguration

Default raspberrypi-os: Host raspberrypi, User pi, Passwort raspberry

Default ubuntu: Host ubuntu, User ubuntu, Passwort ubuntu

Anmeldung entweder lokal oder mit dem Befehl: ssh <user>@<hostname>

Das Passwort sollte gegebenfalls geändert werden, dazu dem Sicherheitshinweis folgen und passwd eingeben.

Alle unten genannten Befehle müssen mit erhöhten Rechten ausgeführt werden (z. B. sudo).

Als Erstes sollte: Zeitzone, Sprache und Hostname angepasst werden. Entweder menügeführt mit sudo raspi-config oder per Script / Shell Befehle:

# Zeitzone einstellen & Zeitsynchronisierung über das Internet aktivieren
timedatectl set-timezone Europe/Berlin
timedatectl set-ntp true

# Konfigurieren lokale Sprache deutsch
sed -i -e 's/# de_DE.UTF-8 UTF-8/de_DE.UTF-8 UTF-8/' /etc/locale.gen
locale-gen
localectl set-locale LANG=de_DE.UTF-8 LANGUAGE=de_DE

# Hostname 
hostnamectl set-hostname mymachine

# System aktualisieren 
apt-get update
apt-get upgrade

#Neustart
reboot

Am Anfang sollte man Befehle nicht verketten, sondern immer auf die Ausgabe warten (es sei denn, man hat Erfahrung): also kein apt-get update && apt-get upgrade -y. Nach einer Installation ist ein aufräumen immer gut, also:

apt-get autoremove
apt-get clean
apt-get purge $(dpkg --get-selections | grep deinstall | cut -f1 | xargs)

Verwendung UART für Zusatzmodule

Einige Aufsteckmodule (z.B. HM-MOD-RPI-PCB) für den GPIO Port verwenden die serielle Schnittstelle UART. Der Zugriff auf diese serielle Schnittstelle erfordert eine modellabhängige Konfiguration. Siehe auch Raspberry Pi Dokumentation

Beim Pi 5 muss die UART0 aktiviert werden:

# serielle Schnittstelle UART0 aktivieren
# für Raspberry OS die Lage der Firmware Datei kann bei anderen OS abweichen
config="/boot/firmware/config.txt"

bash -c "cat <<EOF >> $config
dtoverlay=uart0
EOF"

Bei den Modellen 1-4 muss die Verwendung der seriellen Linux console an ttyAMA0 deaktiviert werden:

# seriell-getty Dienst für ttyAMA0 dauerhaft deaktivieren
systemctl stop serial-getty@ttyAMA0.service
systemctl disable serial-getty@ttyAMA0.service
systemctl mask serial-getty@ttyAMA0.service

Bei den Modellen bis 4 mit Bluetooth muss die UART aktiviert und umkonfiguriert werden. Hier ein bash Script, welches die Originaldatei entsprechend modifiziert:

Info green.pngIm aktuellen RaspberryPi OS Bookworm Image ist die config.txt in den Pfad /boot/firmware gewandert. Die alte Datei wurde durch einen Dummy ersetzt. Verwendet man ein debian Image findet man Infos in diesem Forenbeitrag
# serielle Schnittstelle aktivieren und mit BT Schnittstelle tauschen
config="/boot/firmware/config.txt"
# für Raspberry Pi OS vor Bookworm 
# config="/boot/config.txt"
# für Ubuntu
#config="/boot/firmware/usercfg.txt"

bash -c "cat <<EOF >> $config
enable_uart=1
dtoverlay=miniuart-bt
core_freq=250
EOF"

Wer dem nicht traut, der editiert die Datei von Hand (Linux Editor!) und fügt am Ende die drei Zeilen aus dem Script ein, die vor EOF stehen.

Die config Datei von ubuntu verwendet den Befehl include usercfg.txt. Mit Erscheinen des Pi 4 wurden die overlay Dateien umbenannt (Start mit Pi3- entfernt) die alten Namen funktionieren aber noch.

Um die Konfiguration abzuschließen ist ein Neustart erforderlich

#Neustart erforderlich 
reboot

Troubleshooting

X mark.svgDas hat sich mit RaspberryPI OS Bookworm geändert, aktuell wird darüber ab diesem Forenbeitrag diskutiert.

Kontrolle der seriellen Schnittstelle

Der Befehl ls -l /dev/ttyAMA0 muss folgende Ausgabe liefern.

 crw-rw---- 1 root dialout 204, 64 Jun  7 22:56 /dev/ttyAMA0

Sollte dies nicht der Fall sein, muss der Dienst serial-getty@ttyAMA0.service deaktiviert werden!

Kontrolle der Verlinkung von /dev/serial*

Der Befehl ls -l /dev/serial* muss folgende Ausgabe liefern.

  • Bei Modellen mit BT und richtiger Konfiguration (funktioniert nur unter Raspberry Pi OS)
 lrwxrwxrwx 1 root root 7 Jun  7 22:55 /dev/serial0 -> ttyAMA0
 lrwxrwxrwx 1 root root 5 Jun  7 22:55 /dev/serial1 -> ttyS0
  • Bei den Modellen ohne BT und richtiger Konfiguration
 lrwxrwxrwx 1 root root 7 Jun  8 18:30 /dev/serial0 -> ttyAMA0

Sollte das nicht der Fall sein, sind die Einträge in der /boot/config.txt fehlerhaft.

Sollte die serielle Schnittstelle unerwartet nicht funktionieren, kann auch andere Software daran Schuld sein, weil diese einfach versucht, alle Schnittstellen abzufragen / zu initialisieren. Für die Fehlersuche ist es also wichtig zu wissen, welche Software so installiert wurde, speziell wenn diese serielle Schnitttstellen (USB) verwendet / verwenden will. Ein Beispiel (deconz/conbee) wird in diesem Forenbeitrag behandelt.

Bei einem Raspberry 4 stört unter Umständen die Temperaturkontrolle des Lüfters, siehe auch Abschnitt bekannte Probleme: HM-MOD-RPI-PCB HomeMatic Funkmodul für Raspberry Pi.

Kontrolle Bluetooth

Die Funktion von Bluetooth kann mit dem hcitool überprüft werden. Mit hcitool dev wird das interne BT Gerät mit MAC Adresse angezeigt. Mit hcitool scan bzw. hcitool lescan kann nach sichtbaren Geräten gesucht werden.

Weitergehende Informationen zur Anpassung der Konfiguration von Raspberry Pi OS sind nachzulesen auf https://www.raspberrypi.org/documentation/configuration/.

Sollte die Bluetooth Schnittstelle nach der Installation von FHEM nicht funktionieren, hilft es den Dienst abhängig zu starten, siehe diesen Wiki Artikel Fhem.service (systemd unit file)

FHEM

Die Installation von FHEM kann nach der Raspberry Pi OS Installation sehr einfach über das Debian-Repository [2] erfolgen. Es gibt eine einfache Installationsvariante, aber auch einen manuellen Weg. Beim manuellen Weg sind dann einzeln die notwendigen Pakete benannt, sowie einige empfohlene Pakete (siehe dazu auch die Tabelle unten). Es gibt weitere Hinweise, welche Pakete sinnvoll sind (siehe beispielsweise den Foreneintrag [3]

  • Es wird unbedingt empfohlen zur Grundinstallation zunächst keine Module, USB Sticks oder ähnliche Zusatzbaugruppen an den IO Ports des Raspberry gesteckt zu haben.
  • Dieser Abschnitt beschreibt nur die Grundinstallation von FHEM auf einem Raspberry Pi mit Raspberry Pi OS!
  • Weitere Installationsschritte sind je nach verwendeten FHEM-Modulen notwendig.
    • Informationen hierzu liefert üblicherweise die commandref zum jeweiligen Modul.
    • Den weiteren Einstieg in FHEM findet man im Artikel Quick-Start

Der einfache Weg zum aktuellen System

Der folgende Befehlsblock ist die praktische Umsetzung der Beschreibung auf http://debian.fhem.de. Bitte unbedingt vor Installation rückversichern, ob es dort (insbesondere unter The easy way: use apt-get) Aktualisierungen gab.

  • Dieser Befehlsblock erfordert erhöhte Rechte, also bitte als Erstes sudo su ausführen!
  • Beim Kopieren aufpassen! Jede Zeile muss einzeln ausgeführt werden!

Dieser Befehlsblock gilt ab der Version debian buster als veraltet (es gibt Sicherheitsbedenken), muss aber bis einschließlich debian stretch eingesetzt werden.

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

Dieser Befehlsblock funktioniert erst ab debian buster (erfordert erhöhte Rechte sudo su)

# Bei manchen debian Distributionen fehlt das Paket gpg -> nachinstallieren
apt update
apt install gpg
# von debian.fhem.de installieren - siehe aktuelle Anleitung dort https://debian.fhem.de/
wget -O- https://debian.fhem.de/archive.key | gpg --dearmor > /usr/share/keyrings/debianfhemde-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/debianfhemde-archive-keyring.gpg] https://debian.fhem.de/nightly/ /" >> /etc/apt/sources.list
apt update
apt install fhem

Das offizielle Release

Man kann FHEM mit dem Debian-Paket von fhem.de installieren. Dieser Weg führt zu einem offiziellen Release, welches aber unter Umständen erheblich vom aktuellen Versions- und Diskussionsstand im Forum abweicht.

Alternativ kann man auch den manuellen Weg von https://debian.fhem.de/ wählen.

Empfohlener Patch

Da gerade auf dem Raspberry die automatische Erkennung der USB Schnittstellen zu 100% CPU Last führt (FHEM träge und reagiert nicht), wird empfohlen sofort nach der Installation noch diesen "Patch" auszuführen: FHEM starten, wenn alle USB-Geräte ausgesteckt sind. Dann attr initialUsbCheck disable 1 in der Kommandozeile in FHEMWEB eingeben, save ausführen und FHEM anschließen wieder mit eingesteckten USB-Geräten neu starten.

Deinstallation

Man kann FHEM auch wieder spurlos vom System entfernen und ganz von vorn beginnen. Allerdings sollte man sich im Klaren sein, damit ensteht kein jungfräuliches System!

sudo apt-get purge fhem
sudo apt-get autoremove

Zusatzpakete bei FHEM-Erst- und Zweitinstallation

Nachdem der RPi eingerichtet ist, können weitere Pakete installiert werden. Keines davon ist zwingend erforderlich, um das Grundgerüst von FHEM betreiben zu können. Einige Pakete erhöhen aber den Bedienungskomfort, andere sind zur Nutzung bestimmter weiterer FHEM-Module (siehe commandref) erforderlich.

Hierzu wurden in letzter Zeit mehrere Hilfsmodule entwickelt, die insbesondere bei Wiederinstallation (etwa nach Absturz) wichtig sein können. So zeigt das Modul Installer die installierten Perl-Module an, siehe dazu diesen Thread.

Wenn man eine frühere Installation auf einer anderen SD-Karte installieren möchte und nicht mehr weiß, welche Zusatzpakete man auf der alten Karte installiert hatte, hilft (diese und nachfolgende Hinweise sind aus dem Blog [4])

zcat $(ls -tr /var/log/apt/history.log.*.gz)|grep -A1 Start-Date

weiter. Hier werden frühere Eingaben der Kommandozeile wiedergegeben. Es gibt einen analogen Befehl, um die mit CPAN installierten Pakete anzuzeigen. Dazu muss man das debian Paket perl-doc installiert haben und gibt dann ein

for M in `perldoc -t perllocal|grep Module |sed -e 's/^.*" //'`; do V=`perldoc -t perllocal|awk "/$M/{y=1;next}y" |grep VERSION |head -n 1`; printf "%30s %s\n" "$M" "$V"; done |sort

Ebenso kann man herausfinden, ob und durch welches debian-Paket das Perl-Paket installiert wurde. Die zweite Version sucht nur in Paketen die -perl im Namen tragen und läuft damit wesentlich schneller:

s='Device::SerialPort' ## zu diesem Paket wird gesucht
perl -M$s -e  2>/dev/null &&echo "Modul $s ist vorhanden"
for i in $(dpkg -l |grep ^ii| awk '{ print $2 }'|tr -d "\r"|tr "\n" " ");do if dpkg -L $i|grep $s &> /dev/null;then echo $i enthält $s;fi;done
for i in $(dpkg -l |grep ^ii|grep '\-perl'| awk '{ print $2 }'|tr -d "\r"|tr "\n" " ");do if dpkg -L $i|grep $s &> /dev/null;then echo $i enthält $s;fi;done

Es gibt gute Gründe, die Installation von Perl Modulen über debian-Pakete der Installation über cpan zu bevorzugen. Dazu zählt die Updatefähigkeit und die Geschwindigkeit. Man kann im Internet nach den Paketen suchen, man kann aber auch einfach die Verfügbarkeit für das lokale System testen. Dazu braucht man das Tool apt-file, welches man zuerst installieren muss. Der letzte Befehl lädt den Infocache lokal und dauert etwas:

sudo apt-get update
sudo apt-get install apt-file
sudo apt-file update

Die folgende Suche nutzt den Umstand, dass in der im Paket enthaltenen Liste der Dateien auch die Doku in der Form "/usr/share/man/man3/IO::File.3perl.gz" enthalten ist. Der search Befehl unten akzeptiert mehrere Modulnamen durch Zeilenumbruch getrennt. In dem Beispiel sind die Modulnamen in einem String durch Leerzeichen getrennt, die Trennung wird in Zeilenumbruch geändert, jede Zeile ergänzt und über stdin an den search Befehl von apt-file übergeben. Die Option -l bewirkt das nur die gefunden Pakete gelistet werden, werden mehrere der abgefragten Modulnamen in einem Paket gefunden, wird es nur einmal gelistet:

s="IO::File Digest::MD5" ##Such-String
echo $s|tr " " "\n"|sed 's/$/./;s/^/\//'|apt-file search -l -f -

Zuletzt eine Übersicht diverser Zusatzpakete.

Beschreibung Paketname Kontext Installieren
Zeitserver ntpdate Setzt die Systemzeit bei Start des RPi. Wird für FHEM benötigt, da es sonst nicht startet. sudo apt-get install ntpdate

sudo ntpdate -u de.pool.ntp.org

Perl JSON JSON Wird von einigen Modulen benötigt, z.B. harmony, iTunes sudo apt-get install libjson-perl
Samba-Server samba Mittels Samba kann man z.B. den Ordner /opt/fhem als Share freigeben. Dieser Share kann z.B. im Windows-Explorer als Laufwerk verbunden werden, so dass die Bearbeitung von config- und Programmdateien bequem möglich ist. Hier eine hilfreiche Kurzanleitung aus der (wenn man auf einen speziellen user verzichtet) nur die Einträge für smb.conf gesetzt werden müssen. sudo apt-get install samba cifs-utils

Danach muss der share definiert werden mittels

sudo nano /etc/samba/smb.conf

Mailversand sendemail (alt: sendEmail) Wird benötigt, um Mails versenden zu können, bspw. für Alarm-Benachrichtigungen.

Nach Installation des Paketes benötigt man noch eine Routine in FHEM gemäß E-Mail senden#Raspberry Pi

sudo apt-get install sendemail bzw. sudo apt-get install sendEmail
Wake-on-LAN etherwake Wird z.B. für das Modul WOL benötigt. sudo apt-get install etherwake
Perl Telnet telnet Wurde vor Fritz!OS 6.2x z.B. für das Modul FRITZBOX benötigt, da es eine im Netzwerk vorhandene Fritzbox über deren Telnet-Port ansprach. Mittlerweile wird TR-64 und SOAP verwendet. sudo apt-get install libnet-telnet-perl
Socat socat Kann verwendet werden, um auf anderen Rechnern im Netzwerk Linux-Befehle oder Skripts auszuführen. Auch können auf Slave-FHEM-Installationen Befehl ausgeführt werden, z.B. mit

system("echo 'set lampe on' | /usr/bin/socat - TCP:1.2.3.4:7072");

1.2.3.4 muss natürlich durch die IP-Adresse des Zielrechners ersetzt werden.

sudo apt-get install socat
Libcrypt Libcrypt Perl libcrypt, erforderlich falls Homematic-devices mit AES verwendet werden sollen. sudo apt-get install libcrypt-rijndael-perl
libdatetime libdatetime Perl libdatetime, erforderlich für das Weather-Modul. sudo apt-get install libdatetime-format-strptime-perl
EnOcean XML functions libxml simple Perl XML::SIMPLE, erforderlich für die XML Funktionen des ENOCEAN Moduls. sudo apt-get install libxml-simple-perl
EnOcean Cryptographic functions libcrypt-random-source-perl Perl Crypt::Random, erforderlich für die Cryptographic Funktionen des ENOCEAN Moduls. sudo /usr/bin/perl -MCPAN -e 'install Crypt::Random'

Bekannte Probleme

Netzteil

Der RPi verwendet ein USB Netzteil als Spannungsversorgung. Gemessen kann der RPi allein bereits um die 900mA Strom fordern. Das bringt kleine Netzteile, besonders wenn noch CULs oder WLAN Sticks an USB hängen schnell an die Grenze. Die Fehler die daraus resultieren sind Abstürze, Netzwerkprobleme uvm. Daher bitte ein ausreichend starkes Netzteil mit mind. 2000mA oder einen aktiven USB-HUB für die Periperie verwenden.

Kabel (Micro-USB)

Auch das verwendete Kabel kann einen (großen) Unterschied machen. Billige Kabel haben sehr dünne Kupferadern, die auf größeren Strecken (bereits ab 30cm!) einen Spannungsabfall verursachen können, der sonst nicht nachvollziehbare Probleme (Festplattenausfall, SD-Kartenausfall etc.) auslöst. Siehe beispielsweise diesen Thread mit einer Tabelle, die die Höhe des Spannungsabfalls explizit beschreibt: Link zum Forum

Echtzeituhr

Der RPi hat keine Real-Time-Clock (RTC), das heißt, dass er nach einem Neustart keine gültige (im Sinne von aktuell) Systemzeit hat, sondern ein Datum in der Vergangenheit. Dieses Problem wird sinnvollerweise mit einer NTP-Konfiguration oder durch Installation einer Echtzeituhr umgangen.

Dabei muss Sorge getragen werden, dass der ntpd schon einen Datums-/Zeitabgleich gemacht hat, bevor FHEM gestartet wird. Geschieht der Abgleich nicht vorher, sondern erst nachdem FHEM schon läuft, stellt FHEM die Logs zwar auf das nun aktuelle Datum um (die "alten" Logs mit dem eigentlich ungültigen Datum werden natürlich behalten), aber irgendetwas scheint FHEM dabei so zu belasten, dass es eine Last von über 0.8 bis 0.9 erzeugt. Diese Last besteht auf Dauer und verschwindet erst, wenn man das Ganze sauber durchkonfiguriert und FHEM neu gestartet hat. Die hohe Systemauslastung zeigt sich auch in einem sehr trägen Laden der FHEM-Webseiten in einem beliebigen Browser. (siehe Thema)

Last durch Backup (während update)

Bei einen Update von FHEM durch den Befehl update kann durch Setzen des Attributs "attr global backup_before_update 1" automatisch vorab ein Backup durchgeführt werden. Die (ggf. großen) Log-Dateien werden dabei ebenfalls archiviert. Während der Archivierung ist FHEM blockiert. Durch die beschränkte Leistungsfähigkeit des Raspberry Pi kann das Backup zudem lange dauern. Durch ein "attr global updateInBackground 1" wird ein Backup im Hintergrund ausgeführt (Quelle: Thema).

Alternative Möglichkeiten:

  • Backup ausschalten und manuell durchführen
  • Backup-Befehl anpassen und so große Dateien bzw. Verzeichnisse (log/) nicht archivieren

Watchdog einrichten

Man kann den RPi regelmäßig prüfen lassen, ob FHEM noch läuft und gegebenenfalls einen Neustart durchführen lassen. Eine mögliche Vorgehensweise ist in diesem Forumsthema beschrieben.

Info blue.png
Statt des Einsatzes derartiger Methoden ist zu empfehlen, nach der eigentliche Fehlerursache zu forschen und diese abzustellen. Haben Sie dennoch einen solchen Watchdog eingerichtet, sollten Sie bei Fragen zu Ihnen seltsam erscheinenden Phänomänen im Forum darauf hinweisen, auch wenn die Symptome scheinbar nichts mit dem Watchdog zu tun haben sollten.


Interne Links

Externe Links