Diferència entre revisions de la pàgina «Uso de InfluxDB en el VPS del Máster de Industria 4.0 el curso 2019-2020»

De binefa.com
Salta a la navegació Salta a la cerca
 
(Hi ha 44 revisions intermèdies del mateix usuari que no es mostren)
Línia 7: Línia 7:
  
 
= Uso de prefijos en función del usuario =
 
= Uso de prefijos en función del usuario =
El InfluxDB en el VPS del Máster es un recurso compartido. Para diferenciar las medidas introducidas por cada usuario sugerimos el uso del prefijo '''m05_''' (cambiando '''05''' por vuestro número asignado).
+
El InfluxDB en el VPS del Máster es un recurso compartido. Para diferenciar las medidas (''measurements'') introducidas por cada usuario sugerimos el uso del prefijo '''mxy_''' (cambiando '''xy''' por vuestro número asignado).
  
 
Por ejemplo una medida de ''temperatura'' será '''m05_temperatura'''.
 
Por ejemplo una medida de ''temperatura'' será '''m05_temperatura'''.
Línia 19: Línia 19:
 
  > quit
 
  > quit
 
  $
 
  $
 +
 +
$ influx -username convidat -password benvingut
 +
Connected to http://localhost:8086 version 1.7.6
 +
InfluxDB shell version: 1.8.0
 +
> use aulaVirtual2020
 +
Using database aulaVirtual2020
 +
> select * from m05_nAleat
 +
name: m05_nAleat
 +
time                value
 +
----                -----
 +
1589883858824341140 20
 +
> quit
  
 
= Nodos InfluxDB en NodeRed =
 
= Nodos InfluxDB en NodeRed =
[https://flows.nodered.org/node/node-red-contrib-influxdb Instalación de los nodos InfluxDB para NodeRED] (en la metadistribución basada en Debian 9 ya viene instalado)
 
  
Iniciar a un valor el campo '''nAleat''' de la base de datos local '''aula206''' creada anteriormente con InfluxDB
+
[[Image:10influxDbNodeRed00.png|center|thumb|Instalación de los nodos de InfluxDB en NodeRED]]
 +
 
 +
[https://flows.nodered.org/node/node-red-contrib-influxdb Instalación de los nodos InfluxDB para NodeRED]
 +
 
 +
== Lectura con usuario de InfluxDB con permisos de lectura ==
 +
[[Image:11influxDbNodeRed01.png|center|thumb|Configuración de InfluxDB para lectura]]
 +
 
 +
[[Image:13lecturaInfluxDB.png|center|Lectura de InfluxDB]]
 +
 
 +
[https://binefa.cat/training/upcSchool/2021/20210410/13lecturaInfluxDB.nodered.txt Código para NodeRED de lectura de InfluxDB]
 +
 
 +
Función '''--> timestamp, value''' con dos salidas:
 +
a = msg.payload;
 +
var val = "";
 +
var lastEntryValue;
 +
a.forEach(function(entry) {
 +
    val+="timestamp: "+entry.time+", value: "+entry.value + "\n";
 +
    lastEntryValue = entry.value;
 +
});
 +
msg.payload = val;
 +
var msg_val = {payload : lastEntryValue}
 +
return [msg,msg_val];
 +
 
 +
== Aleatorización controlada por el panel de control ==
 +
[[Image:12nodeRedRandomUi.png|center|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.
 +
 
 +
[[Image:14nodeRedRandomUi.png|center|Generación de datos aleatorios]]
  
  influx -username iot -password iot
+
[https://binefa.cat/training/upcSchool/2021/20210410/14nodeRedRandomUi.nodered.txt Código para el NodeRED que genera datos aleatorios]
  > use aula206
+
 
  > insert nAleat value=20.0
+
Función '''Randomizing (On/Off)''':
  > quit
+
  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;
 +
 
 +
== Escritura con usuario de InfluxDB con permisos de lectura y escritura ==
 +
 
 +
[[Image:15nodeRedRW.png|center|Configuración de InfluxDB para lectura]]
 +
 
 +
 
 +
[[Image:16nodeRedRW.png|center|Escritura a InfluxDB]]
 +
 
 +
 
 +
[[Image:17nodeRedRW.png|center|Escritura a InfluxDB]]
 +
 
 +
[https://binefa.cat/training/upcSchool/2021/20210410/18nodeRedRW.nodered.txt Código de NodeRED para la escritura desde el panel de control]
 +
 
 +
[[Image:18nodeRedRW.png|center|Escritura a InfluxDB]]
  
 +
<!--
 
[https://binefa.cat/training/upcSchool/20190427/nodeRed/random01_Influxdb_out_node_Flow.png Visualización del flujo NodeRed con un nodo InfluxDB]
 
[https://binefa.cat/training/upcSchool/20190427/nodeRed/random01_Influxdb_out_node_Flow.png Visualización del flujo NodeRed con un nodo InfluxDB]
  
Línia 35: Línia 94:
  
 
[https://binefa.cat/training/upcSchool/20190427/nodeRed/random01_Influxdb_out_node_Cfg00.png Configuración del servidor InfluxDB para ser usado por el nodo de salida]
 
[https://binefa.cat/training/upcSchool/20190427/nodeRed/random01_Influxdb_out_node_Cfg00.png Configuración del servidor InfluxDB para ser usado por el nodo de salida]
 +
-->
 +
Una vez puesto en marcha (botón '''ON''' apretado) los datos se almacenan a InfluxDB. Para parar la alimentación de la base de datos apretar el botón '''OFF'''. Paralelamente se pueden ver los datos introducidos al campo '''nAleat''' en tiempo real.
 +
  
Una vez puesto en marcha (botón '''ON''' apretado) los datos se almacenan a InfluxDB. Para parar la alimentación de la base de datos apretar el botón '''OFF'''. Paralelamente se pueden ver los datos introducidos al campo '''nAleat''' en tiempo real.
+
$ influx -username masteri40 -password upcschool
  influx -username iot -password iot
+
Connected to http://localhost:8086 version 1.7.6
  > use aula206
+
InfluxDB shell version: 1.8.0
  > select * from nAleat
+
> '''use aulaVirtual2020'''
  name: nAleat
+
Using database aulaVirtual2020
 +
> '''select * from m05_nAleat'''
 +
  name: m05_nAleat
 +
time                value
 +
----                -----
 +
  1589883858824341140 20
 +
  > '''select * from m05_nAleat'''
 +
  name: m05_nAleat
 
  time                value
 
  time                value
 
  ----                -----
 
  ----                -----
  1556191773053726623 20
+
  1589883858824341140 20
  1556192308275283453 24.5
+
  1589917797335467035 25.8
  1556192309269114244 15.5
+
1589917798315048933 24.9
  1556192310275315326 19.2
+
1589917799300711846 27.9
  1556192311278913648 15.8
+
1589917800302525288 25.9
  1556192312279631340 20.2
+
1589917801303458891 22.1
  1556192313281601350 18.2
+
1589917802303580896 27.1
 +
1589917803305577403 22.6
 +
1589917804304937828 28.7
 +
1589917805305797039 22.1
 +
1589917806319523948 20.3
 +
1589917807308901024 21.5
 +
1589917808330402290 26.5
 +
  > quit
 +
$
 +
 
 +
Para hacer la lectura de los datos era suficiente ser usuario con permisos exclusivos de lectura (usuario ''convidat'').
 +
 
 +
= Escritura de múltiples datos al mismo tiempo. Uso del formato de datos '''json''' =
 +
 
 +
[[Image:19nodeRedJson.png|center|Uso de Json en InfluxDB]]
 +
 
 +
[https://binefa.cat/training/upcSchool/2021/20210410/19nodeRedJson.nodered.txt Código en NodeRED para el uso de Json en InfluxDB]
 +
 
 +
Función '''T:24.7,RH:74.6,P:1007.2,LDR:47.3''' (esta función se ejecuta al desplegar el flujo, debido a la configuración del nodo ''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ón '''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ón '''--> 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;
 +
 
 +
$ influx -username convidat -password benvingut
 +
Connected to http://localhost:8086 version 1.7.6
 +
InfluxDB shell version: 1.8.0
 +
> '''use aulaVirtual2020'''
 +
Using database aulaVirtual2020
 +
> '''select * from m05_json_00'''
 +
name: m05_json_00
 +
time                LDR  P      RH  T
 +
----                ---  -      --  -
 +
  1589965283616685236 47.3 1007.2 74.6 24.7
 +
  1589965290073574911 89.4 1003.5 48.2 21.3
 +
> quit
 +
$

Revisió de 14:33, 7 abr 2021

Acceso[modifica]

Hay una base de datos creada en el InfluxDB con el nombre aulaVirtual2020

El usuario masteri40 con contraseña upcschool tiene permisos de escritura y lectura sobre la base datos aulaVirtual2020

El usuario convidat con contraseña benvingut tiene permisos de lectura sobre la base datos aulaVirtual2020

Uso de prefijos en función del usuario[modifica]

El InfluxDB en el VPS del Máster es un recurso compartido. Para diferenciar las medidas (measurements) introducidas por cada usuario sugerimos el uso del prefijo mxy_ (cambiando xy por vuestro número asignado).

Por ejemplo una medida de temperatura será m05_temperatura.

$ influx -username masteri40 -password upcschool
Connected to http://localhost:8086 version 1.7.6
InfluxDB shell version: 1.8.0
> use aulaVirtual2020
Using database aulaVirtual2020
> insert m05_nAleat value=20.0
> quit
$
$ influx -username convidat -password benvingut
Connected to http://localhost:8086 version 1.7.6
InfluxDB shell version: 1.8.0
> use aulaVirtual2020
Using database aulaVirtual2020
> select * from m05_nAleat
name: m05_nAleat
time                value
----                -----
1589883858824341140 20
> quit

Nodos InfluxDB en NodeRed[modifica]

Instalación de los nodos de InfluxDB en NodeRED

Instalación de los nodos InfluxDB para NodeRED

Lectura con usuario de InfluxDB con permisos de lectura[modifica]

Configuración de InfluxDB para lectura
Lectura de InfluxDB

Código para NodeRED de lectura de InfluxDB

Función --> timestamp, value con dos salidas:

a = msg.payload;
var val = "";
var lastEntryValue;
a.forEach(function(entry) {
   val+="timestamp: "+entry.time+", value: "+entry.value + "\n";
   lastEntryValue = entry.value;
});
msg.payload = val;
var msg_val = {payload : lastEntryValue} 
return [msg,msg_val];

Aleatorización controlada por el panel de control[modifica]

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.

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;

Escritura con usuario de InfluxDB con permisos de lectura y escritura[modifica]

Configuración de InfluxDB para lectura


Escritura a InfluxDB


Escritura a InfluxDB

Código de NodeRED para la escritura desde el panel de control

Escritura a InfluxDB

Una vez puesto en marcha (botón ON apretado) los datos se almacenan a InfluxDB. Para parar la alimentación de la base de datos apretar el botón OFF. Paralelamente se pueden ver los datos introducidos al campo nAleat en tiempo real.


$ influx -username masteri40 -password upcschool
Connected to http://localhost:8086 version 1.7.6
InfluxDB shell version: 1.8.0
> use aulaVirtual2020
Using database aulaVirtual2020
> select * from m05_nAleat
name: m05_nAleat
time                value
----                -----
1589883858824341140 20
> select * from m05_nAleat
name: m05_nAleat
time                value
----                -----
1589883858824341140 20
1589917797335467035 25.8
1589917798315048933 24.9
1589917799300711846 27.9
1589917800302525288 25.9
1589917801303458891 22.1
1589917802303580896 27.1
1589917803305577403 22.6
1589917804304937828 28.7
1589917805305797039 22.1
1589917806319523948 20.3
1589917807308901024 21.5
1589917808330402290 26.5
> quit
$

Para hacer la lectura de los datos era suficiente ser usuario con permisos exclusivos de lectura (usuario convidat).

Escritura de múltiples datos al mismo tiempo. Uso del formato de datos json[modifica]

Uso de Json en InfluxDB

Código en NodeRED para el uso de Json en InfluxDB

Función T:24.7,RH:74.6,P:1007.2,LDR:47.3 (esta función se ejecuta al desplegar el flujo, debido a la configuración del nodo 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ón 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ón --> 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;
$ influx -username convidat -password benvingut
Connected to http://localhost:8086 version 1.7.6
InfluxDB shell version: 1.8.0
> use aulaVirtual2020
Using database aulaVirtual2020
> select * from m05_json_00
name: m05_json_00
time                LDR  P      RH   T
----                ---  -      --   -
1589965283616685236 47.3 1007.2 74.6 24.7
1589965290073574911 89.4 1003.5 48.2 21.3
> quit
$