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:
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;
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 hostPuerto: PuertoConectar automáticamente: TrueTLS: VerdaderoConfiguració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.
[
{
"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": ""
}
]