Ir al contenido principal

Lectura y escritura de valores con Node-RED y MQTT

Para este tutorial usamos Node-RED y MQTT para escribir valores a logiccloud y leer valores procesados.

Requisitos

  • Nodo-RED
  • proyecto logiccloud con CaaS runtime

Crear logiccloud Runtime

En primer lugar, debemos tener un proyecto logiccloud existente con runtime. Si no, tenemos que crear un nuevo proyecto, escribir el código del programa y publicarlo como runtime. Después podemos parametrizar la conexión MQTT.

Para ello utilizamos un pequeño proyecto en el que leemos la marca de tiempo, la mostramos en la HMI, la duplicamos en el código del programa y la escribimos de nuevo en Node-RED.

Para el POU MyPou declaramos las siguientes variables y código de programa:

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;

También declaramos las dos variables como variables Access para poder utilizarlas en la HMI.

Creamos una HMI sencilla con dos elementosde salidaque vinculamos a las variables.

Después podemos construir el proyecto y crear un runtime.

Por último, tenemos que crear una nueva conexión MQTT y parametrizarla.

Parametrizar Node-RED

En Node-RED creamos un nuevo flujo con los nodos inject y mqtt out así como mqtt in y debug .

Configuramos el nodo inject en repeat, intervalo cada 1 segundo y activamos inject once after 0.1 seconds.

Para los nodos MQTT tenemos que crear una nueva conexión. Para ello, seleccionamos uno de los dos y añadimos un nuevo broker MQTT con la configuración de la conexión MQTT de logiccloud:

  • Servidor: Nombre del host
  • Puerto: Puerto
  • Conectar automáticamente: True
  • TLS: Verdadero
    • Configuración TLS: Aquí se incluyen los certificados que se muestran en la configuración de la conexión logiccloud.
  • ID de cliente: Puede dejarse en blanco o asignar un valor propio, por ejemplo, el ID del dispositivo.

En Seguridad puede introducir nombre de usuario y contraseña desde la configuración de logiccloud.

Como tema, seleccione el tema de la configuración de la carga útil en logiccloud para las dos variables In y Out.

Una vez realizados todos los ajustes, puede desplegar el flujo.

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": ""
}
]