Raspberry Pi: Unterschied zwischen den Versionen

Aus FHEMWiki
Zeile 74: Zeile 74:
Der Befehl <code>ls -l /dev/ttyAMA0</code> muss folgende Ausgabe liefern.
Der Befehl <code>ls -l /dev/ttyAMA0</code> muss folgende Ausgabe liefern.
   crw-rw---- 1 root dialout 204, 64 Jun  7 22:56 /dev/ttyAMA0
   crw-rw---- 1 root dialout 204, 64 Jun  7 22:56 /dev/ttyAMA0
Sollte dies nicht der Fall sein, läuft mit Sicherheit der Dienst serial-getty@ttyAMA0.service noch!
Sollte dies nicht der Fall sein, muss der Dienst serial-getty@ttyAMA0.service deaktiviert werden!


Kontrolle der Verlinkung von /dev/serial*
Kontrolle der Verlinkung von /dev/serial*


Das BT Modul ist mit serial1 verbunden. Der Befehl <code>ls -l /dev/serial*</code> muss folgende Ausgabe liefern.
* Für die Verwendung der UART am GPIO muss diese Schnittstelle so verbunden sein /dev/serial0 -> ttyAMA0 
* Mit dtoverlay=pi3-miniuart-bt  
* Wenn vorhanden, muss das BT Modul (miniUART) mit serial1 verbunden sein /dev/serial1 -> ttyS0
 
Der Befehl <code>ls -l /dev/serial*</code> muss folgende Ausgabe liefern.
* Mit dtoverlay=pi3-miniuart-bt '''(richtig)'''
   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 85: Zeile 88:
   lrwxrwxrwx 1 root root 5 Jan  1 19:02 /dev/serial0 -> ttyS0
   lrwxrwxrwx 1 root root 5 Jan  1 19:02 /dev/serial0 -> ttyS0
   lrwxrwxrwx 1 root root 7 Jan  1 19:02 /dev/serial1 -> ttyAMA0
   lrwxrwxrwx 1 root root 7 Jan  1 19:02 /dev/serial1 -> ttyAMA0
* Im Originalzustand ohne jeden Zusatzeintrag in der /boot/config.txt
* Im Originalzustand ohne jeden Zusatzeintrag in der /boot/config.txt bei den Modellen ohne BT '''(richtig)'''
  lrwxrwxrwx 1 root root 7 Jun  8 18:30 /dev/serial0 -> ttyAMA0
* Im Originalzustand ohne jeden Zusatzeintrag in der /boot/config.txt bei den Modellen mit BT
   lrwxrwxrwx 1 root root 7 Jun  7 23:42 /dev/serial1 -> ttyAMA0
   lrwxrwxrwx 1 root root 7 Jun  7 23:42 /dev/serial1 -> ttyAMA0



Version vom 8. Juni 2018, 19:54 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 Raspbian Distribution.

Installation / Setup

Betriebssystem

Vorbemerkung

Raspbian ist direkt bei raspberrybi.org unter 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)

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! Unbedingt einen geeigneten Editor verwenden und auf das Format beim speichern achten!

SD Card 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/].

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, das erste Laufwerk ist unter alle Betriebssystemen lesbar. 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 Textdatei im Linux Format mit Namen wpa_supplicant.conf und folgendem Inhalt wenn der Pi sofort mit wlan starten soll.
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

Mit einem Terminal Programm verbindet man sich per ssh (z.B. Windows -> Putty) auf den Host raspberrypi und meldet sich mit User pi und Passwort raspberry an.

  • Unbedingt Passwort ändern! -> Dem Sicherheitshinweis folgen und passwd eingeben.

Jetzt muss noch Zeitzone, Sprache und Hostname angepasst werden. Entweder Menügeführt mit sudo raspi-config oder per Script / Shell Befehle:

# Zeitzone
timedatectl set-timezone Europe/Berlin

# 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

#Neustart
reboot

Verwendung von Zusatzmodulen UART

X mark.svgNoch nicht komplett, noch in Arbeit.

Bei allen Modellen muss die Verwendung der seriellen Linux console an ttyAMA0 deaktiviert werden:

 systemctl stop serial-getty@ttyAMA0.service
 systemctl disable serial-getty@ttyAMA0.service
 systemctl mask serial-getty@ttyAMA0.service

Bei den Modellen mit Bluetooth muss die UART umkonfiguriert werden:

# serielle Schnittstelle aktivieren und mit BT Schnittstelle tauschen
echo "enable_uart=1" >> /boot/config.txt 
echo "dtoverlay=pi3-miniuart-bt" >> /boot/config.txt 

#Neustart erforderlich 
reboot

Troubleshooting

Kontrolle der 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*

  • Für die Verwendung der UART am GPIO muss diese Schnittstelle so verbunden sein /dev/serial0 -> ttyAMA0
  • Wenn vorhanden, muss das BT Modul (miniUART) mit serial1 verbunden sein /dev/serial1 -> ttyS0

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

  • Mit dtoverlay=pi3-miniuart-bt (richtig)
 lrwxrwxrwx 1 root root 7 Jun  7 22:55 /dev/serial0 -> ttyAMA0
 lrwxrwxrwx 1 root root 5 Jun  7 22:55 /dev/serial1 -> ttyS0
  • Ohne dtoverlay=pi3-miniuart-bt aber mit enable_uart=1
 lrwxrwxrwx 1 root root 5 Jan  1 19:02 /dev/serial0 -> ttyS0
 lrwxrwxrwx 1 root root 7 Jan  1 19:02 /dev/serial1 -> ttyAMA0
  • Im Originalzustand ohne jeden Zusatzeintrag in der /boot/config.txt bei den Modellen ohne BT (richtig)
 lrwxrwxrwx 1 root root 7 Jun  8 18:30 /dev/serial0 -> ttyAMA0
  • Im Originalzustand ohne jeden Zusatzeintrag in der /boot/config.txt bei den Modellen mit BT
 lrwxrwxrwx 1 root root 7 Jun  7 23:42 /dev/serial1 -> ttyAMA0

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

FHEM

Die Installation von FHEM kann nach der Raspbian-Installation über das Debian-Repository http://debian.fhem.de (hohe Integration), das Debian-Paket auf http://fhem.de oder auch automatisiert per Skript erfolgen.

Debian-Repository auf debian.fhem.de

X mark.svgFHEM-Updates sind nur über den update-Befehl durchzuführen. Die Debian-Paketverwaltung dient aussschließlich zur FHEM-Erstinstallation.

Bei der Installation von FHEM aus dem Debian-Repository http://debian.fhem.de werden neben FHEM selbst alle für den Betrieb von FHEM und vieler Module unabdingbaren Perl-Pakete automatisch mit installiert und eine Reihe weiterer Pakete für die Installation vorgeschlagen. Details zur Vorgehensweise finden sich immer aktuell direkt auf http://debian.fhem.de.

Debian-Paket auf fhem.de

Alternativ kann FHEM mit dem Debian-Paket von fhem.de installiert werden. Die für FHEM grundlegenden Perl-Pakete libdevice-serialport-perl und libio-socket-ssl-perl sollten immer direkt mit installiert werden. Weitere Perl-Pakete sind je nach verwendeten FHEM-Modulen notwendig und manuell nachzuinstallieren. Informationen hierzu liefert üblicherweise die commandref zum jeweiligen Modul.

sudo apt-get install libdevice-serialport-perl
sudo apt-get install libio-socket-ssl-perl
# fhem-X.Y.deb bitte mit der aktuellsten, stabilen Version ersetzen
wget  http://fhem.de/fhem-X.Y.deb
sudo dpkg -i fhem-X.Y.deb

Möglicherweise ist es noch nötig, fehlende Abhängigkeiten aufzulösen. Das kann mit folgendem Befehl erledigt werden:

sudo apt-get install -f

Skript-basiert

Die Schritte auf debian.fhem.de sind leicht in ein Script zu packen. Damit ist die Installation auf einem nackten Raspbian in wenigen Minuten erledigt. Allerdings entwickeln sich alle Systeme ständig weiter, es ist schwierig ein dauerhaft aktuelles Script hier darzustellen. Die soll deshalb nur eine Anregung sein. Bitte alle Originalquellen prüfen.

# 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/ /" >> /etc/apt/sources.list
apt-get update
apt-get -y install fhem

Nützliche 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 commandref) erforderlich. Hier eine Übersicht.

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 (bzw. 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

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.

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 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 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 Forumsthema beschrieben.

Interne Links

Externe Links