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.

Zugang zur Raspberry Pi Gruppe

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.

Architekturmodell

Projektziel

Projektziel ist ein Interaktives Dashboard aufzubauen, welches sich über einen Browser über das WLAN bedienen lässt.

Beispiel für ein Dashboard um Strom- Gaszähler Online darzustellen
Beispiel um ein Relais zuschalten

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.

Option zum anzeigen des kompletten Objektes im Debug Node

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.

Hier ein Beispiel wo der Sensorname und Standort nicht in msg.payload übertragen 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 
D1-mini auf einer Testplatine
Tasmotizer

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.

Tabelle mit Sensordaten

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

Einstellungen
SSH Tunnel

Anbindung an die DB in Node Red

SQL insert

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.

Datenbank Struktur für das Beispiel unten
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.

PositionWerkzeugLink, ProjektseiteBemerkung
1PuttyDownload PuTTY – a free SSH and telnet client for WindowsSSH und Telnet Client
2VNCVNC Viewer herunterladen | VNC Connect (realvnc.com)Übertragen des grafischen Bildschirms
3Heidi SQLHeidiSQL – MariaDB, MySQL, MSSQL, PostgreSQL and SQLite made easyDatenbank Administrations Werkzeug
4MQTT-ExplorerMQTT Explorer | An all-round MQTT client that provides a structured topic overview (mqtt-explorer.com)MQTT Server Administration und Debugging.
5WinSCPDatenaustausch über das SSH-Protokoll
SCP-Client mit File Manager Oberfläche zum Dateitransfer auf Basis SSH Protokoll
ab hier optional – aber hilfreich
6ChocolateyPaketmanager für WindowsTool zur Verwaltung von Software, unter anderen können hierüber auf einfache Art die o.g. Werkzeuge installiert und aktualisiert werden.
7mRemotenGMultiTabbed connections Manager for WindowsSehr 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
8TasmotizerProgramm zum Aufspielen der Firmware Tasmota auf einen ESP8266GitHub

Kursdokumentation und screenshots