Raspberry Pi Einrichtung ohne Image - esdkrwl/IoT4School GitHub Wiki

Raspberry Pi Einrichtung ohne Image (Für erfahrene Anwendende)

Diese Anleitung kann als Dokumentation der Schritte verstanden werden, die getätigt werden müssen, um den Raspberry Pi für die IoT4School-Umgebung vorzubereiten.

Da sich die Anleitung an erfahrenere Anwendende richtet, werden die allgemeinen Schritte zur Ersteinrichtung eines Raspberry Pis nicht genau beschrieben.
Es wird davon ausgegangen, dass Kenntnisse vorhanden sind, um einen Raspberry per Kommandozeile zu konfigurieren, da die unten aufgeführten Befehle für die Eingabe in der Kommandozeile gedacht sind.

Anwendenden, die sich nicht sicher im Umgang mit dem Raspberry Pi fühlen, steht hier ein vorkonfiguriertes Image zur Verfügung.

Die Terminalbefehle wurden alle unter dem "pi"-Account eingegeben.
Lediglich für den einmaligen Transfer von Daten über WinSCP (bzw. filezilla) wurde einfachheitshalber der "root"-Account benutzt.

Installieren Sie die neueste Raspberry Pi OS Version von der offiziellen Raspberry Pi Website.
(Desktop Version mit empfohlener Software, erfahrene Nutzer können auch die minimale Variante ohne GUI installieren)

Die genauen Schritte zum Aufsetzen eines Raspberry Pis mit dem Raspberry Pi OS sind in der offiziellen Dokumentation zu finden und werden in dieser Anleitung nicht näher erläutert.

Beim Erststart öffnet sich der Einrichtungsassistent. Verbinden Sie sich hier mit einem WLAN-Netzwerk mit Internetzugriff und aktualisieren Sie ihren Raspberry Pi.
(Alternativ: Verbindung per LAN zu einem internetfähigen Router und manuell den Befehl sudo apt-get update && sudo apt-get upgrade ausführen)

Aktivieren Sie den "root" Account sowie den Zugriff per SSH (auch für den "root" Account).
Dieser wird genutzt, um das Transferieren der Daten an späterer Stelle zu vereinfachen.
Die einzelnen Schritte, die dafür nötig sind, können unter anderem hier nachgelesen werden: Root und SSH aktivieren

Stellen Sie mithilfe des Befehls sudo nano /etc/dhcpcd.conf eine statische IP für den Raspberry Pi ein, damit dieser unter der selben Adresse erreichbar bleibt.
Hierfür müssen Sie in der Datei /etc/dhcpcd.conf Folgendes eintragen:

\# Example static IP configuration:
interface eth0
static ip_address=192.168.178.10/24
#static ip6_address=192.168.178.10/24
static routers=192.168.178.1
static domain_name_servers=192.168.178.1

\# Example static IP configuration WLAN:
interface wlan0
static ip_address=192.168.178.10/24
static routers=192.168.178.1
static domain_name_servers=192.168.178.1

In dieser Einstellung kriegt das Gerät die feste IP-Adresse 192.168.178.10.
Vorausgesetzt wird, dass der Router die IP-Adresse 192.168.178.1 besitzt und für die Namensauflösung zuständig ist.
Je nach persönlicher Netzkonfiguration können hier aber auch andere Werte hinterlegt werden.

(Optional) Passen Sie Ihren Hostnamen unter /etc/hostname an:
sudo nano /etc/hostname

Führen Sie einen Neustart des Raspberry Pis durch:
sudo reboot

Installieren Sie nginx und sqlite3:
sudo apt install nginx sqlite3

Installieren Sie php und wichtige php-Komponenten (getestet mit php7.3, welches Stand 13.10.2021 die aktuelle Version ist):
sudo apt install php php-fpm php-pear php-common php-mcrypt php-cli php-gd php-mbstring php-sqlite3

Installation des mosquitto Brokers/Clients:

sudo apt install mosquitto mosquitto-clients
sudo systemctl enable mosquitto

Installieren Sie Docker mit folgendem Befehl (Dies kann eine Weile dauern):
sudo curl -sSL https://get.docker.com | sh

Im Anschluss muss der User pi noch zur Docker-Gruppe hinzugefügt werden:
sudo usermod -aG docker pi

Es folgt die Installation von Docker-Compose. Hierfür muss zunächst python3 und pip installiert sein:

sudo apt install libffi-dev libssl-dev
sudo apt install python3-dev python3 python3-pip

Nun kann Docker-Compose über pip installiert werden:
sudo pip3 install docker-compose

Zusätzlich kann gleich noch paho-mqtt installiert werden, da dies vom "db-status-updater.service" benötigt wird:
sudo pip3 install paho-mqtt

Nginx und Docker dauerhaft aktivieren:

sudo systemctl enable docker
sudo systemctl enable nginx

Jetzt kann der Inhalt des Ordners Raspberry (bis auf die README.md) aus dem Github-Repository an die passenden Stellen kopiert werden.
Wichtig ist, dass dies mit dem "root"-Account geschieht, damit keine Berechtigungsprobleme beim Kopieren auftreten.
Da SSH (auch für den "root"- Account) aktiviert wurde, bietet sich das Übertragen der Daten mit WinSCP an. (Alternativ für Linux: FileZilla)
Dort können per "Drag & Drop" alle Dateien auf einmal in das root-Verzeichnis des Raspberry Pis kopiert werden:
winscp_drag_drop

Durch diesen Vorgang wurden diverse Konfigurationsdateien beziehungsweise Zugangsdaten kopiert.
Im Wiki befindet sich eine Auflistung der Zugangsdaten.
Dort kann auch nachvollzogen werden, wie diese bei Bedarf verändert werden können.

(Optional): SSH für den "root"-Account kann an im Anschluss deaktiviert werden, sollte es Sicherheitsbedenken geben.

Als nächstes müssen noch ein paar Zugriffsrechte angepasst werden:

sudo chown -R pi:pi /home/pi
sudo usermod -a -G www-data pi
sudo chown -R -f www-data:www-data /var/www/
sudo chmod 774 -R /var/www/

Einrichtung des "db-status-updater.service":

sudo systemctl daemon-reload
sudo systemctl enable db-status-updater.service
sudo systemctl start db-status-updater.service  

Wechsel in das Verzeichnis "/home/pi" für die Einrichtung der Node Red Docker-Container:
cd /home/pi

[ACHTUNG] Mit folgendem Befehl werden 5 Node-RED Docker Container auf den Ports 1884-1888 eingerichtet:
sudo docker-compose -f docker-compose.yaml up -d --remove-orphans --build

Sind diese Ports bereits anderweitig in Verwendung, sollten vorher andere Ports in der Datei "docker-compose.yaml" definiert werden. Sollten Änderungen an den Node-RED Ports vorgenommen werden, muss für die Funktion setHref() in der Datei /var/www/html/IoT4School/node-red.html die Portbelegung angepasst werden:

(Die Zahlen von 1883 bis 1888 müssen durch die neu definierten Ports ersetzt werden)

Außerdem sind vorkonfigurierte Zugangsdaten hinterlegt, die hier nachgelesen werden können.
Sollte Änderungsbedarf bestehen, müssen die Zugänge in der settings.js pro Gruppe angepasst werden.
(Zum Beispiel /home/pi/node-red/group1/settings.js für die erste Node-RED Instanz. Weitere Informationen: Zugangsdaten)

Mosquitto verwendet Port 1883 für die MQTT Kommunikation sowie Port 9001 für die Kommunikation über einen Websocket.
Werden diese bereits anderweitig verwendet, sollten nun die Ports in der Datei /etc/mosquitto/mosquitto.conf angepasst werden.

Bei Veränderung des Standard-Ports 1883 muss die Konfigurations-Datei /home/pi/cfg.ini für den Datenbankservice entsprechend angepasst werden.
Damit die Änderungen wirksam werden, ist ein Neustart des Datenbankservices mit folgendem Befehl notwendig:
sudo systemctl restart db-status-updater.service

Wird der Websocket-Port angepasst, muss folgende Zeile in /var/www/html/IoT4School/js/mqtt_blink.js ebenfalls angepasst werden:
var MQTT_CLIENT_PORT = 9001; (9001 muss durch den neu definierten Port ersetzt werden)

Für die Integration von BIPES sowie der IoT4School-Blöcke folgenden Befehl im Verzeichnis /home/pi ausgeführen:

cd /home/pi
python3 patch_bipes.py

Nach einem Neustart kann die IoT4School-Website kann mittels (HOSTNAME/) bzw. der IP-Adresse in einem beliebigen, HTML5-kompatiblem Browser erreicht werden: sudo reboot

Navigieren Sie über den Reiter Node-RED zu einer beliebigen Node-RED Instanz und melden sich dort mit den entsprechenden Zugangsdaten an.
(Wenn Sie die settings.js nicht angepasst haben, finden Sie die Zugangsdaten hier.)
iot4school_website

Klicken sie auf das "Hamburger"-Menü und wählen Sie den Punkt "Palette verwalten" aus:

Unter Palette -> Installation suchen Sie nach "iot4school" und klicken Sie für den Eintrag "node-red-contrib-iot4school" auf den Button "Installieren":
palette_installation

Damit die Änderungen für alle Node-RED Instanzen gültig werden, müssen diese mit folgendem Befehl neu gestartet werden:
docker restart $(docker ps -a -q)
Der Neustart muss auch nach jedem Update der iot4school Nodes für alle Instanzen durchgeführt werden.