Saltar navegación

Activa JavaScript para disfrutar de los vídeos de la Mediateca.

ELE03CM_24_25_IoT_ Tecnologías NFC, LPWAN y comunicaciones por satélite

Ajuste de pantalla

El ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:

Subido el 4 de marzo de 2025 por Mediateca ismie

5 visualizaciones

Descargar la transcripción

este de aquí 00:00:01
¿qué puerto era? 00:00:02
sí, vale, entonces, ya voy a compartir 00:00:05
pantalla y empezamos desde aquí, vale 00:00:07
los datos que yo voy a dar son estos que tenéis 00:00:09
aquí, vale, os buscáis, pues Felipe 00:00:11
pues Felipe, tu dirección IP es esta 00:00:12
vale 00:00:15
pues venga 00:00:15
comparto pantalla que creo que ya están grabando 00:00:19
perdona 00:00:21
Feli, la mía la habías puesto luego aparte 00:00:25
al final 00:00:27
la tuya es la smia09, espera que te la voy a decir 00:00:28
exacto, sí 00:00:30
creo que yo sigo buscando la mía 00:00:32
porque sé que la debo tener por aquí 00:00:34
servidores 00:00:36
y el tuyo es 00:00:38
elismie09 00:00:41
que lo tengo en la otra cuenta 00:00:42
voy a cambiar de cuenta 00:00:44
el 9443 00:00:45
¿no? 00:00:56
no, pero entramos por putty 00:00:58
esperad un momento si queréis 00:00:59
que tengáis toda la dirección IP 00:01:01
y ahora entramos todos por putty 00:01:03
para ver que seáis capaces 00:01:04
de recordar 00:01:06
vuestros usuarios, porque eso yo no lo tengo 00:01:09
entonces esperad que estoy 00:01:11
recuperando el de 00:01:13
vale, te lo pego 00:01:14
y Almudena, el tuyo, vale 00:01:17
en el chat 00:01:18
Almudena 00:01:20
ese es el tuyo 00:01:22
en principio solo tenéis, solo necesitáis 00:01:27
la dirección IP, vale, cada uno del vuestro 00:01:30
entonces yo voy a coger la dirección IP del mío 00:01:32
estoy ya compartiendo 00:01:34
pantalla 00:01:36
vale, pues empiezo a compartir 00:01:37
creo que deberíais estar ya viendo mi pantalla 00:01:39
bien, pues entonces 00:01:44
voy a minimizar esto 00:01:46
para que no os causeis problemas 00:01:48
y simplemente accedo al puti 00:01:51
puti o kitty 00:01:53
o lo que tengáis cada uno, vale 00:01:55
si no lo hemos cerrado 00:01:56
seguiremos activos, no? 00:01:59
no creo, seguramente os haya 00:02:01
expulsado porque las sesiones 00:02:03
normalmente se cierran 00:02:05
yo me he cambiado del root 00:02:06
al usuario que creé y me ha cambiado 00:02:08
ah, sí, sí, no 00:02:11
la máquina no se ha parado 00:02:12
pensé que te referías a entrar desde el putty 00:02:14
desde el putty seguramente te haya 00:02:16
cerrado la sesión del otro día hoy 00:02:19
pero si estás dentro pues fenomenal 00:02:20
vale, entonces veis, yo pongo aquí mi dirección 00:02:22
IP, no sé si recordáis 00:02:25
en el putty es un terminal 00:02:26
SSH, entonces pongo aquí mi dirección 00:02:28
IP, el puerto no hay que cambiarlo 00:02:31
lo único que le vamos a decir es que queremos 00:02:33
a hacer una conexión SecureSell 00:02:34
SSH y damos 00:02:36
Open. Y entonces él nos 00:02:38
va a pedir el usuario. Entonces 00:02:40
yo creé aquí un usuario para mí que era 00:02:42
Juanfe y luego cada uno 00:02:44
os creasteis un usuario. Pues eso es lo que 00:02:47
os estoy pidiendo si 00:02:48
sois capaces de recordar. 00:02:50
¿Con el root 00:02:54
no vale? Sí, sí, 00:02:55
con el root también si preferís. Si tenéis 00:02:57
la clave del root ahí también me vale. 00:02:58
¿Alguna manera de listar los usuarios 00:03:02
para acordarse el nombre? 00:03:04
pues yo es que no me manejo muy bien 00:03:08
en Linux, pero me imagino que sí que lo habrá 00:03:11
no sé, pero ¿eres capaz de entrar 00:03:13
como root? 00:03:15
sí, porque estoy en el tuyo, yo soy Adrián 00:03:16
he entrado como root sin problema 00:03:18
pues esperad, que es con el 00:03:20
etc password, pero a ver cómo lo haga 00:03:22
yo también he entrado, soy modesto 00:03:24
también he entrado como root en la misma máquina 00:03:29
vale 00:03:30
pues a ver, si os encuentro a vosotros 00:03:32
soy Adrián 00:03:34
hay un usuario que es Adrián 00:03:35
y Modesto 00:03:38
Vale, pues nada 00:03:42
Modesto, tú sigues como Ruth 00:03:46
porque no encuentro cuál será 00:03:48
como no sé, este de Isabel 00:03:50
No, no, no, no está creado 00:03:52
Yo no me acuerdo 00:03:53
y lo tenía guardado 00:03:56
pero no lo encuentro 00:03:59
Puedes entrar como Ruth 00:04:00
Eres Almudena la que ha dicho esto último, ¿no? 00:04:03
Sí, sí, soy yo 00:04:05
¿Y puedes entrar como Ruth o tampoco? 00:04:07
¿y sabríamos la contraseña? 00:04:09
no, yo no 00:04:13
porque la cambiaste 00:04:13
es que como obliga a cambiarla 00:04:15
pues no 00:04:17
no pasa nada 00:04:18
si quieres 00:04:24
lo único que yo puedo hacer es reiniciarte 00:04:25
el servidor 00:04:27
pero claro, te tocaría volver a instalarte 00:04:28
el Node.js y eso 00:04:31
así que yo creo que es mejor que no Almudena 00:04:33
como al Node.js sí que puedes acceder 00:04:35
aunque no tengas acceso 00:04:37
como administrador, pues vamos tirando 00:04:38
vale, pues entonces 00:04:41
os recuerdo un poquillo 00:04:44
lo que estuvimos haciendo el otro día 00:04:45
para que cojamos el hilo 00:04:47
entonces teníamos por aquí 00:04:48
estuvimos hablando de 00:04:55
estuvimos hablando de las distintas 00:04:57
paradigmas 00:05:04
los distintos paradigmas 00:05:06
que existen para desplegar software 00:05:08
en la nube 00:05:10
Entonces, uno de ellos es el de utilizar el bare metal, es decir, a hierro limpio, 00:05:12
que es instalar las aplicaciones como las instalamos en nuestros propios ordenadores. 00:05:18
Eso es lo de la derecha. 00:05:21
Pero que lo más habitual era utilizar o bien máquinas virtuales, que es lo que veis a la izquierda, 00:05:23
o bien contenedores, que es lo que veis en el centro. 00:05:28
Las máquinas virtuales, supongo que casi todos tenéis experiencia con ellas. 00:05:31
Ahí lo que tenemos es un hierro, que es lo que tenemos abajo, el hardware, 00:05:35
sobre el que instalamos un sistema operativo anfitrión 00:05:38
y sobre ese sistema operativo instalamos una aplicación 00:05:41
que se llama hipervisor. 00:05:44
Por ejemplo, Proxmos V es un hipervisor muy famoso. 00:05:46
Otro, VirtualBoss, es un hipervisor también. 00:05:50
Entonces, ese hipervisor lo que te permite es 00:05:54
definir máquinas virtuales, 00:05:56
cada máquina virtual con su propio sistema operativo. 00:05:59
Por el contrario, en los contenedores 00:06:02
lo que tenemos es un único sistema operativo anfitrión. 00:06:04
No hay sistemas operativos de los huéspedes. Todos comparten el mismo sistema operativo de la anfitrión. Entonces, los contenedores son un poco más ligeros porque no hace falta repetir el sistema operativo y consumen menos recursos, típicamente. Por lo general, un sistema con contenedores funciona más rápido que un sistema de máquinas virtuales. 00:06:07
¿Vale? Eso es lo que estuvimos viendo el otro día. Estuvimos comentando los conceptos fundamentales de los contenedores. Ya os dije que hoy por hoy hablar de contenedores es prácticamente hablar de Docker, porque es el estándar de facto. Todo el mundo usa Docker. Entonces hay tres conceptos fundamentales que eran el de registro, imagen y contenedor. 00:06:28
Un registro es simplemente una librería, una biblioteca, donde están todos los programas Docker, todas las aplicaciones Docker que se os pueda pasar por la cabeza. 00:06:46
Cuando alguien quiere publicar algo en formato Docker, lo publica ahí en hubdocker.com y ahí vais a encontrar todos los programas Docker que podáis necesitar. 00:06:56
Luego, la imagen es precisamente lo que nosotros encontramos en ese registro. 00:07:05
En ese registro lo que tenemos son imágenes de las aplicaciones. 00:07:10
Esas imágenes nosotros las vamos a usar a modo de plantilla para generar tantas instancias de esas aplicaciones como nosotros queramos. Y esas instancias se llaman contenedores. Si hiciéramos el similar con la programación orientada a objetos, la imagen sería la clase y el contenedor sería el objeto. 00:07:14
Cada instancia que creamos de una imagen se llama contenedor. Yo, por ejemplo, puedo descargarme la imagen de Node.js y levantar cuatro o cinco instancias de Node.js en mi servidor para cada uno de mis alumnos o como yo quiera hacerlo. 00:07:33
entonces 00:07:47
estuvimos hablando de las ventajas y de las inconvenientes 00:07:49
y lo que yo os comenté es que 00:07:52
cuando descargamos la imagen 00:07:54
la imagen es inalterable 00:07:56
veis estas tres capas de aquí abajo 00:07:58
esa es la imagen de Docker 00:08:00
y luego sobre esa imagen de Docker 00:08:02
se crea una capa que es de lectura 00:08:04
y escritura, estas otras capas de abajo 00:08:06
de la imagen son solo de lectura 00:08:08
y esa imagen de lectura y escritura 00:08:10
es la que constituye el contenedor 00:08:12
ahí es donde se hacen todos los 00:08:14
cambios que haya que hacer en la aplicación, en lugar de hacerse en la imagen, se hacen en la 00:08:16
capa de contenedor. Entonces, ¿qué ocurre? Que un contenedor cuando se detiene, se bota, pierde todo 00:08:21
su contenido. Para evitar eso, existe una técnica que se llama volúmenes. Los volúmenes son carpetas 00:08:27
de nuestro ordenador anfitrión que vinculamos a carpetas del contenedor. De tal forma que el 00:08:35
contenedor, en lugar de almacenar esos datos en esas carpetas propias del 00:08:41
contenedor que se perderían si se apagase el contenedor, los almacena en una 00:08:46
carpeta externa, en una carpeta del ordenador anfitrión. Y así, aunque 00:08:50
detengamos el contenedor, no se pierde. Estuvimos hablando que existen dos 00:08:54
formas de acceder desde el exterior a un ordenador en el que estamos 00:09:00
ejecutando contenedores. La que nosotros estamos utilizando aquí es el 00:09:04
binding. El binding es simplemente 00:09:08
que un puerto del ordenador anfitrión 00:09:09
lo vinculo a un puerto 00:09:12
del contenedor. 00:09:14
Entonces, vamos a probar ya que esto 00:09:16
funciona y vamos, por ejemplo, a 00:09:18
acceder a Node-RED. 00:09:20
Decidme una cosa. 00:09:23
¿Veis ahora mi 00:09:24
navegador web? Es que no estoy seguro de si 00:09:26
cuando cambio veis el navegador web. 00:09:28
Es NER. Sí, eso lo estáis viendo, 00:09:32
¿no? Sí. Vale, perfecto. Vale, 00:09:34
pues entonces, simplemente, en una ventana del 00:09:36
navegador, escribís vuestras 00:09:38
la dirección IP que os haya correspondido 00:09:40
a cada uno 00:09:42
que la mía está aquí 00:09:42
vale 00:09:45
la dirección IP y luego 00:09:50
1883 00:09:52
vale, perdonad 00:09:54
que lo tengo al 1880 00:10:04
1880, os lo he dicho mal, vale 00:10:05
el 1880 00:10:07
y si todo ha ido bien 00:10:09
deberíais estar viendo ahora mismo 00:10:12
vuestra instancia 00:10:13
de Node-RED 00:10:16
¿esto por qué es? 00:10:17
pues esto es porque nosotros 00:10:21
hemos vinculado el puerto 00:10:23
1880 de la máquina 00:10:26
anfitrión al puerto 00:10:28
1880 00:10:29
de la máquina del 00:10:31
contenedor de Node-RED 00:10:33
¿y eso cómo lo podría ver yo? pues recordar que lo primero 00:10:35
que hicimos el otro día fue 00:10:38
instalar 00:10:39
un gestor de contenedores 00:10:41
que era Portainer 00:10:43
al que podéis acceder con la misma dirección IP 00:10:44
y en el puerto 9443 00:10:47
¿vale? 00:10:50
entonces aquí hay que poner las contraseñas 00:10:54
que no sé si os acordaréis 00:10:56
perdona 00:11:12
¿qué puerto ponías? 00:11:13
¿1000? ¿11000? 00:11:14
9443 00:11:16
Portainer 00:11:17
Sí, ahí debería ir el portainer 00:11:23
el usuario es admin y la contraseña 00:11:26
pues si tomasteis nota de ella 00:11:28
bien y si no, pues será complicado 00:11:30
Bueno 00:11:31
si no, lo veis aquí en lo que estoy yo mostrando 00:11:34
aquí veis que tenemos 00:11:36
un entorno, que es el entorno local 00:11:37
es decir, esta es la máquina que tenemos 00:11:40
en Nuremberg 00:11:42
os creé a cada uno una máquina con 4 GB 00:11:43
2 núcleos y demás 00:11:46
entonces si yo entro a ver el entorno local 00:11:47
veis que en ese entorno local 00:11:50
tengo ahora mismo funcionando 00:11:51
varios contenedores, varios stacks 00:11:53
si yo voy a ver los contenedores 00:11:55
veis que tengo 00:11:57
por ejemplo un contenedor de no de red 00:11:59
y aquí se ve 00:12:01
que tengo vinculado el puerto 00:12:03
1880 00:12:05
de la máquina anfitrión 00:12:07
al puerto 1880 00:12:09
de la máquina 00:12:11
huésped 00:12:13
si yo quisiera 00:12:14
podría por ejemplo duplicar este contenedor 00:12:16
o añadir un contenedor nuevo 00:12:19
pero 00:12:21
no sé si está hablando alguien 00:12:22
no, no sé 00:12:25
vale, continúo 00:12:30
entonces 00:12:34
si yo quisiera por ejemplo podría 00:12:36
duplicar uno de estos contenedores 00:12:38
o directamente irme aquí 00:12:40
a plantillas 00:12:42
y en plantillas como os enseñé el otro día en aplicaciones 00:12:43
yo busco 00:12:46
por ejemplo Node.RED que viene aquí instalado 00:12:48
y digo mira, quiero instalarme 00:12:50
no de red, entonces 00:12:52
veis que me pide un nombre, le digo 00:12:54
pues mira, quiero llamarlo no de red 2 00:12:56
en la zona 00:12:58
horaria aquí, nunca me acuerdo lo que hay que poner 00:12:59
creo que es 00:13:01
más gmt1 creo que era 00:13:02
gmt1 00:13:05
y luego 00:13:07
suele ser gmt 00:13:10
más 1 escrito, o gmt más 1 00:13:14
algo así, gracias Germán 00:13:15
gmt 00:13:17
gmt más 1 00:13:18
y luego aquí le diría que lo quiero desplegar, ¿vale? 00:13:21
Entonces, ¿qué ocurre? 00:13:33
Que si lo despliego tal cual, 00:13:34
pues probablemente se me solapen los puertos, ¿veis? 00:13:35
Que me está dando aquí un error 00:13:38
porque me está diciendo que los puertos están solapados. 00:13:39
Entonces, tendría varias opciones. 00:13:45
Podría venirme, por ejemplo, 00:13:46
al contenedor que ya tenía de portainer, 00:13:48
perdón, de no de red, 00:13:51
y editarlo para cambiarle los puertos y poder instalar uno nuevo. 00:13:52
Eso lo podemos hacer aquí directamente en la página de edición. 00:13:56
Véis que tenemos aquí la configuración de puertos 00:14:01
y yo podría cambiar ese puerto al 1881, por ejemplo, 00:14:03
y así evitaría ese problema. 00:14:09
Con esto, lo único que trato de demostraros 00:14:11
es que realmente es muy, muy sencillo crear contenedores. 00:14:14
Entonces, como veis, de hecho tengo aquí una opción 00:14:19
que es duplicar o editar directamente 00:14:21
el contenedor, entonces imaginaos 00:14:23
que yo quiero crearme un nodo de red 00:14:25
para Adrián, que está aquí 00:14:27
conmigo trabajando en la misma máquina 00:14:29
vale, pues yo podría poner ahí docker 00:14:31
Adrián y decir, oye no 00:14:33
mira, el de Adrián en vez de entrar 00:14:35
por el puerto 1880 00:14:37
él va a entrar por el puerto 1881 00:14:39
vale, hago 00:14:41
despliegue del contenedor 00:14:43
veis que ahora ya no me da ningún problema 00:14:44
si ahora voy a ver los contenedores 00:14:48
veis que se está iniciando 00:14:51
y si 00:14:52
y si ahora 00:14:54
Adrián 00:14:57
accediese 00:14:59
a nuestra dirección IP 00:15:00
por el puerto 1881 00:15:05
pues tendría ahí su propia instancia 00:15:07
de no de red para él solito 00:15:09
entonces esto por ejemplo para 00:15:10
el aula 00:15:12
pues ha vinculado a la mía 00:15:13
no sé por qué, debo haber cambiado 00:15:17
ah, que es que he cambiado, no he creado 00:15:19
una nueva, la he 00:15:21
la he editado, tendría que haberle dicho 00:15:22
duplicar, a ver 00:15:24
1881 y la otra 00:15:26
que he hecho con ella 00:15:28
en el 1880 00:15:29
vale, lo que estoy 00:15:31
es accediendo al flujo, que yo no quiero acceder 00:15:40
al flujo, se me han quedado 00:15:42
vinculados porque estarán usando probablemente 00:15:49
el mismo volumen y entonces 00:15:51
está cogiendo los flujos del mismo sitio, tendría 00:15:53
que haber creado también los volúmenes diferentes 00:15:55
bueno, pero la idea yo creo que se entiende 00:15:57
que es realmente muy simple 00:15:59
generar contenedores nuevos. 00:16:01
El problema que estoy teniendo es precisamente el que os digo, 00:16:05
que lo he duplicado, pero no he tenido en cuenta aquí abajo 00:16:07
los volúmenes que tendría que haber cambiado. 00:16:11
Veis, estoy usando el mismo volumen para los dos. 00:16:14
Entonces, tendría que haber cambiado el nombre de estos volúmenes, 00:16:16
porque si no están cogiendo los datos del mismo sitio. 00:16:21
Son dos instancias de noderes distintas, 00:16:24
pero guardando la información en el mismo sitio. 00:16:26
Vale, pues esto es lo que estuvimos hablando del tema de la gestión de los contenedores, estuvimos viendo varios detalles sobre cómo añadir usuarios, porque luego quería hablaros de otra cosa que no era directamente Docker, sino Docker Compose, Docker Compose lo que me permite es agrupar varios contenedores para que funcionen de forma conjunta, varias aplicaciones para que funcionen de forma conjunta, 00:16:28
El problema que tiene Docker Compose es que se basa en archivos de texto que tú tienes que configurar. Y esos archivos de texto pueden ser un poco complicados de crear. Entonces, lo que os estuve enseñando el otro día es, por ejemplo, esto sería un archivo Docker Compose. Y esto te lo tienes que escribir tú a mano, con cuidado de no meter la pata en ningún sitio. 00:16:54
el inconveniente que tiene esto es que 00:17:15
es fácil equivocarse, por eso 00:17:18
os dije que para crear este tipo 00:17:19
archivo Docker Compose 00:17:23
podemos recurrir a una aplicación que se llama 00:17:25
IoT Stack, que es la que estuvimos 00:17:28
usando el otro día, pues por ejemplo si yo voy a 00:17:30
a mi 00:17:33
a ver si os puedo poner la fuente más grande 00:17:35
porque no sé si estaréis viendo algo 00:17:39
vale, si yo hago cambio 00:17:41
a mi directorio IoT Stack, recordad que ahí teníamos un archivo 00:17:56
que era el menú .osh, me parece que era, que cuando 00:18:01
lo ejecutábamos, pues nos aparecía esta opción en el que yo 00:18:05
mediante build stack, ahora como he hecho la fuente tan grande no se ve bien 00:18:08
¿vale? pero creo que lo recordaréis, aquí era un menú en el que nosotros decíamos, oye yo 00:18:13
quiero combinar en un mismo stack todas estas aplicaciones 00:18:16
marcamos todas las aplicaciones, en este caso marcamos Mosquito 00:18:20
InfluxDB, Node-RED y Grafana 00:18:24
y él nos creó un stack 00:18:27
con esas cuatro aplicaciones 00:18:28
eso ya lo estuvimos viendo el otro día 00:18:30
ya creamos el stack 00:18:34
es esto que estáis viendo aquí 00:18:35
que lo recordaréis 00:18:36
y una vez que creamos el stack 00:18:37
pues ya tenemos acceso 00:18:40
a los cuatro servicios 00:18:41
que nosotros montamos en este caso 00:18:44
a Mosquito, Node-RED, InfluxDB y Grafana 00:18:45
cada uno de ellos está en su propio puerto 00:18:49
algunos tienen interfaz web 00:18:52
como es el caso de Node.js y de Grafana 00:18:55
y otros no, vale, en FluxDB ya visteis 00:18:57
que teníamos que estar ahí trabajando 00:18:59
con una terminal 00:19:01
y Mosquito tampoco tiene interfaz web 00:19:02
vale, estuvimos aquí trabajando 00:19:05
un poquito, os conté el tema de 00:19:07
MQTT como funcionaba 00:19:09
imagino que recordaréis 00:19:10
esto de los topics 00:19:13
que eran como buzones de correo 00:19:14
que yo podía enviar información 00:19:16
y que lo interesante que tenía 00:19:18
MQTT es que el broker es único 00:19:20
o sea, los dispositivos solamente tienen que conocer 00:19:23
la dirección del broker, no necesitan conocer unos 00:19:27
la dirección de otros para poder comunicarse entre sí 00:19:30
porque es el broker el que mantiene un registro 00:19:33
de todos los dispositivos y él sabe cómo localizar 00:19:36
a cada dispositivo, por eso 00:19:39
MQTT es muy popular para el intercambio de datos 00:19:41
entre plataformas 00:19:45
Estuve hablando un poquito de que hay tres calidades de servicio, la 0, la 1 y la 2. 00:19:48
Normalmente la E0 es la de disparar y olvidar y es la que más se utiliza. 00:19:52
Lo que pasa es que no te garantiza que los datos lleguen. 00:19:56
Si yo voy subiendo de calidad de servicio a la 1 o la 2, pues me garantizo que los datos lleguen en el caso 1 00:19:58
y además en el caso 2 me garantizo que lleguen de forma única. 00:20:04
Pero cada vez lo estoy convirtiendo en un protocolo más pesado. 00:20:09
Entonces en microcontroladores con poca capacidad, pues a lo mejor empiezo a tener problemas 00:20:12
si subo la calidad de servicio 00:20:16
y esto fue lo que más o menos 00:20:18
estuvimos haciendo el otro día 00:20:21
y luego montamos un par de 00:20:22
topics 00:20:24
un par de flujos 00:20:25
para ver cómo funcionaba esto de MQTT 00:20:28
yo por ejemplo aquí os recuerdo 00:20:31
esto era no de red 00:20:33
os recuerdo que tenía aquí 00:20:35
un inyector 00:20:37
ese inyector me publicaba 00:20:37
en un topic de MQTT 00:20:40
que era casa, planta baja, salón 00:20:42
y a su vez tenía otro nodo que estaba 00:20:44
suscrito a todos los 00:20:46
subtopics de casa 00:20:49
de tal forma que si yo 00:20:50
inyecto aquí 00:20:52
¿qué va a ocurrir? que va a pasar 00:20:54
temperatura 25 aquí 00:20:56
además se va a mostrar en el terminal 00:20:58
serie porque lo tengo aquí 00:21:00
¿vale? y adicionalmente 00:21:02
como estoy suscrito también se va a mostrar 00:21:04
por segunda vez aquí, entonces si yo 00:21:06
inyecto con este botón, recordad 00:21:08
¿vale? ¿veis? me aparece 00:21:10
dos veces. La primera vez 00:21:12
si me coloco encima 00:21:14
fijaos que aparece un rectángulo naranja 00:21:16
alrededor del debug1 00:21:18
¿Veis? Me coloco encima 00:21:20
y aparece el rectángulo naranja punteado 00:21:21
Eso está muy bien porque así 00:21:24
sabes quién ha originado cada mensaje 00:21:26
que tienes aquí. Si me pongo 00:21:28
en este otro, sin embargo, veis 00:21:30
que se recuadra el de aquí 00:21:32
abajo, el de debug2 00:21:34
y así sé que el responsable de que haya aparecido 00:21:35
esto aquí es este nodo 00:21:38
Bueno, pues estuvimos trabajando con 00:21:40
esta parte de MQTT. Luego, ya que habíamos trabajado eso, empezamos a hablar un poquito 00:21:42
de InfluxDB. InfluxDB era una base de datos de serie temporales. Ya os dije que aquí no tenemos 00:21:47
tablas tal cual, sino que lo que tenemos son medidas. Esas medidas tienen una sintaxis tal 00:21:54
como la que estáis viendo aquí. Primero el nombre de la medida, luego una coma y separadas por comas 00:22:00
las etiquetas 00:22:07
y luego un espacio 00:22:08
y separados por comas 00:22:10
los campos, entonces por ejemplo 00:22:12
esto sería un point 00:22:14
de un measurement, es decir 00:22:16
un punto de la medida 00:22:18
temperatura, esa medida 00:22:20
ese point tiene dos etiquetas 00:22:22
nevera que vale 25 y unidad 00:22:24
que vale c de celsius 00:22:26
y tiene dos campos, exterior que vale 00:22:28
32 e interior que vale 00:22:30
3.8, pues estuvimos 00:22:32
jugando un poco con esto, vimos como 00:22:34
podíamos abrir una consola 00:22:36
veíais que era 00:22:38
este comando directamente 00:22:39
desde aquí 00:22:41
a ver 00:22:44
yo ponía un docker 00:22:45
compose 00:22:48
en el exec, influxdb 00:22:49
docker compose 00:22:51
exec 00:22:53
influx 00:22:55
bus, y esto me abría 00:23:00
influx 00:23:02
la x 00:23:03
y eso me abría una consola 00:23:05
¿veis? ahora ya el PROM ha cambiado 00:23:08
ahora ya no soy Juanfe 00:23:10
que estoy en la máquina ISMIE01 00:23:12
ahora soy el usuario root 00:23:14
que está en este contenedor 00:23:15
que era el contenedor de InfluxDB 00:23:17
y una vez que estaba ahí pues ya podía 00:23:20
yo arrancar la consola de Influx 00:23:22
y aquí ya empezar a trabajar 00:23:24
con 00:23:26
con las bases de datos 00:23:26
que creamos una base de datos que se llamaba IOT 00:23:30
entonces yo podría decir 00:23:32
quiero utilizar esta base de datos 00:23:33
y luego sobre esta base de datos, 00:23:35
pues recordad que podíamos lanzar consultas, 00:23:37
consultas del tipo de las que tenemos en SQL, 00:23:41
de este estilo, ¿vale? 00:23:45
Pues select never and exterior from temperature 00:23:46
o lo que fuera. 00:23:48
Y estuvimos trabajando con esto. 00:23:49
Esto obviamente se hace un poco complicado hacerlo así 00:23:51
y por eso lo que hicimos fue cambiar inmediatamente 00:23:53
a Node-RED. 00:23:56
Y en Node-RED creamos este tipo de nodo 00:23:57
que estáis viendo aquí. 00:24:01
Aquí lo que hicimos fue que con un inyector insertamos una carga de pago y aquí en función 1 lo primero que hicimos fue cambiar esa carga de pago por otra diferente que tenía dos, era un array con dos valores. En uno estaban los campos y en otro estaban los fields. 00:24:02
ya os comenté que esto no es magia 00:24:23
que yo sepa, sino que directamente 00:24:25
cuando voy a ver la documentación 00:24:27
de InfluxDB 00:24:29
aquí me está diciendo que si quiero 00:24:30
hacerlo con un array, aquí lo dice 00:24:32
tiene que tener un array con una serie 00:24:39
de puntos conteniendo los 00:24:41
campos y las etiquetas, por eso lo hice 00:24:43
así, y directamente se publicaba 00:24:45
en InfluxDB, con lo cual esto era 00:24:47
muy cómodo, porque nosotros directamente 00:24:49
le damos aquí a inyectar 00:24:51
Y esto lo que estaba haciendo era inyectar en la base de datos InfluxDB datos elegidos al azar. 00:24:53
Pues eso lo hicimos, vimos que era bastante sencillo. 00:25:00
Y luego ya adicionalmente sacamos aquí una segunda rama para poder crear un dashboard. 00:25:03
Y creamos un dashboard sencillito en Node-RED. 00:25:09
Los dashboards estaban aquí en dashboard y para acceder a ellos era con este iconito de aquí. 00:25:12
Entonces con ese icono veis que aparece ahí mi dashboard. 00:25:18
y cada vez que yo vaya añadiendo un punto 00:25:23
pues el punto se irá 00:25:25
añadiendo aquí en el gráfico 00:25:27
es que van apareciendo puntos nuevos 00:25:28
pues esto, aquí es donde nos quedamos 00:25:30
exactamente el otro día 00:25:33
entonces voy a arrancar a partir de aquí 00:25:35
no sé si todo el mundo 00:25:37
consiguió llegar más o menos hasta aquí 00:25:38
si queréis que 00:25:40
haga hincapié en alguna cosa 00:25:42
o si puedo 00:25:44
podría continuar 00:25:45
la función 2 ya ahí me quedé 00:25:47
no la conseguí hacer 00:25:50
si queréis repito esta parte 00:25:52
de aquí abajo 00:25:55
del gráfico 00:25:55
porque hoy precisamente 00:25:58
lo vamos a dedicar a los gráficos 00:26:00
entonces bueno, pues fijaos 00:26:02
voy a quitar esto 00:26:04
porque aquí me estaba quedando 00:26:08
el payload 00:26:10
entonces, quito todo esto 00:26:11
del gráfico 00:26:15
voy a borrar también mi dashboard 00:26:18
completo, ¿vale? Para empezar desde cero 00:26:22
y que no veáis nada raro vosotros 00:26:24
que eso era en... 00:26:26
A ver, ¿cómo se hace para borrar un dashboard? 00:26:27
Tendré que editar y luego borrar. 00:26:38
Eliminar, sí. Es eso, ¿vale? 00:26:42
Bien. Entonces, este 00:26:44
dashboard yo ya me lo he cargado, entonces ya 00:26:45
no existe. 00:26:47
No debería existir. Sigue existiendo por ahí 00:26:49
de algún modo. Bueno, el caso es que 00:26:51
partimos de esta situación, ¿vale? 00:26:53
Me vi el vídeo 00:26:55
en el cuadradito de arriba 00:26:57
de la derecha, al lado del 00:27:00
ZEM, allí explicaste. 00:27:01
Cuadradito, cuadradito, el cuadradito de la derecha. 00:27:04
Este, sí. 00:27:06
Sí, este es para acceder al dashboard. 00:27:07
Ah. 00:27:10
Pero no para borrarlo. 00:27:12
No, no, este es para acceder al dashboard, 00:27:13
que en principio los míos ya los he borrado 00:27:15
y por eso me debería aparecer esto 00:27:17
en blanco. 00:27:19
Sí, para borrarlo será 00:27:20
aquí en layout 00:27:23
le dais a editar 00:27:24
y cuando le habéis dado a editar os aparece 00:27:26
a eliminar o algo así 00:27:29
creo que pone 00:27:31
vale 00:27:32
pues venga, voy a 00:27:35
continuar, vale, entonces lo que voy a hacer es que 00:27:37
ahora me voy a crear aquí otra función 00:27:39
la voy 00:27:41
a enganchar 00:27:43
ya estoy cometiendo el mismo error del otro día 00:27:44
la voy a enganchar aquí 00:27:47
¿por qué? 00:27:48
porque de aquí recordad que me salen dos objetos 00:27:51
un objeto con los campos 00:27:53
y otro objeto 00:27:55
con los ladders 00:27:57
entonces lo que yo quiero es quedarme solamente 00:27:58
¿Puedo tener un sitio para aparcar? Porque hoy hay puente 00:28:01
No sé qué 00:28:03
No me da el camino 00:28:04
Silenciad por favor 00:28:08
En los institutos 00:28:10
mañana sí está lleno el camino 00:28:12
A ver, vamos a ver si puedo yo silenciaros 00:28:14
a todos 00:28:17
Participar 00:28:17
es participante 00:28:25
gente. Juanfe, una 00:28:27
pregunta. Sí, dime. 00:28:29
No, yo es que 00:28:31
me quedé un poco más atrás, pero 00:28:33
era por cogerlo. 00:28:35
Perdona, Manuel, 00:28:40
creo que estabas hablando y te han silenciado. 00:28:41
No he sido yo, lo prometo. 00:28:43
Ahora, ahora. 00:28:46
Que digo que yo me quedé 00:28:47
un poquillo más atrás en lo de... 00:28:49
Yo tengo hecho todo lo de arriba, 00:28:52
pero lo de marca de tiempo, 00:28:53
función y todo esto... 00:28:55
No lo sé si es 00:28:58
volver mucho más atrás o no? 00:28:59
No, me da igual, ¿vale? 00:29:02
Porque es prácticamente igual, es la diapositiva 00:29:04
anterior. Entonces, lo que sí que 00:29:06
necesitaría, Manuel, es que ejecutases 00:29:07
este comando, que te lo voy 00:29:10
a pinchar, te lo voy a poner 00:29:11
en el... 00:29:13
te lo pongo en el chat. 00:29:15
Sí. Vale. 00:29:18
Esto lo podéis hacer todos también, para verificar 00:29:24
que tenéis la base de datos creada, ¿vale? 00:29:26
Y eso desde... 00:29:29
eso desde el putin 00:29:30
desde aquí 00:29:32
¿lo has puesto en el chat? 00:29:35
creo que sí, ¿no? 00:29:41
sí, sí, sí 00:29:42
vale, entonces yo pego ahí ese comando 00:29:43
entonces ese comando 00:29:45
lo que me está haciendo es abrirme una consola 00:29:48
hay que ir a la carpeta esa, ¿no? 00:29:50
y yo te stack 00:29:52
no, no, desde cualquier sitio lo puedes tirar 00:29:53
desde el putin, pero a ver 00:29:55
es que 00:29:58
yo cargué el otro día el putty pero 00:30:12
no sé 00:30:15
hay que instalarlo, ¿verdad? 00:30:15
no, el putty ya está instalado del otro día 00:30:20
lo deberías tener 00:30:22
entonces simplemente 00:30:23
ejecútalo y ya está, desde Windows 00:30:26
pues buscas ahí putty 00:30:28
y te debería salir el putty ahí 00:30:29
a mí no me va 00:30:33
joder 00:30:35
¿que no te va el putty? 00:30:36
no, no me va la sentencia 00:30:38
el docker-compose 00:30:40
no configuración, fichero, proporcionado 00:30:41
no encontrado 00:30:44
perdona, no te he oído 00:30:44
¿me lo repites? 00:30:47
no configuración, fichero, proporcionado 00:30:49
dos puntos 00:30:53
no encontrado 00:30:54
como que no he encontrado un fichero de configuración 00:30:55
¿me toque la carpeta y otro stack? 00:30:58
y si escribes docker ps-a 00:31:00
¿qué te dice? 00:31:02
docker ps-a 00:31:04
docker ps-a 00:31:07
joder y cual era el 00:31:11
el password 00:31:27
si me sale 00:31:28
lo que a ti 00:31:44
y te dice que llevan 00:31:45
que están corriendo, que están en status 00:31:49
te dicen que están up 00:31:51
si seis días 00:31:52
seis días 00:31:57
o sea en status 00:32:00
pero entonces ahí si pones 00:32:02
docker-compose-esec-influx-db-bask 00:32:07
Ah, perdona, sí. 00:32:10
Vale, vale, vale, sí. Tienes razón. 00:32:13
En la carpeta 00:32:15
YoTestTag, perdona, es que el docker-compose 00:32:16
lo tenemos en la carpeta YoTestTag. 00:32:19
Perdóname, sí, sí. 00:32:21
Dentro de la carpeta YoTestTag 00:32:23
ejecutáis el docker-compose-esec-influx-db-bask 00:32:24
y entonces 00:32:33
os cambiará el prompt. 00:32:35
Ok, correcto. 00:32:38
y cuando os cambia el prompt 00:32:39
ya arrancáis Influx 00:32:41
la consola de Influx 00:32:42
a ver, a ver 00:32:44
¿el prompt tiene que ser 00:32:47
la de cada uno o...? 00:32:51
el prompt debería ponerte aquí 00:32:54
pues tu nombre 00:32:56
y la máquina tuya 00:32:58
y cuando ejecutes el comando docker compose 00:33:00
os cambiará 00:33:03
a root y un nombre de contenedor 00:33:04
que imagino que será distinto para cada uno de vosotros 00:33:06
vale, pero 00:33:09
cuando yo abro Qt y me pone 00:33:10
loginas 00:33:12
vale, yo pongo ahí el smie-08 00:33:12
no, ahí pones el usuario 00:33:16
que creaste el otro día, si te acuerdas 00:33:18
no sé cuál crearías 00:33:20
imagino que crearías uno que se llamase 00:33:21
Manuel o algo así 00:33:23
a ver, vale 00:33:24
ok, ya he arrancado 00:33:29
el influx también 00:33:37
vale, pues si lo habéis 00:33:38
arrancado, pues lo más fácil es hacerte 00:33:41
un show databases 00:33:42
¿vale? y ahí te saldrá 00:33:44
qué base de datos tenéis 00:33:46
entonces deberíais tener la base 00:33:47
de datos que creamos el otro día, la base de datos 00:33:50
IOT 00:33:52
recto, ahí está 00:33:52
pues una vez, si la tenéis, pues 00:33:55
simplemente a continuación podréis poder hacer un 00:33:58
use IOT, eso es decir 00:34:00
quiero utilizar la base de datos IOT 00:34:01
¿vale? y ahora os pego 00:34:03
por ejemplo hay un comando para que podáis 00:34:06
ver si tenéis algún 00:34:08
point, os pego un comando 00:34:09
en el chat 00:34:12
ese comando 00:34:12
lo pego aquí 00:34:16
que es seleccionar nevera y exterior 00:34:18
de temperatura 00:34:20
y ahí me salen todos los datos que yo tengo 00:34:20
almacenados en la base IOT 00:34:23
para nevera 00:34:26
y exterior 00:34:27
¿sí? 00:34:29
vale, entonces 00:34:37
aquí ya tenemos la base de datos 00:34:43
ya sabemos cómo insertar datos 00:34:45
que lo estamos haciendo aquí directamente con 00:34:47
A mí no me ha funcionado el SELEC. 00:34:49
¿Qué te dice? 00:34:52
¿Me lo he juzgado otra vez? 00:34:56
Falta el espacio en blanco, ¿no? 00:34:58
Lo que has pegado. 00:34:59
SELEC, espacio en blanco, nevera, ¿no es? 00:35:00
Ah, sí, es verdad. Se ha pegado ahí junto, sí. 00:35:03
SELEC, espacio en blanco, nevera, coma exterior, 00:35:05
front temperatura. 00:35:08
Warning, no es posible este error. 00:35:11
No sé, tengo la tabasa. 00:35:14
Por favor. 00:35:17
pues igual es porque no tiene 00:35:18
puse data base 00:35:21
igual me he comido de luz 00:35:22
ah, claro, tienes que poner 00:35:25
use IoT 00:35:27
vale, pues 00:35:28
use IoT 00:35:30
ok, perfecto 00:35:31
perdona, vale, pues genial 00:35:35
entonces ya 00:35:37
cuando tú usas una base de datos, pues luego ya puedes 00:35:38
lanzar comandos de este estilo, comandos 00:35:41
que son similares a SQL 00:35:43
aquí os he puesto otro, vale, pues 00:35:45
para que veáis que el formato es igual, select 00:35:46
FROM, WHERE y LIMIT, ¿vale? 00:35:49
Entonces, ahí veis una forma de crear estos comandos. 00:35:52
Entonces, ahora que ya sabíamos manejar la base de datos, 00:35:56
lo que hicimos fue irnos a INFLUXDB, 00:35:58
perdón, a Node.js, 00:36:01
y en Node.js lo que hicimos aquí fue crearnos una función, 00:36:02
que os la pego también en el chat, 00:36:07
que esa función lo único que hacía es generar puntos con valores aleatorios. 00:36:09
Entonces, aquí creábamos un valor de exterior 00:36:24
con valores entre 00:36:26
20 y 25 00:36:28
y un valor de interior con valores 00:36:30
entre 0 y 5, que eso eran 00:36:32
los campos, y luego asignábamos unas etiquetas 00:36:34
y una vez que teníamos eso 00:36:36
lo inyectábamos 00:36:38
en un nodo InfluxDB 00:36:39
entonces, este nodo InfluxDB 00:36:41
me lo voy a crear otra vez, ya tenéis 00:36:44
creada aquí la 00:36:46
función 1, entiendo que tenéis 00:36:48
creado el nodo este 00:37:14
de la función 1, que es donde creamos los valores 00:37:16
al azar, y ahora que tengo que hacer 00:37:18
Pues mandar esos valores a InfluxDB. Con lo cual me voy aquí a la paleta de la izquierda y ahí localizo la sección de almacenamiento y veis que tengo una opción para realizar consultas en InfluxDB y otra opción aquí debajo para escribir valores, que es lo que yo quiero hacer ahora. 00:37:19
quiero escribir valores en InfluxDB 00:37:42
saco ese nodo, lo coloco ahí 00:37:44
y recordad, aparece el triángulo rojo 00:37:47
porque no lo tengo configurado 00:37:49
entonces lo que voy a hacer es configurarlo 00:37:51
hago doble clic sobre él 00:37:53
y veis que me dice, oye tienes que añadir 00:37:54
un servidor nuevo de InfluxDB 00:37:57
digo de acuerdo, pues pulso el signo más 00:37:58
y aquí le doy el nombre al servidor 00:38:00
que puede ser el que yo quiera 00:38:04
pues lo llamo InfluxDB 00:38:06
y muy importante, el host 00:38:07
el host, esto es lo que yo dije 00:38:09
es tan importante hacerlo como un stack 00:38:11
o sea, a instalar los 00:38:14
contenedores dentro de un stack, porque 00:38:16
ahora ya no necesito utilizar sus direcciones 00:38:18
IP, sino que directamente 00:38:20
puedo poner sus nombres 00:38:22
de contenedor 00:38:24
¿vale? estos nombres de contenedor 00:38:25
¿dónde están? pues están 00:38:28
aquí, en el docker compose 00:38:29
si yo hago un nano docker compose 00:38:32
¿vale? veis que aquí 00:38:34
tengo los nombres de los contenedores 00:38:37
el de grafana se llama grafana 00:38:39
el de influxdb se llama influxdb 00:38:41
por eso aquí he podido poner ahora 00:38:43
influxdb, aquí 00:38:46
y ahora 00:38:48
la base de datos es IOT 00:38:50
que es la base de datos que nosotros hemos creado 00:38:52
le digo añadir 00:38:54
y ahora me está diciendo, muy bien 00:38:57
¿y en qué medida lo quieres 00:39:00
guardar? pues en la medida temperatura 00:39:02
pulso hecho 00:39:04
veis que ya desaparece 00:39:10
el triángulo rojo porque ya está todo bien configurado 00:39:12
lo engancho 00:39:15
hago deployment 00:39:16
ya está 00:39:18
instanciado 00:39:21
ya está desplegado 00:39:23
y ahora fijaos, si yo entro 00:39:24
a la consola 00:39:27
de Infuse 00:39:29
y aquí le digo 00:39:34
use IOT 00:39:36
y aquí le digo que 00:39:37
me muestre nevera y exterior 00:39:40
veis que ahora el último valor era 21.25 00:39:42
pues si yo inyecto un valor nuevo 00:39:44
y ahora me vengo aquí 00:39:46
veis que ahora el último valor que se ha 00:39:53
incorporado es 20,46. 00:39:55
Cada vez que hiciera aquí clic 00:39:58
se inyectaría un valor nuevo. 00:39:59
Y de esta forma ya puedo 00:40:03
tener integrado Node.js 00:40:04
con InfluenceDB. 00:40:05
Venga, os dejo que probéis 00:40:08
esto y si hay alguna duda me preguntáis. 00:40:10
¿Vale? 00:40:11
¿Qué tal? ¿Os va bien? 00:40:36
Sí, correcto. 00:40:40
Pues vamos a avanzar 00:40:42
otro poquito. 00:40:44
ya teníamos esto en no de red 00:40:47
y ahora lo que yo os dije, bueno, pues ahora 00:40:50
perdona, perdona 00:40:53
si yo he dado dos veces 00:40:54
al botón de inyectar 00:40:57
ha salido 00:40:59
ha salido incrementaje en dos líneas 00:41:00
la base de datos, ¿no? 00:41:05
00:41:07
sí, porque daos cuenta que es que esto tiene precisión 00:41:09
de nanosegundos, por muy rápido 00:41:13
que seáis, tener por 00:41:15
certeza que van a entrar como 00:41:17
dos distintos, ¿vale? 00:41:18
Sí, sí, porque yo tenía cinco y ya tengo siete. 00:41:20
Vais a ver, yo intento hacerlo lo más rápido posible. 00:41:24
¿Vale? He insertado 00:41:28
dos súper rápido. Si ahora vamos a 00:41:29
verlos, veis que son prácticamente 00:41:30
idénticos, ¿vale? Pero a partir 00:41:33
de aquí ya empiezan a variar, ¿veis? 00:41:35
Porque esto tiene nivel 00:41:37
lo que os digo, de nanosegundos. Yo he conseguido 00:41:38
hacerlo pues con una diferencia 00:41:41
unos poquitos milisegundos, 00:41:43
pero más rápido no soy capaz de hacerlo 00:41:47
entonces no os preocupéis 00:41:48
que nunca se van a 00:41:51
sobreescribir dos datos 00:41:52
de hecho, este es el índice 00:41:54
o sea, el timestamp, esto que veis aquí al principio 00:41:56
ese es el índice 00:41:59
es un índice único, para las bases de datos 00:42:00
de InfluxDB, esto es un índice 00:42:03
único, es decir, no puede estar repetido 00:42:05
nunca, bueno, lo que os decía 00:42:07
aquí ahora ya, el potencial 00:42:09
que tenemos es brutal, porque bueno 00:42:11
ya lo habéis visto, con un solo nodo me monto 00:42:12
un broker MQTT 00:42:14
o publico o suscribo a un 00:42:16
broker MQTT, igual que 00:42:19
usado MQTT podríamos hacer peticiones 00:42:20
HTTP, TCP 00:42:23
UDP, si quisiéramos 00:42:24
podríamos instalar más módulos 00:42:26
entonces esto abre un mundo 00:42:28
de posibilidades 00:42:30
fundamentalmente 00:42:33
debido a que mucha gente contribuye a este proyecto 00:42:34
entonces incluso si yo no 00:42:37
tengo aquí el módulo que me interesa 00:42:38
es muy probable que me pueda venir aquí 00:42:40
a la derecha y en administrar 00:42:42
paletas, pueda decidir 00:42:44
yo buscar aquí, pues un 00:42:47
módulo de lo que sea, 00:42:48
pues igual CISBOR, 00:42:50
y ves que tengo módulos para CISBOR, 00:42:52
el que quiero publicar en ZingSpeed, 00:42:55
pues tengo nodos para ZingSpeed, 00:42:57
si quiero controlar un ESP32, 00:42:59
pues tengo nodos para el 00:43:01
SPHOME o lo que sea, vale, y prácticamente 00:43:02
para todo, y podríamos añadirlos 00:43:04
aquí. La cuestión ahora es, 00:43:06
esto principalmente sirve 00:43:09
para hacer analítica de datos, es decir, 00:43:10
para almacenar datos, para realizar 00:43:12
cálculos, para cambiar de formatos 00:43:14
¿veis? no he hecho mucho hincapié en ellos 00:43:17
pero aquí hay una serie 00:43:18
de analizadores 00:43:20
estos de aquí, que me permiten 00:43:23
cambiar de XML a JSON a YARN 00:43:24
al CSV, ¿vale? cambiar de formato 00:43:27
las posibilidades son muchas 00:43:28
pero ahora, para graficar 00:43:31
los datos, ¿qué opciones tengo? 00:43:32
bueno, pues las opciones que tendría sería 00:43:34
recurrir a una aplicación externa 00:43:36
que es lo que voy a contar después, que era Grafana 00:43:38
o bien contentarme 00:43:41
con un sistema de dashboard muy primitivo 00:43:42
que tiene Node-RED, 00:43:44
pero que, bueno, en algunos casos puede ser suficiente. 00:43:46
Entonces, yo lo que os proponía era 00:43:49
vamos a crear un dashboard directamente en Node-RED. 00:43:50
Entonces, si bajáis aquí en la paleta hasta abajo del todo, 00:43:56
vais a ver que tenéis una serie de nodos de interfaz de usuario, 00:43:59
tanto de entrada como de salida. 00:44:04
Los de entrada están marcados en azul clarito 00:44:06
y los de salida están marcados 00:44:08
en azul un poquito más oscuro 00:44:11
entonces yo propuse, oye mira vamos a hacer un gráfico 00:44:13
con la temperatura 00:44:15
entonces simplemente arrastro aquí 00:44:16
el gráfico 00:44:19
y otra vez me pasa lo mismo 00:44:20
me aparece el triángulo rojo 00:44:23
entonces hago doble clic sobre el nodo 00:44:24
y que ocurre, que él me está diciendo 00:44:27
oye, en que grupo 00:44:29
quieres mostrar este gráfico 00:44:31
recordad que los dashboards 00:44:33
están organizados por grupos y por 00:44:34
widget, entonces yo tengo 00:44:37
que crear un grupo nuevo, hago clic aquí 00:44:39
en el signo más y me creo un grupo 00:44:41
que lo llamo por ejemplo 00:44:43
Juanfe, y en ese grupo 00:44:44
tengo que añadir una etiqueta 00:44:49
una tab, una lengüeta 00:44:51
hago clic en el signo más y la etiqueta 00:44:52
la llamo por ejemplo, la dejo como home 00:44:55
no me complico, entonces 00:44:57
simplemente pulso añadir 00:44:59
pulso añadir en el grupo 00:45:01
y ahora ya tengo aquí 00:45:02
el gráfico creado, le digo 00:45:04
hecho. ¿Y esto qué ha provocado? Pues ha provocado 00:45:07
que si ahora vamos aquí a la flechita 00:45:10
y mostramos dashboards, veis que ahora 00:45:13
ya tengo un grupo que se llama 00:45:16
Home con una etiqueta que se llama Juanfe. 00:45:19
Yo ya tengo un dashboard. Para acceder a ese 00:45:22
dashboard, hago clic, como decía el compañero, en el cuadradito 00:45:25
este que hay aquí con una flecha y veis que ahora mismo 00:45:28
está vacío. Me dice 00:45:32
no hay ningún dato en este dashboard 00:45:35
perfecto, entonces lo que yo quiero 00:45:37
es añadir datos, ¿cómo añado datos? 00:45:40
pues me vengo a la documentación 00:45:42
y me dice 00:45:44
cada valor que 00:45:46
mandemos en la carga de pago 00:45:47
se convertirá en un 00:45:49
en un número 00:45:51
bueno, pues muy bien, entonces lo que voy a hacer es 00:45:52
voy a crear desde aquí otra función 00:45:55
y me voy a crear solamente con los 00:45:57
campos exterior y interior 00:45:59
entonces me vengo aquí a la izquierda 00:46:01
busco función 00:46:05
engancho aquí y aquí 00:46:06
y aquí y aquí 00:46:13
y ahora escribo la función 00:46:15
que la función es tan simple como quedarme 00:46:18
solamente con el segundo 00:46:20
elemento de la carga de pago, es decir 00:46:22
que MSPayload va a ser 00:46:24
igual a lo que reciba 00:46:26
por Payload en el 00:46:28
elemento 1, era el 1 00:46:30
o era el 0, no me acuerdo, ahora lo reviso 00:46:32
ahora os pego el código 00:46:34
yo lo que quiero es 00:46:35
esta función, recordad que daba dos elementos 00:46:37
el 0 00:46:40
con las temperaturas y el 1 con las etiquetas 00:46:41
entonces yo lo que quiero es quedarme con el 00:46:44
de las temperaturas, es decir 00:46:46
es el 0, no el 1 00:46:47
os lo pego en el chat 00:46:49
y ahora ya puedo 00:46:54
instanciar 00:46:59
y una vez que lo tengo instanciado 00:47:00
puedo enviar varias marcas de tiempo 00:47:04
aquí 00:47:07
y si ahora accedo a mi dashboard 00:47:07
veríamos ahí las temperaturas 00:47:11
de exterior y de interior 00:47:14
voy a mandar algunos 00:47:16
que no me aparecen 00:47:18
habría olvidado alguna opción 00:47:27
a ver 00:47:28
ah vale 00:47:41
porque no he hecho el split 00:47:42
estoy mandando aquí los dos campos juntos 00:47:43
estoy mandando exterior e interior juntos 00:47:47
entonces el gráfico no sabe cómo mostrarlo 00:47:49
esto es porque he olvidado poner un split en medio 00:47:52
que es esto, que lo puedo insertar así directamente 00:47:56
en medio, fijaos, si tú tienes una línea 00:47:59
un cable, puedes llegar con un nodo, acercarte 00:48:01
y ahora no me deja, pero 00:48:05
se debería poner discontinuo y se engancha ahí en medio 00:48:08
¿Veis? Ahora se me ha enganchado. ¿Está bien? No, no se ha enganchado. Ahí, ahí, justo. Cuando se pone discontinuo, ¿vale? Queda ya ahí enganchado. Bien. Entonces, ahora ya sí, lo instancio, engancho, envío unos cuantos valores y esos valores, ¿veis? Que van apareciendo aquí en el gráfico. 00:48:11
lo del split no me entera bien 00:48:29
que es lo que hace 00:48:38
aquí que es lo que recibimos 00:48:39
en el payload 0, recibimos 00:48:42
de forma conjunta 00:48:44
exterior e interior 00:48:45
ok, ok, ok 00:48:47
entonces lo que hago con el split es que lo divido 00:48:49
en exterior por un lado 00:48:52
interior por otro, cuando os pase eso 00:48:54
cuando yo no sé que está pasando 00:48:56
lo que hago es que me pongo un debug 00:48:58
vale 00:48:59
y con ese debug 00:49:02
y yo borro aquí 00:49:03
hago una inyección 00:49:05
y veis, lo que está pasando aquí 00:49:07
es que me está mostrando 00:49:09
en vez de un único objeto 00:49:12
dos objetos, uno con el valor 00:49:13
de la temperatura exterior 00:49:15
y otro con el valor de la temperatura 00:49:17
interior, que es 00:49:19
interior, perdonad, que es este 00:49:20
eso es lo que hace el split, que lo divide 00:49:22
¿vale? 00:49:25
y entonces estaríamos viendo ahí los datos 00:49:29
¿qué más 00:49:32
podemos decir sobre esto? 00:49:34
Ahora, Juanfe, pero lo que aparece en la gráfica, ahí aparecen los datos, ¿no? Como unidos, ¿no? ¿No deberían ser ahí dos gráficos independientes o algo así? 00:49:36
Sí, debería aparecer como exterior e interior, pero creo que como he mandado datos al principio, porque esto lo tengo bien, ¿no? 00:49:49
Return message, split chart, el grupo y la leyenda. 00:49:57
Creo que el problema está que como he mandado datos al principio unificados, se han quedado ya unificados el gráfico ese, ¿vale? 00:50:06
Tendría que volver, la voy a mostrar la leyenda para asegurarme. 00:50:13
es que el 00:50:19
split este divide pero 00:50:30
manda los dos, uno y luego el otro 00:50:32
sí, sí, pero no los está mandando bien 00:50:33
era lo que estaba viendo ahora, que me lo estaba comentando 00:50:35
Germán, fijaos, me está apareciendo 00:50:38
como número, pero 00:50:40
debería aparecerme mensaje 00:50:41
carga de pago exterior e interior 00:50:44
y eso no me está apareciendo, no sé por qué 00:50:46
no le voy a dedicar 00:50:48
tiempo a esto ahora, porque eso 00:50:51
debe ser un detalle menor que ahora mismo 00:50:53
no soy capaz de ver, no sé si es porque el gráfico 00:50:55
se ha unificado al mandar 00:50:58
al principio los datos unificados 00:50:59
aquí debería estar apareciendo 00:51:01
carga de pago cero 00:51:07
voy a verlo, voy a poner aquí 00:51:11
a ver cómo están llegando los datos 00:51:13
quizá la función tendría que cambiar el topic 00:51:14
a ver, la función tendría que cambiar 00:51:17
el topic, vamos a ver 00:51:21
¿está con el topic? 00:51:23
Hasta aquí me llega bien exterior e interior, pero sin embargo, aquí el split no sé por qué no me está manteniendo las etiquetas. 00:51:25
Entonces, yo lo que quiero es dividir el payload, copiar, creo que puede ser esto, me copiar, a ver a ver a ver si fuera esto. 00:51:34
puede que sea eso, ahora ya aparece como exterior e interior 00:51:49
y ahora ya aparece aquí como exterior e interior 00:51:58
estos son pequeños detalles, porque de esto hay muchísimo 00:52:00
entonces veis, cuando yo he cogido y he dividido el objeto 00:52:05
no he tenido en cuenta que se copiaran las claves 00:52:09
entonces lo de exterior e interior lo estaba perdiendo, esto de exterior e interior 00:52:12
y ahora ya lo tengo y por eso aparece aquí como exterior e interior 00:52:17
bueno, lo que os digo, son detalles 00:52:20
hay que ir mirando la documentación 00:52:23
yo voy un poco rápido 00:52:28
y algún detalle seguramente se me esté pasando 00:52:30
vamos a hacer lo contrario 00:52:33
vamos a meter 00:52:37
una interfaz de usuario 00:52:38
pero de entrada 00:52:43
vamos a poner por ejemplo 00:52:44
por ejemplo, vamos a poner un botón 00:52:46
yo pongo aquí un botón 00:52:51
y ese botón 00:52:54
lo vamos a añadir 00:52:57
al mismo grupo que teníamos 00:52:59
con Juanfe, que es el grupo 00:53:01
que yo tengo, entonces le podemos poner un icono 00:53:05
le podemos poner 00:53:08
una etiqueta 00:53:09
pues yo que sé, encender o lo que vosotros queráis 00:53:11
y lo que queremos hacer es que cuando se pulse 00:53:13
ese botón 00:53:18
queremos enviar una carga de pago 00:53:18
pues esa carga de pago puede ser cualquier cosa 00:53:22
por ejemplo puede ser un JSON 00:53:24
que yo puedo escribirme ahí mi JSON 00:53:25
que sea temperatura 00:53:27
2.25 00:53:29
hecho 00:53:32
y pulso hecho 00:53:33
y si ahora esto me lo engancha 00:53:35
a un depurador 00:53:38
y lo instancio 00:53:38
vais a ver 00:53:41
que ahora en nuestro 00:53:44
dashboard 00:53:45
aparece el botón encender 00:53:48
y cada vez que yo pulse el botón encender 00:53:50
aparecerá ahí esa carga de pago 00:53:54
pulso aquí el botón encender 00:53:56
y aparece aquí la carga de pago 00:53:57
entonces veis que podéis crear interfaces 00:53:59
pues por ejemplo para encender la calefacción de vuestra casa 00:54:02
para encender una máquina, lo que sea 00:54:05
podéis tanto recibir datos 00:54:07
como publicarlos 00:54:09
es decir, tanto comunicación aguas arriba 00:54:13
como comunicación aguas abajo. 00:54:16
¿Sí? 00:54:22
Os dejo unos instantes 00:54:24
para que probéis esto del botón, ¿vale? 00:54:25
Quien dice un botón, 00:54:28
podéis probar cualquier otra cosa. 00:54:29
Imaginaos que yo quiero poner ahí 00:54:31
una entrada de texto. 00:54:32
Pues, por ejemplo, me vengo aquí, 00:54:35
pongo una entrada de texto, 00:54:37
la configuro para que aparezca, 00:54:39
por ejemplo, en el mismo grupo. 00:54:40
Imaginaos que yo quiero que esto sea 00:54:45
temperatura. 00:54:47
entonces esto lo que haría sería 00:54:48
inyectar una carga 00:54:52
de pago 00:54:54
con el valor que yo ponga de temperatura 00:54:56
entonces si yo pongo ahí temperatura 00:54:58
lo engancho al depurador 00:55:00
instancio 00:55:02
y me voy al 00:55:03
aquí y yo pongo aquí 00:55:06
por ejemplo 45 00:55:08
entonces veis 00:55:10
que me aparece aquí 45 00:55:12
yo puedo enviar cualquier valor de temperatura que yo quiera 00:55:14
para configurar un 00:55:16
pues eso, para configurar un 00:55:18
pues ahora me ha aparecido 00:55:20
aquí una cosa y no puedo acceder a la parte 00:55:22
de arriba, para configurar 00:55:24
cualquier sensor o cualquier actuador 00:55:26
lo que yo necesite, pues podría introducir 00:55:28
ahí los datos, por ejemplo, presión 00:55:30
máxima, lo que sea 00:55:32
Sí, que esto 00:55:33
que bueno, lo enganchas 00:55:36
al depurador, pero esto habría que engancharlo a 00:55:38
yo que sé, a un HTTP que lo mande o alguna 00:55:40
cosa de esas. Efectivamente, esto ya como hemos 00:55:42
aprendido a usar MQTT o HTTP 00:55:44
pues yo por ejemplo esto, si me lo 00:55:46
pago por http, a ver dónde estaba el http, esto es http, que es un request, que es este de aquí, 00:55:48
entonces esto lo podríamos enviar a un http, cuando enviemos algo a un http, tenemos que 00:55:59
poner siempre, no, espera, este es el, era un punto final, no, yo quiero hacer una petición, envía y 00:56:07
devuelve la respuesta, ¿vale? Y la respuesta la voy a 00:56:17
mostrar en un depurador. Imaginaos que 00:56:19
yo esto lo quiero mandar a un webhook site 00:56:21
de estos que teníamos el otro día. 00:56:23
Pues me vengo a mi webhook site, 00:56:25
voy a crear uno nuevo, porque ya sabéis el problema 00:56:27
que tuvimos el otro día, que se quedaron ahí 00:56:29
como 00:56:31
como bloqueados. Lo copio, 00:56:32
vuelvo a 00:56:37
Node.js, me configuro esto y voy a 00:56:37
me enviar peticiones 00:56:39
GET a ese 00:56:40
servidor. Curso hecho, 00:56:43
instancio, 00:56:45
Y ahora lo que voy a hacer es que desde aquí voy a mandar, por ejemplo, 57. Pulso intro, ¿vale? Y veis que aquí he recibido la petición con la query string que me aparece vacía. ¿Por qué? Porque no he incluido aquí el valor de la solicitud. 00:56:47
la carga 00:57:04
agregar a los parámetros de la cadena de consulta 00:57:06
instanciar, confirmar 00:57:11
vengo aquí, borro esto para que veáis 00:57:14
como entra el nuevo 00:57:17
y ahora en node de red 00:57:18
aquí pongo por ejemplo 12 00:57:21
he puesto 12, a ver, 123 00:57:27
Bueno, pues ahora no me entra, no sé por qué 00:57:32
¿Antes viste ahí 00:57:37
todo lo que he oído? 00:57:39
Ahí me está diciendo carga de pago no válida 00:57:40
¿Vale? Fijaos lo que me está diciendo aquí 00:57:43
Entonces aquí debo tener 00:57:45
algún problema con la carga de pago 00:57:47
Igual tengo que ponerlo en formato 00:57:48
QueryString o algo así de tipo 00:57:50
temp 00:57:52
igual a 123 o algo así 00:57:54
No sé cuál será el problema 00:57:57
Habría que mirar la documentación 00:58:00
para ver exactamente en qué formato 00:58:02
quiere este que le envíe 00:58:04
los parámetros 00:58:06
o si no lo ponemos como post 00:58:07
y nos quitamos problemas 00:58:10
instanciar 00:58:11
instanciar, corro todo esto 00:58:13
esto está listo 00:58:17
escribo aquí por ejemplo 00:58:19
124 00:58:20
lo mando 00:58:21
y veis que ya tengo la petición aquí 00:58:23
y está llegando el contenido aquí abajo 00:58:25
el rao, el 2, el 124 00:58:28
veis 00:58:30
para GED se ve que habrá que ponerlo en algún formato 00:58:30
concreto, habría que leerse aquí la documentación 00:58:34
para ver exactamente en qué formato hay que ponerlo 00:58:36
para que lo coja 00:58:40
pero esto sería justo lo que ha dicho Germán, este es el objetivo 00:58:42
ver cómo podemos pasar datos de un lado a otro o incluso 00:58:45
inyectarlos a la base de datos, los podríamos meter aquí también 00:58:48
en InfluenceDB y entonces veis que aquí está todo interconexionado 00:58:51
que nosotros podemos empezar a hacer un sistema 00:58:54
tan complejo como nosotros queramos, incluso 00:58:57
o mostrar gráficos en mapa, que os estuve enseñando el otro día 00:59:00
con esto de World Map, básicamente cualquier cosa 00:59:02
que necesitemos 00:59:05
eso para el dashboard 00:59:07
y bueno, ahora iba a pasar ya a Grafana 00:59:11
aquí hay muchísimo, por supuesto hay muchas más cosas 00:59:14
que se pueden hacer con 00:59:18
Node.js, pero no 00:59:20
podríamos estarnos eternamente, es más 00:59:22
cuestión de que uno defina qué es lo que necesita hacer 00:59:25
y con los conocimientos que tenemos 00:59:29
que vaya buscando su camino 00:59:31
y el camino es ese que me habéis visto a mí hacer 00:59:32
es elegir el nodo que necesitas 00:59:35
leerte un poco la documentación 00:59:37
pues yo que sé, ya me quedo con la duda 00:59:39
de por qué no me ha cogido 00:59:41
los valores 00:59:42
porque hay que usarlos entre llaves 00:59:44
tiene algunos detalles de este estilo 00:59:46
hay que leerlos y simplemente 00:59:48
hacer lo que te diga aquí y ya está 00:59:50
y ahora vamos a suponer 00:59:52
que no tengo suficiente 00:59:55
con un dashboard de no de red 00:59:57
Entonces, ¿qué podría hacer? Pues lo que podría hacer es utilizar Grafana. Grafana es esto que estáis viendo ahora en pantalla, que se utiliza tanto para visualizar datos como para generar alertas. 00:59:59
¿Vale? Entonces, hay una serie de conceptos fundamentales en Grafana que son los orígenes de datos, las carpetas. Una carpeta es simplemente un conjunto de dashboards. Lo que estáis viendo ahora mismo en pantalla, eso es un dashboard. Y ese dashboard está compuesto por varios paneles. Cada uno de estos gráficos es un panel. ¿Vale? Pues yo podría tener varios de estos dashboards dentro de una carpeta. 01:00:12
Pues esos son los conceptos fundamentales. El origen de datos, la carpeta, el dashboard y el panel. Entonces, lo primero que vamos a hacer es acceder a cada uno a nuestro Grafana. Y eso directamente lo hacéis con la dirección IP y entrando al puerto 3000. 01:00:37
Entonces, claro, Modesto y Adrián, como estamos compartiendo el mismo, 01:01:05
permitidme que haga yo esto, ¿vale? 01:01:10
Porque la primera vez que entras, te obliga a cambiar el nombre de usuario. 01:01:12
Entonces, esto, si nos importa, lo voy a hacer yo, ¿vale? 01:01:17
Yo digo, ¿cuál es el nombre de usuario? 01:01:20
El nombre de usuario va a ser Ismiel y la contraseña va a ser Ismiel. 01:01:23
Voy a anotar aquí, por si no me equivoco. 01:01:32
¿Has dicho el usuario? 01:01:33
Tú pones el que quieras, ¿vale? 01:01:35
yo estoy diciendo el que voy a usar porque yo 01:01:36
comparto cuentas con Modesto y Adrián 01:01:38
tú pon el que tú quieras 01:01:41
conviene que lo, bueno, ya no importa mucho 01:01:42
pero si lo recordáis luego mejor 01:01:44
es mi 01:01:46
es mi 01:01:47
oh, no 01:01:49
esperad, esperad, que esto es que han 01:01:58
cambiado y ahora hay que poner un nombre 01:02:01
¿o habéis cambiado alguno el nombre de usuario 01:02:03
antes de que llegue yo? 01:02:05
¿a todos os da error? ¿no os deja entrar? 01:02:09
Igual que a ti 01:02:14
Vamos a probar con el default 01:02:17
que dice que es admin, admin, ¿vale? 01:02:27
Sí, hemos tenido suerte 01:02:31
Ese es el default y lo voy a cambiar 01:02:32
a ismear, o sea, ponerle 01:02:34
admin, admin y luego os pide que cambiéis 01:02:37
la contraseña, ¿vale? 01:02:41
Modesto y Adrián es 01:02:43
el usuario es admin y la contraseña es 01:02:44
Ismier 01:02:46
bueno, pues esto que tenéis 01:02:48
ahora mismo a la vista es Grafana 01:02:55
Grafana no se ha 01:02:56
creado con el objetivo de crear 01:02:59
dashboard para internet de las 01:03:01
cosas, Grafana está creado 01:03:03
está diseñado para crear dashboard 01:03:05
para monitorizar 01:03:07
servidores, servidores 01:03:09
o lo que son ordenadores 01:03:11
para tener esos ordenadores monitorizados 01:03:12
lo que pasa es que ha avanzado tanto 01:03:15
y está tan vistoso 01:03:17
que se está empezando a utilizar para... 01:03:19
Bueno, se está empezando a utilizar, no, se usa abundantemente 01:03:22
para crear dashboards de Internet de las Cosas también. 01:03:25
Entonces, si os fijáis aquí a la izquierda, tenemos un menú. 01:03:28
Ahí tenemos los dashboards. 01:03:33
Esto que tenemos aquí. 01:03:36
Tenemos el sistema de alertas, que es esto que tenemos aquí, ¿vale? 01:03:37
Para crear reglas, enviar notificaciones. 01:03:41
Luego tenemos también conexiones. 01:03:44
y dentro de conexiones veis que tenemos la opción de 01:03:46
data source, fuentes de datos 01:03:49
vale, espero ahí un momento a ver si lo localizáis 01:03:51
me estoy dando cuenta de que han cambiado 01:03:54
ha cambiado la interfaz respecto a las capturas 01:03:58
que yo tengo puestas, vale, entonces 01:04:01
bueno, pues no hay mucho que podamos 01:04:02
hacer, simplemente ha cambiado pues 01:04:07
hay que buscarlo aquí 01:04:08
y ya está, simplemente ir a conexiones 01:04:11
y orígenes de datos 01:04:15
vale 01:04:17
entonces 01:04:18
aquí vamos a añadir un origen de datos 01:04:20
¿qué es lo que vamos a hacer nosotros? 01:04:23
nosotros vamos a intentar enganchar directamente Grafana 01:04:24
a InfluxDB 01:04:27
entonces le digo aquí que quiero añadir una fuente de datos 01:04:28
y claro, daos cuenta lo bien que está esto 01:04:34
porque sí, ya inmediatamente 01:04:37
vemos aquí InfluxDB 01:04:38
pero es que yo puedo enganchar con un montón de servicios 01:04:40
no solo con InfluxDB 01:04:43
si le dais ahí un vistazo rápido 01:04:44
pues veis que tenemos muchísimas opciones 01:04:46
para descargar, para enganchar 01:04:49
incluso con bases de datos 01:04:51
PostgreSQL 01:04:52
lo que vosotros queráis, veis que tenéis aquí 01:04:53
pues una selección bastante 01:04:57
amplia, bases de datos MongoDB 01:05:01
han pasado por ahí, sistemas SAP 01:05:03
pues básicamente 01:05:05
con cualquier cosa 01:05:07
nosotros lo que vamos a hacer es enganchar 01:05:08
nuestro grafana 01:05:11
a una base de datos InfluzDB 01:05:12
entonces simplemente 01:05:15
elijo ahí InfluzDB 01:05:17
no sé si me vais siguiendo 01:05:19
¿esto lo haces tú solo? 01:05:20
sí, por favor, Modesto, Adrián 01:05:25
dejadme hacer a mí el enlace este solo 01:05:27
y luego ya si queréis vosotros podéis lanzar consultas 01:05:29
yo he encontrado el enlace de conexión 01:05:31
he encontrado el data source 01:05:33
¿esta influx 01:05:35
perdona, ¿esta influx es 01:05:37
la que hemos usado 01:05:39
antes para meter los datos? 01:05:41
sí, lo voy a vincular a esa 01:05:43
porque yo voy a poner aquí influxdb 01:05:45
8086, pero podría ser 01:05:47
un influxdb que estuviera corriendo 01:05:49
en otro servidor en la otra punta del mundo 01:05:51
¿vale? yo podría vincular mi grafana 01:05:53
pues por ejemplo 01:05:55
Germán, yo podría vincular mi grafana 01:05:57
a tu influxdb 01:05:59
¿vale? si yo supiera la dirección IP de tu 01:06:00
servidor, la pondría 01:06:03
aquí y 8086 y me 01:06:05
vincularía a tu influxdb 01:06:07
¿vale? para no tener líos 01:06:08
nos vamos a vincular cada uno al nuestro 01:06:10
y eso se hace así, simplemente poniendo 01:06:13
ahí http 01:06:15
los puntos barra barra, recordad 01:06:16
que como grafana e influxdb 01:06:19
lo hemos instalado con el mismo docker 01:06:21
compose, pues se reconocen 01:06:23
entre sí por el nombre, no necesitan direcciones 01:06:25
IP, se reconocen por sus propios 01:06:27
nombres, entonces yo simplemente pongo aquí 01:06:29
http 01:06:31
dos puntos barra barra 01:06:33
in plus 01:06:34
db 8086 01:06:35
que es el puerto 01:06:38
vale 01:06:39
un momento 01:06:41
2.8086 01:06:50
a ver 01:07:03
vale 01:07:10
a ver 01:07:24
bien 01:07:25
no sé si con eso será suficiente 01:07:29
esto ha cambiado bastante 01:07:32
o tenemos que poner aquí el usuario 01:07:35
vale 01:07:37
a ver como 01:07:37
que han hecho aquí 01:07:40
la base de datos es IOT 01:07:41
que es el nombre que nosotros hemos dado a la base de datos 01:07:44
IOT 01:07:46
vale, voy a probar así 01:07:47
sin usuario y sin password 01:07:50
voy a probar como guardar y probar 01:07:52
veis que pone aquí guardar y probar 01:07:54
a ver, si, veis que me dice 01:07:56
que si, que funciona así sin más 01:08:00
entonces no me complico más la vida 01:08:02
obviamente todo esto 01:08:03
que seguro que Germán lo está pensando 01:08:06
todo esto se le puede poner seguridad 01:08:08
simplemente hay que ir a la documentación 01:08:10
de Grafana y de InfluxDB 01:08:12
y elegir el tipo de seguridad que tú quieras 01:08:13
pero por defecto viene sin seguridad 01:08:16
solo hay que poner el nombre 01:08:18
y la 01:08:20
la base de datos 01:08:21
que es esta de aquí 01:08:23
vale, entonces ya lo tengo guardado 01:08:25
y ahora 01:08:34
podemos construir 01:08:36
un dashboard directamente desde aquí 01:08:38
o bien 01:08:40
si no queréis hacerlo desde ahí 01:08:41
pues os vais directamente aquí a dashboards 01:08:43
y lo podríamos hacer aquí desde 01:08:45
dashboard, desde donde prefiráis, ¿vale? 01:08:47
como lo tenemos ya aquí a mano, pues directamente 01:08:49
le damos ahí, directamente 01:08:51
a build dashboard 01:08:53
y en este dashboard lo que vamos a hacer es añadir una 01:08:54
visualización, que podemos 01:08:59
coger este data source 01:09:03
¿vale? y, a ver, he ido muy rápido 01:09:04
perdóname, es que le voy 01:09:07
dando y voy muy rápido 01:09:09
esto ya lo podéis hacer vosotros también, ¿vale? 01:09:10
Modesto y Adrián lo podéis hacer también si queréis 01:09:13
ok, entonces 01:09:15
esto lo voy a descartar, perdonad que he ido a toda velocidad 01:09:17
sin darme cuenta, vosotros os habéis quedado 01:09:19
en lo de InfluxDB que hemos añadido el origen de datos 01:09:22
¿de acuerdo? entonces ¿cómo creo yo ahora un dashboard? 01:09:25
¿cómo creo un panel para visualizar esos datos? pues yo directamente 01:09:28
me voy aquí al icono y en dashboards 01:09:32
me aparece esta pantalla, entonces yo digo 01:09:35
aquí que quiero crear un dashboard, ese dashboard 01:09:38
quiero que tenga una visualización ¿vale? 01:09:41
y me dice ¿de dónde quieres que extraigamos los datos? 01:09:43
o los extraemos de InfluxDB 01:09:47
que es el origen de datos 01:09:49
que hemos configurado 01:09:51
pues vamos hasta aquí 01:09:52
¿estamos por ahí más o menos? 01:09:55
01:10:14
el origen de datos que has creado tú 01:10:14
¿deberíamos verlo nosotros también? 01:10:18
sí, deberíais verlo 01:10:20
pues no me sale 01:10:21
estás como admin 01:10:22
sí, porque no puedes estar de otra forma 01:10:25
a verlo 01:10:26
vete por favor, no sé si eras Adrián o Modesto 01:10:28
vete aquí a conexiones 01:10:31
Modesto 01:10:32
mira, voy a ir aquí en conexiones 01:10:33
de hecho es que hay dos 01:10:36
alguien ha creado otro aquí también 01:10:38
a ver, voy a quitar este porque este no está 01:10:40
conectado, veis que aquí hay uno que está efectuoso 01:10:42
y este 01:10:45
¿cómo lo quitamos aquí? 01:10:52
esto es para 01:11:00
bueno, pues no sé 01:11:01
cómo quitar uno ahí, pero 01:11:04
Modesto, deberías ver aquí en Dashboards 01:11:06
cuando dices crear dashboard, añadir visualización 01:11:08
ahí debería salir 01:11:11
el InfuseDB 01:11:13
pues no, no me sale 01:11:14
voy a añadir otro DataSource 01:11:18
a ver que puede estar pasando 01:11:20
puede ser que no estemos en el mismo sitio 01:11:21
en la misma máquina 01:11:24
es la 116.203.67.5 01:11:25
3000, si, si 01:11:29
entonces estamos en la misma 01:11:32
entonces voy a ver en conexiones 01:11:33
DataSource 01:11:36
y aquí imaginaos que yo quiero añadir otra base 01:11:38
otro enganche a InfluxDB 01:11:41
entonces lo llamo por ejemplo InfluxDB Modesto 01:11:44
y me engancho al 01:11:47
http://influxdb2.3000 01:11:50
y aquí le voy a dar 01:11:57
con la autenticación 01:12:00
hemos dicho que no 01:12:03
y la base de datos IOT 01:12:04
le digo 6A3 01:12:06
ay, es que no me dice 01:12:08
solo me deja una 01:12:10
por base de datos 01:12:12
bueno, pues ahí lo que 01:12:14
podríamos hacer es crearnos otra base de datos 01:12:17
aquí 01:12:19
create 01:12:19
database 01:12:23
modesto 01:12:25
eso 01:12:26
databases 01:12:28
ya tenemos 01:12:30
IOT y modesto, entonces ahora 01:12:32
te engancho aquí a modesto 01:12:35
creo que acabo de borrarte 01:12:36
IoT Modesto, perdón 01:12:51
tú fuiste el que quemó el otro día 01:12:54
LINE 100 01:12:57
mierda 01:12:57
será algo podrido 01:13:00
será algo podrido 01:13:02
vale, vamos a ver qué pasa entonces 01:13:04
tenemos IoT Modesto 01:13:06
vale, esto está bien 01:13:09
voy a insertar un valor en Modesto 01:13:10
porque a lo mejor es porque no tengo un valor insertado 01:13:12
entonces voy a insertar 01:13:15
a ver, copio el código directamente 01:13:16
que lo tengo aquí 01:13:17
y aquí 01:13:20
insert 01:13:23
voy a hallar aquí 01:13:24
use modesto 01:13:28
inserto 01:13:29
y ahora vamos a ver 01:13:32
si me permite engancharte 01:13:34
a modesto, permite 01:13:36
porque lo he escrito bien 01:13:40
http influxdb 01:13:42
2.3000 01:13:43
a ver, la voy a borrar y la vuelvo a crear 01:13:45
DataSources 01:13:49
añadir una DataSource 01:13:51
de InfluxDB 01:13:54
y quiero que sea 01:13:56
InfluxDB Modesto 01:14:01
entonces HTTP 01:14:03
dos puntos para la barra 01:14:06
InfluxDB 01:14:09
2.3.000 01:14:11
y queremos enganchar a la base de datos 01:14:12
del Modesto 01:14:15
no sé por qué no me deja conectar 01:14:16
voy a probar con la autenticación 01:14:34
esto no sé si lo habrán cambiado 01:14:37
aquí normalmente había que poner no de red 01:14:39
y no de red 01:14:41
pues no lo sé 01:14:42
algo habrán cambiado 01:14:47
aquí y no me permite hacer 01:14:49
voy a continuar 01:14:50
entonces voy a 01:14:53
grafana, dashboards 01:14:55
crear dashboard 01:14:56
añadir visualización 01:14:58
ves ahora si me aparece ahí, sin embargo, el InfluxDB 01:15:00
modesto, pero no 01:15:02
claro, no está enganchado, no está bien 01:15:04
enganchado, bueno, hago el 01:15:07
enganche con InfluxDB 01:15:09
¿vale? y ahora 01:15:10
lo que tenemos aquí abajo en 01:15:13
queries es el lenguaje de consultas 01:15:14
¿vale? que era lo que estaba intentando mostraros 01:15:17
aquí en grande, entonces 01:15:19
lo que nosotros vamos a hacer es decirle 01:15:20
quiero seleccionar 01:15:23
el valor del campo exterior 01:15:24
de la medida temperatura 01:15:27
entonces 01:15:29
fijaos, tengo una 01:15:31
a ver, lo pongo para que 01:15:34
lo veamos bien 01:15:36
si yo hago clic 01:15:36
sobre algo que está entre paréntesis 01:15:39
me muestra 01:15:42
las opciones que hay para ese algo 01:15:44
y sin embargo, si hago 01:15:46
clic sobre el propio campo 01:15:48
muestra la opción de eliminar 01:15:49
ese campo, entonces yo tengo que construir 01:15:52
esta consulta que estáis viendo 01:15:54
aquí, entonces veis que aquí tengo 01:15:56
y que es lo que quiero hacer, quiero 01:15:59
seleccionar 01:16:02
y aquí me está preguntando 01:16:02
from, entonces yo tengo que decir 01:16:05
select exterior 01:16:08
vale, vengo aquí 01:16:10
y he puesto el 01:16:11
where time filter 01:16:16
vale, from temperatura 01:16:18
entonces vengo aquí 01:16:19
y todo esto ha cambiado 01:16:21
a ver 01:16:26
como lo tiene dicho ahora 01:16:29
que empezar 01:16:30
tenías que empezar por el seller que es la segunda fila 01:16:38
si aquí pero 01:16:40
aquí en el fill si elijo el value 01:16:42
vale 01:16:44
es que no me 01:16:45
no me salen las opciones 01:16:47
no se porque 01:16:49
front temperature 01:16:50
si primero hay que elegir 01:16:52
front temperature que es elegir el measure 01:16:55
ahí tengo que elegir del mes 01:16:57
en temperatura 01:16:59
ahora ya me aparecerán aquí los fields 01:17:00
que son exterior 01:17:05
entonces ya tengo 01:17:06
de la medida temperatura 01:17:08
elegir el campo 01:17:11
exterior 01:17:13
y la que yo quería crear era 01:17:14
select exterior 01:17:17
front temperature, vale, en principio 01:17:19
creo que está bien 01:17:21
añado la 01:17:22
no, pero es que no me está apareciendo 01:17:24
la consulta aquí arriba, me tiene que estar 01:17:27
apareciendo aquí arriba 01:17:29
Falta el WER, ¿no? 01:17:30
Ah, bueno, que es que ahora se ejecutan 01:17:32
automáticamente, ya han empezado a salir aquí 01:17:35
los gráficos, el WER 01:17:37
normalmente el WER lo pone el solo 01:17:39
entonces no hay que tocar nada 01:17:41
entonces bueno, en principio ya lo está 01:17:43
ejecutando, ves que ya están apareciendo aquí 01:17:45
las temperaturas que hemos ido enchufando 01:17:47
entonces si yo enchufo una temperatura 01:17:49
nueva por aquí 01:17:51
voy a enchufar unas cuantas 01:17:52
nuevas 01:17:55
Pues esto iría apareciendo aquí en Grafana, ¿vale? 01:17:57
Irán apareciendo, Grafana no es inmediato, ¿vale? 01:17:59
Grafana tiene un pequeño delay e irían apareciendo ahí las temperaturas. 01:18:02
Lo que estoy buscando, que no sé dónde han trasladado, es lo de que se vea la consulta, el Query Inspector. 01:18:07
Que eso no sé dónde lo tienen. 01:18:13
A la derecha lo tiene, pone Query Inspector, no sé si... 01:18:16
Sí, pero si pulso ahí, miedo me da. 01:18:21
select, ahora veis, me está calculando 01:18:24
la media de exterior de temperatura 01:18:32
en algún sitio he cogido la media 01:18:34
ah, sí, vale, lo he cogido aquí sin querer 01:18:36
bien, yo no quiero la media realmente, yo quiero 01:18:37
la temperatura, entonces la media 01:18:39
la quito, vale, entonces 01:18:42
ahora sí, seleccionar 01:18:44
exterior de 01:18:46
temperatura, ahora lo tengo bien, como yo quería 01:18:48
vale, que si hacemos otra 01:18:50
inspector aquí es 01:18:51
no sé lo que está haciendo 01:18:53
ahora, en principio lo que le he dicho 01:19:12
es que seleccione 01:19:14
temperatura, que seleccione 01:19:14
exterior de temperatura y cuando le he quitado el min 01:19:17
se ha quedado sin datos 01:19:20
voy a mandarle datos nuevos por si fuera porque 01:19:21
no tiene datos 01:19:23
y voy a hacer un query inspector 01:19:24
refresco 01:19:27
y no es por eso 01:19:29
entonces será que ahora será obligatorio 01:19:32
poner aquí un 01:19:33
pues en vez de min 01:19:34
vamos a poner el 01:19:37
a ver si tenemos en las 01:19:39
o algo así 01:19:41
en las estaba arriba 01:19:42
lo dejo como min, vale 01:19:48
y van apareciendo 01:19:51
ahí las medias, esto es 01:19:53
pues cuestión de ponerse aquí 01:19:55
y ir consultando, y ellos van 01:19:57
metiendo aquí modificaciones 01:19:59
esto ya no es el formato 01:20:02
de InfluxDB, ¿vale? Aquí a mí me gustaría 01:20:03
tener el formato de consultas de InfluxDB 01:20:06
pero esto es un formato que tienen 01:20:08
propio de 01:20:09
de Grafana 01:20:11
entonces, ah, mirad, aquí sale lo que yo quería ver 01:20:13
seleccionar la media 01:20:15
de exterior frontemperatura 01:20:17
vale, pues yo lo que quiero es, en vez de la media 01:20:19
de exterior, yo solamente quiero 01:20:22
que elija exterior 01:20:23
¿esto se puede guardar aquí o no se 01:20:24
permite guardarlo? A ver 01:20:28
no lo guarda 01:20:29
bueno 01:20:36
a ver si lo quito, edito 01:20:36
yes, switch to editor mode 01:20:42
a ver si me quedo aquí 01:20:45
y quito el media 01:20:47
y tengo alguna opción 01:20:49
para poder guardarlo 01:20:56
es que no me deja 01:20:58
no veo como guardar esto 01:21:03
bueno, no le voy a dedicar más tiempo 01:21:04
aquí simplemente es juguetear 01:21:06
con los datos que tú quieras mostrar 01:21:09
construirte la consulta 01:21:10
si quieres puedes añadir más consultas 01:21:12
podríamos añadir una segunda consulta por ejemplo aquí 01:21:14
y veis que ahora me aparecería aquí abajo 01:21:16
la consulta B 01:21:19
en el 01:21:21
sedes al lado del campo 01:21:23
donde pone min 01:21:24
si le das a cambiar puedes poner continuo 01:21:25
puedes poner varios 01:21:28
quitas el min, pones en el más 01:21:29
tengo que quitarlo 01:21:32
le das al más 01:21:34
la media, la integración 01:21:34
el primer, el último 01:21:37
el último, lo que tú quieras 01:21:39
eso es lo que yo estaba buscando, lo del LAS 01:21:40
lo que no sé si ahora lo estará cogiendo aquí arriba 01:21:42
parece que sí 01:21:45
entonces ahí podría por ejemplo 01:21:49
mostrar en la consulta A 01:21:51
la temperatura exterior 01:21:53
y luego con la consulta B 01:21:55
aquí abajo 01:21:57
hace lo mismo 01:21:58
pero para la temperatura 01:22:00
interior, por ejemplo 01:22:03
y lo que me comentaba el compañero, quito el min y pongo 01:22:07
por ejemplo el las, entonces ahí estaríamos viendo ya la evolución 01:22:11
de las temperaturas, veis un gráfico bastante similar al que teníamos 01:22:17
antes en Node-RED y podríamos seguir 01:22:21
inyectando por aquí más valores 01:22:25
y esos valores al ratito se irían insertando aquí y los iríamos viendo 01:22:28
Por ejemplo, aquí tengo un valor de las 16.59 y ahora en un ratito aparecerán los valores que estamos enviando ahora, de las 17.30 y demás. 01:22:33
Bueno, a ver, y aquí me puedo mover, lo puedo hacer más grande. 01:22:43
Pues esto sería la parte un poco de cómo se constituyen, cómo se crean los dashboards, los gráficos, ¿vale? 01:22:51
Luego vamos a ver cómo se crearían las alertas. 01:22:57
Miedo me da, porque si esto ha cambiado tanto lo de las alertas, queremos saberlo. 01:22:59
Bien, las alertas que tenemos. Pues tenemos que en las alertas hay que crear una regla. Hay que crear una regla que la regla define bajo qué condición se va a ejecutar esa regla de alerta. 01:23:03
Podría ser, por ejemplo, que la temperatura sea mayor que 25. El problema que tiene en Grafana es que las alertas, las reglas de alerta, no se ejecutan inmediatamente, sino que se ejecutan a intervalos. Nosotros las vamos a poder ejecutar, por ejemplo, cada 10 minutos o cada minuto o lo que sea, ¿vale? 01:23:26
Entonces, si el criterio que hemos especificado para la alerta se cumple, 01:23:44
es decir, si la temperatura es mayor que 25, 01:23:48
vamos a ver que la alerta pasa a un estado que se llama el estado pendiente 01:23:52
y va a estar en ese estado pendiente durante otro periodo de tiempo, ¿vale? 01:23:56
Es un periodo de tiempo de cautela o de cortesía 01:24:00
que también vamos a poder configurar nosotros. 01:24:03
Por ejemplo, imaginaos que tenéis una alerta para la temperatura de casa 01:24:05
que queréis que si pase de 25 os envíe una alerta, ¿vale? 01:24:08
Ahora llega el termostato de vuestra casa y mide 25,1. Entonces, lo que va a ocurrir inmediatamente es que la alerta va a pasar a pendiente, pero hasta que no transcurra este tiempo de cortesía, de cautela o de histéresis y se mantenga esa condición de estar por encima de 25, no se va a disparar realmente la alerta, ¿vale? 01:24:12
La alerta puede estar en estado de pendiente y luego si, por ejemplo, la siguiente medición del termostato es 24,9, pues esa alerta nunca llegaría a dispararse, se quedaría, volvería a estado normal, a estado no alerta, ¿vale? Pues así es como funcionan las reglas de alerta, es decir, con dos periodos. Un periodo que es cada cuánto se evalúan esas reglas, pues por ejemplo, cada 10 minutos, y otro es durante cuánto tiempo debe cumplirse el criterio, la condición de la alerta para que se dispare realmente la alerta. 01:24:34
Y una vez que tenemos eso ya configurado, a continuación lo que vamos a configurar es a quién queremos enviar esa alerta, el punto de contacto, ¿vale? Y eso puede ser, pues, yo qué sé, una dirección de correo electrónico o un Telegram o lo que sea, lo que vosotros tengáis ahí, ¿vale? 01:25:04
luego adicionalmente 01:25:19
las alertas pueden tener políticas 01:25:21
y esas políticas 01:25:23
determinan qué tipo de alerta 01:25:25
recibe cada contact point, pues por ejemplo 01:25:27
tú puedes tener un técnico 01:25:29
que está en campo, un técnico que está 01:25:31
en la instalación, pues a ese técnico 01:25:33
les puedes mandar por ejemplo las alertas 01:25:35
de baterías bajas 01:25:37
es decir, la batería está baja, pues se la mandas 01:25:39
al técnico y como el técnico está allí en el campo 01:25:41
pues ya sabe que tiene que ir a cambiar 01:25:43
la batería de ese dispositivo 01:25:44
pero a lo mejor tienes otra alerta 01:25:46
que es que has excedido la tarifa de datos de la tarjeta SIM. 01:25:49
Pues esa no se la mandas al técnico DAIS, 01:25:54
se la mandas, por ejemplo, a otro contact point, 01:25:56
que es el administrador o quien sea, 01:25:58
que es el que tiene que pagar para extender la tarifa de datos 01:26:00
o lo que sea, ¿vale? 01:26:04
Luego, adicionalmente, junto a estas políticas, 01:26:06
también puedes definir periodos de silencio. 01:26:08
Por ejemplo, en los fines de semana, pues no se molesta a nadie, ¿vale? 01:26:10
No se mandan notificaciones a nadie. 01:26:14
Así es como funciona este sistema de alertas de Grafana. Voy a intentar crear una. Está la interfaz muy cambiada, entonces no sé si voy a ser capaz, pero lo voy a intentar. 01:26:15
¿Vale? Entonces, ¿qué es lo que necesitamos? Pues necesitamos ir al sistema de alertas que está aquí en el icono principal. Creamos una vela de alerta, que es esto que estáis viendo aquí. Voy a guardar este dashboard. Lo dejo ahí guardado. Lo guardo como nombre de temperaturas y ya está. ¿Veis? Me dice que en qué carpeta lo quiero guardar. Lo guardo en la carpeta dashboard. 01:26:28
yo tengo ahí el gráfico 01:26:54
ya guardado y me voy a las alertas 01:26:58
ahora estoy en las reglas de alerta 01:27:00
y aquí veis los tres conceptos que yo os he presentado 01:27:10
las reglas de alerta, los puntos de contacto 01:27:13
y las políticas de notificación 01:27:16
entonces nosotros lo que vamos a hacer 01:27:18
en primer lugar es definir una alerta 01:27:22
entonces voy a repasar los datos aquí 01:27:25
primer paso, darle un nombre a la regla 01:27:27
luego, sobre qué carpeta va a funcionar 01:27:33
será esa carpeta que hemos llamado dashboard 01:27:37
que es donde hemos guardado nosotros el gráfico 01:27:39
luego aquí vamos a crear la consulta de la alerta 01:27:42
la consulta de la alerta, que un campo sea inferior 01:27:45
o que un campo sea superior o lo que nosotros queramos 01:27:49
y luego cuando se va a ejecutar, que es lo que estamos viendo aquí 01:27:52
cuando el último valor de A 01:27:55
sea superior a 3 en este caso 01:27:58
veis que en A lo que estoy haciendo 01:28:01
es seleccionar simplemente 01:28:03
el campo interior 01:28:05
de temperatura, es decir en A 01:28:07
voy adquiriendo 01:28:09
los valores de la temperatura interior 01:28:11
y luego aquí abajo en la consulta 01:28:13
B lo que hago es que creo 01:28:15
una condición, esto que estáis viendo aquí 01:28:17
una condición clásica 01:28:19
en la que me pregunto, oye es el último valor 01:28:21
mayor que 3 01:28:23
y esta sería la regla 01:28:25
Y luego a continuación vamos a definir los tiempos de esa regla. Vamos a ver si esto se parece en algo a lo que tenemos ahora. Voy aquí a gestionar las reglas y voy a indicar que quiero crear una regla nueva. Nueva regla de alerta. Aquí abajo. 01:28:27
la voy a llamar por ejemplo interior mayor que 3 01:28:44
la voy a llamar a esta regla 01:28:52
y aquí voy a seleccionar del campo 01:28:53
perdón, del measurement temperatura 01:28:58
voy a quitar esto de media 01:29:00
y voy a elegir directamente el campo interior 01:29:03
y ahora que tengo definida la A 01:29:06
necesitaría definir la B 01:29:12
que sería aquí 01:29:14
por lo que sea no me lo coge, tengo que añadir aquí 01:29:15
pues voy a coger y voy a poner como antes las 01:29:19
para que me vayan aquí apareciendo los valores 01:29:21
de la temperatura, veis ya han aparecido 01:29:25
los últimos que he mandado, que los he mandado sobre las 17 y 28 01:29:28
si mando más, pues irán apareciendo 01:29:31
ahora aquí, dentro de un ratillo irán apareciendo aquí 01:29:34
vale, ahora añado una segunda consulta 01:29:36
y esa consulta tiene que ser 01:29:39
un de tipo condición clásica 01:29:42
a ver dónde está 01:29:45
porque aparece 01:29:46
de, si yo necesito que aparezca 01:29:49
aquí de 01:29:51
si esto es de 01:29:52
y yo necesito 01:29:58
que esté por encima de 01:30:02
vale, quito esta consulta 01:30:04
porque esto me está aquí añadiendo una consulta 01:30:08
distinta, entonces yo 01:30:10
necesito en algún sitio 01:30:12
lo han cambiado 01:30:14
aquí abajo, ¿vale? Que la entrada 01:30:16
de A, el último valor 01:30:18
esté 01:30:20
por encima de 01:30:22
y aquí es donde yo pongo el valor, 3. 01:30:24
¿Vale? Esto es lo que se llama un MapReduce. 01:30:27
Esto es un sistema que coge 01:30:29
datos, ¿vale? Y los 01:30:30
combina, por así decirlo. 01:30:33
Entonces, lo que estamos diciendo 01:30:35
aquí es, primero, 01:30:36
selecciona el valor de la 01:30:38
temperatura interior y eso lo 01:30:40
guardas en A. 01:30:42
Y luego aquí le estamos diciendo 01:30:44
que reduzca los valores de A, es decir 01:30:45
que se quede solo con los valores de A 01:30:48
y que la condición de alerta 01:30:50
va a ser que los valores de B 01:30:52
los valores estrictos de B, veis que aquí 01:30:54
podríamos decir, en vez del último valor 01:30:56
pues la media, la media de 01:30:58
cuantos valores, pues de los valores que fuera 01:31:00
la moda, el máximo, vale 01:31:01
yo me voy a quedar con el last, que es lo que teníamos 01:31:03
y eso es la reducción, es decir 01:31:06
hacer algún tipo de agregación 01:31:08
de los datos, y luego pongo 01:31:09
aquí la condición, la condición es que 01:31:12
B, el valor ya 01:31:14
obtenido de B, que es la reducción 01:31:16
esté por encima de 3 01:31:18
¿vale? pues ya está, ya tengo entonces 01:31:21
la configuración 01:31:23
¿en qué carpeta quiero meter esto? 01:31:24
pues no voy a poner 01:31:27
ninguna carpeta, ningún label 01:31:29
de momento, y ahora 01:31:30
aquí es la parte en la que 01:31:32
yo voy a indicar cuál es el tiempo 01:31:34
que va a estar pendiente 01:31:37
¿vale? entonces va a estar pendiente una hora 01:31:38
entonces 01:31:41
el umbral tiene que estar 01:31:43
superado, perdón una hora no, un minuto 01:31:45
el umbral tiene que estar superado 01:31:47
durante un minuto 01:31:49
para que la alerta se dispare 01:31:50
si no, no se dispararía 01:31:52
si ponéis no, que estaba leyéndolo 01:31:54
aquí ahora, se dispara inmediatamente 01:32:00
y luego aquí indicaríamos 01:32:02
a quien queremos enviarle 01:32:04
esa notificación, como yo ahora mismo no tengo 01:32:06
ningún punto de contacto, tengo aquí 01:32:08
un correo electrónico, podría crearme 01:32:10
otros puntos de contacto 01:32:12
para que recibiesen ahí el correo 01:32:13
con esa notificación 01:32:16
y aquí el texto de la notificación 01:32:18
que van a recibir, pues oye 01:32:20
la temperatura está por encima de 3 grados 01:32:21
la temperatura interior está por encima de 3 grados 01:32:24
y creo que eso 01:32:26
es todo 01:32:28
la evaluación 01:32:29
si, falta 01:32:33
que no encuentro donde se pone ahora 01:32:35
lo de que se evalúe cada 10 minutos 01:32:37
eso no lo veo 01:32:40
eso antes estaba aquí 01:32:41
esto no es 01:32:43
lo dejo así configurado 01:32:47
¿vale? porque no encuentro esa opción donde lo habrán 01:32:55
movido, entonces simplemente 01:32:57
configuras aquí cuánto 01:32:59
tiempo tiene que estar para que se dispare 01:33:01
y luego a quién se lo quieres mandar 01:33:03
pues yo directamente digo aquí, oye pues me quiero 01:33:05
crear un punto de acceso 01:33:07
¿vale? esto se ha quedado aquí en otra ventana 01:33:09
y se me abre una nueva 01:33:11
ventana en la que yo puedo crear un punto de acceso 01:33:13
voy a por ejemplo 01:33:15
a mandarme la notificación a mí 01:33:18
que sería Juanfe y aquí indico 01:33:19
como me la quiero mandar, pues por cisco 01:33:21
por disco, por email, por 01:33:23
mqtt 01:33:25
como veis aquí tengo un montón de opciones 01:33:26
me la quiero mandar por telegram 01:33:29
pues yo si me la quiero mandar por telegram 01:33:31
tendríamos que hacerlo del otro día 01:33:33
cogernos el 01:33:35
token del bot 01:33:37
yo por ejemplo me voy a mi botfather 01:33:38
y aquí en botfather tengo el token 01:33:48
me pegaría 01:33:54
aquí el token y luego 01:33:55
para saber el chat id, recordad que 01:33:57
tenemos un bot especial, que era 01:33:59
json.bot 01:34:01
y ahí me sale mi chat ID 01:34:02
que es este 01:34:05
lo pondría aquí 01:34:06
¿vale? y aquí podría probarlo 01:34:08
y veis que ya me están llegando ahí 01:34:13
las notificaciones directamente a 01:34:16
a Telegram 01:34:18
¿vale? pues una vez que tengo ya esto creado 01:34:20
guardo el punto de contacto 01:34:22
y directamente aquí 01:34:24
elijo como punto de contacto 01:34:27
bueno, voy a guardar esto 01:34:31
porque no se ha actualizado, lo guardo 01:34:32
a ver, hay un error, el grupo en el que lo quiero 01:34:36
meter, tengo que crear un nuevo 01:34:38
grupo de evaluación, vale, pues venga 01:34:40
creo un nuevo grupo de evaluación, hay más errores 01:34:42
aparte de ese 01:34:44
necesito una carpeta, pues venga, creo una carpeta 01:34:45
la voy a llamar temperaturas 01:34:48
temperaturas, la creo 01:34:50
ya tengo la carpeta 01:34:52
ahora necesito, tal vez, un 01:34:54
grupo de evaluación, y aquí 01:34:56
es cada cuánto se evalúa, por eso no lo 01:34:58
estaba encontrando, vale, está aquí, pues lo voy a 01:35:00
llamar también temperaturas y voy a evaluar las temperaturas 01:35:02
cada minuto, por ejemplo. Entonces ya lo tengo creado, este es el tiempo 01:35:06
dependiente, correcto, y aquí a quién lo quiero mandar. Bueno, lo pongo 01:35:10
de momento al de defecto, lo guardo 01:35:14
y ahora si quiero puedo entrar a editarlo. 01:35:17
Que lo tengo aquí, veis que ahora mismo está en estado 01:35:22
OK y se va a evaluar cuando sea, dentro de un minuto. 01:35:26
Entonces, si yo voy mandando datos, desde aquí, vamos a mandar un dato, 01:35:30
pero lo voy a visualizar para que veamos qué dato estamos visualizando. 01:35:34
Estamos enviando, voy a ponerle la X aquí, distancio, borro, enchufo, 01:35:38
y veis que ahora he mandado una de interior que está por debajo de 3, es 0,5. 01:35:48
Pues inyecto otra, 4. Esta ya está por encima de 3 grados. 01:35:53
Entonces, como está por encima de 3 grados, lo que veremos aquí es que dentro de un minuto, cuando él evalúe, el valor es mayor de 3 grados. Entonces, la alerta pasará a estado pending y luego de estado pending, si se mantiene ese valor por más de un minuto, ya pasaríamos al estado firing y se dispararía y yo recibiría la notificación en Telegram. 01:35:56
No la recibiría porque finalmente no me he puesto yo como punto de contacto. He dejado el correo electrónico que teníamos ahí. Pero este sería el método de funcionamiento. Voy a esperar, voy a dejar aquí que vaya analizando porque el problema que tiene Grafana es ese, que no es en tiempo real. 01:36:19
Hay como unas latencias, unos tiempos. Entonces es simplemente tener paciencia y esperar. Voy a ver si mientras esto ocurre soy capaz de ponerme como destinatario de la alerta. 01:36:38
A ver, alerting, alert rules y la alerta que yo he creado es esta, que la quiero editar y quiero ponerme como, no, aquí no está para ponerme como el destinatario. 01:36:50
y me quiero poner como destinatario 01:37:13
que no aparezco aquí tampoco, o sea que es que no me he llegado a creer 01:37:29
a crear como Telegram 01:37:32
no le he dado nombre, o que ha pasado aquí, estoy como Juanfe 01:37:34
integración por Telegram, configurado 01:37:39
configurado, opciones de notificación 01:37:48
esto nada 01:37:51
guardar contact point 01:37:53
estoy ahí 01:37:56
Modesto ha creado también uno 01:37:58
pero no sé por qué no aparecemos 01:38:00
aquí, ah, que habrá que actualizar esto 01:38:03
a ver 01:38:04
vale, ya estamos ahí, ya estoy Juanfe 01:38:05
lo guardo 01:38:08
ya estoy guardado 01:38:10
vale, y ahora lo que ocurriría 01:38:13
pues es eso, yo tengo aquí las reglas 01:38:14
entonces las reglas 01:38:16
se van a ir comprobando 01:38:18
y si el valor supera 01:38:20
lo que tenemos establecido, pues en algún 01:38:22
momento esto pasaría a pending 01:38:24
y si está más de un minuto 01:38:26
en pending, pasaría finalmente 01:38:28
a disparado y aparecería el mensaje 01:38:30
aquí en Telegram. 01:38:32
¿Vale? Entonces, bueno, 01:38:35
vais a ver que el estado 01:38:36
ahora mismo lo estamos viendo 01:38:38
aquí y está en estado 01:38:40
normal, ¿vale? 01:38:42
Se ha movido, no sé qué ha pasado. 01:38:44
A ver. 01:38:47
está en estado normal, no sé si es porque 01:38:48
he inyectado otro valor, que es por debajo de 3 01:38:52
porque si no 01:38:54
debería pasar, a ver, el estado 01:38:56
este 2 01:38:58
3 con 41 01:39:00
vamos a dejarlo ahí 01:39:03
y lo voy a dejar ahí a ver si 01:39:04
ha entrado, como 01:39:06
es que veis, tarda un ratito 01:39:08
en mandar los datos 01:39:10
vamos a dejarlo ahí y en algún momento 01:39:11
veremos que esto pasa a pending 01:39:14
y si se mantiene 01:39:16
por encima de, veis ya lo tengo aquí 01:39:18
ahora me acaba de llegar 01:39:20
si se mantiene más de un minuto 01:39:22
pues al final recibe 01:39:25
la notificación por tele 01:39:26
que es esta que estamos viendo aquí 01:39:28
entonces me está llegando esa alerta 01:39:30
y bueno, el mensaje de la alerta como habéis visto 01:39:32
pues lo podríamos configurar y demás 01:39:34
pues esto es lo que 01:39:36
esto es a grandes rasgos 01:39:38
lo que se puede hacer con 01:39:43
grafana, gráficos 01:39:44
conectar con 01:39:46
Telegram por ejemplo 01:39:48
y luego pues tiene su propio 01:39:51
lenguaje de plantillas, este mensaje 01:39:53
aquí que me ha llegado tan críptico 01:39:55
pues esto se 01:39:56
configura mediante este lenguaje 01:39:59
que veis aquí de plantillas que son 01:40:01
con estas llaves y tú vas pudiendo 01:40:03
ahí añadir los distintos 01:40:05
valores que quieras, pues yo quiero 01:40:07
añadir valores por ejemplo de un dashboard 01:40:09
o en un rango, pues veis 01:40:11
vas aquí usando ese 01:40:12
lenguaje, que pasa lo mismo, es un lenguaje 01:40:14
que hay que aprender. O sea, tienes que ir a la documentación 01:40:17
y estudiarte. 01:40:19
Bueno, pues eso es 01:40:21
un poco lo que... 01:40:23
Para tener varias gráficas en un 01:40:24
dashboard, que es 01:40:27
que enganchas una tabla 01:40:28
de una base de datos, puedes enganchar 01:40:30
diferentes tablas o... 01:40:33
¿Cómo está eso? 01:40:36
No te he entendido de eso. 01:40:37
Cuando has 01:40:40
empezado ahí la presentación, has 01:40:41
dicho que había un dashboard y ahí había un montón 01:40:43
de gráficas. Había tres o cuatro gráficas. 01:40:45
Sí. 01:40:47
Voy a apagarlo de Telegram porque 01:40:49
ahora se ha vuelto esto loco. 01:40:51
Telegram, Telegram, Telegram, 01:40:54
Telegram, ¿qué ha pasado? 01:40:55
Que para ir 01:40:58
sacando ahí gráficas diferentes 01:40:59
y tal... Añades aquí una 01:41:01
visualización, ¿vale? Aquí arriba, 01:41:03
añades visualización. Y entonces 01:41:05
tú eliges de InfluzDB 01:41:07
o de donde tú quieras, ¿vale? De otro 01:41:09
panel de control. Yo ahora quiero enganchar con 01:41:11
Modesto, de donde sea. 01:41:13
y te creas tu propia consulta, imagínate que yo quiero aquí en vez de interior 01:41:15
mostrar el campo de exterior, pues de temperatura 01:41:18
elijo el campo exterior 01:41:21
y elijo el last 01:41:25
entonces ya tendríamos ahí otra visualización 01:41:28
esa visualización ya está hecha, la guardo 01:41:35
y ahora tendríamos en temperaturas 01:41:40
los dos paneles 01:41:46
vale 01:41:48
vale, entonces ahí 01:41:49
estaríamos viendo 01:41:52
temperatura LAS 01:41:53
y temperatura LAS, aquí en este he metido 01:41:55
los dos y al final en el otro he metido solo uno 01:41:58
vale, voy a quitar esto de Telegram 01:42:01
porque me están achicharrando 01:42:02
aquí, a ver que está pasando 01:42:04
esto es 01:42:05
bien 01:42:06
vale, pues esto es más o menos 01:42:07
lo principal que tenemos 01:42:12
en Dashboard, vale, por hacer un breve 01:42:14
resumen, recordad, tener los 01:42:15
dashboards, en los dashboards 01:42:17
tenemos las visualizaciones 01:42:19
esas visualizaciones tienen que estar siempre 01:42:21
vinculadas a un origen 01:42:24
de datos, que lo elegís aquí 01:42:25
yo he elegido como origen de datos 01:42:27
sin plus de b, y eso me ha permitido 01:42:29
luego que cuando yo he creado las 01:42:31
visualizaciones, he podido 01:42:33
obtener datos 01:42:35
de ese origen de datos, entonces 01:42:37
según el origen de datos 01:42:39
que tú elijas, pues te va a aparecer aquí 01:42:42
un lenguaje u otro, vale 01:42:44
Si yo elijo como origen de datos InfluxDB, pues veis, esto que aparece aquí no está relacionado con InfluxDB. 01:42:45
Esto pertenece a Grafana. 01:42:53
Aquí yo lo que estoy haciendo es crear una consulta con un lenguaje de Grafana sobre InfluxDB. 01:42:55
Y eso es lo que me ha permitido crear los gráficos. 01:43:00
Y, bueno, aquí no hay mucho más que contar. 01:43:03
El sistema de alertas, por supuesto, es súper complejo. 01:43:06
Tenéis todo esto que os estaba contando, pues, por ejemplo, de los silencios. 01:43:10
pues yo no quiero que en fin de semana 01:43:13
o de tal a tal fecha o en vacaciones 01:43:16
pues no quiero que se notifique a tales 01:43:17
usuarios o lo que tú quieras 01:43:19
o quiero pausar durante lo que 01:43:21
pone aquí, durante dos horas 01:43:23
las opciones son muchas y más en 01:43:25
esta versión que debe ser nueva 01:43:27
imagino que habrá más todavía 01:43:29
notificaciones activas, reglas de alerta 01:43:31
esta es la de 01:43:34
Modesto y esta es la mía 01:43:36
está en estado normal 01:43:37
y aquí tenemos todos los estados 01:43:39
por los que ha ido pasando 01:43:41
pues esto es básicamente 01:43:43
lo que os quería contar 01:43:47
del stack IoT 01:43:48
de la integración del mosquito 01:43:50
InfluxDB, Node-RED y Grafana 01:43:52
veis que lo que hemos hecho aquí es que 01:43:55
desde Node-RED 01:43:57
inyecto valores 01:43:58
en InfluxDB 01:44:01
y esos valores de InfluxDB 01:44:02
los visualizo 01:44:05
mediante Grafana 01:44:06
en vez de inyectarlo directamente aquí 01:44:08
también vimos el otro día que los podíamos 01:44:11
inyectar directamente 01:44:13
por MQTT, pues este es el 01:44:15
stack que más se suele utilizar 01:44:17
Mosquito, InfluzDB, NodeRed, Grafana 01:44:19
la parte de Grafana se puede 01:44:21
reemplazar, se puede reemplazar 01:44:24
por otros 01:44:26
sistemas distintos 01:44:26
y eso es lo que os voy a mostrar ahora, os voy a mostrar 01:44:29
otro sistema que se llama 01:44:31
Finsboard, que es muy 01:44:33
muy popular, entonces 01:44:35
¿cómo vamos a hacer esto? 01:44:37
Fizzboard, voy a entrar a la página 01:44:39
para que lo veáis, fizzboard.io 01:44:43
es una aplicación ucraniana 01:44:45
entonces 01:44:47
tiene dos versiones 01:44:51
tiene una versión profesional 01:44:54
y otra de código abierto 01:44:56
nosotros vamos a utilizar la versión 01:44:58
de código abierto, si tú quieres la 01:45:00
profesional, pues nada, es llegar y pagar 01:45:02
¿vale? vienes aquí a la sección de 01:45:04
de precios y ves que tiene 01:45:06
tarifas desde 10 euros al mes 01:45:08
hasta lo que tú quieras 01:45:10
¿vale? entonces, ¿esto de 01:45:12
Sysboard qué es? pues esto es lo que 01:45:14
llamamos una plataforma de internet de las 01:45:16
cosas, es decir, es lo mismo que 01:45:18
el stack que hemos visto antes, antes hemos 01:45:20
visto un stack que estaba compuesto 01:45:22
por cuatro aplicaciones distintas 01:45:24
que te obliga a estar aprendiendo los detallitos 01:45:25
de cada una de ellas, de mantenerte al día 01:45:28
y demás, o bien tú puedes coger 01:45:30
una aplicación IoT 01:45:32
que lo englobe todo en una sola 01:45:34
¿vale? pues eso es Sysboard 01:45:36
que es lo que estamos viendo aquí, entonces 01:45:38
como os digo, Sysboard tiene 01:45:40
dos versiones, la versión 01:45:42
de código abierto 01:45:43
y la versión profesional. Nosotros 01:45:46
si vamos aquí a la versión 01:45:48
Approach, veis que tenemos la 01:45:49
Community Edition, que es la versión de código 01:45:52
abierto, y la versión profesional. 01:45:54
En la versión Community 01:45:56
Edition, tenemos la opción 01:45:58
nos dan un servidor de prueba. 01:46:00
Veis que pone aquí arriba 01:46:02
Try it now. 01:46:03
¿Vale? 01:46:06
Eso es el Try it now 01:46:10
de la versión 01:46:12
Cloud. Si tú vas a la 01:46:14
Community Edition, tenemos 01:46:16
aquí una versión demo de la Community 01:46:18
Edition. ¿Me vais 01:46:20
siguiendo? No. 01:46:22
Me he perdido el 01:46:26
no. A ver, lo vuelvo a 01:46:27
contar, ¿vale? Ya esto de Node.js y esto 01:46:29
de momento lo voy a cerrar. Vosotros 01:46:31
no lo cerréis, que luego voy a hacer un ejemplo, ¿vale? 01:46:33
Voy a la página de Thingsboard. 01:46:35
Thingsboard. Os lo 01:46:38
pego ahí en el chat para que veáis cómo se escribe. 01:46:42
Sí. 01:46:45
¿Vale? Y 01:46:47
en esta página 01:46:49
tengo aquí arriba a la derecha 01:46:50
Try It Now. Pruébalo. 01:46:52
Ah, sí. ¿Vale? 01:46:55
Y ahora te aparece 01:47:00
todos los productos que ellos ofrecen. 01:47:01
Pues la versión en la nube, la Community Edition, 01:47:02
la Professional Edition. 01:47:05
Nosotros vamos a probar la Community Edition. 01:47:06
Es esta de aquí. 01:47:09
Entonces, ¿qué 01:47:12
podríamos hacer ahora? Pues nosotros 01:47:12
nos podríamos instalar esa versión perfectamente. 01:47:14
¿Vale? Yo podría venir aquí a mi 01:47:17
servidor en PuTTY 01:47:18
e instalármelo. De hecho, podría entrar aquí 01:47:19
por Portainer y en Portainer 01:47:22
buscar la template 01:47:24
de CISBOR e instalármelo 01:47:26
directamente. ¿Vale? 01:47:28
¿Qué ocurre? Que CISBOR es un 01:47:30
proyecto bastante pesado. Entonces, en estos 01:47:32
servidores que yo os he montado, no va a funcionar. 01:47:34
Necesita, se recomienda por lo menos 01:47:37
8 GB de RAM. Entonces, 01:47:38
en lugar de eso, vamos a 01:47:41
usar la demo que ellos nos ofrecen. 01:47:42
Tiene un sistema 01:47:44
de demos que tú le das aquí a Live Demo 01:47:46
y veis que os ofrece la opción de registraros, ¿vale? 01:47:48
Esto es voluntario, por supuesto. 01:47:57
El que no se quiera registrar, no se registra. 01:47:58
Pondréis aquí nombre, apellido, correo electrónico, 01:48:01
le dais una contraseña y aceptáis la política de privacidad, ¿vale? 01:48:04
Yo, como ya tengo una cuenta, voy a entrar con mi cuenta. 01:48:10
Yo le digo aquí iniciar sesión, pongo mi correo electrónico y entro. 01:48:16
venga, espero unos segundos a que os creéis la cuenta 01:48:24
¿qué diferencias hay entre la cuenta 01:48:38
gratuita y la de pago así 01:48:52
de forma general? 01:48:54
pues mira, de forma general principalmente esta 01:48:56
y nosotros vamos a la documentación 01:48:59
de CISBOR 01:49:03
tienen por aquí 01:49:04
la arquitectura 01:49:09
aquí, la arquitectura 01:49:10
bueno, pues la arquitectura 01:49:14
de CISBOR es esta 01:49:17
No sé si lo veis más o menos, pero veis que aquí tenemos dispositivos que son capaces de establecer una conexión TCP y IP. 01:49:19
Entonces, esos dispositivos entran directamente por los protocolos que ellos quieran utilizar, HTTP, MQTT, el que sea, cada dispositivo. 01:49:29
Y luego aquí tenemos otros dispositivos que no son capaces de ejecutar una conexión TCP y IP. 01:49:39
Por ejemplo, aquí tenemos un dispositivo Bluetooth, o los dispositivos Bluetooth no usan la pila TCPIP, o tenemos un dispositivo LoRaWAN que tampoco usa la pila TCPIP. En tal caso, lo que hacemos es que ellos utilizan una cosa que llaman gateways, que son simplemente pasarelas que convierten esos protocolos en protocolo MQTT, ¿vale? 01:49:45
De esa forma, ellos ya consiguen que todo lo que entra en su plataforma llegue por uno de estos protocolos. Una vez que ya lo tienen, lo primero que hacen, pues como veis, es almacenarlo. Lo pueden almacenar en bases de datos SQL como Postgre o bases de datos no SQL como Cassandra, ¿vale? 01:50:09
¿Y cuál es la diferencia? 01:50:29
¿Qué es lo que tú me preguntabas? 01:50:30
Pues precisamente todo lo que aquí pone Professional Edition 01:50:31
no está disponible en la versión de la comunidad. 01:50:34
Por ejemplo, White Labeling. 01:50:40
¿Eso qué quiere decir? 01:50:41
Que yo no voy a poder quitar de aquí Sysboard. 01:50:42
Siempre va a aparecer Sysboard. 01:50:45
Sin embargo, si yo tuviera la versión profesional, 01:50:46
aquí podría poner el nombre de mi cliente. 01:50:48
Pues el cliente que fuera. 01:50:50
Otro cambio, las integraciones. 01:50:53
Esto es un fastidio. 01:50:55
¿Vale? Porque estas integraciones, ¿qué ocurre? Que si yo ahora quiero integrar un dispositivo de Zip Network, por ejemplo, que es un dispositivo LoRaWAN, pues no lo voy a poder integrar. O sea, todo esto que tengo aquí solamente lo podría integrar con la versión Professional Edition. No podría hacerlo. En teoría no podría hacerlo. ¿Vale? Buscándote la vida sí que eres capaz, pero es bastante complicado. 01:50:56
Entonces, las mejoras que tiene principalmente la versión profesional son estas, que te hace muy sencillo integrar dispositivos de cualquier plataforma. Veis que tenemos aquí las principales plataformas. Tenemos L'Oreal, Chilestar, Amazon Web Services, IBM Watson, Azure. Tú tienes dispositivos, Sigfox, por ejemplo, tuya, prácticamente cualquier cosa la podemos integrar, incluso voz de Telegram, ¿vale? 01:51:19
Y esa es la principal diferencia, esta parte de aquí, la parte de las integraciones. Eso en la versión comunitaria no lo tenemos. Entonces va a ser mucho más complicado conectar dispositivos que no utilicen los protocolos estándar. Los que usen los protocolos estándar vais a ver que es muy sencillo, pero cuando no usan el protocolo estándar, pues ya vas a tener que andar ahí lidiando con la documentación o con pequeños trucos para poder enviar los datos. 01:51:45
bueno, no sé si habéis sido capaces 01:52:12
de crearos vuestra cuenta 01:52:14
01:52:15
entonces deberíais estar viendo ahora mismo algo parecido a esto 01:52:16
01:52:20
lo primero que deberíais fijaros es que 01:52:22
arriba a la derecha 01:52:25
indicará vuestro nombre y que sois 01:52:26
el administrador 01:52:29
¿vale? ahora estáis como usuario 01:52:30
administrador en esta 01:52:33
plataforma de internet de las cosas 01:52:35
entonces, ahora os llamo la atención sobre el panel 01:52:37
de la izquierda, ¿vale? 01:52:39
ahí en el panel de la izquierda fijaos que hay una sección 01:52:41
que se llama entidades, ¿vale? 01:52:43
Y esa sección está dividida principalmente 01:52:46
en activos y dispositivos. 01:52:49
¿Un activo qué es? 01:52:52
Un activo es una entidad jerárquica, 01:52:54
es decir, no es algo tangible, 01:52:56
es algo que tú creas y que le das el nombre que tú quieres. 01:52:58
Por ejemplo, hotel o ismier o camping, 01:53:00
lo que tú quieres, ¿vale? 01:53:05
Y dentro de esa unidad organizativa 01:53:06
vamos a poder asignarle dispositivos, 01:53:08
que los dispositivos ya sí que son 01:53:11
motas, sensores, actuadores 01:53:13
o cualquier dispositivo que queramos conectar 01:53:15
a internet, vale, entonces 01:53:17
vais a ir ahí, a dispositivos 01:53:19
entonces, no sé si será como 01:53:21
mi caso, pero veis que yo ya tengo 01:53:23
hay un montón de dispositivos que me han creado ellos 01:53:25
¿me podéis confirmar si los siguen creando, por favor? 01:53:27
sí, sí 01:53:30
cliente, pero sí 01:53:31
vale, pues esos son dispositivos 01:53:32
que os ponen allí ellos de prueba 01:53:35
para que veáis como 01:53:37
pues eso, si queréis empezar a funcionar 01:53:38
directamente pues ya os da una serie de dispositivos 01:53:41
veis tienen un 82 01:53:43
66 o bueno en vuestro 01:53:45
caso igual cambia, pero vamos a 01:53:47
suponer que queremos crear un sensor nuevo 01:53:49
pulsamos aquí en el signo más 01:53:51
agregar dispositivo 01:53:53
y le decimos que queremos agregar 01:53:54
un dispositivo nuevo 01:53:58
le damos un nombre, lo vamos a llamar por ejemplo 01:54:00
Ismier Temperatura 01:54:05
Ismier Tem 01:54:07
vale, y no hace falta 01:54:08
nada más, ya con eso le damos aquí 01:54:16
agregar y ya nos ha creado ese dispositivo de hecho ahora es súper cómodo porque incluso te 01:54:18
da la opción de probar en tiempo real si funciona o no funciona vale entonces veis que te dice pues 01:54:27
según el sistema operativo que estés usando o según el protocolo si quieres usar http si 01:54:34
quieres usar o bqtt o si quieres usar co-op pues puedes enviarle los datos si te dicen cómo enviar 01:54:39
esos datos ¿vale? entonces yo que si 01:54:45
¿cómo podríamos hacerlo de una forma 01:54:47
sencilla? pues yo voy a 01:54:49
probar con este comando ¿vale? 01:54:52
el CUR este que tengo aquí 01:54:53
o bien si queréis aprovechando que tenéis la máquina 01:54:55
ya abierta en Linux 01:54:58
pues copiáis aquí de Linux 01:54:59
copiamos este comando y en el putty 01:55:01
lo pego 01:55:04
¿vale? veis que me sale 01:55:10
toda esta retaíla, lo que más me interesa 01:55:13
a mí es que he recibido un 200 01:55:14
eso quiere decir que se ha recibido 01:55:16
correctamente la telemetría 01:55:18
y veis aquí abajo 01:55:20
me aparece que la temperatura es 25 01:55:22
que es el dato que yo acabo de mandar 01:55:24
podríamos mandar otro distinto 01:55:26
lo pego 01:55:30
pego otra vez ese comando 01:55:31
y cambio yo que sé 01:55:33
los cambios de 25 por ejemplo 01:55:37
a 47 01:55:40
ya tengo ahí mandado otro valor 01:55:41
y veis ya tengo aquí que el último valor que se ha recibido 01:55:46
es 47 01:55:48
¿de acuerdo? 01:55:49
¿nos funciona esto? 01:55:52
01:55:56
vale, pues eso es porque 01:55:56
estamos mandando los datos 01:55:59
por HTTP 01:56:01
si quisiéramos los podríamos mandar también por 01:56:02
MQTT, vale, ahora si hacemos una prueba 01:56:05
con MQTT, entonces yo ya veo 01:56:07
que mi dispositivo está creado 01:56:09
y que puedo enviar datos, tío pues 01:56:10
fenomenal, ya lo cierro 01:56:13
y veis que tenemos ahí nuestro dispositivo 01:56:14
que se llama ISMIE 01:56:17
temperatura, es el primero 01:56:19
ese dispositivo 01:56:20
si hacéis clic en él 01:56:22
vais a ver que tiene una serie de detalles 01:56:24
que es información genérica 01:56:28
pero más interesante 01:56:29
tiene esto que estáis viendo aquí 01:56:31
última telemetría 01:56:33
y ahí aparece el valor de la última telemetría 01:56:34
que se ha recibido 01:56:37
si yo envío otra telemetría ahora 01:56:38
por ejemplo vamos a mandar 01:56:41
en vez de 47 voy a mandar 7 sin más 01:56:42
pues veis que ese valor cambia automáticamente 01:56:45
entonces todos estos valores 01:56:49
ya están quedando almacenados 01:56:51
en una base de datos de Fishboard. 01:56:53
O sea, el salvado de los datos 01:56:56
se realiza de forma automática. 01:56:58
También veis aquí 01:57:01
que las telemetrías se van almacenando. 01:57:02
Adicionalmente a las telemetrías, 01:57:05
cada dispositivo puede tener atributos. 01:57:07
Esto es bastante potente 01:57:10
porque aquí puedes tener 01:57:13
atributos del cliente, 01:57:14
atributos del servidor 01:57:16
o atributos compartidos. 01:57:17
Entonces, por ejemplo, 01:57:20
un atributo del cliente 01:57:20
es un atributo propio del sensor, ¿vale? 01:57:22
Pues aquí podríamos crear un atributo 01:57:25
que fuera marca de las baterías 01:57:28
y poner que es baterías Duracell o lo que sea, ¿vale? 01:57:29
Eso sería un atributo. 01:57:34
O fecha en la que se ha cambiado por última vez la batería, 01:57:35
pues tal fecha. 01:57:38
Como veis, esos atributos yo no los puedo crear, 01:57:39
los del cliente, 01:57:41
porque son atributos del propio cliente, del sensor. 01:57:43
Yo no los puedo crear aquí desde la plataforma, ¿vale? 01:57:46
Sin embargo, si me fuera atributos del servidor, 01:57:49
veis que yo aquí sí que me puedo crear 01:57:51
un atributo del servidor, por ejemplo 01:57:53
podría decir aquí 01:57:55
pues operador 01:57:56
pues por ejemplo esto lo tengo con 01:57:59
movistar 01:58:02
lo agrego, vale, y yo ya sé 01:58:03
me queda ahí almacenado 01:58:07
que este de nodo 01:58:08
utiliza como conexión pues la 01:58:10
conexión SIM de movistar o lo que yo esté 01:58:12
utilizando, vale, esos son los atributos 01:58:14
bien, pues ya tenemos entonces 01:58:17
telemetrías y atributos 01:58:20
vamos a intentar mandar un dato 01:58:22
por MQTT a este sensor 01:58:24
¿vale? como vamos a 01:58:27
intentar simular que somos el sensor 01:58:28
¿vale? como el sensor no lo tenemos realmente 01:58:30
lo que vamos a hacer es simular 01:58:32
igual que hemos simulado antes con 01:58:34
HTTP, vamos a simular 01:58:36
ahora con MQTT 01:58:38
¿cómo hacemos eso? bueno, pues hay que ir a la documentación 01:58:39
¿vale? entonces si nosotros vamos a la 01:58:43
API, aquí, veis he ido 01:58:44
a documentación, docs 01:58:46
de la community edition 01:58:48
y ahí me voy a la API, aquí, API, ¿vale? 01:58:50
Pues como veis tienen una API MQTT, una API HTTP, COAP, una serie de APIs. 01:58:55
Yo voy a usar ahora la API MQTT, pues aquí te cuentan toda la historia 01:59:03
de cómo tendrías que hacer una conexión por MQTT, ¿vale? 01:59:09
Y lo bueno es que incluso te trae aquí ejemplos. 01:59:12
Entonces para nosotros va a ser relativamente sencillo enviar datos. 01:59:16
entonces por ejemplo 01:59:19
os pido 01:59:20
que no sé 01:59:21
si tenéis instalada 01:59:22
que instalamos 01:59:23
el otro día 01:59:24
algún 01:59:25
cliente MQTT 01:59:25
el MQTTX 01:59:27
lo llegamos a instalar 01:59:28
yo creo 01:59:29
que no 01:59:32
yo creo que tampoco 01:59:33
por favor 01:59:35
instalarlo 01:59:36
en un momento 01:59:36
vale 01:59:37
es MQTTX 01:59:37
a ver 01:59:39
vais aquí 01:59:41
a descargar 01:59:52
el MQTT 01:59:53
Explorer 01:59:54
vale 01:59:55
no lo conozco, pero en principio 01:59:56
te va a valer cualquiera, vale, si tenéis 01:59:58
el MQTTFX, vale 02:00:00
el MQTTX, ese concretamente no lo conozco 02:00:02
pero imagino que valdrá también 02:00:05
vale, le damos aquí a Windows 02:00:06
lo descargamos 02:00:10
y ya está, vale, entonces 02:00:11
yo lo tengo ya aquí instalado 02:00:13
y tiene este aspecto 02:00:16
igual tengo también ese que tú me dices 02:00:18
a ver, MQTT 02:00:20
Explorer 02:00:21
no, ese no lo tengo 02:00:23
por si acaso 02:00:26
me he instalado el cartillo por si acaso 02:00:28
vale 02:00:30
este, vamos, no es ninguna 02:00:31
maravilla, es muy sencillo, vale 02:00:34
aquí no 02:00:36
vale 02:00:36
aquí hay, porque yo he estado aquí toqueceando 02:00:58
cosas, vale, entonces 02:01:00
¿ya lo tenéis instalado? 02:01:01
no, estoy en ello 02:01:06
y listo 02:01:07
Esto es un cliente MQTT, ¿no? 02:02:05
Sí, es un cliente MQTT, sí. 02:02:28
Sí, ya está. 02:02:33
vale, bueno 02:02:39
¿ya lo tenéis? 02:02:40
pues mira, aquí donde pone conexiones 02:02:48
hay que hacer clic en el signo más SKY 02:02:51
¿vale? para crear una conexión nueva 02:02:53
ahora vamos a crear una conexión 02:02:55
desde MQTTX 02:02:57
a Thingsboard 02:02:59
entonces tenéis que configurar 02:03:00
tenéis que configurarla 02:03:03
como yo voy a intentar 02:03:05
mostrarlo aquí para que lo veáis 02:03:07
¿vale? tenéis que poner 02:03:08
el nombre que vosotros queráis 02:03:11
en el host 02:03:13
tenéis que poner esto, que os pego en el chat 02:03:15
¿vale? demo.cisboard.io 02:03:18
espera un momento 02:03:26
connection 02:03:28
más, a ver 02:03:37
connection 02:03:38
el nombre, ¿no? 02:03:40
el nombre, lo que queráis 02:03:43
y el 02:03:44
ah, en el host, ¿no? 02:03:46
sí, ahí veis que pone host 02:03:47
mqtt 02:03:51
y a la derecha es donde ponéis 02:03:51
demo.fizzball.io 02:03:54
Estos datos saldrán 02:03:56
de Fizzball, ¿no? 02:04:00
Sí, sí, claro. Eso está aquí. Fijaos que 02:04:02
nos lo ha dicho ya antes. Cuando estábamos aquí 02:04:04
en el dispositivo, a ver dónde 02:04:06
estaba... 02:04:08
Aquí, cuando hemos creado el dispositivo 02:04:10
¿vale? Nos ha 02:04:12
dado la información del servidor 02:04:14
del broker, ¿vale? Cuando yo he creado el dispositivo 02:04:16
a ver, vuelvo a crear 02:04:18
otro, ¿vale? Vosotros esto no lo hagáis. 02:04:20
Yo lo llamo, por ejemplo, 02:04:23
o JF. ¿Veis? Cuando vas 02:04:24
a MQTT, te dice directamente 02:04:30
cómo se llama, demo-gisboard.io 02:04:32
¿Lo veis? Y te dice 02:04:34
aquí el puerto, 1883. 02:04:36
Y te dice también el topic 02:04:38
que lo vamos a necesitar ahora, si es que ya lo voy 02:04:40
a copiar. Vale. 02:04:42
Pero antes de eso me interesa otra 02:04:44
cosa. Vosotros estáis ahí poniendo 02:04:46
el broker, 02:04:48
que es este, ¿vale? Habéis puesto el 02:04:50
puerto, el id 02:04:52
client me da igual, pero 02:04:54
ahora hay un problema. Ahora me está pidiendo 02:04:56
un nombre de usuario, que es este 02:04:58
de aquí. ¿Vale? 02:05:00
¿Ese nombre de usuario de dónde lo saco? 02:05:02
Pues fijaos qué curioso cómo lo 02:05:04
hace Finsboard. Si vais a 02:05:06
Finsboard, a vuestro dispositivo, 02:05:08
¿vale? 02:05:12
Al dispositivo es mía, temperatura, 02:05:12
copiar a C-Stocken, 02:05:18
aquí en detalles, 02:05:20
copiar a C-Stocken, 02:05:23
¿vale? 02:05:26
Te copia el nombre de usuario 02:05:26
que tienes que poner ahí, que es 02:05:28
un token distinto para cada dispositivo 02:05:32
que tú tengas. ¿De acuerdo? 02:05:34
Sí, a ver. 02:05:41
Tiene que ser un 02:05:43
chorizo así largo de letras 02:05:44
en mayúsculas, minúsculas y números. 02:05:46
Vale, vamos a ver. 02:05:51
Y ya no hay que tocar nada más, ¿vale? 02:05:55
Ya directamente le puedes dar aquí arriba a la derecha 02:05:57
donde puedes conectar. Sin password. 02:05:59
No se ha oído, perdonadme. 02:06:02
Sin password. 02:06:04
Sí, sin password. Esa es la clave, ¿vale? 02:06:05
El asunto es que es con 02:06:07
el token en el nombre de usuario 02:06:09
y no tiene clave. 02:06:11
Le damos conectar 02:06:13
y veis que yo ya estoy conectado. 02:06:14
Sí. 02:06:17
Ahora quiero mandar un valor. 02:06:19
¿Cómo lo mando? Pues lo mando 02:06:21
al topic que yo me interese. 02:06:22
¿Cómo sé qué topic me interesa? 02:06:25
Pues si vosotros vais a 02:06:27
ver la documentación, vais a ver 02:06:29
que aquí en la documentación 02:06:31
os dice que según lo que queráis publicar. 02:06:32
Si yo quiero publicar una telemetría, 02:06:35
pues por ejemplo me busco aquí 02:06:37
la de telemetría 02:06:38
esta es la de atributos, la de telemetría 02:06:41
que es esta, ¿vale? entonces me dice 02:06:44
tengo que publicar en este topic 02:06:45
¿veis? 02:06:47
y tengo que, ahora lo pego, lo pego en el chat 02:06:51
no os preocupéis, lo pongo en el chat 02:06:53
¿pero dónde ha sido? 02:06:55
y tengo que publicar ¿en qué formato? 02:07:01
en formato JSON 02:07:04
entonces yo me vengo aquí al MQTTX 02:07:04
¿vale? 02:07:08
y aquí abajo 02:07:10
escribís ese topic que yo os he dado 02:07:11
v1 barra device 02:07:14
barra mi barra telemetry 02:07:16
¿vale? 02:07:18
no sé si lo veis 02:07:21
porque está muy pequeñito 02:07:22
02:07:23
pero en The Things Board 02:07:24
¿dónde has ido a ver la documentación esa? 02:07:34
sí, eso es en la página 02:07:37
The Things Board, en la página oficial 02:07:38
te vienes a Docs 02:07:40
de la Community Edition 02:07:42
¿dónde? 02:07:44
a ver, empiezo otra vez 02:07:46
en la página The Things Board 02:07:47
vamos a docs 02:07:50
y en docs elegimos community edition 02:07:52
vale 02:07:57
y ahí nos vamos a API 02:07:57
bien 02:08:00
y en API eliges la API MQTT 02:08:01
bien 02:08:05
y aquí en el menú de la derecha 02:08:07
te vas a la API de telemetrías 02:08:10
que es esta 02:08:13
telemetria blog API 02:08:13
y ahí te dice que tienes que publicar 02:08:15
en este topic 02:08:19
entonces 02:08:19
yo he puesto aquí el nombre del topic 02:08:27
y aquí abajo lo pongo en formato 02:08:30
JSON porque veis que me está diciendo 02:08:32
tú tienes que mandar los valores en formato 02:08:34
JSON, entonces yo le voy a mandar 02:08:36
una temperatura y digo pues mira 02:08:38
le voy a mandar también una humedad 02:08:40
humedad pues 75 02:08:42
por ejemplo 02:08:44
y pulso este botoncillo de aquí 02:08:45
abajo que es enviar 02:08:48
entonces como veis me dice que se ha publicado 02:08:49
con calidad de servicios 0 02:08:52
o sea, lo tengo ya publicado 02:08:54
¿por qué con calidad de servicio 0? 02:08:56
porque aquí tenemos elegido calidad de servicio 0 02:08:58
yo le puedo dar calidad de servicio 2 02:09:00
¿vale? voy a cambiar un poco 02:09:02
los valores, voy a poner 35 y 15 02:09:04
por ejemplo, y le digo publicar 02:09:06
¿vale? y ahora se ha publicado con calidad 02:09:08
de servicio 2 02:09:10
¿y esto dónde lo veo en CISBOR? 02:09:11
pues en CISBOR 02:09:15
si vais a la última telemetría 02:09:16
vais a ver que ahora tiene ya dos valores 02:09:21
un valor de temperatura y un valor de humedad 02:09:23
¿de acuerdo? 02:09:25
02:09:29
pero es que hay más, claro 02:09:30
¿qué me impide ahora mandar datos 02:09:32
a Sysboard desde 02:09:34
Node.js, por ejemplo? 02:09:36
pues nada, yo podría irme a mi 02:09:39
Node.js, voy a coger 02:09:41
la dirección IP 02:09:43
que la tengo 02:09:44
aquí 02:09:47
¿y os atreveréis a mandar vosotros los datos 02:09:47
directamente? 02:09:50
yo me creo aquí un flujo nuevo 02:09:55
por ejemplo 02:10:02
y que quiero hacer, quiero inyectar datos 02:10:02
por MQTT, entonces me pongo 02:10:05
un inyector, ese inyector 02:10:07
lo configuro para que 02:10:09
me mande como carga de pago un objeto 02:10:11
JSON 02:10:13
que va a ser por ejemplo 02:10:14
voy a poner aquí 02:10:16
temperature 02:10:22
2.0 02:10:25
2.32, humedad, dos puntos, por ejemplo, 40, ¿vale? 02:10:28
Aquí podríais usar matemáticas, más random, o lo que sea, 02:10:38
pero no lo voy a complicar, lo dejo así, ¿vale? 02:10:43
Ya tengo el inyector, ¿y ahora qué necesitaría? 02:10:48
Pues ahora necesitaría un MQTT out, 02:10:52
pero este MQTT out que aparece con el triángulo, 02:10:57
ya no lo voy a redirigir 02:10:59
a mi propio servidor de Mosquito 02:11:01
sino que me voy a crear un servidor 02:11:03
externo, ¿vale? 02:11:06
Ese servidor externo 02:11:07
va a tener el nombre que os he puesto 02:11:09
primero en el chat, es decir, este 02:11:11
demo-sysboard.io 02:11:15
¿vale? 02:11:20
Y en seguridad 02:11:26
es donde tengo que poner el nombre de usuario 02:11:28
entonces vuelvo a copiar 02:11:32
en detalles el token 02:11:34
lo pego 02:11:36
aquí en el usuario 02:11:39
pulso añadir 02:11:39
y ahora me está diciendo 02:11:46
¿en qué tema quieres publicar? 02:11:48
pues el tema en el que quiero publicar 02:11:50
es justo el que os he puesto ahí en el 02:11:52
en el chat 02:11:55
le digo hecho 02:11:59
engancho lo uno con lo otro 02:12:01
instancio 02:12:04
veis que ya se ha conectado 02:12:06
ahora fijaos lo que está ocurriendo 02:12:08
un contenedor 02:12:10
de Node-REF que estamos ejecutando 02:12:12
en un servidor de Nuremberg 02:12:14
se está conectando por MQTT 02:12:16
a un servidor de 02:12:19
CISBOR que está en Ucranian 02:12:20
entonces yo aquí podría inyectar datos 02:12:22
y el dato 02:12:24
veis que se ha inyectado, entonces vendríamos aquí 02:12:26
y en la última telemetría 02:12:28
pues tendríamos el valor que hemos 02:12:30
inyectado, no sé si ha sido este el valor que le he puesto 02:12:32
a ver, me he puesto 02:12:35
32 y 45 02:12:35
no sé por qué se me está conectando 02:12:39
y desconectando, no sé si a vosotros os pasa 02:12:41
igual, lo que pasa es que me dice 02:12:43
que se está inyectando, se inyecta 02:12:45
se conecta, ahí está 02:12:47
igual es porque algún 02:12:48
compañero está también intentando conectarse 02:12:54
al mismo o algo así 02:12:56
pero en principio con eso, veis que ya van cambiando 02:12:57
aquí los valores a los que yo estoy 02:13:00
enviando desde Node.js 02:13:02
entonces, con esto 02:13:03
calidad de servicio le voy a poner 0 02:13:05
y aquí en el broker 02:13:09
usar sesión limpia 02:13:13
aquí no toco nada, eso lo dejo igual 02:13:17
no sé por qué se me está 02:13:19
conectando y desconectando, eso debería 02:13:21
mantenerse ahí conectado 02:13:23
debería mantenerse como está ahora 02:13:24
no sé por qué se está 02:13:28
se está desconectando, igual está saturado 02:13:29
el broker de 02:13:32
Finsburg 02:13:34
bueno 02:13:34
pues esto visto, ¿vale? 02:13:36
veis que todo esto es un mundo que 02:13:38
realmente gracias a los estándares 02:13:40
a los HTTP, MQTT, CoAP y demás 02:13:42
podemos integrar cualquier aplicación 02:13:44
con cualquier aplicación 02:13:46
ahora podríamos tirar de InfluenTV 02:13:48
mandar datos de InfluenTV a CISBOR 02:13:50
lo que quisiéramos, ¿vale? 02:13:52
¿y había una pregunta? 02:13:54
yo el dispositivo no sé que he perdido 02:13:59
y no lo tengo activo 02:14:01
¿aquí? 02:14:03
en CISBOR me dices 02:14:05
Sí, es que me despista cuando has hecho 02:14:06
los clientes con otra cosa 02:14:08
y no sé si creen. Ahí no tienes que 02:14:09
hacer nada, es simplemente crearte el dispositivo 02:14:12
Sí, está creado 02:14:14
y pues ya está. Si lo tienes creado el dispositivo 02:14:15
es entrar 02:14:18
al dispositivo, en detalles 02:14:19
te copias el token 02:14:22
y en última telemetría 02:14:23
vas a ir viendo cómo entran esas telemetrías 02:14:26
Es que no me aparece 02:14:28
Claro, pero te has creado 02:14:29
Lo que a ti en dispositivos 02:14:31
te aparece como activo y yo lo tengo inactivo 02:14:34
no sé por qué 02:14:36
porque no has conseguido mandar todavía ninguna telemetría 02:14:37
¿te importa pegarme tu token en 02:14:40
en el chat? 02:14:42
02:14:45
te voy a mandar yo un dato desde 02:14:45
mi nodo de red a tu dispositivo 02:14:47
¿vale? 02:14:50
¿dónde está? aquí copia, el haces token ¿no? 02:14:51
02:14:54
pues yo voy a coger 02:14:54
el token de este compañero 02:15:08
y lo único que tengo que hacer 02:15:10
es irme a mi 02:15:12
configuración del nodo 02:15:14
y en seguridad cambio el nombre de usuario 02:15:17
lo actualizo 02:15:19
hecho 02:15:21
instancio 02:15:22
¿vale? y ahora pulso aquí 02:15:24
enviar y ahora 02:15:27
a ti te debería estar apareciendo esto de 02:15:28
temperatura 32 y humedad 45 02:15:30
¿vale? pues veis que 02:15:36
esto es realmente muy potente 02:15:39
porque te permite incluso enviar datos 02:15:40
de un cliente a otro cliente 02:15:42
¿vale? simplemente 02:15:45
conociendo el token de cada dispositivo 02:15:46
así es como funciona 02:15:49
Thinsboard 02:15:50
bien, ya hemos visto entonces 02:15:51
cómo crear estos dispositivos 02:15:54
y cómo enviar datos 02:15:57
perdona 02:15:58
cuando estás poniendo ese token de esos dispositivos 02:15:59
es un token único para 02:16:03
todos los dispositivos de todos los usuarios 02:16:04
de Thinsboard, sí 02:16:07
el token era por dispositivo 02:16:09
para que le lleguen los datos a ese dispositivo 02:16:17
sí, sí, el token es único por dispositivo 02:16:19
es esto que estáis viendo aquí, ¿vale? 02:16:22
son del aspecto del que ha pegado el compañero 02:16:23
¿vale? entonces, ¿qué puede ocurrir? 02:16:26
pues que tú intentes enviar datos 02:16:28
al azar a distintos tokens 02:16:30
¿vale? pero claro, daos cuenta 02:16:32
que esto es para tu instalación 02:16:34
de Fizzball 02:16:36
es decir 02:16:37
aquí estamos usando una demo, pero yo por ejemplo 02:16:39
tengo mi propia instalación de Fizzball 02:16:42
aquí 02:16:44
¿vale? pues yo tengo estos dispositivos 02:16:44
entonces claro, tú no puedes conectarte 02:17:00
a uno de mis dispositivos 02:17:03
si no conoces mis tokens 02:17:05
vale, esto se trata 02:17:06
de que cada uno tengáis vuestra propia 02:17:09
instalación de Zinsboard, hoy estamos usando 02:17:11
la demo, por lo que os he dicho, porque no podéis 02:17:13
instalar vuestro propio Zinsboard 02:17:15
en las máquinas que tenemos, porque las máquinas que 02:17:16
tenemos tienen muy poca memoria RAM 02:17:19
pero si no, podríais 02:17:20
tener vuestra propia 02:17:23
instalación, de acuerdo, cada una 02:17:25
con sus tokens 02:17:27
vale, entonces 02:17:28
vamos a continuar un poquito más 02:17:30
ya tenemos datos, ya sabemos como mandar 02:17:31
los datos, aquí lo hemos simulado 02:17:34
pero tened en cuenta que esto lo podríamos hacer 02:17:36
perfectamente con Huawei 02:17:38
o con un SP32 02:17:39
podríamos decirle, oye por MQTT envía estos datos 02:17:41
a Sysboard y ya tendríamos aquí los datos 02:17:46
ya lo imaginaos que yo quiero 02:17:48
representar esos datos 02:17:50
vale, que los quiero mostrar en un gráfico 02:17:51
pues para eso 02:17:54
tenemos este otro comando que veis aquí 02:17:56
el comando de paneles 02:17:57
¿vale? 02:17:59
y en paneles, pues si os pasa como a mi 02:18:05
pues ya tendréis ahí un montón de paneles 02:18:07
que nos dan por defecto 02:18:09
pero nosotros nos vamos a crear 02:18:11
un panel nuevo, crear 02:18:13
nuevo panel, ¿vale? aquí en el signo más 02:18:19
crear nuevo panel 02:18:21
le damos un nombre al panel 02:18:23
pues por ejemplo, nombre ismier 02:18:32
y directamente le digo 02:18:34
agregar, hay muchísimas 02:18:39
más opciones como habéis visto, ¿vale? pero 02:18:43
voy a 02:18:45
a lo más interesante 02:18:46
¿vale? pues esto es parecido a lo que hemos visto 02:18:48
en Grafana, en Grafana teníamos 02:18:50
un dashboard y el dashboard estaba compuesto 02:18:52
por paneles, pues aquí la nomenclatura 02:18:54
cambia, aquí en vez de llamarse 02:18:57
dashboard se llama panel 02:18:58
¿vale? y en vez de llamarse panel 02:19:00
se llama widget 02:19:02
perfecto ¿vale? pues de hecho 02:19:03
en la 02:19:06
si vamos aquí a añadir un nuevo widget 02:19:07
fijaos que bien 02:19:10
que tenemos ya un montón de widgets distintos 02:19:12
fijaos todo lo que tenemos aquí 02:19:14
desde gráficos escada 02:19:16
que podemos utilizar ya directamente 02:19:18
niveles de líquidos 02:19:20
como veis tenemos ahí 02:19:22
un montón de posibilidades 02:19:24
sistemas de fluidos, sistemas hidráulicos 02:19:25
indicadores de estado 02:19:28
relojitos de un tipo, gráficos de otro tipo 02:19:30
alarmas, lo que sea 02:19:32
entonces yo por ejemplo me voy aquí a gráficos 02:19:33
y en gráficos daos cuenta que luego dentro de cada 02:19:36
categoría tenéis un montón de posibilidades 02:19:40
también 02:19:42
Entonces yo, por ejemplo, imaginaos que quiero mostrar simplemente un gráfico de líneas de estos. Bueno, voy a usar este, el de Timeseries, este de aquí primero, ¿vale? Y ahora me está diciendo, oye, ¿de qué dispositivo quieres mostrar los datos? Pues yo hago clic aquí y elijo mi dispositivo, que el dispositivo creo que lo he llamado Ismietem, ¿vale? 02:19:42
y ahora me dice 02:20:08
vale 02:20:11
dismieten 02:20:11
¿qué datos quieres mostrar? 02:20:12
pues por defecto el mío 02:20:14
ya me ha cogido aquí 02:20:15
el dato de temperature 02:20:17
¿vale? 02:20:19
¿lo veis? 02:20:19
pero podría añadir otro 02:20:21
si quisiera 02:20:22
podría venirme aquí 02:20:23
y decir 02:20:24
quiero mostrar la temperatura 02:20:25
y por ejemplo 02:20:26
la humedad 02:20:28
pues ya tendría 02:20:29
la temperatura 02:20:30
y la humedad 02:20:31
¿en qué humedad es? 02:20:31
¿en qué unidad es? 02:20:33
tanto por ciento 02:20:34
tanto por ciento 02:20:34
¿vale? 02:20:36
le digo agregar 02:20:37
y ya tengo ahí ese gráfico 02:20:38
es más, ese gráfico lo puedo hacer a distintos 02:20:40
tamaños 02:20:43
y lo guardo 02:20:43
de tal forma que yo ahora puedo 02:20:48
inyectar datos, por ejemplo aquí desde Node.js 02:20:51
ah, perdona, no, ahora los estoy inyectando 02:20:53
al del compañero, tengo que cambiar 02:20:55
al mío 02:20:58
voy a cambiar 02:20:59
dispositivos 02:21:01
es mío 02:21:05
y ahora hace token 02:21:10
pongo en Node.js 02:21:13
vale 02:21:15
y ya puedo entonces 02:21:25
empezar a inyectar datos 02:21:27
desde aquí 02:21:29
y esos datos 02:21:29
van a ir apareciendo aquí en el gráfico 02:21:32
¿veis? 02:21:35
¿os funciona o no os funciona? 02:21:40
pues habéis quedado muy callados 02:22:16
es difícil seguirte 02:22:17
es difícil 02:22:21
a ver 02:22:22
repetimos lo de red 02:22:27
a ver si 02:22:32
¿qué queréis que hagamos? 02:22:32
¿no? lo de no de red 02:22:34
¿esto del panel si lo habéis hecho? 02:22:35
o esto no os ha salido? 02:22:36
Yo en el panel 02:22:38
no he encontrado el tipo de gráficos que ha sido 02:22:40
a donde ha sido 02:22:42
ahí me he perdido. 02:22:45
Pues imaginaos que yo estoy aquí en el panel. 02:22:47
Acabo de llegar. 02:22:49
Y digo, quiero añadir un widget. 02:22:51
Pues ahí vas a los gráficos. 02:22:53
Cojo charts 02:22:56
y yo he cogido uno de estos 02:22:57
de serie temporal. 02:22:59
Y aquí ya simplemente 02:23:01
elijo el dispositivo que quiero 02:23:02
que en mi caso es 02:23:04
del dispositivo este que he llamado ISMIE. 02:23:06
Esto tiene mucha potencia, ¿vale? 02:23:10
Porque en lugar de un dispositivo podría elegir un alias de entidad. 02:23:12
Es decir, esto sería coger, por ejemplo, todos los sensores de temperatura 02:23:16
y mostrarlos todos en un mismo panel. 02:23:20
Pero bueno, hoy vamos a ver algo sencillito. 02:23:22
Cogemos aquí un dispositivo, elijo el dispositivo. 02:23:25
Él por defecto ya te va a ayudar aquí mostrándote la primera telemetría. 02:23:29
Pero tú si quieres puedes añadir otra, otra serie. 02:23:34
que por ejemplo fuera la de humedad 02:23:36
vale 02:23:39
y ahora le doy simplemente agregar 02:23:42
entonces, ahora tengo ahí el widget 02:23:44
que lo puedo hacer del tamaño que yo quiera 02:23:47
lo puedo mover a otro sitio, organizar 02:23:48
como yo quiera mi panel, vale 02:23:51
y le doy a guardar 02:23:52
a guardar, a guardar 02:23:55
y ahora que ya lo tengo guardado 02:23:56
puedo enchufarle datos, ¿desde dónde 02:23:58
se los puedo enchufar? pues se los puedo 02:24:00
enchufar desde Node.js 02:24:02
se los puedo enchufar 02:24:04
MQTTFX 02:24:06
este que tenemos aquí 02:24:09
y envío datos desde aquí 02:24:10
¿vale? Puedo mandar los datos 02:24:21
como veis, desde un montón de fuentes distintas 02:24:23
y esos datos 02:24:25
estarían apareciendo aquí 02:24:27
en los gráficos 02:24:29
claro, y es que encima 02:24:30
Grafana está muy bien, pero es que 02:24:35
esto está también muy bien, porque fijaos, aquí puedo mostrar 02:24:36
en tiempo real el último minuto, o bien 02:24:40
puedo hacer agrupaciones, ¿vale? Puedo mostrar el histórico de datos 02:24:44
desde tal fecha hasta tal fecha, hacer promedios, hacer agregaciones, 02:24:48
contar, lo que yo quiera. Entonces tenemos 02:24:53
muchas opciones para estos gráficos. ¿Que quiero 02:24:56
añadir un valor, añadir algo? Pues paso al modo de edición, 02:25:00
agrego un widget, imaginaos que ahora en vez de un gráfico 02:25:04
quiero mostrar el último valor, pues me vengo aquí 02:25:07
elijo un widget de estos por ejemplo, del tipo 02:25:10
reloj y le digo del dispositivo 02:25:13
Ismiel, quiero mostrar aquí 02:25:16
el valor temperature, le digo agregar 02:25:18
y ya tengo aquí el relojito 02:25:21
lo guardo y ahora voy a mandar por ejemplo 02:25:23
veis que está en temperatura 15 porque es el último valor que he mandado 02:25:28
le voy a mandar temperatura 73 02:25:31
ha desconectado 02:25:34
a ver, me vuelvo a conectar 02:25:36
con esta flechita 02:25:37
envío 02:25:39
me está desconectando 02:25:41
porque tengo 02:25:46
varios conectando a la vez 02:25:47
me parece 02:25:49
voy a intentar mandarlo 02:25:50
a ver si soy capaz 02:25:53
conectado, ahora 02:25:54
creo que he conseguido colarlo 02:25:56
73, veis 02:25:58
va apareciendo ahí 02:26:00
entonces como veis podéis crear aquí paneles 02:26:02
todo lo complicados que vosotros queráis 02:26:06
de hecho los paneles pueden tener hasta estados 02:26:08
yo puedo añadir nuevos estados 02:26:14
este es el estado ISMIE, luego podría crear un nuevo estado 02:26:16
para por ejemplo las alertas 02:26:20
o las alarmas 02:26:23
y entonces veis que yo tendría en este dashboard 02:26:23
lo voy a guardar 02:26:32
tendría el estado 02:26:33
de Lismie, que es este 02:26:36
vale, no me deja 02:26:39
hay que poner un botón para cambiar, bueno, eso que os he 02:26:42
dicho del estado, nada, vale 02:26:44
eso es que aparece un botoncillo aquí 02:26:45
y te permite cambiar entre los distintos 02:26:47
estados 02:26:49
bueno, pues esto es otra opción que tenemos 02:26:50
en Cisworld, y voy a contaros 02:26:53
ya la última, que yo creo que es 02:26:56
posiblemente, bueno, todas son 02:26:58
interesantes, la verdad, porque esta aplicación 02:26:59
está muy bien, pero creo que esta 02:27:02
os va a llamar la atención 02:27:03
y es aquí a la izquierda, vamos a ir 02:27:04
donde pone cadena de reglas 02:27:07
bueno, al final lo habéis conseguido esto o no 02:27:09
o sea, yo no me importa repetirlo 02:27:13
no tengo problema, si me decís 02:27:15
desde dónde 02:27:17
no me entra, la muestra no me entra en el gráfico 02:27:18
las... no te entran las... 02:27:23
si, está vacío el gráfico, siempre 02:27:26
siempre, voy a probar yo 02:27:27
a enchufarte yo un dato, ¿vale? 02:27:29
por si es un problema de que no te estén entrando bien los datos 02:27:31
como tengo aquí tu token todavía 02:27:33
voy a probar a mandártelo yo 02:27:35
y por lo menos así sabemos si es 02:27:39
un problema de... 02:27:41
los datos ya me usen porque 02:27:42
en el último 02:27:44
telemetría me están entrando 02:27:45
pues entonces simplemente es que 02:27:48
no estarás a lo mejor eligiendo bien 02:27:52
el dispositivo 02:27:54
yo voy a borrar estos dos 02:27:55
si tú creas aquí 02:27:59
un widget de tipo 02:28:01
gráfico 02:28:03
time series, pues aquí en dispositivo 02:28:04
estarás eligiendo un dispositivo que no es 02:28:06
estará equivocado el nombre 02:28:08
no, no 02:28:10
ahí lo tienes bien 02:28:11
pues si ahí lo tienes bien, asegúrate 02:28:14
que esto puede ser un fastidio 02:28:16
veis aquí la clave se llama temperature 02:28:18
a ver si tiene 02:28:21
temperatura o algo así 02:28:22
mayúsculas, minúsculas a lo mejor 02:28:24
la clave tiene que ser exactamente igual 02:28:26
a como lo estés mandando, es decir, yo por ejemplo 02:28:28
si aquí 02:28:30
estoy mandando 02:28:31
temperatura en minúsculas 02:28:33
aquí tengo que poner 02:28:35
temperatura en minúsculas, en la clave 02:28:37
vale 02:28:40
entonces con eso en principio deberían 02:28:41
entrarte ahí los datos 02:28:45
directamente 02:28:46
o sea, si tú estás viendo los datos 02:28:48
aquí en el propio dispositivo, si el dispositivo 02:28:51
tiene una última telemetría 02:28:53
en el dispositivo 02:28:55
última telemetría 02:28:57
si aquí tienes datos 02:28:59
esos datos los tendrías que ver 02:29:00
en el gráfico, entonces cuando tú vas al 02:29:03
panel 02:29:05
paneles, paneles, paneles 02:29:05
si tú le dices aquí que quieres ver en vez del último 02:29:08
minuto, quiero ver 02:29:13
el último 02:29:15
día 02:29:17
pues ahí deberíamos ver 02:29:17
los valores del último día 02:29:20
es que aquí puedo hacerlo más grande, más pequeño 02:29:22
tiene muchísimas opciones 02:29:29
vale, y ya lo que os decía 02:29:31
por último 02:29:33
las cadenas de reglas, esto de aquí 02:29:34
vale, pues en las cadenas de reglas 02:29:37
tendréis ahí una cadena de reglas que se llama 02:29:43
root-root-chain, creo, ¿no? 02:29:45
02:29:50
y fijaos que esa cadena de reglas tiene aquí 02:29:50
una marca de verificación en raíz 02:29:54
eso quiere decir que todos 02:29:55
los datos que lleguen a Thinsboard 02:29:58
a vuestro Thinsboard, van a pasar 02:29:59
por esta cadena de reglas 02:30:01
entonces, si vosotros hacéis clic 02:30:03
sobre ella, ahora vas a encontrar una especie 02:30:05
de nodo de red aquí. 02:30:07
¿Sí? 02:30:18
Sí. 02:30:19
¿Qué estáis viendo ahora? Pues lo que estáis 02:30:21
viendo aquí es un nodo de entrada, es decir, 02:30:23
todo lo que llegue a mi FISBORN, 02:30:25
llegue por MQTT, 02:30:27
llegue por HTTP, llegue por 02:30:28
COAP, llegue por lo que sea, 02:30:31
va a entrar por aquí. 02:30:33
¿Vale? 02:30:36
Entonces, una vez que ha entrado, 02:30:37
va a pasar aquí 02:30:38
por un filtro. 02:30:41
estos nodos se eligen aquí a la izquierda 02:30:41
veis que hay nodos de varias categorías 02:30:48
por ejemplo, tenemos nodos de filtro 02:30:51
nodos de enriquecimiento, nodos de transformación 02:30:53
nodos de acción, que son probablemente 02:30:57
los más interesantes, aquí por ejemplo 02:31:00
podemos mandar datos a Amazon Web Services 02:31:02
a Azure, a Kafka, a MQTT, a Rabbit 02:31:06
a Laptop, tenemos un montón de opciones 02:31:08
y luego aquí llega y dice 02:31:11
según el tipo de mensaje que esté entrando 02:31:14
lo mando 02:31:16
a un sitio o a otro, por ejemplo 02:31:18
si me está llegando un atributo 02:31:20
guardo el atributo 02:31:22
si me está llegando una telemetría, guardo 02:31:24
la telemetría, si me está llegando 02:31:26
una orden de actuación 02:31:28
guardo la orden de actuación, si es 02:31:30
otro tipo lo meto en el registro, ¿vale? 02:31:32
según lo que sea, va a un sitio o a otro 02:31:34
entonces, por ejemplo, vosotros ahora 02:31:36
lo que estáis mandando son 02:31:38
series temporales, ¿vale? entonces 02:31:40
si yo vengo aquí 02:31:42
Y fijaos, activo el modo depuración aquí con esta mariquita, ¿vale? Y le digo que quiero guardar todos los mensajes durante 15 minutos, ¿vale? Y le digo aplicar, aplico aquí con el botón naranja, cierro y aplico aquí abajo con el botón naranja otra vez, ¿sí? 02:31:43
si yo ahora envío una telemetría 02:32:12
voy a mandarla por ejemplo desde aquí 02:32:16
envío esta 02:32:18
tempera, ahora estoy conectado 02:32:20
conecto 02:32:21
que se conecte y puedo enchufarle 02:32:23
el dato, creo que ahora ha entrado 02:32:29
si ahora me vengo 02:32:34
a ver este nodo de aquí 02:32:36
y voy a eventos 02:32:38
veis que tengo aquí 02:32:40
eventos de entrada y de salida, justo ahora 02:32:42
las 18 y 38, vale 02:32:44
entonces a este nodo 02:32:45
Le ha entrado por aquí una información, un evento, y le ha salido el evento por la derecha. 02:32:48
¿Qué aspecto tienen esos eventos? 02:32:54
Pues, por ejemplo, si yo voy a ver el evento de entrada, ¿vale? 02:32:57
Veis que es un evento de telemetría que tiene datos y metadatos. 02:33:01
En los datos que voy a encontrar, lo que le hemos mandado, la temperatura y la humedad. 02:33:06
¿Vale? 02:33:12
Y en los metadatos que voy a encontrar, pues el nombre del dispositivo, el tipo de dispositivo y la hora, el timestamp, el TS, en el que se ha recibido ese dato. ¿Vale? ¿Me vais siguiendo? 02:33:12
bien, pues ahora imaginaos 02:33:27
que queremos mandar 02:33:33
esos datos a otro sitio 02:33:34
pues yo por ejemplo me los voy a mandar 02:33:36
pues me los podría mandar a Telegram 02:33:42
o me los podría mandar a cualquier sitio 02:33:44
para hacer algo sencillo 02:33:46
vamos a mandarlos 02:33:48
por ejemplo a un webhook site 02:33:51
para hacer algo sencillito 02:33:52
yo me creo aquí un webhook.site 02:33:54
me creo uno nuevo 02:33:56
por si acaso 02:34:03
copio el url 02:34:04
Y ahora, aquí en la cadena de reglas, me voy y cojo un nodo de estos de enviar una llamada API, ¿vale? 02:34:11
Entonces digo, ¿a quién quiero mandar la llamada? 02:34:24
A ese webhook. 02:34:27
¿De qué tipo? 02:34:29
De tipo POST, ¿vale? 02:34:30
Le doy un nombre, pues lo voy a llamar, por ejemplo, webhook. 02:34:34
Pulso agregar, lo coloco aquí debajo. 02:34:40
y ahora ya directamente 02:34:43
me engancho el uno con el otro 02:34:45
y aquí muy importante 02:34:47
que aquí mucha gente se queda atrapado 02:34:50
aquí en etiquetas de enlace le tienes que decir 02:34:52
SASSES, éxito 02:34:54
pulsas agregar 02:34:55
y entonces veis que dice 02:34:57
si eres capaz de guardar los datos 02:34:59
si tienes éxito al guardar los datos 02:35:02
a continuación los mandas 02:35:04
al webhook 02:35:06
ya que tengo esto configurado 02:35:07
aplico los cambios 02:35:10
y ahora que tengo los cambios aplicados 02:35:11
voy a intentar enviar un dato 02:35:15
creo que el problema 02:35:18
que estoy teniendo es que como estoy intentando 02:35:22
acceder desde dos sistemas 02:35:24
a la vez 02:35:26
voy a parar este 02:35:26
ese ha sido para el otro 02:35:29
y este se me ha conectado directamente 02:35:32
seguramente es porque estaban compitiendo 02:35:34
entre ellos, vale, ahora envío 02:35:36
desde aquí un dato, vale, desde Node.js 02:35:38
estoy enviando 02:35:40
voy a cambiarlo para que lo veamos claro 02:35:42
por ejemplo voy a mandar 30 02:35:43
de temperatura 02:35:45
y 30 de humedad 02:35:47
he hecho 02:35:49
lo instancio 02:35:51
lo inyecto 02:35:52
entonces este dato 02:35:55
acaba de llegar aquí 02:35:56
entonces como ha llegado aquí 02:35:58
que lo podemos ver en los eventos 02:36:00
veis que ha entrado aquí una telemetría 02:36:02
con los datos 30 y 30 02:36:04
y ha salido 02:36:06
por el cable de SASSES de éxito 02:36:07
por lo cual ha viajado por aquí 02:36:10
y ha llegado al webhook 02:36:12
De tal forma que si ahora vengo aquí, veis que efectivamente en el WebFoodSite tengo el valor de temperatura y humedad que acabo de mandar. 02:36:13
Se ha hecho silencio por ahí. ¿Qué ha pasado? 02:36:31
Yo no, el escarabajo, que he mirado una otra cosa y no me he enterado bien cómo lo has puesto ahí. 02:36:33
Lo del escarabajo es muy potente. Tú simplemente entras aquí en un nodo y aquí en detalles le das al escarabajo que tienes aquí. 02:36:39
y dices durante cuánto tiempo 02:36:49
quieres almacenar los mensajes 02:36:52
de depuración 02:36:54
vale, esto está limitado porque 02:36:55
si no, claro, se generaría un montón de 02:36:58
mensajes, pero eso está limitado 02:37:00
y luego, confirmas 02:37:02
cierras y confirmas 02:37:04
aquí abajo 02:37:06
sí, le das a confirmar 02:37:07
bueno, y otra pregunta 02:37:09
aquí, todos los datos estos que llegan 02:37:12
al final, ¿qué capacidad 02:37:14
hay? ahí se sobrescriben 02:37:16
¿Puedes tú salvarlos a algún otro sitio? 02:37:18
Estos se graban automáticamente. 02:37:21
Si recordáis la diapositiva, la documentación de Finsboard, 02:37:23
esto se está almacenando directamente en una base de datos 02:37:31
que puede ser PostgreSQL o bien puede ser una base de datos Cassandra. 02:37:34
Cassandra ya es para sistemas brutales. 02:37:39
Normalmente usamos PostgreSQL, que es más que suficiente. 02:37:42
Y todo eso está almacenado. 02:37:46
entonces yo por ejemplo me puedo conectar 02:37:47
a mi 02:37:49
base de datos por 02:37:51
SQL y consultar los datos 02:37:53
que tengo ahí de mi sistema CISBOR 02:37:55
¿vale? CISBOR 02:37:57
si, dime. Si, no, que por ejemplo 02:37:58
tú ahora coges 02:38:01
te has instalado, porque esto es una demo 02:38:02
ahí en la 02:38:05
pero si tú te lo 02:38:06
bajas ahí, te lo instalas 02:38:09
y tal, no sé qué, luego tú puedes 02:38:11
puedes acceder 02:38:13
a la base de datos y hacerte 02:38:15
un backup de la base de datos esa 02:38:17
o lo que sea. Perfectamente 02:38:19
de hecho si os fijáis aquí 02:38:21
cuando tú vas a instalar Sysboard 02:38:23
vale, si vamos 02:38:25
a la documentación de la Community 02:38:27
Edition y tú dices 02:38:29
instalación 02:38:32
lo primero que te dice es 02:38:35
¿dónde te lo quieres instalar? Yo voy a decir que me lo quiero 02:38:37
instalar en mi propio equipo, ¿vale? 02:38:39
y puede ser pues en una máquina 02:38:42
Ubuntu como por ejemplo la que tenéis ahora 02:38:43
mismo hay en PuTTY, o bien 02:38:45
puede ser una Raspberry Pi, si tenéis 02:38:47
una Raspberry Pi, antes no funcionaba en Raspberry Pi 02:38:49
pero ahora ya sí, puede ser en 02:38:51
Docker, como vosotros queráis, ¿vale? 02:38:53
Vamos a suponer que yo quiero hacerlo en una máquina 02:38:55
Raspberry Pi, pues 02:38:57
entonces te dicen, oye, ten cuidado, tienes 02:38:59
que tener instalado el Java 02:39:01
17 o la versión que toque en ese momento 02:39:03
y aquí te dan los pasos 02:39:05
exactos de cómo instalarlo 02:39:07
incluido el Postgre, ¿vale? 02:39:09
Veis aquí que te dice cómo instalar el 02:39:11
PostgreSQL, que es la base de datos 02:39:13
¿Esto por qué es? 02:39:15
Porque claro, en una Raspberry Pi 02:39:17
no podemos ejecutar algo más potente 02:39:20
que el PostgreSQL. 02:39:22
Pero si yo tuviera un sistema Ubuntu, por ejemplo, 02:39:24
pues ahí podría elegir utilizar Postgre 02:39:27
o bien utilizar un Cassandra. 02:39:29
Una combinación de Postgre y Cassandra. 02:39:31
¿Vale? 02:39:33
¿Postgre para qué es? 02:39:34
Para menos de 5.000 mensajes por segundo. 02:39:36
Que ya son mensajes, ¿vale? 02:39:38
Si tú te están llegando más de 5.000 mensajes por segundo, 02:39:40
pues te vas a Cassandra y ya está. 02:39:43
Igual, te da aquí todos los datos de cómo instalarlo. 02:39:45
Y luego, muy interesante. 02:39:48
Fijaos, ¿cómo van pasando los datos de la base de datos a los distintos módulos que componen CISBOR? 02:39:50
Pues tú puedes elegir distintos sistemas de encolado. 02:39:59
Entonces, el que se suele utilizar es Kafka. 02:40:03
Esto es cómo van pasando los datos de un módulo a otro. 02:40:06
si recordáis cuando os puse aquí 02:40:08
en la documentación 02:40:11
la arquitectura 02:40:12
vale 02:40:15
yo he recibido 02:40:17
los datos aquí, ¿cómo pasan 02:40:19
los datos que he recibido por 02:40:21
MQTT al motor de reglas que 02:40:23
habéis visto? pues pasan por un sistema 02:40:25
de encolado, esos sistemas los hay 02:40:27
de muchos tipos, ¿vale? pues uno 02:40:29
de ellos es Kafka, que es el que más se utiliza 02:40:31
pues esto va por Kafka, para ir 02:40:33
al dashboard va por Kafka 02:40:35
Kafka, va por distintas colas 02:40:36
incluso para ir a la base de datos 02:40:38
veis que pasa por otra 02:40:40
cola que lo trae aquí 02:40:42
muy bien, a ver 02:40:43
tengo una mala sensación 02:40:49
hoy, no sé si 02:40:51
quizás en la parte de Grafana 02:40:52
os he despistado mucho, porque me he 02:40:55
despistado yo mismo, porque es una versión 02:40:57
distinta a la que yo veía 02:40:58
a la que yo suelo usar, vale, entonces 02:41:00
yo voy a usar Grafana 02:41:03
pues normalmente no 02:41:05
normalmente no voy a usar Grafana 02:41:06
porque ya habéis visto que es bastante complejo 02:41:09
y sobre todo porque tengo alternativas 02:41:11
como esta de Fizzboard 02:41:13
que sí que se especifica para internet 02:41:15
de las cosas, sin embargo 02:41:17
la de Grafana es más adecuada 02:41:19
para 02:41:21
servidores, para monitorizar servidores 02:41:22
¿cuál es el problema 02:41:25
de Fizzboard? que la mayoría de la gente de Fizzboard 02:41:27
no se atreve con él porque le parece muy complicado 02:41:29
yo francamente no me parece tan difícil 02:41:31
Es más una cuestión de coger los conceptos, entender que hay dispositivos, que esos dispositivos pueden recibir datos por MQTT, por HTTP, lo hemos hecho las dos cosas, que esos dispositivos, los datos, se pueden graficar directamente en paneles sin más complicación y que luego adicionalmente tienes toda la potencia de una cadena de reglas donde tú puedes hacer lo que quieras. 02:41:35
De hecho, tú aquí, si quieres, te puedes crear otra cadena de reglas donde tú quieras decir esta cadena de reglas. 02:42:01
Pues, por ejemplo, alertas o alarmas, ¿vale? 02:42:07
Yo ya tengo la cadena de reglas. 02:42:14
Imaginaos que yo desde la cadena de reglas principal digo, oye, cada vez que se reciba una serie temporal, 02:42:16
quiero enviar esa serie temporal, quiero enviarla a esta otra cadena de reglas. 02:42:24
Pues me voy a ver dónde lo tienen ahora. Enviar, enviar, enviar. Creo que era de color morado. A otra cadena de reglas. Lo mando aquí. ¿A qué cadena de reglas quiero mandarlo? 02:42:30
Pues lo quiero mandar a la cadena de reglas alarmas, ¿vale? Entonces, lo que tengo ahora es que yo puedo redirigir todo lo que me llegue como una cadena de reglas, todo lo que me llegue como una cadena de reglas, lo puedo, perdón, todo lo que me llegue como una telemetría, lo puedo mandar a esta otra cadena de reglas. 02:42:42
por lo cual yo ahora podría crear aquí 02:43:06
una lógica, la lógica que yo quisiera 02:43:09
pues aquí por ejemplo le podría decir 02:43:11
con una función 02:43:13
a ver, función 02:43:14
un script 02:43:17
yo le podría decir aquí 02:43:19
oye, si 02:43:22
la temperatura 02:43:23
es mayor que 25 02:43:25
pues hacer 02:43:30
lo que quisiera hacer, ¿vale? 02:43:31
por ejemplo decirle, pues el mensaje 02:43:33
va a ser igual a 02:43:35
temperatura alta, esto es Javascript, aquí se escribe todo con Javascript 02:43:38
entonces, bueno, con variantes de Javascript 02:43:46
estamos viendo aquí con TBL, que es una variante, o bien con Javascript 02:43:50
aquí lo que podríamos hacer es incluso probar la transformación 02:43:54
yo podría ver con estos valores aquí, si lo pruebo 02:43:58
¿qué estaría haciendo este código? pues tendría que poner aquí el código en condiciones 02:44:01
que se ve que tengo ahora un fallo, a ver, lo voy a poner con Javascript 02:44:06
y message, que es lo que me falta aquí 02:44:09
mensaje.temperature 02:44:17
es mayor que 25 02:44:21
pues yo podría transformar, probar esto 02:44:23
probarlo 02:44:26
y veis que ahora 02:44:28
tendría aquí la salida, el mensaje 02:44:31
y la temperatura que tengo, ¿qué pasa? que es menor 02:44:35
bueno, pues pongo aquí menor que 25 02:44:38
pruebo con menor que 25 02:44:40
y veis ha cambiado el mensaje y a partir 02:44:43
de ese momento es temperatura alta 02:44:45
entonces yo podría 02:44:46
crear aquí la cadena de reglas 02:44:48
que yo quisiera, podría aquí 02:44:50
añadir funciones, podría 02:44:52
decir si la temperatura es alta avísame por 02:44:54
Telegram, lo que yo quisiera 02:44:56
si la temperatura es alta 02:44:58
enciende el aire acondicionado 02:45:00
podrías hacer cualquier cosa que se te 02:45:02
pase por la cabeza 02:45:04
tienes una capacidad 02:45:06
aquí enorme 02:45:08
de posibilidades 02:45:09
bien, y para no enredar más 02:45:11
una última cosa que os quería 02:45:14
contar, que es Amazon Web Services 02:45:16
creo que me queda, ¿cuánto? 02:45:18
nueve minutos 02:45:21
bueno 02:45:21
tengo dos opciones 02:45:22
os cuento Amazon Web Services o si queréis 02:45:26
que repase algo de hoy, lo repaso 02:45:28
lo que vosotros me digáis 02:45:29
mejor repasar yo creo un poquito 02:45:31
pero hay que 02:45:36
parte en concreto, y no me digáis 02:45:38
todo, porque no entra 02:45:39
de presión 02:45:42
no, no sé 02:45:43
un poco la dinámica esta que estás 02:45:45
bueno, si realmente es lo que estás un poco 02:45:47
en los últimos minutos haciendo, la verdad es que 02:45:49
yo, si me explicas 02:45:51
cómo mandas por MQTT 02:45:53
desde nodo red, que no me he conectado 02:45:55
vale, pues mira, eso es fácil 02:45:57
vale, vamos a hacer 02:45:59
eso, por ejemplo, entonces 02:46:01
¿cómo me conecto? pues es sencillo 02:46:03
yo vengo a 02:46:05
Node-RED 02:46:07
y aquí en Node-RED 02:46:11
creo por ejemplo un inyector 02:46:13
que va a ser 02:46:15
con el que yo inyecte los datos 02:46:17
entonces ese inyector 02:46:19
digo que me va a enviar 02:46:21
como carga de pago un objeto JSON 02:46:23
que va a ser 02:46:25
por ejemplo 02:46:27
el objeto temperature 02:46:28
2.57 02:46:31
por ejemplo 02:46:34
y ahora esto lo quiero mandar 02:46:35
a Finsburg 02:46:45
entonces lo que voy a hacer es borrarme el que yo 02:46:47
tengo creado, porque ya he visto que cuando hay 02:46:49
dos en conflicto 02:46:51
fallan, entonces voy a borrar el que 02:46:53
tengo creado para que no me dé 02:46:54
conflicto 02:46:56
y es el de 02:46:58
ahora no sé que nombre 02:47:01
tengo 02:47:03
el modesto 02:47:03
temperatura 02:47:06
demo Finsburg es este 02:47:07
este lo vamos a 02:47:09
eliminar 02:47:12
vale, ya está 02:47:14
bien, ahora que necesito 02:47:15
inyectarlo esto por MQTT 02:47:17
pues entonces me voy aquí abajo 02:47:18
busco un MQTT out 02:47:20
y lo coloco ahí 02:47:22
¿qué ocurre con este MQTT out? 02:47:23
que me dice con el triángulo rojo 02:47:26
que no está configurado 02:47:28
entonces lo que tengo que hacer es 02:47:29
doble clic 02:47:31
y configurarme un servidor 02:47:32
ese servidor 02:47:34
pulso el signo más 02:47:37
y lo que necesito para ese servidor 02:47:38
es la dirección del servidor 02:47:40
esa dirección ya la hemos 02:47:42
puesto antes en el chat 02:47:44
era me parece 02:47:46
demo.thingsboard.io 02:47:47
ahí escribo demo.thingsboard.io 02:47:49
eso es porque es el de demostración 02:47:54
si yo estuviera usando el mío 02:47:58
pues el mío sería my.opentech.io 02:48:00
cada uno donde lo tenga instalado 02:48:04
y luego la parte clave aquí 02:48:06
es la seguridad 02:48:10
la seguridad utiliza 02:48:11
como nombre de usuario 02:48:14
el token del dispositivo al que tú quieres mandar 02:48:16
los datos, entonces tienes que ir 02:48:18
en CISBOR al dispositivo 02:48:20
por ejemplo a este dispositivo que yo no he usado 02:48:22
hasta ahora y por eso 02:48:24
aparece inactivo 02:48:26
puedo entrar a ese dispositivo 02:48:27
y en detalles copiar 02:48:29
el ACES token 02:48:32
y ahí que lo tengo 02:48:33
copiado 02:48:44
ya directamente me voy a 02:48:45
Node.js y eso lo uso como nombre 02:48:48
y pulso añadir 02:48:50
con lo cual yo ya tengo ahí el servidor 02:48:56
pero que me falta 02:48:59
me falta saber en que topic 02:49:01
en que tema como han puesto aquí 02:49:02
quiero publicarlo 02:49:04
para saber el topic lo que tengo que hacer 02:49:05
es irme a la documentación de la API 02:49:08
y en la documentación 02:49:10
de la API, entrar a la 02:49:13
API MQTT 02:49:14
y ahí irme 02:49:15
a la sección de telemetría 02:49:18
que está aquí, y ahí me dice 02:49:20
en qué topic tengo que publicar 02:49:22
que es este topic 02:49:24
perdona, no te oigo 02:49:25
voy a entrar ahí 02:49:30
cómo se hace, es en la página principal 02:49:32
de York Partition, ¿no? 02:49:35
te lo pego ahí en el chat si quieres 02:49:36
pero eso es en la página principal 02:49:38
de CISBOR 02:49:40
te vas a la documentación 02:49:41
de la versión 02:49:44
Community Edition 02:49:46
y aquí 02:49:47
te vas a la API 02:49:50
en la API 02:49:51
eliges la API 02:49:54
MQTT 02:49:56
y ahí 02:49:56
a la derecha ves que pone 02:50:00
Telemetry Upload API 02:50:01
y ahí te dice 02:50:03
cuál es el topic al que tienes que enviarlo 02:50:07
correcto 02:50:09
entonces ese topic 02:50:11
lo pego aquí en node red 02:50:13
claro, por eso en el raíz de cadena 02:50:15
cadena esta, lo cogimos 02:50:22
en telemetría, porque el topic 02:50:24
ya me dice por dónde va a ir el mensaje 02:50:25
¿no? no te he entendido la pregunta 02:50:27
sí, cuando explicaste lo de 02:50:32
el raíz este de 02:50:34
cadena de regla de cadenas 02:50:36
que recogimos los mensajes 02:50:37
por telemetría, es porque 02:50:40
el topic es ahí 02:50:42
te lo marca en telemetría 02:50:43
exacto, porque está entrando en telemetría 02:50:45
si yo aquí en vez de telemetría pusiera 02:50:47
attributes, pues entraría 02:50:49
como una telemetría, entraría como un atributo 02:50:51
ok, vale 02:50:53
le doy hecho 02:50:55
engancho el uno con el otro 02:50:56
instancio 02:50:59
enchufo 02:51:02
y ahora si me vengo a ver el dispositivo 02:51:04
vamos a ver 02:51:07
que estaba inactivo 02:51:09
pero ahora si entro, ya tiene una telemetría 02:51:10
que es la que le acabo de mandar, la telemetría 02:51:13
y ya cuando actualizase yo 02:51:16
esta página pues ya no estaría inactivo 02:51:19
ya estaría activo 02:51:21
no sé si lo habéis conseguido 02:51:22
sí, gracias 02:51:46
por fin 02:51:47
bueno, pues 02:51:50
¿cuál es el resumen de la 02:51:51
clase de hoy? pues el resumen de la clase de hoy 02:51:54
es que tenemos muchas aplicaciones 02:51:56
¿vale? esas aplicaciones las podemos 02:51:58
usar de forma individual que es lo que hemos hecho 02:52:00
con el stack, es decir 02:52:02
ir eligiendo una combinación de aplicaciones 02:52:03
pues Mosquito para los datos 02:52:06
InfoDB para la base de datos, no sé qué 02:52:07
y crearnos nuestro propio stack 02:52:09
que esa es una vía que hemos seguido 02:52:11
y que veis que es viable 02:52:13
lo que ocurre es que a lo mejor es un poco, para mí es un poco 02:52:14
más complicado, o bien podemos ir 02:52:17
a una aplicación integrada, como es 02:52:20
Nisboard, en la que ya está todo integrado 02:52:21
el broker MQTT, el broker 02:52:23
o sea, el servidor 02:52:25
HTTP, el motor 02:52:27
de reglas con las cadenas 02:52:29
de reglas, los paneles 02:52:31
Y lo tenemos todo aquí integrado en una misma aplicación. 02:52:33
Entonces, la elección de una u otra, pues va a depender un poco de las preferencias que tengáis. 02:52:37
Y hay veces que no vale, tú vas a Sysboard y a lo mejor necesitas hacer una cosa en Sysboard 02:52:42
que no puedes hacerlas por las cadenas de relas de Sysboard. 02:52:47
Pues a lo mejor lo que haces es que la mandas a Node.js, la haces en Node.js 02:52:50
y la respuesta se la envías de vuelta a Sysboard. 02:52:54
Como habéis visto que podemos enviar datos por HTTP o por MQTT, pues esa es la clave. 02:52:57
Tener estándares que nos permitan mandar datos de unas plataformas a otras. 02:53:02
Y luego, no perdáis de vista que todo esto que estamos haciendo aquí manualmente, 02:53:07
esto de mandar nosotros los datos aquí con un inyector, 02:53:11
idealmente lo estaríamos haciendo con un Arduino, ¿vale? 02:53:14
De hecho, yo había preparado aquí un Arduino que lo tengo aquí funcionando, ¿vale? 02:53:16
Y este Arduino está enviando datos por MQTT a Amazon Web Services, 02:53:21
que era lo otro que os iba a contar, ¿vale? 02:53:26
Pues aquí yo tenía Amazon Web Services que está publicando datos. 02:53:28
Yo publico este mensaje aquí y ese mensaje, ¿veis? 02:53:33
Es el que está recibiendo aquí el nodo, ¿vale? 02:53:36
O sea, estos serían dispositivos que nosotros tenemos conectados por MQTT o por HTTP a las plataformas. 02:53:41
El martes voy a coger el SP32 y vamos a mandar los datos a Finswall para que lo veáis, ¿vale? 02:53:52
entonces por favor 02:53:58
recordad las claves 02:54:00
que habéis puesto 02:54:01
aunque la podéis recuperar 02:54:01
pero recordad las claves 02:54:03
de Finsbord 02:54:03
los servidores 02:54:04
ya los voy a borrar hoy 02:54:05
¿vale? 02:54:06
los servidores 02:54:07
de Hefner 02:54:08
entonces 02:54:10
el martes 02:54:11
con los SPIs 02:54:12
que tenemos ahí 02:54:13
vamos a ver 02:54:14
cómo enviamos los datos 02:54:15
directamente a 02:54:16
a Finsbord 02:54:17
y si llegan las placas 02:54:18
soldamos las placas 02:54:20
también 02:54:21
¿de acuerdo? 02:54:21
muy bien 02:54:23
gracias 02:54:24
pues bueno 02:54:25
soldamos 02:54:27
El CISBOR, la interfaz que tiene... Imagínate que tú quieres entrar aquí al CISBOR desde el teléfono. 02:54:27
al final la interfaz es el navegador 02:54:42
como estamos usando aquí 02:54:45
o hay alguna especie de API 02:54:47
o alguna cosa, por ejemplo, imagínate 02:54:49
para entrar a los 02:54:51
dashboards, que quieres solo ver los dashboards 02:54:53
si hay alguna especie de API o alguna 02:54:55
cosa que lo pueda presentar de otra manera 02:54:57
o alguna historia de esas 02:54:59
Sí, de primeras tienes aquí 02:55:00
aplicación, ¿vale? Tienes aplicación 02:55:03
móvil para Sysbox 02:55:05
por lo cual tú podrías directamente 02:55:06
usar una aplicación de móvil en vez de una 02:55:09
interfaz web, ¿vale? 02:55:11
Y luego, en segundo lugar, los paneles, 02:55:12
yo puedo hacer 02:55:16
que estos paneles sean públicos. 02:55:16
Entonces, incluso alguien que 02:55:19
no tenga cuenta en Syswork, usando 02:55:20
este URL, podría 02:55:23
ver mi panel. Yo pongo 02:55:24
ahí eso y él va a ver el panel directamente. 02:55:27
¿Vale? 02:55:32
Sí, sí, sí. 02:55:32
Vale. 02:55:34
Bueno. 02:55:36
Bueno, bueno. 02:55:39
Si os parece bien, lo dejamos aquí, entonces. 02:55:40
Vaya, buen puente. 02:55:42
Idioma/s:
es
Etiquetas:
Mediateca
Autor/es:
ISMIE
Subido por:
Mediateca ismie
Licencia:
Reconocimiento - No comercial - Compartir igual
Visualizaciones:
5
Fecha:
4 de marzo de 2025 - 15:33
Visibilidad:
Público
Centro:
ISMIE
Duración:
2h′ 55′ 44″
Relación de aspecto:
1.78:1
Resolución:
1920x1080 píxeles
Tamaño:
942.72 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid