Ús de la base de dades MariaDB des de NodeRED

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

Accés

Ha d'haver una base de dades creada al MariaDB amb el nom aula508

L'usuari iot amb contrasenya iot té permisos d'escriptura i lectura sobre la base de dades aula508

L'usuari convidat amb contrasenya benvingut té permisos de lectura sobre la base de dades aula508

Explicació detallada a Ús de MariaDB per emmagatzemar dades de la Internet de les Coses

Nodes MariaDB a NodeRed

Instal·lació

Instal·lació des nodes de MariaDB (MySQL) a NodeRED

cal instal·lar el conjunt de nodes node-red-node-mysql

Aspecte del node MySQL a NodeRED

Configuració de la base de dades al node MySQL

  • Poseu un node MySQL al tapís Node-RED
  • Feu doble clic sobre el node MySQL
Configuració del node MySQL
  • Aneu al llapis a la dreta del desplegable Add new MySQL database... present a la fila Database
Configuració del nodo MySQL

- A Host escriviu la IP local del servidor (127.0.0.1). Per seguretat, no permetem a la base de dades que tingui visibilitat externa.

- A Port escriviu el port TCP (3306) per defecte de las bases de dades MySQL

- A User escriviu un usuari amb permisos d'escriptura (iot), perquè volem escriure. Si no calmescriure a la base de dades escriuríem un usuari amb permisos de tan sols lectura (com convidat).

- A Password escriviu la contrasenya de l'usuari (per a l'usuari iot és iot. Per a l'usuari convidat és benvingut).

- A Database escriviu la base de dades que volem accedir (aula508)

- A Charset escriviu la codificació de caràcters (UTF8)

Creació d'una taula a la base de dades MySQL

Creació d'una taula

Hi ha quatre nodes enllaçats: inject, function, mysql i debug.

  • Els nodes inject i debug no es modifiquen. Deixeu la configuració per defecte.
  • El node mysql ha estat configura al pas anterior.
  • El node function s'ha configurat així:
Creació d'una taula

Funció CREATE TABLE m28XX_T_RH:

msg.topic = `
CREATE TABLE m28XX_T_RH (
 time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
 valueT FLOAT,
 valueRH FLOAT,
 PRIMARY KEY (time));
`;
return msg;

Esborrat d'una taula a la base de dades MySQL

Esborrat d'una taula

Funció DROP TABLE m28XX_T_RH:

msg.topic = `DROP TABLE m28XX_T_RH;`;
return msg;

Inserció de dades a una taula de la base de dades MySQL

Configuració de nodes inject per a generar dades de tipus JSON

Nodes inject per a generar dades de tipus JSON

Doble clic sobre el nodo inject (seleccioneu l'opció {}):

Edició del node inject per a generar dades de tipus JSON

Cliqueu sobre ... (els tres puntos):

Edició del node inject per a generar dades de tipus JSON

En format text:

{
   "valueT": 17.89,
   "valueRH": 44.32
}

Inserció de dades de tipus JSON a columnes de la taula

Inserció de dades de tipus JSON a columnes de la taula

Funció INSERT DATA:

msg.topic = `insert into m28XX_T_RH(valueT,valueRH) values(${msg.payload.valueT},${msg.payload.valueRH})`;
return msg;

Lectura de dades a una taula de la base de dades MySQL

Exemple de SELECT per a MariaDB

Camp msg.topic del node inject per a fer un SELECT:

Node inject per a trametre un query de tipus SELECT a MariaDB

Camp msg.topic del node inject amb nom SELECT en format text:

select UNIX_TIMESTAMP(time) as time, valueT, valueRH from m28XX_T_RH

Creació d'una taula vista a la base de dades MySQL

Creació d'una taula vista a partir d'una altra taula a una base de dades MariaDB

Funció CREATE VIEW m28XX_T_RH_v:

msg.topic = `CREATE VIEW m28XX_T_RH_v AS select UNIX_TIMESTAMP(time) as time, valueT, valueRH from m28XX_T_RH;`;
return msg;

Tractament de dades llegides a la taula

Tractament de dades llegides a la taula

Afegiu sortides a la funció (a Outputs s'ha canviat d'1 a 3 sortides):

Afegiu sortides a la funció

Codi de la funció Tratamiento datos / Últimas entradas:

Codi de la funció Tratamiento datos / Últimas entradas

Funció Tratamiento datos / Últimas entradas en modo text:

var a = msg.payload;
var val = "";
var lastEntryValueT, lastEntryValueRH;
a.forEach(function (entry) {
   val += "timestamp: " + entry.time + ", valueT: " + entry.valueT + ", valueRH: " + entry.valueRH + "\r";
   lastEntryValueT = entry.valueT;
   lastEntryValueRH = entry.valueRH;
});
msg.payload = val;
var msg_valT = { payload: lastEntryValueT };
return [msg, msg_valT, { payload: lastEntryValueRH}];

Aleatorització controlada pel tauler de control

Generació de dades aleatòries

Al seleccionar el commutador (switch) Randomize comença la generació de dades aleatòries. Al deseleccionar-ho s'atura la generació de dades.

Generació de dades aleatòries

Codi per al NodeRED que genera dues dades aleatòries

Funció Randomizing (On/Off):

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

Funció random JSON value in range {"T": <20.0,30.0>,"RH": <45.0,55.0>}:

var randomT = parseFloat((200 + Math.floor(Math.random() * 101)) / 10); // value between 20.0 and 30.0
var randomRH = parseFloat((450 + Math.floor(Math.random() * 101)) / 10); // value between 45.0 and 55.0
var jsonR = {};
jsonR["T"] = randomT;
jsonR["RH"] = randomRH;

var msg_jsonR = { payload: jsonR };
var msg_valT = { payload: randomT };
var msg_valRH = { payload: randomRH };

return [msg_jsonR, msg_valT, msg_valRH];

Escriptura síncrona de múltiples dades asíncrones alhora. Ús del format de dades json

Ús del format de dades json


Codi en NodeRED per a l'ús de Json a MariaDB

Funció T:24.7,RH:74.6,P:1007.2,LDR:47.3 (aquesta funció s'executa al desplegar el flux, degut a la configuració del node inject):

flow.set("IoT-02_RH",74.6);
flow.set("IoT-02_T",24.7);
flow.set("IoT-02_P",1007.2);
flow.set("IoT-02_LDR",47.3);
return msg;

Funció T:21.3,RH:48.2,P:1003.5,LDR:89.4:

flow.set("IoT-02_RH",48.2);
flow.set("IoT-02_T",21.3);
flow.set("IoT-02_P",1003.5);
flow.set("IoT-02_LDR",89.4);
return msg;

Funció --> json:

var json00 = {};
json00.RH = flow.get("IoT-02_RH");
json00.T = flow.get("IoT-02_T");
json00.P = flow.get("IoT-02_P");
json00.LDR = flow.get("IoT-02_LDR");
msg.payload = json00;
return msg;

Funció INSERT INTO m28XX_T_RH_P_LDR(valueT,valueRH,valueP,valueLDR):

msg.topic = `insert into m28XX_T_RH_P_LDR(valueT,valueRH,valueP,valueLDR) values(${msg.payload.T},${msg.payload.RH},${msg.payload.P},${msg.payload.LDR})`;
return msg;

Consulta a MariaDB des del terminal:

convidat@vps656540:~$ mysql -u convidat -p
Enter password: (la contraseña es benvingut)
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 133
Server version: 10.3.38-MariaDB-0+deb10u1 Debian 10

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. 

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> use aula206;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A 

Database changed
MariaDB [aula206]> select * from m28XX_T_RH_P_LDR_v;
+------------+--------+---------+--------+----------+
| time       | valueT | valueRH | valueP | valueLDR |
+------------+--------+---------+--------+----------+
| 1681149647 |   24.7 |    74.6 | 1007.2 |     47.3 |
| 1681149886 |   21.3 |    48.2 | 1003.5 |     89.4 |
+------------+--------+---------+--------+----------+
2 rows in set (0.000 sec)

MariaDB [aula206]> quit
Bye