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:
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
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 namePort: PortConnect automatically: WahrTLS: WahrTLS 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.
[
{
"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": ""
}
]