Kursinhalt
In diesem Workshop wird ein konkretes Projekt mit dem Raspberry Pi samt Programmierung über Node-RED aufgebaut und umgesetzt. Die Steuerung kann über das Internet (das heimische WLAN) im Browser und auf dem Handy erfolgen und könnte dann beispielsweise im Garten das Licht oder den Springbrunnen auf Basis von Temperatur, Luftdruck, Tageszeit und geografischer Position regeln.
Um im Rahmen des Kurses ein eigenes Projekt umzusetzen ist die Anschaffung eines Raspberry PI (Model 3B+/ Zero WH oder Model 4) und ggf. Zubehör in Form von Sensoren/Aktoren, sowie ein Steckbrett für die Umsetzung der LABOR-Verkabelung notwendig. Die Materialkosten dafür inkl. des Raspberry betragen etwa 75 – 150 € und sind nicht in den Kurs-Kosten enthalten. Falls vorhanden bringen Sie auch gerne ein Laptop mit.
Die Programmierung der Lösung erfolgt in diesem Kurs mit Node Red. Die Installation haben wir bereits in Modul-I vorgenommen. In diesem Kurs Modul gehen wir tiefer auf die einzelnen Knoten und die Eigenschaften ein. Dabei orientieren wir uns am Aufbau des Dashboards. Wir starten mit einfachen Schaltern und Texteingaben, verbinden diese mit Ein- Ausgang am Raspberry Pi, lesen den Sensor aus zeigen die Werte im Dashboard an. Mit den DEBUG
Knoten analysieren wir den Fluss der Messages.
Wir besprechen die Rolle von MQTT in der Home automation und die Bedeutung von „Maschine – to – Maschine“ Kommunikation. Installieren und Konfigurieren den MQTT-Server „mosquito“.
Für die Datenablage und Datenspeicherung setzen wir die SQL DB mysql/ MariaDB ein. Dieses Installieren und Konfigurieren wir auf dem Raspberry Pi.
Wo es hilfreich ist, gehen wir auf Betriebssystembefehle und Netzwerkgrundlagen detaillierter ein.
Kursumfang
Der Kurs umfasst 2×8 Unterrichtseinheiten zu je 45 Minuten. Normalerweise 2 Samstage von 10-17 Uhr.
Was ist NICHT Bestandteil des Kurses
Folgende Themen sind unter anderen NICHT Bestandteil des Kurses und würden den zeitlichen Rahmen sprengen.
- Unterstützung bei dem Aufbau des Steckbrettes während des Kurses
- Installation und Administration von Fritz Box oder anderer Router
- VPN-Zugänge und/ oder Zugriff von außen auf den Raspberry Pi
- Backup und Restore des Raspberry Pi, Installation und Konfiguration von Software- oder Diensten auf dem Raspberry, welche nicht für den Kurs benötigt, sind
- Konfiguration- Unterstützung auf dem Windows PC
Diverse Themen, die im Zusammenhang mit dem Raspberry Pi stehen, können in der WhatsApp Gruppe angesprochen werden. Die Gruppe kann über folgenden Link erreicht werden. Viele Themen Interessieren auch andere oder haben eine Lösung dafür.
Vorbereitungen und Voraussetzungen
Vorkenntnisse zur Installation- und Administration des Raspberry Pi sind hilfreich aber nicht zwingend notwendig. Die Teilnahme von Modul I ist empfehlenswert. Grundlegende Kenntnisse zum Netzwerk auf Basis TCP/IP sind hilfreich, insbesondere zu Diensten wie DNS, DYNDNS, DHCP, Domänen Konzept.
Grundlegende Verständnis/ Kenntnisse der Elektrotechnik, wie Spannung, Strom, Ohm’sches Gesetz, Umgang mit elektrischen- und elektronischen Bauteilen sind hilfreich, aber nicht notwendig. Wir behandeln keine Themen, die nicht auch im normalen Physikunterricht eine Rolle spielen.
In dem Kurs benötigen wir Sensoren und Aktoren, welche über die Programmierung gesteuert werden. Diese sind auf dem Steckbrett verkabelt und betriebsbereit. Der Anschluss erfolgt über den 40-poligen Steckverbinder. Details zu dem Steckbrett sind hier.
Generisches Projekt
In Modul I haben wir den Raspberry Pi und Node Red installiert. In diesem Erweiterungskurs (Raspi Modul II) werden wir mit Node Red Sensoren auslesen und auf Basis der Informationen Aktoren steuern. Wir werden weitere Dienste installieren (MQTT und SQL-Datenbank), diese mit Node Red auslesen und befüllen. Dabei werden wir exemplarisch besprechen auf welchen Wegen die Daten in welcher Weise verarbeitet werden. Als Hilfe dient der Architekturüberblick.
Projektziel
Projektziel ist ein Interaktives Dashboard aufzubauen, welches sich über einen Browser über das WLAN bedienen lässt.
Programmierumgebung und weitere Dienste
Java Script Objekte und debugging.
Node Red versendet zwischen den Knoten Nachrichten, die auf Objekten basieren. Es ist wichtig grundlegend zu verstehen, wie so ein Objekt aufgebaut ist. Dabei ist die Nutzung des DEBUG Nodes ein Mittel zum Debuggen des Nachrichten Transports. Insbesondere für „Newcomer“ ist es wichtig diese Art der Nachrichtenübertragung, das Objekt Modell und die Art des Debuggens zu verstehen.
In der Regel verwendet Node Red „payload“ als Übertragung eines Wertes zum nächsten Knoten. Wenn es jedoch um die Übertragung von komplexeren Wertestrukturen geht, ist payload als Teil des Nachrichten Objektes nicht mehr ausreichend.
In diesem Kurs Modul werden wir dieses Anhand des Temperatur/ Luftfeuchtesensors DHT11/22 genauer ansehen und verwenden. Dieser Sensor verwendet zur Übertragung der Luftfeuchtigkeit nicht msg.payload
sondern msg.humidity
. Sichtbar wird dieses erst wenn im DEBUG Node die Auswahl „komplettes Nachrichten Objekt“ ausgewählt wird.
Mosquitto MQTT Server
Ursprünglich MQ Telemetrie Transport, MQ steht dabei für MQSeries, ein IBM Produkt zur Übertragung von Nachrichten von Maschinen zu Maschinen. In diesem Kontext ist es eine wichtige Schnittstelle zur Übertragung von „Maschine to Maschine“ Informationen. Ein MQTT-Server ist ein zentrales Element einer vernetzten Umgebung und stellt eine wichtige gemeinsame Infrastruktur dar.
Als Schnittstelle zwischen den angeschlossenen Sensoren und der Steuerung auf dem Raspberry Pi nutzen wir MQTT. Diesen Dienst werden wir installieren und uns das Konzept von MQTT detaillierter ansehen. Zur Speicherung der Daten nutzen wir die SQL-Datenbank mariaDB.
Installation von mosquitto MQTT-Server
sudo apt-get update
sudo apt-get install mosquitto
Konfigurationsdatei von mosquitto anpassen
Es ist wichtig die Konfigurationsdatei des Servers anzupassen. Zwei Einstellungen sind dabei besonders wichtig. Die eine Einstellung sorgt dafür, dass der Server auch über die WLAN-Schnittstelle zu erreichen ist. Die zweite Einstellung ermöglicht eine Anmeldung auch ohne User. Bei dieser Konfiguration kommt es erst einmal nicht auf Sicherheit an, sondern darauf, dass der Service genutzt werden kann. Eine mögliche sichere Installation kann im Nachgang durchgeführt werden. Die Sicherheitseinstellungen und Berechtigungen hier zu optimieren ist nicht Bestandteil dieses Kurses.
Diese beiden Parameter müssen in der Konfigurationsdatei /etc/mosquitto/mosquitto.conf
am Ende angefügt werden.
bind_address 0.0.0.0
allow_anonymous true
Nach der Anpassung der Konfiguration muss der Dienst neu gestartet werden.
sudo systemctl restart mosquitto
Der Dienst MQTT sollte jetzt über alle Netzwerkinterfaces zu erreichen sein. Das ist wie folgt zu prüfen. Das Ergebnis muss ein Listen auf 0.0.0.0 Port 1883 sein
netstat -an | grep 1883
ESP8266 D1-mini-12-F
Um ein reales Beispiel zum Einsatz des MQTT-Servers zu haben, verwende ich gern ein ESP8266 mit einem Relais, einem AD-Wandler und einem Temperatursensor. Zu Testzwecken habe ich eine Lochrasterplatine auf der ein solches Modul aufgesteckt werden kann. Ziel ist es zu zeigen, wie dieses Modul in MQTT integriert wird und die Werte über den Broker abgefragt und auch gesteuert werden kann.
Über den MQTT-Server wird ein Kommando zum Schalten des Relais gegeben. Der Mikrocontroller erkennt anhand des Pfades die Instruktion. Das Schlüsselwort dabei ist cmnd, dieses ist der Indikator für ein Kommando. Der Schlüssel für das Relais ist Power und der Wert ist on oder off. Mit dem MQTT-Explorer lässt sich dieses auf einfache Weise simulieren und ausprobieren.
Tasmota/04/cmnd/Power
Nach dem „flashen“ des Moduls wird der MQTT-Server als Ziel konfiguriert. Danach kann die Steuerung des Moduls über den MQTT-Server erfolgen.
Datenbankserver mySQL, mariaDB
In der Datenbank werden wir exemplarisch Tabellen anlegen und diese mit Sensordaten füllen. Diese Tabellen können exportiert und auf dem PC beispielsweise in EXCEL bearbeitet werden.
Installation des SQL-Servers
sudo apt update
sudo apt upgrade
sudo apt install mariadb-server
sudo mysql_secure_installation
Konfiguration des SQL-Server
Weitere Konfiguration kann jetzt mit dem Programm Heidi durchgeführt werden. Die Anmeldung erfolgt mit dem Benutzer root und dem gewählten Kennwort.
Heidi SQL
Der SQL-Server lässt in der Standard Konfiguration keine Zugriffe von extern zu. Der Service ist an localhost, 127.0.0.1 gebunden. Um mit Heidi-SQL auf die Datenbank zugreifen zu können bedarf es einer Konfiguration mit einem SSH-Tunnel. Die Konfiguration erfolgt in 2 Reitern der Konfiguration. Durch diese Einstellungen kommen die Zugriffe auf die MySQL Datenbank für den Server vom gleichen Host.
Konfiguration unter Einstellungen
Verbindungstyp: MariaDB or MySQL (SSH Tunnel)
Hostname / IP: localhost
Benutzername: root
Passwort: <Das Kennwort, welches bei mysql_secure_installation vergeben wurde, also nicht des Betriebssystem Benutzers>
Konfiguration unter SSH Tunnel
plink.exe Pfad: C:\Program Files\PuTTY\plink.exe
SSH Host + Port: IP-Adresse des Raspberry Pi´s
Benutzername: pi
Passwort: Passwort des Benutzers pi
Wenn der Standard Benutzer nicht der Benutzer pi ist, so muss hier der Standardbenutzer im Feld Benutzername verwendet werden. Natürlich geht auch der Betriebssystembenutzer root.
Screenshots
Anbindung an die DB in Node Red
Um Daten in die Tabelle einer Datenbank zu schreiben müssen die Daten aufbereitet werden. Der MySQL Knoten stellt nur die Verbindung zur Datenbank her. Die Daten werden über ein SQL insert aufbereitet und an den MySQL Knoten übergeben. Der Code in dem Function Node wurde im Kurs besprochen und ist ein Beispiel zum schreiben in die Tabelle.
Achtung: In diesem Beispiel ist die Struktur der Tabelle etwas anders als im Kurs, hier ist bereits die SensorID und ein Schluessel eingebaut.
const SENSORID = "0000000001";
var WERT = 0.0;
var SCHLUESSEL = "DATE"
const heute = new Date();
var Stunde = heute.getHours();
var Minute = heute.getMinutes();
var Sekunde = heute.getSeconds();
var Zeit = Stunde + ':' + Minute + ':' + Sekunde;
WERT = msg.payload;
msg.payload = {};
msg.payload.DATUM = heute;
msg.payload.ZEIT = Zeit;
msg.payload.SENSORID = SENSORID;
msg.payload.SCHLUESSEL = SCHLUESSEL;
msg.payload.WERT = WERT;
msg.topic = "INSERT INTO sensordata (`DATUM`, `Zeit`, `SENSORID`, `SCHLUESSEL`, `WERT`) VALUE (:DATUM, :ZEIT, :SENSORID, :SCHLUESSEL, :WERT)";
return msg;
Zugriff auf das NAS/ Windows Share
Immer wieder kommt auch das Thema in dem Kurs auf, wie erfolgt der Datenaustausch zwischen Raspberry Pi und einem NAS oder Windows share? Der Raspberry Pi kann natürlich auch auf diese Shares zugreifen. Dazu sind nur wenige Schritte notwendig und es gibt wie immer viele Wege zum Ziel. Ich beschreibe hier einmal, wie ich es mache.
Im Homeverzeichnis des Benutzers Pi erstelle ich ein Shell script, dieses Script ruft den mount Befehl auf und montiert mein share an mein Homeverzeichnis. Einmal vorher ist der mount point im Homeverzeichnis anzulegen. Bei Bedarf rufe ich dieses Script auf und habe dann in dem Homeverzeichnis des Benutzers pi mein Windows Share im Zugriff.
Mit dem folgenden Befehlen wird es gemacht. Bitte einfach auf copy klicken und dann auf der Konsole (im Putty Terminal Fenster) mit der rechten Maustaste einfügen, danach Enter drücken.
cd
mkdir WindowsShare
echo '#!/bin/bash' > WindowsShare.sh
echo '# Bitte user durch den echten Benutzer und 12345 durch das echte Passwort, 192.168.1.45 und nas-ordner durch die Daten vom NAS ersetzen' >> WindowsShare.sh
echo 'sudo mount -t cifs -o rw,username=user,password=12345,file_mode=0777,dir_mode=0777 //192.168.1.45/nas-ordner /home/pi/WindowsShare' >> WindowsShare.sh
echo '# End of Script' >> WindowsShare.sh
chmod +x WindowsShare.sh
Final müssen in diesem Script die Zugangsdaten und die Verbindung zum NAS/ zum Share angepasst werden.
nano /home/pi/WindowsShare.sh
Jetzt kann das Script aufgerufen werden und wenn alle Daten stimmen, hat der Raspberry Pi jetzt Zugriff auf das Windows Share über das montierte Verzeichnis Windows Share.
Werkzeuge
Folgende Werkzeuge werden für den Kurs benötigt.
Position | Werkzeug | Link, Projektseite | Bemerkung |
---|---|---|---|
1 | Putty | Download PuTTY – a free SSH and telnet client for Windows | SSH und Telnet Client |
2 | VNC | VNC Viewer herunterladen | VNC Connect (realvnc.com) | Übertragen des grafischen Bildschirms |
3 | Heidi SQL | HeidiSQL – MariaDB, MySQL, MSSQL, PostgreSQL and SQLite made easy | Datenbank Administrations Werkzeug |
4 | MQTT-Explorer | MQTT Explorer | An all-round MQTT client that provides a structured topic overview (mqtt-explorer.com) | MQTT Server Administration und Debugging. |
5 | WinSCP | Datenaustausch über das SSH-Protokoll | SCP-Client mit File Manager Oberfläche zum Dateitransfer auf Basis SSH Protokoll |
ab hier optional – aber hilfreich | |||
6 | Chocolatey | Paketmanager für Windows | Tool zur Verwaltung von Software, unter anderen können hierüber auf einfache Art die o.g. Werkzeuge installiert und aktualisiert werden. |
7 | mRemotenG | MultiTabbed connections Manager for Windows | Sehr hilfreich bei mehreren Verbindungen. VNC geht nicht in der Version.mRemoteNG is a fork of mRemote: an open source, tabbed, multi-protocol, remote connections manager for Windows. mRemoteNG adds bug fixes and new features to mRemote and allows you to view all of your remote connections in a simple yet powerful tabbed interface |
8 | Tasmotizer | Programm zum Aufspielen der Firmware Tasmota auf einen ESP8266 | GitHub |
Kursdokumentation und screenshots