Uso del NodeRED (2022)
Contingut
- 1 Comunicación MQTT entre el NodeRED y la placa IoT-02
- 2 Panel de Control (Dashboard)
- 2.1 Funciones y variables de flujo. Aleatorización controlada por el panel de control
- 2.2 Nodo conmutador (switch)
- 2.3 Nodo botón y variables de flujo. Cambio de color de un punto (representación de un led)
- 2.4 Conversión de JSON a texto y texto a JSON
- 2.5 Pasarela HTTP a MQTT
- 2.6 Nodo exec
- 2.7 Envío de JSON a la placa IoT-02
- 2.8 Recepción de JSON desde la placa IoT-02
Comunicación MQTT entre el NodeRED y la placa IoT-02[modifica]
Subscripción y publicación[modifica]
Ejercicio NodeRED-01[modifica]
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)[modifica]
Funciones y variables de flujo. Aleatorización controlada por el panel de control[modifica]
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.
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[modifica]
Importad el flujo 14nodeRedRandomUi y verificad el funcionamiento.
Nodo conmutador (switch)[modifica]
El nodo commutador envía un payload personalizado para el estado ON y el estado OFF.
Ejercicio NodeRED-03[modifica]
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)[modifica]
El nodo botón envía un payload personalizado cuando se aprieta.
Flujo ledMulticolor.nodered.json
Ejercicio NodeRED-04[modifica]
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[modifica]
- 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[modifica]
Apagando led blanco:
Encendiendo led blanco:
- 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[modifica]
Implementad vuestro flujo para cambiar el estado de los leds y el relé biestable de la placa IoT-02.
Nodo exec[modifica]
El nodo exec ejecuta órdenes del sistema operativo.
Envío de JSON a la placa IoT-02[modifica]
- 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[modifica]
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).
Ejercicio NodeRED-06[modifica]
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.