Ús de la base de dades MariaDB des de NodeRED
Contingut
- 1 Accés
- 2 Nodes MariaDB a NodeRed
- 2.1 Instal·lació
- 2.2 Configuració de la base de dades al node MySQL
- 2.3 Creació d'una taula a la base de dades MySQL
- 2.4 Esborrat d'una taula a la base de dades MySQL
- 2.5 Inserció de dades a una taula de la base de dades MySQL
- 2.6 Lectura de dades a una taula de la base de dades MySQL
- 2.7 Creació d'una taula vista a la base de dades MySQL
- 2.8 Tractament de dades llegides a la taula
- 2.9 Aleatorització controlada pel tauler de control
- 3 Escriptura síncrona de múltiples dades asíncrones alhora. Ús del format de dades json
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ó
cal instal·lar el conjunt de nodes node-red-node-mysql
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
- Aneu al llapis a la dreta del desplegable Add new MySQL database... present a la fila Database
- 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
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í:
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
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
Doble clic sobre el nodo inject (seleccioneu l'opció {}):
Cliqueu sobre ... (els tres puntos):
En format text:
{ "valueT": 17.89, "valueRH": 44.32 }
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
Camp msg.topic del node inject per a fer un SELECT:
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
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
Afegiu sortides a la funció (a Outputs s'ha canviat d'1 a 3 sortides):
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
Al seleccionar el commutador (switch) Randomize comença la generació de dades aleatòries. Al deseleccionar-ho s'atura la generació de dades.
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
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