Introducció a l'ús del Node-RED

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

Comunicació MQTT entre el NodeRED i la placa IoT-02

Subscripció i publicació

Comunicació MQTT entre el NodeRED i la placa IoT-02

Exercici NodeRED-01

Implementeu el vostre flux per rebre l'estat dels tres botons (de manera asíncrona, quan hi ha un canvi) de la placa IoT-02.

Panell de Control (Dashboard)

Cal instal·lar el conjunt de nodes node-red-dashboard

Node commutador (switch)

El node commutador envia un payload personalitzat per a l'estat ON i l'estat OFF.

Flux commutador leds


Visualització commutador leds

Exercici NodeRED-02

Poseu 5 commutadors (Control dels 4 leds i l'estat del relé biestable de la placa IoT-02).

Nodes de text, botó i variables de flux. Canvi de color d'un punt (representació d'un led)

El node botó envia un payload personalitzat quan es prem.

Flux canvi de color d'un punt


Visualització canvi de color d'un punt

Al Value format del node de text:

<font color={{msg.color}} ><i class="fa fa-circle" style="font-size:24px;"></i></font>

Funció FF3399:

msg.color = "#FF3399"
return msg;

Funció {R,G,B} -> {0,0,0}:

flow.set("R","00");
flow.set("G","00");
flow.set("B","00");
flow.set("RGB","#"+flow.get("R")+flow.get("G")+flow.get("B"));
msg.color = flow.get("RGB");
return msg;

Funció R -> FF:

flow.set("R","FF");
flow.set("RGB","#"+flow.get("R")+flow.get("G")+flow.get("B"));
msg.color = flow.get("RGB");
return msg;

Funció R -> 00:

flow.set("R","00");
flow.set("RGB","#"+flow.get("R")+flow.get("G")+flow.get("B"));
msg.color = flow.get("RGB");
return msg;

Flux ledMulticolor.nodered.json

Exercici NodeRED-03

Feu una visualització d'un punt que representa un led multicolor. A la placa IoT-02:

  • Quan el botó IO0 estigui premut incorpora el color vermell al punt multicolor representat al panell de control del NodeRED
  • Quan el botó IO0 no estigui premut treu el color vermell al punt multicolor representat al panell de control del NodeRED
  • Quan el botó I34 estigui premut incorpora el color verd al punt multicolor representat al panell de control del NodeRED
  • Quan el botó I34 no estigui premut treu el color verd al punt multicolor representat al panell de control del NodeRED
  • Quan el botó I35 estigui premut incorpora el color blau al punt multicolor representat al panell de control del NodeRED
  • Quan el botó I35 no estigui premut treu el color blau al punt multicolor representat al panell de control del NodeRED

Simulació de generació d'una dada. Aleatorització controlada pel panell de control

Generació de dades aleatòries

En seleccionar el commutador (switch) Randomize comença la generació de dades aleatòries. En deseleccionar-lo s'atura la generació de dades. El node commutador envia un payload personalitzat per a l'estat ON i l'estat OFF.

Generació de dades aleatòries

Codi per al NodeRED que genera dades aleatòries

Funció Randomizing (On/Off):

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

Funció 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;

Exercici NodeRED-04

Importeu el flux 14nodeRedRandomUi i verifiqueu el funcionament.

Conversió de JSON a text i text a JSON

Flux JSON -> TXT i TXT -> JSON

Flux jsonTxt.nodered.json

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

Passarel·la HTTP a MQTT

Flux HTTP a MQTT

Flux httpMqtt.nodered.json

Apagant led blanc:

Apagant led blanc. HTTP a MQTT

Encenent led blanc:

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

Exercici NodeRED-05

Implementeu el vostre flux per canviar l'estat dels leds i el relé biestable de la placa IoT-02.

Node exec

El node exec executa ordres del sistema operatiu.

Flux amb node exec

Flux exec.nodered.json

Enviament de JSON a la placa IoT-02

Flux de JSON en node Inject a NodeRED
Edició de JSON en node Inject a NodeRED

Flux jsonLeds.json

  • Al codi Arduino es diferencia el tipus bool del tipus 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ó de JSON des de la placa IoT-02

Es rep un text. El node JSON converteix el text a un objecte JSON. És un node bidireccional (si entra un objecte JSON surt un text).

Flux recepció de JSON

Flux jsonIn.nodered.json

Exercici NodeRED-06

Implementeu un sistema SCADA (supervisió i control) que mostri en widgets diferents de tipus rellotge la temperatura, humitat relativa i nivell de llum (des de la placa IoT-02). També una gràfica de la temperatura en funció del temps. A la part de control de la placa IoT-02 hi ha un commutador, quan està activat el relé es posa en estat SET, s'encén el led vermell (i apaga el verd) i apareix SET a la pantalla OLED. Quan es desactiva el commutador el relé es posa en estat RESET, s'encén el led verd (i apaga el vermell) i apareix RESET a la pantalla OLED.