MQTT-Kommunikation mit Node-RED

Zuletzt aktualisiert:

Einführung

MQTT ist ein schlankes Publish/Subscribe-Nachrichtenprotokoll, das häufig in IoT-Anwendungen eingesetzt wird. Statt direkt miteinander zu kommunizieren, senden Geräte Nachrichten unter einem Topic an einen MQTT-Broker. Andere Clients können dieses Topic abonnieren, um die Nachrichten zu empfangen.

Node-RED bietet integrierte MQTT-Knoten, mit denen sich IoT-Nachrichten empfangen und verarbeiten lassen, ohne eine vollständige MQTT-Anwendung zu schreiben. In diesem Tutorial konfigurieren wir Node-RED auf einem reComputer RK Series-Gerät, abonnieren ein Topic auf dem öffentlichen MQTT-Broker von HiveMQ und veröffentlichen anschließend eine JSON-Nachricht aus dem RK-Terminal, um die Verbindung zu prüfen.

Sicherheit: Dieses Beispiel verwendet den gemeinsam genutzten öffentlichen HiveMQ-Broker über TCP-Port 1883 ohne TLS oder Authentifizierung. Verwenden Sie nur Testdaten. Übertragen Sie keine Passwörter, personenbezogenen Daten oder Produktions- und Industriedaten. Nutzen Sie im Produktivbetrieb einen Broker mit Authentifizierung und TLS.

Voraussetzungen

ElementAnforderung
HardwarereComputer RK Series-Gerät
BetriebssystemDebian-basiertes ARM64-Linux
Node-REDInstalliert und aktiv; schließen Sie zuerst Erste Schritte mit Node-RED ab
NetzwerkInternetzugang zum öffentlichen MQTT-Broker von HiveMQ
ZugriffEin Webbrowser für Node-RED und ein Terminal oder eine SSH-Verbindung zum RK-Gerät

Funktionsweise

text
reComputer RK Terminal
(mosquitto_pub)
       |
       | Publish JSON to topic: rk3588/seeed/demo
       v
HiveMQ Public MQTT Broker
(broker.hivemq.com:1883)
       |
       | Subscribe to the same topic
       v
Node-RED on reComputer RK
MQTT in  -->  Debug
       |
       v
Debug sidebar: received JSON object

Schritt 1: Den Node-RED-Editor öffnen

Prüfen Sie, ob Node-RED auf dem RK-Gerät läuft:

bash
sudo systemctl status nodered.service --no-pager

Starten Sie den Dienst bei Bedarf:

bash
node-red-start

Falls dieser Befehl fortlaufend Dienstprotokolle anzeigt, kehren Sie mit Ctrl+C zum Terminal zurück. Node-RED läuft im Hintergrund weiter.

Ermitteln Sie die lokale IP-Adresse des Geräts:

bash
hostname -I

Öffnen Sie den Node-RED-Editor auf einem Computer im selben Netzwerk:

text
http://<RK_DEVICE_IP>:1880

Ersetzen Sie <RK_DEVICE_IP> durch die tatsächliche IP-Adresse des Geräts. Melden Sie sich an, falls bei der Einrichtung von Node-RED die Editor-Authentifizierung aktiviert wurde.

Schritt 2: Einen MQTT-Eingangsknoten hinzufügen

  1. Öffnen Sie Flow 1 oder erstellen Sie einen neuen Flow.
  2. Suchen Sie in der linken Palette nach mqtt in und ziehen Sie den violetten Knoten mqtt in auf die Arbeitsfläche.
  3. Doppelklicken Sie auf den Knoten, um Edit mqtt in node zu öffnen.
  4. Klicken Sie neben Server auf die Schaltfläche zum Hinzufügen/Bearbeiten, je nach Version + oder ein Stiftsymbol, um eine MQTT-Broker-Konfiguration zu erstellen.

Schritt 3: Den HiveMQ-Broker konfigurieren

Tragen Sie im Konfigurationsdialog des MQTT-Brokers Folgendes ein:

EinstellungWert
NameHiveMQ (optionaler Anzeigename)
Serverbroker.hivemq.com
Port1883
ProtocolMQTT V3.1.1
Client IDLeer lassen, um eine ID automatisch zu erzeugen
TLSDeaktiviert
Username / PasswordLeer lassen

Verbindungseinstellungen des HiveMQ-Brokers

Belassen Sie die übrigen Optionen auf den Standardwerten und klicken Sie je nach Editorversion auf Add oder Update, um die Broker-Konfiguration zu speichern.

Der öffentliche Broker wird von anderen Nutzern mitverwendet. Wählen Sie ein Topic, das möglichst nicht mit anderen Tests kollidiert. Dieses Beispiel verwendet rk3588/seeed/demo. Wenn Sie ein anderes Topic wählen, verwenden Sie es sowohl im Abonnement als auch im Veröffentlichungsbefehl.

Schritt 4: Das MQTT-Abonnement konfigurieren

Stellen Sie unter Edit mqtt in node Folgendes ein:

EinstellungWert
ServerHiveMQ
ActionSubscribe to single topic
Topicrk3588/seeed/demo
QoS0
Outputauto-detect (parsed JSON object, string or buffer)
NameSeeedStudio

Topic, QoS und Ausgabeformat des MQTT-Eingangs

Klicken Sie auf Done, um den Knoten zu speichern.

MQTT-Topics unterscheiden zwischen Groß- und Kleinschreibung. Das Topic in Node-RED muss exakt mit dem Topic des Kommandozeilen-Publishers übereinstimmen. Wenn Sie ein eindeutiges Topic wählen, passen Sie auch die Veröffentlichungsbefehle in Schritt 7 an.

Schritt 5: MQTT In mit Debug verbinden und bereitstellen

  1. Suchen Sie in der Palette nach debug und ziehen Sie den grünen Knoten debug auf die Arbeitsfläche.
  2. Verbinden Sie den Ausgang von SeeedStudio (mqtt in) mit dem Eingang des Knotens debug.
  3. Öffnen Sie die Einstellungen des Debug-Knotens und lassen Sie die Ausgabe auf msg.payload stehen.
  4. Klicken Sie auf Done und anschließend oben rechts auf Deploy.
  5. Öffnen Sie die Seitenleiste Debug messages.

Der fertige Flow sollte so aussehen:

text
[SeeedStudio (mqtt in)] ----> [debug node]

Sobald die MQTT-Verbindung hergestellt ist, sollte unter dem Knoten mqtt in der grüne Status connected erscheinen.

Schritt 6: Den MQTT-Kommandozeilenclient installieren

Installieren Sie im Terminal des reComputer RK-Geräts die Mosquitto-Kommandozeilenwerkzeuge:

bash
sudo apt update
sudo apt install -y mosquitto-clients

Der Befehl mosquitto_pub sendet eine MQTT-Nachricht an den Broker. Node-RED hat dasselbe Topic bereits abonniert und kann sie empfangen.

Schritt 7: Eine JSON-Testnachricht veröffentlichen

Führen Sie den folgenden Befehl im RK-Terminal aus:

bash
mosquitto_pub \
  -h broker.hivemq.com \
  -p 1883 \
  -t "rk3588/seeed/demo" \
  -m '{"device":"RK3588","temperature":25.6}'

Dieser Befehl veröffentlicht eine JSON-Nachricht über den öffentlichen HiveMQ-Broker im Topic rk3588/seeed/demo.

Für eine detailliertere Ausgabe auf der Kommandozeile verwenden Sie die Option -d:

bash
mosquitto_pub -d \
  -h broker.hivemq.com \
  -p 1883 \
  -t "rk3588/seeed/demo" \
  -m '{"device":"RK3588","temperature":25.6}'

Schritt 8: Die empfangene Nachricht in Node-RED prüfen

Kehren Sie zum Node-RED-Editor zurück und prüfen Sie die Seitenleiste Debug messages. Der MQTT-Eingangsknoten sollte die Nachricht an den Debug-Knoten weiterleiten.

Die Nachricht sollte die folgenden Daten enthalten:

json
{
  "device": "RK3588",
  "temperature": 25.6
}

Da Output des MQTT-Eingangsknotens auf automatische JSON-Erkennung eingestellt ist, kann Node-RED die Nutzdaten als geparstes JavaScript-Objekt anzeigen. Die Seitenleiste zeigt außerdem das Topic rk3588/seeed/demo an.

Verbundener MQTT-Flow und empfangenes JSON in Debug messages

Die erfolgreiche Nachricht bestätigt diesen Kommunikationsweg:

reComputer RK-Terminal → öffentlicher HiveMQ-Broker → Node-RED MQTT in → Debug

Fazit

Sie haben Node-RED auf einem reComputer RK Series-Gerät mit einem MQTT-Broker verbunden, ein Topic abonniert und eine vom Terminal des Geräts veröffentlichte JSON-Nachricht empfangen. Dies bildet eine einfache Grundlage für MQTT-basierte IoT-Anwendungen auf der RK-Plattform.

In späteren Tutorials lässt sich der MQTT-Flow zur Verarbeitung von Sensordaten, zum Veröffentlichen von Nachrichten mit einem mqtt out-Knoten oder zur Integration mit anderen Industrieprotokollen und Dashboards erweitern.

Referenzen