• .
  • Willkommen im Forum!
  • Alles beim Alten...
  • Du hast kaum etwas verpasst ;-)
  • Jetzt noch sicherer mit HTTPS
Hallo, Gast! Anmelden Registrieren


Einstieg in MQTT und NodeRED
#1
Hallo,
 
ich würde euch gerne meine Ergebnisse der letzten zwei Tage präsentieren. Vielleicht ist das ja für den ein oder anderen interessant.
 
Grundlage meines eigentlichen Projektes ist es, mehrere ESP8266 derart zu vernetzen, dass alle untereinander reden können. Die ESP's haben sensorische oder aktorische Aufgaben, ich nenne sie im folgenden übergreifend "Nodes". 
Schön wäre es natürlich, wenn es für die Vernetzung der Nodes ein standardisiertes Protokoll gäbe. Am besten schon im ESP implementiert, in der Community angekommen und gespickt von Beispielen. Tipp von Christian: MQTT. Bingo! Kurze Einleitung in MQTT, die genaue Spezifikation gibt es bei Google:
 
MQTT ist ein Kommunikationsprotkoll für ressourcensparende Machine2Machine-Kommunikation. Jeder Node muss sich zuerst bei einem „Broker“ anmelden, welcher sich um die Verteilung der Nachrichten kümmert. Der Broker kann beispielsweise ein Raspberry Pi mit dem Softwarepaket „Mosquitto“ sein. Adafruit bietet ebenfalls einen Online-Broker-Service an.
Eine Nachricht hat ein Topic und enthält den eigentlichen Payload. Nodes können Topics abonnieren oder eine Nachricht an ein Topic senden. Findet letzteres statt leitet der Broker die Nachricht automatisch an alle Nodes, die das Thema abonniert haben, weiter.

MQTT wurde bereits für den ESP8266 in der Bibliothek „PubSubClient“ implementiert. Für einen Test habe ich den beiliegenden Beispielsketch „esp8266_mqtt“ auf einen Node geladen. Als Broker findet ein Orange Pi(Armbian) mit der Software Mosquitto Verwendung.
Der ESP verbindet sich, insofern beide Geräte im selben Netzwerk sind und man im Sketch die richtige IP des Brokers(PI) angibt, sofort und sendet fröhlich „Hello World“. Abboniert man mit einem weiteren Node das entsprechende Topic, werden die Nachrichten vom Broker einwandfrei weitergeleitet. Läuft!
 
Richtig Interessant wurde/wird das Ganze mit NodeRED. Kurz zu NodeRED:
 
NodeRED ist eine graphische Programmierumgebung, in der man (unter anderem) IoT-Geräte miteinander vernetzen kann. (Abbildung 1) 
NodeRED basiert auf Node.js, welches ebenfalls auf dem Raspberry läuft. Im Gegensatz zu vielen anderen graphischen Programmierungen halte ich NodeRED für durchaus ernstzunehmend. Die Programmierumgebung kann mittels jedem Endgerät im Netzwerk des OrangePI durch Aufruf von http://raspberryip:1880/ geöffnet werden. Direkter Zugang zum PI ist also zum "Programmieren" nicht nötig. Besonders interessant finde ich, dass man in der Verbindung zwischen mehreren Nodes Funktionsblöcke einfügen kann, in denen man Daten mittels „echtem“ Java-Script verarbeiten kann. 
Ergo: viele Funktionen, super Intuitiv, mit der Power von JavaScript. Meiner Ansicht nach gut für einfache Automatisierungsaufgaben (Wenn Schalter 1 dann Lampe 2...) bestens geeignet.
 
Zu NodeRED kann ein Zusatzpaket „Dashboard“ installiert werden. (Abbildung 2)
Das Dashboard rundet die ganze Sache durch eine graphische Bedienoberfläche ab. Innerhalb der Programmierumgebung kann man Schalter, Ziffern- und Textanzeigen, Zeigerinstrumente... einfügen, welche automatisch auf dem Dashboard erscheinen. Die Anordnung kann beliebig erfolgen. (Abbildung 3)Das Dashboard kann dann auf jedem Endgerät durch http://raspberryip:1880/ui/ aufgerufen werden. Natürlich alles responsive, d.H. auf jedem Endgerät ordentlich dargestellt.
 
Ich habe zum Testen mal unsere Gartenbeleuchtung neu „programmiert“. Einen Schaltschrank mit eingebautem Node und Relais gibt es schon.(Abbildung 5) Ich finde für zwei Nachmittage „Arbeit“ inkl. Einrichtung vom Orange Pi kann sich das sehen lassen. Soll kein Eigenlob sein, sondern verdeutlichen, wie fix man etwas mit den oben genannten Tools erreichen kann.
Zur Programmierung: 
Jeder "Schalter" im Dashboard ist einem Topic zugeordnet und sendet seinen aktuellen Schaltzustand numerisch, also 0=Aus und 1=Ein, in dieses Topic.
Die Topics sind für jedes Relais fortlaufend nummeriert, bspw:
Steckdose 1 -> /lights/1
Steckdose 2 -> /lights/2
(Abbildung 4)

Wenn ich Schalter 1 im UI betätige, sendet NodeRED an den Broker bzw. Mosquitto vereinfacht:
Schalter 1 -> Nachricht(Topic:"/lights/1"  Payload:"1" bzw "0")

Der ESP abonniert mit dem Befehl "/lights/#" alle Untertopics von "lights". 
Somit bekommt er jede Nachricht, die mit "/lights/" zutun hat, zugestellt. Über das letzte Zeichen im Topic filtere ich raus, um welche Steckdose es sich handelt, im Payload steht der Soll-Schaltzustand. Quellcode ist angehängt.
Bingo-läuft.

Man muss natürlich anmerken: Für Aufgaben wie diese hat man nun natürlich zwei Geräte, also den Orange Pi und den ESP, ständig im Netz. Effizient ist das natürlich nicht. Man könnte die Aufgabe auch lösen, in dem man den ESP als Webserver agieren lässt, der die Bedienoberfläche hostet -> Beispiel: https://stromrichter.org/showthread.php?tid=4147. Ich denke die wahren Stärken liegen dann wirklich in der Vernetzung mehrerer dezentraler Nodes.


Angehängte Dateien Thumbnail(s)
                   

.zip   Gartenbeleuchtung_MQTT.ino.zip (Größe: 2,08 KB / Downloads: 421)
 
Reply
#2
Gefällt mir, gute Arbeit.
 
Reply