Uso del NodeRED (2022)

De binefa.com
Salta a la navegació Salta a la cerca

Comunicación MQTT entre el NodeRED y la placa IoT-02

Subscripción y publicación

Comunicación MQTT entre el NodeRED y la placa IoT-02

Ejercicio NodeRED-01

Implementad vuestro flujo para recibir el estado de los tres botones (de manera asíncrona, cuando hay un cambio) de la placa IoT-02.

Panel de Control (Dashboard)

Funciones y variables de flujo. Aleatorización controlada por el panel de control

Generación de datos aleatorios

Al seleccionar el conmutador (switch) Randomize comienza la generación de datos aleatorios. Al deseleccionarlo se para la generación de datos. El nodo commutador envía un payload personalizado para el estado ON y el estado OFF.

Generación de datos aleatorios

Código para el NodeRED que genera datos aleatorios

Función Randomizing (On/Off):

flow.set("Randomizing",msg.payload);
return msg;

Función random value in range (20.0,30.0):

msg.payload = parseFloat( (200 + Math.floor(Math.random() * 101))/10); // value between 20.0 and 30.0
return msg;

Ejercicio NodeRED-02

Importad el flujo 14nodeRedRandomUi y verificad el funcionamiento.

Nodo conmutador (switch)

El nodo commutador envía un payload personalizado para el estado ON y el estado OFF.

Flujo conmutador leds


Visualización conmutador leds

Ejercicio NodeRED-03

Poned 5 conmutadores (Control de los 4 leds y el estado del relé biestable del placa IoT-02).

Nodo botón y variables de flujo. Cambio de color de un punto (representación de un led)

El nodo botón envía un payload personalizado cuando se aprieta.

Flujo cambio de color de un punto


Visualización cambio de color de un punto

Flujo ledMulticolor.nodered.json

Ejercicio NodeRED-04

Haced una visualización de un punto que representa un led multicolor. En la placa IoT-02:

  • Cuando el botón IO0 esté apretado incorpora el color rojo al punto multicolor representado en el panel de control del NodeRED
  • Cuando el botón IO0 no esté apretado quita el color rojo al punto multicolor representado en el panel de control del NodeRED
  • Cuando el botón I34 esté apretado incorpora el color verde al punto multicolor representado en el panel de control del NodeRED
  • Cuando el botón I34 no esté apretado quita el color verde al punto multicolor representado en el panel de control del NodeRED
  • Cuando el botón I35 esté apretado incorpora el color azul al punto multicolor representado en el panel de control del NodeRED
  • Cuando el botón I35 no esté apretado quita el color azul al punto multicolor representado en el panel de control del NodeRED

Conversión de JSON a texto y texto a JSON

Flujo JSON -> TXT y TXT -> JSON

Flujo jsonTxt.nodered.json

  • Función genero json:
var json00 = {}
json00.nombre = "Joan"
json00.apellido = "Pérez"
json00.edad = 26
msg.payload = json00
return msg;
  • Función genero txt:
var txt = "{\"apellido\":\"Martínez\",\"nombre\":\"Meritxell\",\"edad\":28}"
msg.payload = txt
return msg;

Pasarela HTTP a MQTT

Flujo HTTP a MQTT

Flujo httpMqtt.nodered.json

Apagando led blanco:

Apagando led blanco. HTTP a MQTT

Encendiendo led blanco:

Encendiendo led blanco. HTTP a MQTT
  • Función bridge:
msg.topic = msg.req.query['topic'];
msg.payload = msg.req.query['payload'];
return msg;
  • Función response:
msg.payload = "Tema: "+msg.req.query['topic']+", missatge: "+msg.req.query['payload'];
return msg;

Ejercicio NodeRED-05

Implementad vuestro flujo para cambiar el estado de los leds y el relé biestable de la placa IoT-02.

Nodo exec

El nodo exec ejecuta órdenes del sistema operativo.

Flujo con nodo exec

Flujo exec.nodered.json

Envío de JSON a la placa IoT-02

Flujo de JSON en nodo Inject en NodeRED
Edición de JSON en nodo Inject en NodeRED

Flujo jsonLeds.json

  • En el código Arduino se diferencia el tipo bool del tipo int:
 if (szTopic == String("/" + String(sMac) + TOPIC_JSON_LEDS  ).c_str()) {
   JSONVar myObject = JSON.parse(szPayload);
   if (JSON.typeof(myObject) == "undefined") {
     Serial.println("Parsing input failed!");
     return;
   }
   if (myObject.hasOwnProperty("ledW")) {
     digitalWrite(LED_W, (bool)myObject["ledW"]);
   }    
   if (myObject.hasOwnProperty("ledR")) {
     digitalWrite(LED_R, (int)myObject["ledR"]);
   }
   if (myObject.hasOwnProperty("ledY")) {
     digitalWrite(LED_Y, (int)myObject["ledY"]);
   }
   if (myObject.hasOwnProperty("ledG")) {
     digitalWrite(LED_G, (int)myObject["ledG"]);
   }
 }

Recepción de JSON desde la placa IoT-02

Se recibe un texto. El nodo JSON convierte el texto a un objeto JSON. Es un nodo bidireccional (si entra un objeto JSON sale un texto).

Flujo recepción de JSON

Flujo jsonIn.nodered.json

Ejercicio NodeRED-06

Implementad un sistema SCADA (supervisión y control) que muestre en widgets diferentes de tipo reloj la temperatura, humedad relativa y nivel de luz (desde la placa IoT-02). También una gráfica de la temperatura en función del tiempo. En la parte de control de la placa IoT-02 hay un conmutador, cuando está activado el relé se pone en estado SET, se enciende el led rojo (y apaga el verde) y aparece SET en la pantalla OLED. Cuando se desactiva el conmutador el relé se pone en estado RESET, se enciende el led verde (y apaga el rojo) y aparece RESET en la pantalla OLED.