Tutorial de Node-RED: C贸mo trabajar con MQTT y Raspberry PLC
Prueba la mensajer铆a de publicaci贸n-suscripci贸n en la automatizaci贸n industrial y Raspberry Pi.
7 septiembre, 2021 por
Tutorial de Node-RED: C贸mo trabajar con MQTT y Raspberry PLC
Boot & Work Corp. S.L., Fernandez Queralt Martinez

Introducci贸n

MQTT (o Message Queuing Telemetry Transport) es un protocolo de red ligero de publicaci贸n-suscripci贸n que transporta mensajes entre dispositivos.聽

MQTT es un protocolo de publicaci贸n/suscripci贸n que permite a los dispositivos del borde de la red publicar en un intermediario. Los clientes se conectan a este intermediario, que media la comunicaci贸n entre los dispositivos. Cuando otro cliente publica un mensaje en un tema suscrito, el broker reenv铆a el mensaje a cualquier cliente que se haya suscrito.

En este post, veremos c贸mo leer la temperatura de un sensor de temperatura Dallas DS18B20 conectado a un Raspberry Pi industrial PLC. Si el valor es inferior a 25潞C, el mensaje se enviar谩 a un tema MQTT, en caso contrario se enviar谩 a otro tema MQTT que activar谩 una salida de un segundo PLC basado en Raspberry Pi.

Enlaces relacionados

C贸mo

Conectar un Raspberry PLC al Wi-Fi

Leer

Raspberry PLC

Familia de productos para monitorizaci贸n industrial

Ver

C贸mo

Programar las salidas de interrupci贸n del Raspberry PLC con Python

Leer

Conceptos b谩sicos

Salidas Anal贸gicas del Raspberry Pi PLC

Leer

Touchberry Pi

Familia de productos para automatizaci贸n industrial

Ver

C贸mo

Encontrar tu controlador l贸gico programable industrial perfecto

Leer


Requisitos

  • Cable Ethernet o HDMI con una pantalla externa para conectarse a su PLC Raspberry Pi industrial.

Explicaci贸n

1.聽En primer lugar, vamos a conectar nuestro sensor Dallas al primer controlador PLC Raspberry Pi, que ser谩 nuestro MQTT-Broker.
See how >

2.聽Conecta el PLC de c贸digo abierto Raspberry Pi a la fuente de alimentaci贸n y enci茅ndelo. A continuaci贸n,
configurarlo como MQTT-Broker e instalar Mosquitto >>>

3. Abre Node-RED y aseg煤rate de que puedes obtener la temperatura de tu PLC Raspberry. >>>

4.聽A帽ade un nodo de cambio y establece msg.payload a $number($trim(payload))/1000 para obtener el valor como un n煤mero flotante.

5.聽Con un nodo interruptor, cambiaremos el valor en funci贸n de lo que sea. Si es mayor o igual a 25, ir谩 a la primera salida. Si no, ir谩 a la segunda salida.

6.聽Ahora, a帽adiremos dos nodos mqtt-out, con el servidor como localhost. Si el valor de la temperatura es igual o superior a 25, a帽adiremos un nodo mqtt con el tema: room/alert. En caso contrario, conectaremos el segundo nodo mqtt-out a la segunda salida con el tema room/temp.聽

Por el momento, tu flujo deber铆a ser algo as铆:

[{"id":"f5e89d62.2ca78","type":"tab","label":"Flow 1","disabled":false,"info":""},{"id":"c9ecc9ac.009798","type":"mqtt-broker","name":"","broker":"localhost","port":"1883","clientid":"","usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"sessionExpiry":""},{"id":"d69df81e.392788","type":"exec","z":"f5e89d62.2ca78","command":"sudo cat /sys/bus/w1/devices/28-0000072b7724/temperature","addpay":"","append":"","useSpawn":"false","timer":"","oldrc":false,"name":"","x":480,"y":60,"wires":[["e1579f20.1edb1"],[],[]]},{"id":"b26300b2.c2a8b","type":"inject","z":"f5e89d62.2ca78","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":140,"y":60,"wires":[["d69df81e.392788"]]},{"id":"e1579f20.1edb1","type":"change","z":"f5e89d62.2ca78","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"$number($trim(payload))/1000","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":140,"y":280,"wires":[["75f0962f.1f1808"]]},{"id":"58c5589c.439da8","type":"debug","z":"f5e89d62.2ca78","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":570,"y":240,"wires":[]},{"id":"11ed5da7.c7b502","type":"mqtt out","z":"f5e89d62.2ca78","name":"","topic":"room/temp","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"c9ecc9ac.009798","x":570,"y":320,"wires":[]},{"id":"75f0962f.1f1808","type":"switch","z":"f5e89d62.2ca78","name":">= 24? 1 : 2","property":"payload","propertyType":"msg","rules":[{"t":"gte","v":"24","vt":"num"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":350,"y":280,"wires":[["d5cffb1b.6c3d98","58c5589c.439da8"],["11ed5da7.c7b502","1892cf07.c2ea91"]]},{"id":"d5cffb1b.6c3d98","type":"mqtt out","z":"f5e89d62.2ca78","name":"","topic":"room/alert","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"c9ecc9ac.009798","x":560,"y":180,"wires":[]},{"id":"1892cf07.c2ea91","type":"debug","z":"f5e89d62.2ca78","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":570,"y":380,"wires":[]}]
Flujo 1 - Tutorial de Node-RED: C贸mo trabajar con MQTT y Raspberry PLC

7.聽Toma el segundo PLC Raspberry y enci茅ndelo, conect谩ndolo a la fuente de alimentaci贸n. Adem谩s, instala Mosquitto.

8.聽Ve a Node-RED, a帽ade tres nodos MQTT-in, y establece el servidor a la direcci贸n IP del primer PLC Raspberry, que es el MQTT-Broker.

9. Despu茅s del primer nodo mqtt-in con el tema: room/temp, cablea un nodo switch s贸lo para asegurarte de que el msg.payload que recibes no es nulo.

10.聽Despu茅s, cablea un nodo de escritura digital Industrial Shields聽y selecciona tu modelo de PLC Raspberry, la salida y pon el valor en LOW.

11. En el segundo nodo mqtt-in, establece el topic como room/alert para suscribirte a los mensajes. Adem谩s, cablea un nodo switch para asegurarte de que el msg.payload que obtenemos no es nulo.聽

12. Finalmente, a帽ade un nodo de escritura digital Industrial Shields, selecciona tu modelo de Raspberry PLC, the same output as in step number 10 and set the value to HIGH.

En MQTT, puedes suscribirte a:
- Cualquier tema: Y no recibir nada.
-聽Un tema espec铆fico: Para suscribirse y recibir el mensaje espec铆fico que el MQTT-Broker est谩 publicando.
- Todos los temas: Para recibir todo de todos los temas.

Ahora, vamos a suscribirnos a todos los temas para obtener el valor de todos modos.

13. Por lo tanto, a帽ade el siguiente tema: room/#, lo que significa que se suscribe a todos los mensajes que siguen de room/.

14.聽Despu茅s de eso, cablea el mismo nodo del interruptor como en el paso n煤mero 9.

15. Sigue por un nodo de cambio y establece el msg.payload a $number(payload) para parsearlo a un n煤mero.

16.聽Ahora, a帽ade un nodo indicador para mostrar siempre la temperatura en un Dashboard.

Por 煤ltimo, tu flujo en tu segundo PLC Raspberry deber铆a ser algo as铆:

[{"id":"f5e89d62.2ca78","type":"tab","label":"Flow 1","disabled":false,"info":""},{"id":"2abd1e97.1e3de2","type":"ui_base","theme":{"name":"theme-light","lightTheme":{"default":"#0094CE","baseColor":"#0094CE","baseFont":"-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif","edited":true,"reset":false},"darkTheme":{"default":"#097479","baseColor":"#097479","baseFont":"-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif","edited":false},"customTheme":{"name":"Untitled Theme 1","default":"#4B7930","baseColor":"#4B7930","baseFont":"-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif"},"themeState":{"base-color":{"default":"#0094CE","value":"#0094CE","edited":false},"page-titlebar-backgroundColor":{"value":"#0094CE","edited":false},"page-backgroundColor":{"value":"#fafafa","edited":false},"page-sidebar-backgroundColor":{"value":"#ffffff","edited":false},"group-textColor":{"value":"#1bbfff","edited":false},"group-borderColor":{"value":"#ffffff","edited":false},"group-backgroundColor":{"value":"#ffffff","edited":false},"widget-textColor":{"value":"#111111","edited":false},"widget-backgroundColor":{"value":"#0094ce","edited":false},"widget-borderColor":{"value":"#ffffff","edited":false},"base-font":{"value":"-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif"}},"angularTheme":{"primary":"indigo","accents":"blue","warn":"red","background":"grey","palette":"light"}},"site":{"name":"Node-RED Dashboard","hideToolbar":"false","allowSwipe":"false","lockMenu":"false","allowTempTheme":"true","dateFormat":"DD/MM/YYYY","sizes":{"sx":48,"sy":48,"gx":6,"gy":6,"cx":6,"cy":6,"px":0,"py":0}}},{"id":"370a3367.6410fc","type":"ui_tab","name":"Home","icon":"dashboard","disabled":false,"hidden":false},{"id":"df66a3f1.c107","type":"ui_group","name":"Default","tab":"370a3367.6410fc","order":1,"disp":false,"width":"6","collapse":false},{"id":"bb36aa61.597e38","type":"mqtt-broker","name":"","broker":"192.168.1.206","port":"1883","clientid":"","usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"sessionExpiry":""},{"id":"47c3bdde.cc7cf4","type":"rpiplc-config","model":"RPIPLC_57R","name":""},{"id":"4732b096.00a9d","type":"ui_gauge","z":"f5e89d62.2ca78","name":"","group":"df66a3f1.c107","order":1,"width":"6","height":"6","gtype":"gage","title":"Q0.0","label":"units","format":"{{value}}","min":"0","max":"50","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","x":610,"y":400,"wires":[]},{"id":"6950738a.41f41c","type":"mqtt in","z":"f5e89d62.2ca78","name":"","topic":"room/temp","qos":"2","datatype":"auto","broker":"bb36aa61.597e38","nl":false,"rap":true,"rh":0,"x":100,"y":100,"wires":[["cd8a743c.2d6668","149042d1.e6fd8d"]]},{"id":"c3e5d6be.ca1878","type":"mqtt in","z":"f5e89d62.2ca78","name":"","topic":"room/alert","qos":"2","datatype":"auto","broker":"bb36aa61.597e38","nl":false,"rap":true,"rh":0,"x":100,"y":240,"wires":[["19d046ab.66fa69","ef036036.18be"]]},{"id":"de985da3.5608a","type":"mqtt in","z":"f5e89d62.2ca78","name":"","topic":"room/#","qos":"2","datatype":"auto","broker":"bb36aa61.597e38","nl":false,"rap":true,"rh":0,"x":110,"y":340,"wires":[["8a0835b2.7f2258"]]},{"id":"1cb1497a.3de287","type":"rpiplc-digital-write","z":"f5e89d62.2ca78","rpiplc":"47c3bdde.cc7cf4","pin":"Q0.0","value":"1","name":"","x":650,"y":240,"wires":[]},{"id":"6b24e566.f74a5c","type":"rpiplc-digital-write","z":"f5e89d62.2ca78","rpiplc":"47c3bdde.cc7cf4","pin":"Q0.0","value":"0","name":"","x":640,"y":100,"wires":[]},{"id":"cd8a743c.2d6668","type":"switch","z":"f5e89d62.2ca78","name":"if msg.payload is not null","property":"payload","propertyType":"msg","rules":[{"t":"nnull"}],"checkall":"true","repair":false,"outputs":1,"x":330,"y":100,"wires":[["6b24e566.f74a5c"]]},{"id":"19d046ab.66fa69","type":"switch","z":"f5e89d62.2ca78","name":"if msg.payload is not null","property":"payload","propertyType":"msg","rules":[{"t":"nnull"}],"checkall":"true","repair":false,"outputs":1,"x":330,"y":240,"wires":[["1cb1497a.3de287"]]},{"id":"149042d1.e6fd8d","type":"debug","z":"f5e89d62.2ca78","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":290,"y":60,"wires":[]},{"id":"ef036036.18be","type":"debug","z":"f5e89d62.2ca78","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":290,"y":200,"wires":[]},{"id":"bc0fe967.7c5da8","type":"debug","z":"f5e89d62.2ca78","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":630,"y":340,"wires":[]},{"id":"8a0835b2.7f2258","type":"switch","z":"f5e89d62.2ca78","name":"if msg.payload is not null","property":"payload","propertyType":"msg","rules":[{"t":"nnull"}],"checkall":"true","repair":false,"outputs":1,"x":330,"y":340,"wires":[["f025681e.e3cf68"]]},{"id":"f025681e.e3cf68","type":"change","z":"f5e89d62.2ca78","name":"set msg.payload to number","rules":[{"t":"set","p":"payload","pt":"msg","to":"$number(payload)\t","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":340,"y":400,"wires":[["4732b096.00a9d","bc0fe967.7c5da8"]]}]
Flujo 2 - Tutorial de Node-RED: C贸mo trabajar con MQTT y Raspberry PLC
Dashboard - Tutorial de Node-RED: C贸mo trabajar con MQTT y Raspberry PLC

Haciendo esto, podr谩s publicar diferentes tipos de mensajes MQTT como valores de temperatura, humedad, etc. a cualquier tema, 隆y suscribirte a ellos desde cualquier PLC Raspberry!

Tutorial de Node-RED: C贸mo trabajar con MQTT y Raspberry PLC
Boot & Work Corp. S.L., Fernandez Queralt Martinez
7 septiembre, 2021
Compartir
Archivar

驴Buscas tu controlador l贸gico programable ideal?

Echa un vistazo a esta comparativa de producto de varios controladores industriales basados en Arduino.

Comparamos entradas, salidas, comunicaciones y otras especificaciones con las de los equipos de otras marcas destacadas.


Comparaci贸n PLC industrial>>>

驴Quieres m谩s informaci贸n?

隆Rellena el formulario!

隆Cu茅ntame m谩s!