MQTT y Node-RED

Node-RED y MQTT con Wemos D1 Mini

Capturar los datos mandados por los nodos remotos por MQTT.

Sólo tienes que arrastrar el nodo mqtt que está en la categoría input al flujo.

sistema alarma node-red

Ahora hay que configurarlo. Aquí es donde vemos la potencia de Node-RED. En el caso de MQTT lo único que tenemos que hacer es configurar el broker y el topic.

Al tratarse de un nodo de entrada, lo que hace es recibir los mensajes publicados en un topic es decir, se suscribe al topic. Haz doble click sobre el nodo para que abra el panel de configuración.

En el panel de configuración MQTT vamos a configurar primero el broker MQTT. Haz click en el lápiz que aparece en Server.

sistema alarma node-red

Esto abre un nuevo panel de configuración. Pon un nombre al broker MQTT por ejemplo RASPBERRY PI MOSQUITTO. En Server tienes que poner la IP donde está instalado el broker MQTT y el puerto que utiliza, normalmente es el 1883.

Esta sería la configuración mínima. No te olvides de hacer click en el botón Add.

sistema alarma node-red

Después de esta acción volverás al panel de configuración del nodo mqtt y automáticamente, habrá seleccionado el broker MQTT que acabamos de crear.

Por último, vamos a rellenar el campo de Topic. Debe ser el mismo que hemos puesto en Arduino o el ESP8266, /casa/puerta/alarma. Una vez lo tengas, haz click en Done.

sistema alarma node-red

Ahora sólo nos queda probarlo. Para ello vamos a utilizar el mismo nodo debug de la categoría output que hemos utilizado antes.

Arrástralo al flujo, conecta los dos nodos y haz click en el botón Deploy.

sistema alarma node-red

Para probar el sistema lo podemos hacer de dos formas. Desde una terminal de Raspberry Pi podemos publicar un mensaje en el topic o directamente conectando la placa y simulando que abren la puerta.

El resultado sería el siguiente.

sistema alarma node-red

Otro ejemplo mucho más completo con Lego: http://www.internetoflego.com/lego-train-automation-wifi-controlled-nodemcu-esp8266/ 

Cargar Datos de Raspberry Pi a MQTT

Mandar cada 10 segundos los datos de CPU, Memoria y temperatura de la Raspberry Pi por MQTT al topic: cursomqtt/raspberrypixx/{CPU/Memoria/Temperatura}

Código para obtener los datos de Raspberry Pi, usando en nodo exec: 

[{"id":"af22b399.12614","type":"exec","z":"8a81314e.a0f79","command":"vcgencmd measure_temp","addpay":false,"append":"","useSpawn":"","timer":"","name":"RPi Temp.","x":325.2221908569336,"y":46.33333683013916,"wires":[["14f0a295.59181d"],[],[]]},{"id":"408435c9.447fec","type":"exec","z":"8a81314e.a0f79","command":"top -d 0.5 -b -n2 | grep \"Cpu(s)\"|tail -n 1 | awk '{print $2 + $4}'","addpay":false,"append":"","useSpawn":"","timer":"","name":"CPU Load","x":325.2221908569336,"y":126.33333683013916,"wires":[["2c7475c7.6cc01a"],[],[]]},{"id":"8fbcbdf9.549b7","type":"exec","z":"8a81314e.a0f79","command":"free | grep Mem | awk '{print 100*($4+$6+$7)/$2}'","addpay":false,"append":"","useSpawn":"","timer":"","name":"Free Memory","x":325.2222099304199,"y":190.55557250976562,"wires":[["daf6433c.bad81"],[],[]]},{"id":"14f0a295.59181d","type":"function","z":"8a81314e.a0f79","name":"","func":"str = msg.payload\nmsg.payload = str.substring(5,9);\nreturn msg;","outputs":1,"noerr":0,"x":471.888858795166,"y":33.00000190734863,"wires":[["46daa272.4333ac","334a9ddd.345602"]]},{"id":"daf6433c.bad81","type":"function","z":"8a81314e.a0f79","name":"","func":"str = msg.payload\nmsg.payload = parseInt(str.substring(0,str.length - 1));\nreturn msg;","outputs":1,"noerr":0,"x":530,"y":180,"wires":[["1ba39571.ba75ab"]]}]

Flujo:

Ejemplo con Nodos Remotos

Vamos a usar los Wemos D1 mini, para integrarlos como nodos remotos y programarlos desde Node-RED.

Esquema:

Firmware de uso de cada shield:

El firmware para los nodos remotos:

Probar cada firmware y hacer un programa sencillo para interactuar con ellos.

Firmware de otros nodos remotos: https://github.com/jecrespo/Curso-Node-RED/tree/master/Remote%20Nodes%20Firmware/Firmware%20M5Stack%20Varios 

Completos tutoriales:

Topic Map

El topic map del firmware de los dispositivos es:

  • cursomqtt/nombre}/dato10s – publica mensaje numerado cada 10s
  • cursomqtt/{nombre}/dato60s – publica mensaje numerado cada 60s
  • cursomqtt/{nombre}/reset – publica mensaje cada reset o inicio
  • cursomqtt/{nombre}/led – suscrito (1 led ON, otro valor  led OFF)
  • cursomqtt/{nombre}/text – suscrito (muestra el mensaje por pantalla)
  • cursomqtt/{nombre}/rele – suscrito (1 relé ON, otro valor  relé OFF). Firmware relé
  • cursomqtt/wemos/oled – suscrito (muestra el mensaje por pantalla oled). Firmware oled
  • cursomqtt/{nombre}/temperatura – publica dato temperatura cada 10 segundos. Firmware DS18B20
  • cursomqtt/{nombre}/matrix – suscrito (0 efecto y apaga, de 1 a 8 ilumina de 1 a 8 líneas de matriz ). Firmware matrix.
  • cursomqtt/raspberrypi/{nombre}/CPU – publica Node-RED el datos de CPU 
  • cursomqtt/raspberrypi/{nombre}/Temperatura – publica Node-RED el datos de temperatura procesador
  • cursomqtt/raspberrypi/{nombre}/Memoria – publica Node-RED el datos de memoria libre
  • casa/wibeee/# – datos eléctricos de Wibeee
  • casa/m5atom/enrique/aviso – suscrito (“alarma” – leds rojos, “aviso” – leds amarillos, “ok” – leds verdes, otro mensaje apaga)
  • casa/m5atom/enrique/boton – al pulsar publica “press” o “longpress”
  • casa/m5stack/A – al pulsar botón A publica “press”
  • casa/m5stack/B – al pulsar botón B publica “press” 
  • casa/m5stack/C – al pulsar botón C publica “press”
  • casa/m5stack/led – suscrito (1 dibuja en pantalla círculo rojo, otro valor  dibuja en pantalla círculo verde)
  • casa/m5stack/text – suscrito, muestra por pantalla el texto
  • casa/m5stick/temperatura – publica dato temperatura cada 1 segundo
  • casa/m5stick/humedad – publica dato humedad cada 1 segundo
  • casa/m5stick/presion – publica dato presión cada 1 segundo
  • casa/m5stickplus/distancia – publica dato distancia cuando se activa
  • casa/m5stickplus/button – al pulsar botón publica “press”
  • casa/m5stickplus/led – suscrito (1 led ON, otro valor  led OFF)
  • casa/m5stickplus/label  – suscrito (“red” – circulo rojo, “yellow” – circulo amarillo, “green” – circulo verde, “black” – círculo verde)

Publicar en MQTT desde Node-RED

Publicar desde Node-RED en diversos topics para encender 

Cada firmware ya está configurado para solo configurar el topic donde va a publicar y el topic al que se suscribe:

  • RELE: Paso ON y OFF
  • OLED: Paso el string que va a mostrar por pantalla
  • LEDS: 7 topics donde paso el color en formato RGB y el brillo

Probar diferentes publicaciones en diferentes topics para encender/apagar los relés, encender/apagar leds y mandar mensajes a las pantallas.

Ejemplos a programar con Node-RED

  • Al leer una pulsación un botón de los M5stick, se enciende un relé.
  • Al superar una temperatura mandar un mensaje de alerta
  • Mandar a las pantallas oled los datos de CPU u otras mediciones
  • En función de la distancia encender más o menos leds de wemos
  • Cuando un nodo se desconecte mandar un mensaje a una pantalla

Consola MQTT en Dashboard

Instalar Dashboard de Node-RED: https://flows.nodered.org/node/node-red-dashboard

Crear un dashboard y un grupo.

Usar los siguientes nodos de Dashboard y añadir a los grupos:

  • gauge: para mostrar mediciones como la temperatura o la CPU
  • chart: para mostrar gráfica de mediciones
  • switch: para encender y apagar leds y reles
  • slider: para encender leds y aumentar la intensidad de los leds
  • text input: para mandar mensajes a las pantallas
  • text: para mostrar datos de topics

3 comentarios en “MQTT y Node-RED

  1. Pingback: MQTT y Node-RED -

  2. Pingback: Diario del Curso IoT, Smart Cities y Node-RED | Aprendiendo Arduino

  3. Pingback: Diario Curso: Raspberry Pi y Node-RED. 2ª ed | Aprendiendo Arduino

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.