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 pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
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
no
00:01:36
vale, pues empiezo a compartir
00:01:37
creo que deberíais estar ya viendo mi pantalla
00:01:39
si
00:01:43
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
y
00:04:51
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
en
00:13:10
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
de
00:17:22
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
00:17:32
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
db
00:22:58
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
y
00:26:18
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
si
00:31:59
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
sí
00:41:07
ok
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
de
00:41:43
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
y
00:57:24
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
no
01:02:09
¿a todos os da error? ¿no os deja entrar?
01:02:09
no
01:02:14
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
y
01:07:28
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
sí
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
el
01:13:59
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
A
01:15:58
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
sí
01:52:15
entonces deberíais estar viendo ahora mismo algo parecido a esto
01:52:16
sí
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
sí
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
no
01:59:34
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
en
02:05:18
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
sí
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
sí
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
de
02:11:13
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
sí
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
sí
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
si
02:15:33
¿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
02:17:44
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
yo
02:20:23
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
y
02:26:37
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
ok
02:28:39
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
sí
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
57
02:51:15
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
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
ok
02:54:23
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:
- 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