Zum Hauptinhalt springen

Lesen und Schreiben von Werten mit Node-RED und MQTT

Für diese Tutorial nutzen wir Node-RED und MQTT um Werte an logiccloud zu schreiben und verarbeitete Werte auszulesen.

Voraussetzungen

  • Node-RED
  • logiccloud Projekt mit CaaS Runtime

logiccloud Runtime erstellen

Zuallererst sollten wir ein vorhandenes logiccloud Projekt mit Runtime haben. Falls nicht, müssen wir ein neues Projekt erstellen, den Programmcode schreiben und als Runtime veröffentlichen. Danach können wir die MQTT Verbindung parametrieren.

Wir nutzen dafür ein kleines Projekt, in dem wir den Zeitstempel auslesen, diesen im HMI anzeigen, im Programmcode verdoppeln, und an Node-RED zurückschreiben.

Für die POU MyPou deklarieren wir folgende Variablen und Programmcode:

Variablen
VAR_INPUT
In1 : REAL;
END_VAR

VAR_OUTPUT
Out1 : REAL;
END_VAR

VAR_IN_OUT
END_VAR

VAR_EXTERNAL
END_VAR

VAR
END_VAR

VAR_TEMP
END_VAR
POU Code
Out1 := In1 * 2;

Die beiden Variablen deklarieren wir auch als Access Variablen, damit wir diese im HMI verwenden können.

Wir erstellen ein einfaches HMI mit zwei Output Elementen, die wir mit den Variablen verknüpfen.

Danach können wir das Projekt builden und eine Runtime erstellen.

Zuletzt müssen wir noch eine neue MQTT Verbindung erstellen und diese parametrieren.

Node-RED parametrieren

In Node-RED erstellen wir einen neuen Flow mit den inject und mqtt out sowie mqtt in und debug Nodes.

Die inject Node stellen wir auf Wiederholung, Intervall alle 1 Sekunde und aktivieren Einmal injizieren nach 0.1 Sekunden.

Für die MQTT Nodes müssen wir eine neue Verbindung erstellen. Dazu wählen wir eine der Beiden aus und fügen einen neuen MQTT Broker mit den Einstellungen aus der logiccloud MQTT Verbindung hinzu:

  • Server: Host name
  • Port: Port
  • Connect automatically: Wahr
  • TLS: Wahr
    • TLS Konfiguration: Hier binden Sie die Zertifikate ein, die Ihnen in den logiccloud Verbindungseinstellungen angezeigt werden
  • Client-ID: Kann leer bleiben oder Sie vergeben einen eigenen Wert, zum Beispiel die Device ID

Unter Sicherheit können Sie Benutzernamen und Passwort aus den logiccloud Einstellungen eintragen.

Als Topic wählen Sie jeweils den Topic aus den Payload Einstellungen in logiccloud für die beiden Variablen In und Out.

Nachdem Sie alle Einstellungen vorgenomme haben, können Sie den Flow deployen.

Gesamter Node-RED flow
[
{
"id": "28d78d934035030c",
"type": "tab",
"label": "Flow 5",
"disabled": false,
"info": "",
"env": []
},
{
"id": "710cd5bf5bda2ec9",
"type": "inject",
"z": "28d78d934035030c",
"name": "",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "1",
"crontab": "",
"once": true,
"onceDelay": 0.1,
"topic": "",
"payload": "",
"payloadType": "date",
"x": 190,
"y": 100,
"wires": [
[
"219d19439e1997ec"
]
]
},
{
"id": "045415b18bbb3690",
"type": "mqtt out",
"z": "28d78d934035030c",
"name": "Topic \"in\"",
"topic": " 6384b486f6beade45b0946f0-MQTT-Node-RED/in",
"qos": "",
"retain": "",
"respTopic": "",
"contentType": "",
"userProps": "",
"correl": "",
"expiry": "",
"broker": "4b234810b153a4b3",
"x": 600,
"y": 120,
"wires": []
},
{
"id": "9263edd981836417",
"type": "mqtt in",
"z": "28d78d934035030c",
"name": "Topic \"out\"",
"topic": " 6384b486f6beade45b0946f0-MQTT-Node-RED/out",
"qos": "2",
"datatype": "auto",
"broker": "4b234810b153a4b3",
"nl": false,
"rap": true,
"rh": 0,
"inputs": 0,
"x": 160,
"y": 180,
"wires": [
[
"d6b36f380580f041"
]
]
},
{
"id": "d6b36f380580f041",
"type": "debug",
"z": "28d78d934035030c",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"statusVal": "",
"statusType": "auto",
"x": 450,
"y": 180,
"wires": []
},
{
"id": "871457c106c9554a",
"type": "debug",
"z": "28d78d934035030c",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"statusVal": "",
"statusType": "auto",
"x": 750,
"y": 60,
"wires": []
},
{
"id": "219d19439e1997ec",
"type": "template",
"z": "28d78d934035030c",
"name": "",
"field": "payload",
"fieldType": "msg",
"format": "handlebars",
"syntax": "mustache",
"template": "{\"value\": {{payload}}}",
"output": "str",
"x": 400,
"y": 120,
"wires": [
[
"e9ef763d1b303b51"
]
]
},
{
"id": "e9ef763d1b303b51",
"type": "json",
"z": "28d78d934035030c",
"name": "",
"property": "payload",
"action": "",
"pretty": false,
"x": 570,
"y": 60,
"wires": [
[
"871457c106c9554a",
"045415b18bbb3690"
]
]
},
{
"id": "4b234810b153a4b3",
"type": "mqtt-broker",
"name": "logiccloud Staging",
"broker": "staging.logiccloud.io",
"port": "9883",
"tls": "e7c04b3f6d1a0243",
"clientid": "test-node-red",
"autoConnect": true,
"usetls": true,
"protocolVersion": "4",
"keepalive": "60",
"cleansession": true,
"birthTopic": "",
"birthQos": "0",
"birthRetain": "false",
"birthPayload": "",
"birthMsg": {},
"closeTopic": "",
"closeQos": "0",
"closeRetain": "false",
"closePayload": "",
"closeMsg": {},
"willTopic": "",
"willQos": "0",
"willRetain": "false",
"willPayload": "",
"willMsg": {},
"sessionExpiry": ""
},
{
"id": "e7c04b3f6d1a0243",
"type": "tls-config",
"name": "",
"cert": "",
"key": "",
"ca": "",
"certname": "client.crt",
"keyname": "client.key",
"caname": "ca.crt",
"servername": "",
"verifyservercert": false,
"alpnprotocol": ""
}
]