Saltar navegación

IoT Avanzado - Sesión 2

Ajuste de pantalla

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

Subido el 18 de abril de 2023 por Tic ctif madrideste

9 visualizaciones

Descargar la transcripción

Bueno, FANRA está entrando y nos faltan 13 personas más por llegar, así que vamos a 00:00:00
dar unos minutillos de margen. Mientras tanto, no sé si alguien quiere comentar algo o preguntar 00:00:12
alguna duda, algo que no quedara claro del todo la semana pasada. 00:00:18
Jorge, no has añadido ningún documento nuevo, ¿no? 00:00:22
No, no, porque creo que con lo que tenemos por ahora nos va a dar para cubrir las necesidades. 00:00:50
Vale, es que había entendido que ibas a meter algún documento nuevo, por eso que no lo he visto. 00:00:57
Sí, sí, pero lo que viene a continuación es la parte de no de red. 00:01:02
Vale. 00:01:06
Y todavía no lo tengo preparado. 00:01:07
Vale, vale, gracias. 00:01:09
La contraseña para el registro. 00:01:25
Dices para el registroario. 00:01:28
Buenas tardes. 00:01:32
Sí, ahora lo comentará Juan, porque está a punto de llegar. 00:01:34
Hola, Pablo, buenas tardes. 00:01:39
Hola, buenas tardes. 00:01:42
¿Me podéis confirmar que se me ve la pantalla completa ahora? 00:02:04
Sí, sí, sí. 00:02:33
Hola a todos. 00:02:47
Hola, Juan. 00:02:48
Aquí estoy, aquí estoy. 00:02:49
Hola. 00:02:50
Buenas. 00:02:51
Hola, buenas. 00:02:52
Buenas, buenas. 00:02:53
Gracias. 00:02:54
Antes de empezar, por favor, si me sacas de mi absoluta ignorancia con... 00:02:55
Es Microsoft, o sea que... 00:03:00
Ya, ya, por eso lo digo. 00:03:04
Como ves, tengo la que intenté crear para la semana pasada. 00:03:07
Sí. 00:03:10
Y dije, bueno, pues lo haría mal, así que he creado esta otra. 00:03:11
Esta es para... 00:03:14
Vale. 00:03:15
Y entonces, supuestamente, por lo menos el año pasado, tú hacías clic aquí con el botón derecho y aparecía un enlace que ponía compartir invitación. 00:03:16
Vale, hazle doble clic al... 00:03:24
Sí, y me lleva aquí. 00:03:28
Vale. 00:03:30
Y en la parte de abajo de ese... 00:03:31
O sea, no hay nada más abajo, ¿no? 00:03:35
O sea, donde estoy yo, aquí en la parte de abajo, no hay ningún botón, no hay nada de nada. 00:03:38
Vale, pues ponte ahí en agregar asistentes requeridos y ponte tú mismo, ponte el correo tuyo de Ducat Madrid, a ver si te llega a ti un correo. 00:03:44
Que a veces yo lo he hecho así. 00:03:54
Ducat.madrid.rg. 00:03:58
Le das a Enter. 00:04:01
Dale, dale a Enter. 00:04:02
Da igual, da igual. 00:04:03
Dale a Enter. 00:04:04
Sí. 00:04:05
Es que es... 00:04:06
No, no me deja darle ahí. 00:04:08
¿No te deja? 00:04:10
Sí, ahí está. 00:04:11
Sí, sí, sí. 00:04:12
¿Ves? 00:04:13
Y ahora le das enviar actualización y en teoría, no sé, te debería de enviar un correo electrónico. 00:04:14
No sé. 00:04:23
Ya te digo, en principio yo lo suelo hacer así y me funciona. 00:04:24
Pero como esto es de Microsoft, te cambian cada dos por tres. 00:04:30
A ver, a ver, a ver. 00:04:34
Sí, es que la otra vez había una cosa que directamente te decía... 00:04:36
Sí, sí, sí. 00:04:40
...aplicar aquí para obtener el link. 00:04:41
Claro, claro. 00:04:44
Vale. 00:04:46
Y si no, no te ha llegado ningún correo, ¿no? 00:04:47
No. 00:04:50
Vale, si entras ahora otra vez a Teams. 00:04:51
Entra al cliente de Teams. 00:04:53
Es que también te lo puedo enseñar a través de la aplicación. 00:04:55
Dale doble clic ahora. 00:04:59
¿En la aplicación? 00:05:01
Sí. 00:05:02
Ahí está. 00:05:09
Click here to join the meeting porque te has invitado a ti mismo, sí. 00:05:10
A mí me pasa también. 00:05:15
Yo me invito a mí mismo y entonces ya me sale. 00:05:16
Es una cosa curiosa. 00:05:19
Y entonces ahora ahí copias ese enlace y con un botón derecho copias el enlace y ya está. 00:05:20
Y con ese ya lo podréis. 00:05:24
No me preguntes por qué. Esto es Microsoft, tío. 00:05:26
Es uno de esos misterios, ya sabes. 00:05:29
Vale, pues nada. 00:05:33
Para la siguiente reunión ya no será reunión con Jorge Gómez. 00:05:35
Esperemos que sea. 00:05:39
Y la cambié por esta hora. 00:05:41
Vale, pues nada. 00:05:44
Lo actualizas en el habla virtual y veremos. 00:05:45
¿Vale? 00:05:50
Sí, es que es una cosa súper rara, pero a mí también me ha pasado alguna vez. 00:05:52
Pero es que esto ha ido peor. 00:05:57
Yo por defecto siempre me invito a mí mismo. 00:05:59
Porque si no, es la única forma de asegurarme que tengo el enlace correcto. 00:06:03
Juanra. 00:06:10
Dime. 00:06:11
No te olvides de mandarnos la contraseña, que se nos va a pasar el tiempo para... 00:06:12
No, que va, tranquilo. 00:06:16
Que después es un rollo. 00:06:19
Que si no la amplío, tranquilo, que yo soy aquí el máster de los registros. 00:06:21
Sí, ahora me invito, voy a pillarla. 00:06:27
Tardo un segundo en pasarosla por el chat, ya viendo que es este. 00:06:30
Estamos, por cierto, ¿estamos todos? Porque he recibido... 00:06:33
No, estamos 19. 00:06:36
Vale, ¿Marcos Israel está? 00:06:38
No. 00:06:43
¿Marcos Israel Moller? 00:06:44
No. 00:06:46
Es que me ha puesto un correo diciéndole que si hay un enlace nuevo, porque este no le funciona. 00:06:47
Vale, voy a contestarle diciéndole que una... 00:06:57
Al enlace este. 00:07:02
Vale, pues ahora os paso... 00:07:07
Ahora os paso el... 00:07:10
Bueno, voy a pasar el este, el enlace, que no tardo nada. 00:07:13
Y luego voy a mandar un correo a todo el mundo diciendo que ese es el enlace correcto, el que yo he utilizado. 00:07:20
Para asegurarme que todo el mundo tiene... 00:07:27
Vale. 00:07:29
A ver, ¿dónde estamos aquí? 00:07:32
Vale. 00:07:40
Vale, pues os paso el registro de la de hoy, que es 17 de abril, ¿verdad? 00:07:48
Sí. 00:07:54
Vale, pues... 00:07:57
Vamos a ver, chat, aquí lo tenéis. 00:08:02
A ver... 00:08:06
Vale. 00:08:10
Vale, ¿lo tenéis? 00:08:15
Sí, ya está. 00:08:19
Vale, ok. Pues nada. 00:08:20
Ir entrando y registrando, voy a mandar un correo a todos. 00:08:22
Os lo voy a mandar también a los que estáis, ¿vale? 00:08:25
No hagáis ni casos si os recibís un correo mío diciendo que este es el enlace nuevo, porque lo voy a mandar a todos para ahorrar tiempo. 00:08:27
Y ya está. Si hay alguien que no ha podido entrar, pues os recibirá el correo. 00:08:36
Y nos aseguramos. 00:08:43
Vale. 00:09:05
Y ya está. 00:09:35
Vale. 00:10:05
Vale. 00:10:35
Vale, ya tengo enviado el correo. 00:10:54
Jorge, me voy a desconectar y voy a usar el propio enlace del correo para asegurarme que manda el enlace correcto, ¿vale? 00:10:56
Vale. 00:11:03
Me salgo y vuelvo a entrar y ya con eso, en principio, deberíamos de poder empezar. 00:11:04
Un segundito. Ahora vuelvo. 00:11:09
Bien. 00:11:11
Bueno, mientras tanto, para los que habéis entrado ahora a última hora, ¿alguna duda, alguna consulta respecto a la clase anterior? 00:11:17
Vale. Juanra, ya veo que has vuelto a entrar. 00:11:24
Vale, ya está. El enlace que he mandado es el correcto, ¿vale? 00:11:44
Ya he utilizado el que he mandado por correo, con lo cual, en principio, la gente que no ha podido entrar debería de, si mira el correo, poder entrar, sin problema. 00:11:47
Vale. ¿Pero los que no han podido entrar? ¿Por qué así no me han enterado? 00:11:56
No, es que alguien me ha mandado un correo y me ha dicho, oye, que si este es el enlace correcto, es que no estoy pudiendo entrar. 00:11:59
Pero claro, como el enlace es un churro así de largo, pues, yo qué sé, a ver quién me ha mandado. 00:12:05
Entonces, no sé si se está usando el de la semana pasada o no tengo ni idea. 00:12:11
Pero bueno, el caso es que ya he mandado el enlace, es el que estaba publicado en el aula virtual, el que he mandado. 00:12:16
O sea, que tampoco... Por eso digo que, en teoría, estaba bien hecho por tu parte, ¿vale? 00:12:22
Estaba bien hecho. Lo que pasa es que, como en el otro curso es pinchando en la bandera de la Comunidad de Madrid, 00:12:28
pues, a lo mejor han pinchado en el enlace de la semana anterior y no se dieron cuenta que estaba abajo. 00:12:34
He cambiado el enlace. He cambiado el de la Comunidad de Madrid y el de Abad de Madrid. 00:12:38
A mí el de la Comunidad de Madrid no me valía, no me funcionaba. Y el de Abajo, de seguida lo cambié. 00:12:43
Ah, pues puede ser. 00:12:48
Pero no aparecen pinchables. 00:12:50
Sí, es que a mí lo de la bandera no me aparecía tampoco como... 00:12:52
Y el otro yo lo copié y lo pegué, porque tampoco dejaba pinchar sobre él, no sé... 00:12:57
Eso es. No dejaba pinchar para liberarlo. Por eso ha habido un poquito de... 00:13:02
Bueno, vamos a intentar... 00:13:07
Sí, es que no sé qué pasa. No me había llegado el enlace ni nada. 00:13:11
Y me había conectado con el anterior y no me había llegado nada. 00:13:14
Entonces estaba aquí y ya sabes que digo, si algún día tu ves que falto y no he dicho nada, no puede ser. Algo falla. 00:13:16
Nada. El enlace... 00:13:22
A partir del miércoles ya se da un enlace el mismo para todo el aula virtual. 00:13:25
Vale, pero ¿por qué a mí no me había llegado? ¿Por qué...? 00:13:30
No, porque era el que estaba en el aula virtual. 00:13:33
Ah, es que entraron en el aula virtual, pero tampoco lo he visto. Entonces... 00:13:36
Sí, estaba debajo de la bandera. 00:13:39
Era copiar y pegar, pero da igual. 00:13:42
Lo he mandado porque he visto que faltaba. Como me has mandado el correo, he visto que no estabas y por eso lo he mandado otra vez. 00:13:45
Pues muy amable. Muchas gracias, Jorge. Qué pena que no lo haya visto. 00:13:50
Dices que debajo de la bandera, ¿no? 00:13:53
Sí, cuando entras al enlace de la videoconferencia ves la bandera del CETIF y debajo hay un enlace largo que lo puedes copiar y pegar y ya se funcionaba. 00:13:54
Pero vamos, da igual. Sin problema. Para la semana que viene, para la próxima clase del miércoles, estará... 00:14:02
Vale, vale. Pensé que lo ibas a enviar y que valía ese. ¿Y la contraseña de hoy para enviar licencia? 00:14:09
La vuelvo a enviar. 00:14:14
Sí, por favor, porque yo ya la veo ya. 00:14:15
Correcto, correcto. No hay problema. La vuelvo a copiar y pego y sin problema. 00:14:17
Disculpadme que además hoy yo he tenido un pequeño despiste y me he conectado un poco más tarde. 00:14:24
Jorge, no pasa nada. Muchas gracias. 00:14:30
Una pequeña pregunta antes de que empecemos. Estoy intentando hacer, o sea, igual que hice el otro día el desarrollo de un JSON con diferentes, una forma muy simple, 00:14:35
con diferentes categorías, departamento y tal. Ahora he querido meterlo en el topic y coger una propiedad concreta departamento. 00:14:48
Igual que lo hacíamos msf.payloa.departamento, hacerlo con el msf.topic.departamento. ¿Se puede hacer así? Es que me dice que no. 00:14:57
Aún metiendo en el topic todo el JSON. 00:15:08
¿Me entiendo? 00:15:13
¿Lo explico? 00:15:14
Sí, pero lo tienes que marcar como que es un JSON, no como que es un texto. 00:15:15
Sí, sí, entiendo. Sí, sí, sí. Así lo he hecho. 00:15:19
Sí, debería... A ver, compárteme la pantalla, por favor. 00:15:27
¿Cómo es compartir la pantalla? Por favor, ya. 00:15:33
Sí, estás viendo mi pantalla, ¿no? 00:15:37
Sí. 00:15:39
A la derecha del micro... 00:15:40
¿A la derecha del micro? Sí. 00:15:42
Tienes como una especie de cuadrado con una flecha hacia arriba adentro. 00:15:44
Sí, sí. 00:15:47
Ahí tienes que darle. 00:15:48
A ver, acabo de darle. 00:15:49
Y ahora te va a preguntar, en una ventanita aparte, que qué quieres compartir. 00:15:51
Pues, dile que pantalla completa. 00:15:56
Nada, Marcos, acabo de recibir tu correo. 00:16:13
Vale, pues nada, no quería yo molestar a nadie, pero estaba ahí... 00:16:17
¿Lo ves, Jorge? 00:16:22
Sí, gracias. 00:16:24
A ver, dale a los tres puntitos. 00:16:26
A los tres puntitos que aparecen ahí. 00:16:32
¿Y tú qué quieres que se muestre en la declaración? 00:16:36
Ah, bueno, perdona, perdóname, perdóname. 00:16:38
Estoy cogiendo la categoría. Pensaba que aquí estaba la categoría. 00:16:41
Perdóname. 00:16:44
Pensaba que estaba aquí la categoría de departamento. 00:16:45
He cogido de la hoja 6 y aquí no está. 00:16:48
O sea, que le estoy pidiendo una cosa que no tiene. 00:16:50
Vale, vale. No hay problema. 00:16:52
Vale, eso explica que no aparezca nada. 00:16:54
Sí, claro. 00:16:56
Vale, vale. 00:16:58
Vale, pues vuelvo a compartir yo. 00:17:00
¿Confirmar que me veis en pantalla completa? 00:17:09
Sí. 00:17:12
Perfecto. 00:17:14
Bueno, pues nada, vamos a continuar donde lo dejamos el otro día. 00:17:16
Me quedan por explicar algunos pequeños detalles del nodo de debug, 00:17:19
que es interesante que conozcamos, 00:17:25
y un par de nodos básicos más, ¿vale? 00:17:27
Antes de que os pida que hagáis unos ejercicios como para repasar este tema. 00:17:29
Este curso, la forma en la que lo he organizado, 00:17:35
es que, o sea, se hacen, digamos, 00:17:39
explico yo del tirón, por así decirlo, 00:17:42
toda la parte de teoría, cómo funciona cada bloque. 00:17:44
El que quiera puede ir replicándolo unos minutos para replicar, 00:17:47
pero luego al final del tema os pido una serie de ejercicios a modo de práctica 00:17:50
para que vayáis practicando vosotros con algunas cosas que he pedido 00:17:54
y otras cosas que son ligeramente diferentes. 00:17:57
Entonces, ¿qué cosillas que me quedaban por explicar? 00:18:01
Pues de la ventana de debug, por ejemplo, 00:18:04
voy a conectar este nodo aquí, voy a despegar y voy a aplicar, 00:18:07
y hay algunas cosillas que quedaban por contar. 00:18:12
Por ejemplo, cuando no me llega un mensaje, 00:18:17
esto ya vimos que los mensajes numéricos podemos ir cambiando 00:18:19
entre diferentes notaciones, diferentes formas de representarlo, 00:18:22
pero esto de aquí no lo conté, ¿vale? 00:18:25
Y es importante. 00:18:29
El icono de la derecha del todo, 00:18:30
lo que me permite es copiar en el puerto de papeles 00:18:33
el valor, es decir, el valor numérico que estamos obteniendo aquí. 00:18:36
Si yo lo copio y me vengo, por ejemplo, aquí, 00:18:40
pues veis que se ha copiado esta fecha numérica. 00:18:43
Pero normalmente, más que el valor, me interesará copiar la ruta. 00:18:47
Esta ruta es para cuando más adelante yo quiera hacer un if, por ejemplo, 00:18:53
para preguntar que si tal objeto tiene tal propiedad, 00:18:58
que vale tal no sé qué, tal cosa, 00:19:01
yo me vengo aquí, selecciono esto, ¿vale? 00:19:03
Y lo que me copia es la ruta al, digamos, 00:19:07
a lo que se está mostrando por la ventana de Google. 00:19:13
Aquí no tiene mucho misterio porque estamos mostrando msg.payload, 00:19:16
pero cuando hagamos mensajes que tengan objetos dentro 00:19:19
y entre esos objetos otros objetos y entre propiedades, 00:19:24
pues la ruta será mucho más larga. 00:19:26
Sobre todo esto nos vendrá bien cuando estemos con la parte de NLP. 00:19:28
Pero que sepáis que estos dos iconos son importantes. 00:19:31
Luego también hay otro mensaje. 00:19:38
Voy a copiar un segundito el JSON que tenemos por aquí. 00:19:42
¿He perdido el JSON de los gatos? 00:19:48
¿Recordáis dónde...? 00:20:14
Ahí, en el tema de la página 5. 00:20:16
Sí, estaba en la página 6. 00:20:18
Ah, en el tema 0. 00:20:24
Sí, en el tema 0. 00:20:26
Vale. 00:20:27
Un segundito. 00:20:40
Vale. 00:20:46
Vale. 00:21:02
Si yo aquí le digo que esto quiero que sea un JSON y pego esto. 00:21:03
Vale. 00:21:10
Cuando yo ahora inyecto. 00:21:11
Aquí aparece un icono nuevo de vez en cuando. 00:21:17
Cuando hay propiedades, cuando hay objetos que contienen otras propiedades de otros objetos. 00:21:20
¿Veis este signo de exclamación? 00:21:25
O un pin. 00:21:28
Que aparece a la derecha. 00:21:32
¿Para qué vale eso? 00:21:34
Bueno, pues eso es interesante. 00:21:35
Voy a coger este bloque y lo voy a volver a cambiar. 00:21:37
Pero en este caso voy a cambiar un poco, por ejemplo, el nombre de los gatos. 00:21:41
Este se va a llamar Darío y este se va a llamar Díaz. 00:21:46
Cuando yo vuelvo a inyectar un mensaje. 00:21:59
¿Veis lo que aparece? 00:22:01
Aparece otra vez el mensaje pero compactado. 00:22:03
Imaginemos que de todo el JSON que nos llega. 00:22:06
Yo estoy interesado en ver por la ventana de curación los nombres de uno de los gatos. 00:22:10
Por ejemplo, de uno de ellos. 00:22:16
A mí me interesará que esto esté desplegado. 00:22:18
Perdón, favoritos no. 00:22:22
Sino la parte del nombre de este gato. 00:22:24
Si yo quiero que de todos los JSON que me lleguen en un futuro. 00:22:27
Se despliegue el JSON para ver esto y que no se quede ocultado. 00:22:31
Entonces yo puedo marcar. 00:22:35
Y ahora, cada vez que yo mande un mensaje nuevo. 00:22:38
No sé si lo podéis ver. 00:22:45
Ya no aparece el JSON compactado. 00:22:47
Sino que se despliega lo necesario como para que yo pueda ver esta propiedad. 00:22:49
Eso es muy cómodo. 00:22:55
Aquí, por cierto, ya os puedo enseñar la ruta. 00:22:57
Si yo quiero, por ejemplo, que el JSON solo me enseñe el nombre de este primer gato. 00:22:59
Yo puedo, perdón, que el debug me muestre solo el nombre de este primer gato. 00:23:04
Yo puedo venir aquí, copiar la ruta. 00:23:07
Me vengo aquí y ya no quiero ver el payload. 00:23:10
Sino que si pego, ya directamente me permite hacer justo lo que yo quería. 00:23:13
Despliego. 00:23:19
Este icono ya lo vimos, que borra todos los mensajes. 00:23:20
Y ahora si despliego este, solo aparece el gato Bob. 00:23:23
Y este solo aparece Darío. 00:23:27
¿Quién es aquí? 00:23:30
No sé si alguien está hablando, pero se lo escucho muy muy bajito. 00:23:32
No sé quién es. 00:23:39
No sé, de hecho, ni siquiera se me está hablando a mí. 00:23:41
Yo creo que no, que es alguien que está hablando por ahí, con alguien. 00:23:53
Es Juanra el que está hablando. 00:23:57
No sé si puedes mutearle. 00:23:58
Sí, silencio. 00:24:00
Entonces, ¿bien con cómo he hecho esto? 00:24:05
O sea, has metido un JSON al principio en el InGit. 00:24:11
Lo que has hecho es mandarlo. 00:24:14
Y lo que has hecho luego es decir que has fijado las dos partes del Array para que a partir de que se envíe siempre esa información, siempre se visualice sin que la tengas que desplegar. 00:24:15
Eso es. 00:24:24
O sea, como he marcado como que me interesa esta propiedad de este objeto con el pin, a partir de ahora me viene desplegado ya. 00:24:25
Porque si no tengo marcado el pin, lo acabo de quitar, si yo vuelvo a mandar otro InGit, me aparece el mensaje, pero así, compacto. 00:24:33
Tengo yo que manualmente ir viendo qué es lo que ha llegado en cada uno de los gatos. 00:24:43
Esto cuando juguemos con la parte del MQTT, si a mí me llegan, por ejemplo, lecturas de temperatura o de humedad, pues llegarán probablemente dentro de un JSON que a lo mejor tiene otro JSON que a lo mejor tiene una propiedad. 00:24:48
Y no quiero estar haciendo clic en el objeto para que se abra, para luego venir a temperaturas, para luego venir aquí, para luego venir aquí. 00:25:01
Entonces marco esto como que me interesa y a partir de ahora, siempre que mando un JSON, se despliega y me marca además esa propiedad para tenerla visualizada rápidamente. 00:25:08
Y como comentaba, si yo lo que quiero es limpiar un poco la ventana de depuración y a mí no me interesa nada de todo lo demás, no es que no quiera, quiero que no me moleste. 00:25:22
Pues yo puedo venir aquí, copiar el path, copiar la ruta, y en lo que me muestra el payload, o sea en lo que me muestra el debug, puedo pegar esta ruta que ha salido marcada de aquí. 00:25:33
Y a partir de ese momento, ya lo único que llegará será, pues aquí no llegará nada, porque no tiene definido esa propiedad, pero aquí aparecerá un gato y aquí aparecerá el otro. 00:25:47
Y nada más, porque le he pedido que me gestione esto, pero no he tenido que teclear nada, simplemente he tenido que seleccionarlo desde una ventana de debug que me mostraba todo el fuertazón completo. 00:25:59
¿De dónde has copiado la ruta que ponías en el payload? ¿De dónde venía toda la ruta, digamos, del objeto propio? 00:26:16
Ah, copy path. Vale, genial, ya está. Y lo puedes hacer sobre cualquier cosa que sea una ruta. 00:26:23
¿Todo esto está en el manual? ¿O esto tú me lo has contado? 00:26:31
Tiene que estar en el manual. 00:26:39
No, espérate. 00:26:41
Sí, yo creo que sí, que está en la página 13, donde pone vista de depuración. 00:26:51
Sí, contenido fijado. Sí, sí, sí te aparece. 00:27:02
Bueno, más cosillas que me quedan por ver con la parte de depuración. 00:27:06
El otro día estuvimos viendo las diferentes opciones que teníamos aquí. Vimos la de MSG, la de mensaje completo, la de JExpression no la vimos, la vamos a ver un poco más adelante, pero ahora sí que me interesa que nos fijemos un poco en esta. 00:27:14
Ahora mismo los nodos de depuración tienen marcado como por defecto que el lugar en el que se van a mostrar va a ser en la ventana de depuración. 00:27:32
La ventana de depuración es esta parte de aquí a la derecha. 00:27:43
Pero yo puedo decidir que se muestre en diferentes sitios. 00:27:46
Por ejemplo, este System Console a nosotros ahora mismo no nos va a servir de mucha utilidad, pero lo que hace es registrarlo en los logs del servidor. 00:27:50
Como nosotros tenemos instalado cada uno en un servidor en nuestra casa, en nuestro ordenador, pues digamos que ahí haría constar cada uno de los mensajes que manden. 00:28:02
Yo esto no lo recomiendo, a no ser que seais usuarios más avanzados y tengáis cosas muy complejas, porque no es tan cómodo como tenerlo aquí y además no se puede desplegar, ni puedes hacer lo del pinear. 00:28:10
Es un poco más complicado. 00:28:24
Pero sin embargo, este sí que puede ser interesante. 00:28:26
NodeStatus. 00:28:30
El status es una de las propiedades que os conté el otro día, que estaba en el tema cero, pero que no os puedo enseñar. 00:28:32
Que es que en la zona de abajo de algunos nodos se puede mostrar cierta información. 00:28:42
Vamos a hacer una prueba con esto. 00:28:48
Dice NodeStatus, como máximo se van a mostrar 32 caracteres. 00:28:50
Y dice que queremos que se muestre lo mismo que en la salida de depuración. 00:28:55
Por ejemplo yo puedo venir aquí y voy a decirle que TimeStamp, o sea que Payload, va a ser un texto que ponga Hola. 00:29:00
Y este Inyect le voy a quitar esto y le voy a decir que sea un string que diga Adiós. 00:29:11
Despiego. 00:29:20
Aquí ya veis que se ha generado un puntito que me muestra que esto está preparado para mostrar ciertos estados. 00:29:21
Y ahora cuando yo inyecte esta información, aparte de mostrarse por la pantalla, que esto de hecho lo podría desactivar, 00:29:30
le puedo decir que no quiero que me muestre nada por la ventana de depuración. 00:29:39
Yo puedo hacer que este nodo, sin tener que fijarme en nada más, ya me dé información de qué es lo que está pasando. 00:29:48
Como una forma adicional de, sin tener que salir del flujo del programa, 00:29:54
de ver por ejemplo cuál es el contenido de una variable, o ver cuál es el contenido de un valor que hemos obtenido en el QTT 00:30:00
y que aparezca reflejado aquí directamente en la ventana principal. 00:30:06
Más nodos que me quedan por explicaros, antes de empezar con nodos un poquito más complejos. 00:30:26
Por un lado, quería contaros una cosa que ahora quizá no le vamos a ver mucho la utilidad, 00:30:32
pero que cuando vayamos generando nodos más complejos, será muy interesante porque nos permite 00:30:39
que nuestro código quede mucho más limpio que si hubiera miles de cables. 00:30:48
Veis que he sacado los nodos link in y link out. Estos nodos básicamente actúan como cables transparentes. 00:30:53
Por ejemplo, imaginemos que esto está como muy lejos, este inject lo tengo abajo del todo, 00:31:02
porque me interesa agruparlo junto con otros nodos, pero quiero que vaya este mismo dibujo. 00:31:08
Yo puedo utilizar estos link out y link in para simular un cable que es transparente. 00:31:14
Primero, el link out lo que me permite es coger... 00:31:25
Jorge, la cámara nos tapa la esquinita donde estás currando. 00:31:30
Yo cojo el link out y este link out lo que tiene es un pin a la izquierda, es una entrada, con lo cual conecto esto aquí. 00:31:42
Este link in lo puedo meter aquí y ahora mismo, tal y como lo tengo, esto no sé si va a dar error, 00:31:52
pero desde luego no va a funcionar. 00:31:59
¿Por qué no funciona? ¿Por qué no me está funcionando este inject? 00:32:04
Bueno, pues porque internamente no están conectados. 00:32:07
Y esto se puede hacer de dos formas. 00:32:10
No, no, me estabas preguntando y iba a responderte, pero si ya no estás diciendo tú nada, perdón. 00:32:14
La historia está en que no están conectados. 00:32:20
La forma de conectarlos es muy sencilla, se puede hacer de dos formas. 00:32:22
Una es tecleando y otra es arrastrando. 00:32:25
Si yo hago clic en cualquiera de los dos, veis que aparece un tirador nuevo. 00:32:28
Este tirador es una línea apunteada y solo se enlaza con otros links que sean del tipo contrario. 00:32:32
Claro, si se muestra siempre, pues no hemos ganado nada con respecto a hacer una conexión directa, 00:32:43
pero resulta que en cuanto yo hago clic fuera, esta conexión desaparece. 00:32:49
Y solo se me muestra cuando hago clic en uno de los dos extremos. 00:32:53
De forma que me permite tener mi código más ordenadito. 00:32:56
Yo puedo tener esto por aquí, esto por aquí. 00:33:00
Y ahora, cuando yo despliego y hago clic... 00:33:03
Eh... 00:33:09
Ah, vale, claro, porque lo que está haciendo no está en el debug. 00:33:11
Cuando yo hago este inject, ya sí que aparece aquí en la ventana de debug, 00:33:16
porque aunque este y este no están unidos físicamente, por así decirlo, 00:33:20
tienen un hilo invisible que une el link in con el link out. 00:33:24
Si queréis, haced una prueba vosotros o vosotras y decidme si os funciona. 00:33:30
La otra forma de asociarlo, por cierto, es aquí, mediante esta... 00:33:36
Si yo elimino esto... 00:33:42
Me va a dar a elegir varios nodos. Por ejemplo, si yo cojo este link in... 00:33:46
Ahora, cuando le diga a este que quiero asociarlo con otro, me va a preguntar. 00:33:51
¿Con cuál quieres asociarlo? ¿Con este o con este? 00:33:55
Lo puedes hacer con ambos. 00:33:58
Y puedo hacer que la información le llegue a los dos. 00:34:01
O solo con uno de ellos. 00:34:04
Lo más fácil para mí es tirar el cablecito. 00:34:09
Pues nada, prueba esto por favor y me decís qué tal va. 00:34:16
Iguallta los dos. 00:34:31
Igual chat, el link out tenemos. 00:34:40
Bueno, esa es la prueba de este contenido. 00:34:47
Vamos agregándole un poco más de contenido. 00:34:55
Bueno, en la nueva versión de la lista aparece el nombre, no el ID. 00:34:57
Sí, aparece en la lista en la que quieres asociarlo, te aparece link, click en uno. 00:35:08
En lugar del ID que le aparece en la versión. 00:35:15
Ah, o sea que si yo aquí a este nodo le hubiera dado un nombre. 00:35:18
Por ejemplo, texto 1. 00:35:21
Aquí me parecería para elegir... Ah, mira que también. 00:35:25
Sí, que también, pero por defecto, digamos que coge como el nombre el propio nodo. 00:35:32
En el propio nodo. 00:35:39
Esa es a lo que te referías, que en lugar de aparecer un churro aquí que no tiene sentido, aparece un nombre. 00:35:48
Correcto, sí. 00:35:54
Sí, sí, lo podemos simular también con la versión antigua cambiándole el nombre en cada uno de los nodos. 00:35:57
Bueno, ¿bien con esto? ¿Alguna duda? 00:36:05
No. 00:36:13
Y el último nodo que os quería enseñar es el del comentario. 00:36:16
¿Qué es esto que hay aquí? 00:36:23
Básicamente, como ya habéis programado en el lenguaje de programación de los tradicionales, pues ya sabéis lo que es un comentario. 00:36:26
Básicamente, esto es lo que nos permite escribir una pequeña ayuda por lo que sea. 00:36:33
Y lo único malo es que esa información aparece aquí. 00:36:41
No sé en la versión nueva cómo es, pero desde luego aquí tenemos que verlo en la sección de información. 00:36:49
Y aquí, pues, tenemos que verlo en la sección de información. 00:36:56
Y aquí, pues, tenemos que verlo en la sección de información. 00:37:00
Aquí, no sé en la versión nueva cómo es, pero desde luego aquí tenemos que verlo en la sección de información del lateral derecho. 00:37:03
No es que aparezca... O sea, si le queremos poner aquí, vamos a poner algo muy cortito. 00:37:13
Lo que es la descripción va en la parte informativa del nodo. 00:37:19
Pues nada, os he dejado, como os decía, en la página 15 una serie de ejercicios. 00:37:26
Si os parece, os voy a dejar 15 minutos. Deberían estar resueltos todos. 00:37:46
Y luego los vamos resolviendo uno a uno. 00:37:52
De todas formas, si queréis, estáis todos con las manos bajadas, ¿verdad? 00:37:56
Pues según los vayáis terminando, vais levantando la mano y así yo sé qué ritmo lleváis. 00:38:00
Vamos, a ver si podemos. 00:38:08
No es nada muy diferente de lo que hemos estado haciendo. 00:38:12
Jorge, una preguntita. Yo tengo los nodos del otro día que están inyectando automáticamente cada cierto tiempo una serie de mensajes. 00:38:22
¿Hay alguna forma de deshabilitarlos sin borrarlos o sin...? 00:38:30
Si eleges un nodo, cualquier nodo, y le das doble clic, aquí abajo del todo aparece Enables. 00:38:35
Vale, ya lo he visto. 00:38:49
Le puedes quitar y entonces el nodo se queda como sombreado. 00:38:51
No se borra, pero tampoco hace trabajo ninguno. 00:38:56
Vale, vale. Queda en gris discontinuo ahí. 00:39:00
Bueno, si desactivamos de esta manera la repetición también vale, ¿no? 00:39:03
O tenemos que dejarlo hecho por si acaso. 00:39:07
Pero él no quería tocarlo por lo que sea. 00:39:09
Sí, pero te pregunto ya al nivel de que no hace falta que lo tengamos así para hacer nuevas prácticas. 00:39:12
No es la base para otras nuevas prácticas eso, ¿no? 00:39:16
No, no. De hecho para hacer esto podéis borrar todo lo que había. 00:39:19
Vale. Y ahora lo único que quieres que hagamos es que metamos un comentario. 00:39:23
No, no. Ahora es los ejercicios que aparecen en la página 15 del tema 1. 00:39:27
Ah, perdón un segundo. Voy. 00:39:34
Subtítulos realizados por la comunidad de Amara.org 00:39:49
Subtítulos realizados por la comunidad de Amara.org 00:40:19
Subtítulos realizados por la comunidad de Amara.org 00:40:49
Subtítulos realizados por la comunidad de Amara.org 00:41:19
Subtítulos realizados por la comunidad de Amara.org 00:41:49
Jorge, en el punto 2 que dice que muestre todo el mensaje... 00:42:19
Si quítalo el payload para que me muestre solo MSG no era así, ¿no? Porque así me da error. 00:42:24
O sea, que me muestre todo el mensaje... 00:42:29
Que salga desplegado, se refiere. 00:42:31
No te oigo, no te oigo. Estás muteado. 00:42:36
Subtítulos realizados por la comunidad de Amara.org 00:42:39
Sí, recuerda que el output yo puedo elegir entre tres cosas diferentes. 00:42:47
O MSG punto... Ah, vale. 00:42:52
O MSG punto... Ah, vale. 00:42:55
O mensaje completo o un JSON ata expression. 00:42:56
Genial, gracias. 00:43:01
Entonces es este, mensaje completo, y ahí vemos el JSON entero. 00:43:03
Subtítulos realizados por la comunidad de Amara.org 00:43:33
Jorge, ¿el código 1 de la página 6 dónde está? ¿En el anexo 0 o dónde está la página 6? 00:43:52
Subtítulos realizados por la comunidad de Amara.org 00:43:57
Subtítulos realizados por la comunidad de Amara.org 00:44:27
Subtítulos realizados por la comunidad de Amara.org 00:44:57
Subtítulos realizados por la comunidad de Amara.org 00:45:27
Subtítulos realizados por la comunidad de Amara.org 00:45:57
Subtítulos realizados por la comunidad de Amara.org 00:46:27
Subtítulos realizados por la comunidad de Amara.org 00:46:57
Subtítulos realizados por la comunidad de Amara.org 00:47:27
Subtítulos realizados por la comunidad de Amara.org 00:47:57
Jorge, una pregunta. 00:48:17
Sí, perdón, empezaba con el micromotero. 00:48:28
Nada, no te preocupes. 00:48:30
Mira, estoy haciendo el punto 4, en el que me dice que cree un... 00:48:31
O sea, que inserte un nuevo INGET y que ponga, además, el JSON que había puesto en el INGET del anterior. 00:48:35
Entro a la prueba payload, pero es que no sé por qué se cree que estoy haciendo algo malo, o que se trata de que aprendamos algo. 00:48:43
Le estoy metiendo otra vez, le doy a añadir, y le pongo en el MSG, le pongo un JSON, le meto el JSON anterior, 00:48:48
le doy DONE, y vuelvo a entrar, y no me lo guarda. 00:48:54
A ver, compárteme la pantalla, por favor. 00:49:01
Vale, pero ¿me tienes como superusuario o no de pantalla? 00:49:03
Sí, ahora sí, todos podéis poder compartir. 00:49:06
Vale, genial, pues espérate, te lo comparto. 00:49:08
Espérate, voy a cambiar la pantalla. 00:49:10
Vale, te comparto, comparto, pim, pam. 00:49:12
A ver. 00:49:16
¿Me está viendo mi pantalla? 00:49:19
Sí. 00:49:20
Vale. 00:49:21
Pues lo que decía, hago así, y me meto aquí, le meto, le doy un añadir, le digo voy a ponerle aquí un JSON, 00:49:22
le voy a meter el JSON que tenía antes, lo voy a aceptar, y ya desaparece. 00:49:29
Claro, pero porque el JSON tiene que ir dentro de una propiedad. 00:49:36
¿Dentro de una propiedad? 00:49:44
Claro. 00:49:45
Ah, en el payload, vale. 00:49:46
Claro. 00:49:48
Vale. 00:49:49
O sea, que lo meto aquí y tengo que decirle payload. 00:49:50
Vale. 00:49:54
Lo pongo aquí así. 00:49:56
Espera, espera, espera, así no está bien. 00:49:57
Porque ahí lo has metido como texto. 00:50:00
Ah, perdón, pues sí, sí, claro, claro, evidentemente. 00:50:02
No sé que he hecho mal, pero lo voy a volver a borrar. 00:50:05
Sí, ahí está bien. 00:50:07
A ver, payload. 00:50:09
Y entonces, espera, ahora te pregunto otra cosa de paso, ya que estamos con esto. 00:50:11
Entonces, ahora me dice en el ejercicio este de aquí que lo que tengo que hacer es, 00:50:15
hice genera alternativa al mensaje del ejercicio anterior y comparar la diferencia. 00:50:20
Entonces, si yo ahora hago esto, si yo lo doy aquí así, por ejemplo, 00:50:25
voy a darle deploy, que me parece que no lo había dado deploy, y si lo doy aquí, 00:50:29
pues me sale, evidentemente, lo que tenía antes, y ahora porque me sale tres. 00:50:33
Esto no lo tengo claro ya. 00:50:38
Lo doy aquí, Inge, y me sale... 00:50:39
Creo que lo has puesto como texto otra vez. 00:50:42
Vale, ya decía yo. 00:50:45
Sí, tiene todas las razones. 00:50:47
Vale, JSON. 00:50:48
¿Y así valdrá? 00:50:50
Sí, sí. 00:50:51
Voy a comprobar. 00:50:53
Tienes que despegar de nuevo. 00:50:55
Vale, ahora lo doy deploy, pero voy a borrar todo esto. 00:50:57
Si lo doy aquí, Inget, vale, me sale esto, que es lo normal, 00:51:00
porque yo tengo metido aquí lo mismo que he metido abajo. 00:51:03
Es que no sé si me está preguntando otra cosa, porque no sé si me está pidiendo otra cosa, 00:51:05
pero bueno, yo he hecho lo mismo, y me sale esto. 00:51:10
Y ahora, si lo doy aquí, al debujo aquí, pues no sé si veo alguna diferencia. 00:51:12
A ver, pues... 00:51:17
A ver, estáis en el punto 4, ¿no? 00:51:19
Sí. 00:51:21
Vamos, no sé si luego lo vas a corregir. 00:51:23
Lo vamos a ver, que yo te voy preguntando si no... 00:51:25
Te espero, que no tengo ningún problema, pero... 00:51:27
Dígalo para que genere dentro de la copia de payload todos los petapatason del código 1. 00:51:29
Generar alternativamente el mensaje de la copia anterior y el de éste, y comparar las diferencias. 00:51:34
En un principio yo pienso, digo, ¿qué diferencia va a haber si he puesto el mismo código aquí que aquí? 00:51:42
Entonces no estoy entendiendo algo, por eso te pregunto, y si lo vas a explicar luego, pues me pelo. 00:51:50
Pero vamos, yo te pregunto ya porque me entran las dudas. 00:51:54
... 00:52:04
... 00:52:10
Sí, sí, sí, no te preocupes, tú relájate y mira lo que quieres. 00:52:16
... 00:52:20
... 00:52:26
... 00:52:30
... 00:52:34
... 00:52:38
Sí, eso es lo que pasó. 00:52:42
Vale, sí, no tiene sentido. 00:52:45
Sí, os pido disculpas, es que... 00:52:47
Bueno, lo que tienen los primeros cursos. 00:52:50
Este ejercicio, o sea, el punto 3 y el punto 4, tenían sentido con una modificación que finalmente quité de entre medias. 00:52:54
No falta que pidas tantas disculpas. 00:53:04
Pues nada, pues sigo con el 5 entonces. Me desconecto y sigo. 00:53:06
A ver, ¿dónde está esto de desconectar? 00:53:12
Dejar de compartir, ya está. 00:53:15
Y me quito el micrófono. 00:53:18
Una pregunta, en el punto 3 pone no debe contener la propiedad payload. 00:53:21
Y en el punto 4 creo que dice que debe tener la propiedad payload. 00:53:29
¿Puede ser esa la diferencia? 00:53:33
Sí, la cuestión es que, a ver si os lo puedo enseñar. 00:53:35
Claro, eso es lo que ha intentado hacer Marcos. 00:53:40
¿Estoy compartiendo? 00:53:44
No. 00:53:49
Vale. 00:53:51
Vale, eso es lo que ha intentado hacer Marcos. 00:53:59
Porque claro, aquí el objeto que se manda siempre es el objeto msg. 00:54:02
Entonces, si no mandamos un payload... 00:54:09
O sea, hay que mandar otra cosa. 00:54:14
Pero directamente msg no puede contener un JSON. 00:54:17
Lo que está intentando es poner esto directamente y que contenga todo eso. 00:54:23
Esto no está permitido y por eso no tiene sentido esta práctica. 00:54:28
Lo podéis resolver poniendo aquí en vez de payload, poniendo carga, por ejemplo. 00:54:33
Y ver la diferencia. 00:54:38
Básicamente, lo único que hay que saber es que este inyecta... 00:54:40
Jorge, es que estaba añadiendo propiedades. 00:54:52
Una propiedad en lugar de payload, una propiedad name, otra middle name, otra age. 00:54:57
Entendí que es lo que estaba pidiendo. 00:55:04
Ponerlo como propiedades en lugar de como un JSON. 00:55:06
Pero tenía dudas porque hay un array que no sé cómo ponerlo. 00:55:08
Ah, vale. 00:55:16
A ver. 00:55:19
Ah, sí, sí, sí, sí, sí, sí, sí, sí, sí. 00:55:21
Pues me estaba confundiendo con otro. 00:55:24
Sí, efectivamente es lo que pedimos en el punto 3. 00:55:25
Es decir, que si en el... 00:55:28
Un segundo. 00:55:31
Un segundo. 00:55:32
Si el JSON lo que contiene es... 00:55:35
A ver si consigo ordenarlo. 00:55:38
Esta serie de propiedades... 00:55:44
Lo que queremos es generar... 00:55:47
Efectivamente, sí, sí, sí. 00:55:48
Lo que queremos hacer es generar un JSON que contenga... 00:55:51
Esta lista de elementos por sí mismo. 00:55:56
Esto vendría aquí y esto vendría aquí. 00:56:03
Vale, y con respecto al array... 00:56:06
A ver cómo se hacía. 00:56:12
Claro, es que me da error de configuración. 00:56:14
Porque en CAD se ha metido un JSON, pero no lo he podido meter bien. 00:56:16
Y en favoritos... 00:56:21
En favoritos... 00:56:22
Sale el array de 5 en blue. 00:56:24
Y no sé... 00:56:27
No sé cómo ponerlo. 00:56:29
Lo he metido con múltiplo texto, pero no veo ahí una opción de array. 00:56:30
Ah, sí, lo debería dejar. 00:56:43
A ver si lo quito esto. 00:56:45
Ah, vale. 00:57:01
Queremos verlo. 00:57:02
Ah, como un JSON que tenga un array dentro, ¿no? 00:57:03
Sí, sí. 00:57:05
Vale. 00:57:06
Por el momento no se me está cajando y debería ser así. 00:57:08
Sigo llevando este inject. 00:57:11
Aquí lo tenemos. 00:57:12
Lo que he metido ha sido, dentro del... 00:57:16
Dentro del JSON, un array que contiene más objetos. 00:57:20
Y eso es lo que le llega directamente al... 00:57:26
Al mensaje de debujo. 00:57:30
Pero sí, sí, efectivamente esto es lo que pedía el punto 3. 00:57:32
Es coger todas las propiedades que contiene el JSON que venía de ejemplo 00:57:35
y generar, en vez de payload, poner nombre, nombre de medio, edad, favoritos como un array, etc. 00:57:42
Vale, a ver si me sale. 00:57:56
Me lo voy a apuntar para reactuar un poquito mejor. 00:58:08
Vale. 00:58:12
Vale. 00:58:42
Vale. 00:59:12
Vale. 00:59:42
Vale. 01:00:12
A ver qué tal. 01:00:30
¿Alguien lo tiene ya...? 01:00:31
Ángel, ¿lo tenéis terminado todo? 01:00:33
Yo no, si te refieres a mí no. 01:00:39
No, el otro Ángel. 01:00:42
Vázquez. 01:00:44
¿Tiene la mano levantada? 01:00:45
No sé si es porque quiera preguntar algo o porque ya lo tienen hecho. 01:00:47
Vázquez, por las dudas estas que se han planteado. 01:00:50
¿Cómo? ¿Perdona, repite? 01:00:56
No, que estoy con el bonus track 1 y luego entre el ejercicio 3 y el 4. 01:00:58
Como has comentado, si estaba bien y no estaba bien, he hecho nada más que el 4 y el 3 no lo he dejado igual que el 4. 01:01:02
Vale, sí, si no, el tercero que hay que hacer es eso. 01:01:09
Es, digamos, las propiedades que aparecen dentro de Json de ejemplos de los datos. 01:01:11
Es ponerlas en el inject para que lo genere directamente. 01:01:15
Vale. 01:01:22
Gracias. 01:01:39
Lo que pasa que yo, Jorge, lo he hecho. 01:02:07
Digo, no sé si a lo mejor otros compañeros han hecho algo similar. 01:02:08
Yo, en vez de estar machacando los debug de cada uno de los ejercicios, 01:02:12
al final me he creado un inject y un debug para cada uno de los ejercicios y los tengo todos en la pantalla 01:02:16
y puedo ir probándolos individualmente y no machaco el ejercicio anterior. 01:02:23
Digo, por si a un compañero le sirve. 01:02:27
Como vas diciendo, entra, modifica, modifica. 01:02:32
Yo me los he ido duplicando totalmente. 01:02:34
Un inject, un debug, un inject, un debug, un inject, un debug. 01:02:36
Los he nombrado luego con ejercicio 1, ejercicio 2, ejercicio 3 y así los tengo todos simultáneamente. 01:02:39
Eso está guay. Queda más ordenadito. 01:02:46
Jorge, y el null, ¿cómo lo metes? ¿Qué tipo de dato es? Porque un texto no es... 01:02:48
Es dejarlo vacío. 01:03:10
Ah, vale. Pones el nombre del este pero lo dejas sin nada. 01:03:13
Sí, lo dejo vacío. 01:03:19
Yo creo que si le pones un JSON y no pones nada... 01:03:25
No. 01:03:42
Es que si lo pones como texto y está vacío, te pone comillas vacías. 01:04:12
Yo creo que lo tengo ya todo hecho. Me falta un pequeño detallito, pero por ahora va todo bastante bien. 01:04:42
Se lo puedes poner con un JExpression. 01:04:49
Vale, vale. 01:04:53
¿Ha hecho alguien el Bonus Track? 01:04:58
Creo que no. 01:05:00
El primero no debería ser muy complicado. 01:05:20
No, el segundo es complicado. 01:05:22
El segundo se complica un poquito porque hay que utilizar una cosa que no he explicado todavía. 01:05:25
Sí, más o menos. 01:05:29
¿El disco? 01:05:32
Sí, era por donde iba yo. Ahí lo he... pero no me sale. 01:05:33
¿Me sale? 01:05:44
Dale unas vueltas más porque la idea de estos Bonus Tracks es tener entretenidos a los alumnos más avanzados. 01:05:45
Vamos a ver si me lo pongo con nodo status. 01:05:52
Ahí no me salió. 01:06:15
Hay algo que no estoy haciendo bien. 01:06:17
Ahora no me sale el JSON, no me sale de la diferencia de premios. 01:06:38
Bueno, luego lo revisamos. 01:06:43
A ver si lo pongo aquí en MSG. 01:06:47
Ahí, ¿por qué no me sale? 01:07:05
Ahí está. 01:07:13
Aquí va. 01:07:31
Expresión. 01:07:36
A ver. 01:07:39
Si lo tomo esto... 01:07:41
¡Ah! Ya, claro. Ya, ya. Ya he dado con ello. 01:07:53
¿Lo has hecho? 01:07:58
Sí, sí, me parece que sí. 01:07:59
Luego nos cuentas... 01:08:00
Me parece que sí. 01:08:02
...que lo hayas liado. 01:08:03
Me parece que sí. No, aquí estoy viendo la isla. 01:08:04
Me parece que sí, me parece. No, no estoy viendo todo eso. 01:08:10
No. 01:08:13
Claro, es que le tengo que dar la salida. 01:08:39
Un poquísimo. 01:08:42
Jorge, ¿una pregunta? 01:08:51
Sí. 01:08:53
Mira, estoy con el Bonus Tracks este que dice que conectemos otra vez un ingestion de boot 01:08:54
y que contenga únicamente un timestamp. 01:09:00
O sea, que saque el timestamp. 01:09:05
Pero lo que no entiendo es que quiere que saque el timestamp o el mensaje. 01:09:07
O qué no me estoy enterando yo. 01:09:10
A ver, ¿con cuál está? 01:09:12
El BT1. 01:09:13
Bonus Tracks. 01:09:14
Ah. 01:09:15
One. 01:09:16
Es decir, tú tienes un índice que lo único que tiene es el timestamp. 01:09:24
Este se lo borras. 01:09:29
Vale. 01:09:30
Y lo que queremos es que cuando le llegue a un nodo de curación, 01:09:32
en el nodo de curación, en la parte de abajo, 01:09:38
aparezca la palabra o las palabras mensaje del individuo. 01:09:40
Ah, lo que expliqué antes. Vale, vale. Genial. 01:09:43
Ya está chupado. 01:09:45
Pues lo pongo. Ya está ahí. 01:09:46
Voy a por ello. 01:09:48
Vale. 01:09:50
¿Cuántos...? 01:09:51
A ver, ¿podéis levantar la mano los que hayáis terminado? 01:09:52
Ahora parece que no hay muchos que hayan terminado. 01:10:02
A ver, yo no me he puesto a esperar. ¿Me apunto también? 01:10:09
No. 01:10:12
Ya está. 01:10:14
Vale. 01:10:19
¿Vale? 01:10:20
Vale. 01:10:21
Vale. 01:10:22
Vale. 01:10:23
Vale. 01:10:24
Vale. 01:10:25
Vale. 01:10:26
Vale. 01:10:27
Vale. 01:10:28
A ver. 01:10:30
A ver cuánto sucede. 01:10:39
30... menos... 3... 01:10:59
¿Cuál es 30 menos 3? 01:11:15
El resultado debería ser 2. 01:11:18
¿El BT2? 01:11:22
Sí. 01:11:23
Pues nada, estoy haciendo lo que era eso tan fácil, pero me sale Undefined y no sé por qué me ha salido Undefined. 01:11:25
Porque le he puesto... en el InGed le he puesto un topic de mensaje recibido y en el mensaje recibido he activado el no de status. 01:11:31
Y no tengo muy claro si hay que poner el mensaje recibido antes o abajo que pone Name. 01:11:40
No lo tengo claro. 01:11:46
Vale. 01:11:47
¿Invertir un poquillo? 01:11:48
Sí, sí, sí. 01:11:49
Luego vamos a corregir todo. 01:11:50
Ah, si lo vamos a corregir. 01:11:52
Entonces, nada. 01:11:53
Fue genial. 01:11:54
Jorge, para que aparezca el dato solo del gato, ¿dónde se copiaba el path? 01:12:05
O sea, ¿dónde era que se copiaba? 01:12:08
Sí. 01:12:10
¿Dónde era? 01:12:11
¿Dónde era? 01:12:12
¿Dónde era? 01:12:13
¿Dónde era? 01:12:14
¿Dónde era? 01:12:15
¿Dónde era? 01:12:16
¿Dónde era? 01:12:17
¿Dónde era? 01:12:19
Si quieres, por ejemplo, coger este. 01:12:22
Si quieres copiar el path del gato, si te para el caso no. 01:12:24
Si te para el caso no, el gato. 01:12:28
Sí, está en una cocina ahí. 01:12:29
Pero luego no lo copiaba. 01:12:30
¿Lo copias y dónde vas? 01:12:31
¿Lo copias? 01:12:32
Ah. 01:12:34
¿En un debug, por ejemplo? 01:12:35
¿En un debug? 01:12:37
¿Esa? 01:12:38
Pero, ¿dónde? 01:12:39
Aquí en el nombre, simplemente. 01:12:40
Ah, bueno, que no sería carga. 01:12:41
Claro, porque carga es, espera, es que este lo acabo de retocar con lo que teníamos. 01:12:43
¿Dónde? ¿A qué sitio? 01:12:47
Vale. 01:12:49
Si queremos la edad del primer gato, de Bob. 01:13:08
Ah, bueno, este es. 01:13:13
Este es ahí. 01:13:14
Bueno, da igual. 01:13:15
Copiamos la ruta. 01:13:16
Y aquí, en este mensaje payload, que no queremos esto, sino que queremos eso. 01:13:18
Si ahora conectamos esto aquí. 01:13:23
O esto aquí. 01:13:26
Y lo despegamos. 01:13:27
Aquí ya, en este segundo debug, solo aparece ya la edad del gato. 01:13:30
Y no todo lo demás. 01:13:34
Vale, gracias Jorge. 01:13:35
De nada. 01:13:37
Jorge, ya he solucionado eso, es una tontería. 01:13:39
Pero me he dado cuenta que tengo un concepto que no estoy entendiendo muy bien. 01:13:42
Por ejemplo, claro, yo estaba poniendo, no estaba poniendo el payload, por eso no me salía. 01:13:45
Pero cuando hablamos de msg.topic, o sea, el objeto en realidad es msg. 01:13:48
Y en el payload, ¿qué es lo que va? 01:13:54
Todo el mensaje, ¿y qué es lo que va en topic? 01:13:56
Y no estoy entendiendo bien, ¿que es un atributo de ese objeto o qué es? 01:13:58
Sí, es un atributo de msg. 01:14:02
Entonces, en el payload, ¿qué es lo que va? 01:14:05
¿Qué es lo que no estoy entendiendo claro? 01:14:07
La carga. 01:14:09
El payload es es fundamental de NodeRED. 01:14:10
O sea, todo en NodeRED tiene que ir, o debería ir, o está preparado para entender lo que vaya en payload. 01:14:12
Vale. 01:14:18
Lo que pasa es que algunos mensajes se apoyan de topic para suplementar la información. 01:14:19
Por ejemplo, cuando veamos la parte de MQTT, veremos que yo puedo, utilizando payload y topic, 01:14:26
puedo decirle a un nodo de salida de MQTT que publique tal información en tal topic. 01:14:32
Lo que publicas puede ser un JSON y el topic lo va a entender el nodo de salida de MQTT 01:14:40
como el tema en el cual debe publicar esa información. 01:14:47
Pero digamos que es una propiedad que está como de apoyo. 01:14:53
Lo fundamental en NodeRED siempre es el payload. 01:14:57
¿Y desde el payload entonces puedo acceder al topic o no? 01:15:01
¿O directamente se pone topic como para qué? 01:15:04
No, no se puede. 01:15:07
Si quieres acceder a topic es msg.topic. 01:15:08
Si quieres acceder a payload es msg.payload. 01:15:11
Si quieres acceder a una parte de payload es msg.payload.algo. 01:15:14
O sea, que digamos que dividen los atributos en payload que tiene todo el mensaje 01:15:19
y luego topic lo pone como un atributo aparte especial como para referirse solo al topic. 01:15:24
Está construido eso en el objeto. 01:15:29
Eso es. 01:15:31
Vale. 01:15:32
Pero este es el inject. 01:15:33
Hay objetos, los que tú te generes, a lo mejor no generan topic. 01:15:34
O habrá objetos que vengan de una consulta de base de datos, por ejemplo, 01:15:38
o que vengan de un MQTT que tampoco generarán topic, que solo generarán payload. 01:15:42
Eso es. 01:15:46
O sea, por lo general trabajaremos casi siempre con payload. 01:15:47
Lo que pasa es que el ejemplo que viene con el inject ya viene con los dos creados 01:15:51
porque son los más habituales. 01:15:54
Vale. 01:15:56
Clarísimo. Gracias. 01:15:57
De hecho, mira, por ejemplo esto. 01:16:00
Sí. 01:16:03
Vamos a generar uno aquí. 01:16:04
Estás viendo la pantalla, ¿verdad? 01:16:06
Sí, sí, sí. 01:16:07
Ves que el timestamp lo he sacado tal cual. 01:16:08
Inyecta en payload un timestamp y en topic el texto prueba. 01:16:11
Vale. 01:16:17
Pues yo lo que puedo hacer es que puedo hacer que por la ventana de depuración 01:16:18
aparezca payload y que en el nodo del status aparezca el topic. 01:16:24
Qué guay. 01:16:33
Vale. 01:16:35
Y entonces hago esto así, hago esto así. 01:16:36
Vale. 01:16:40
Aquí aparece prueba, pero aquí aparece lo otro. 01:16:41
Sí, sí, sí. 01:16:44
Genial, clarísimo. 01:16:45
O sea, ya te digo, es una especie de ayudante. 01:16:46
Pero puedo utilizar el que yo quiera. 01:16:48
Si quiero hacer aquí, yo que sé, pepe. 01:16:51
Si pepe vale test, pues también me vale. 01:16:54
Siempre y cuando yo aquí ponga algo que exista. 01:16:58
O sea, tú le añades un atributo nuevo que se llame pepe y ya está. 01:17:02
Digo, pepe no, prueba. 01:17:04
Sí. 01:17:06
Vale. 01:17:08
Genial. 01:17:09
Vale, pero el fundamental, digamos que el que esperan recibir todos los objetos 01:17:10
de nodo de red es payload. 01:17:15
Y topic, algunos de ellos, según la información que te vayan, o sea, según la información 01:17:18
que tengan, perdón, según la documentación que te dé cada objeto, hay algunos que te dirán, 01:17:24
pues mira, adicionalmente en topic puedes cargar esta información. 01:17:30
Sí. 01:17:36
Por ejemplo, aquí no tengo el DNQPP todavía. 01:17:37
Sí. 01:17:42
Vale, entonces, por ejemplo. 01:17:45
Sí, por ejemplo. 01:17:46
Aquí, por ejemplo, en MQTT out, que es esto, dice entradas. 01:17:47
Vale, en payload, lo que tú quieras publicar. 01:17:56
En topic, el topic en el cual quieras publicar. 01:17:59
En otro atributo llamado QS, pues lo que quieras. 01:18:04
Aquí, si quieres retener, es decir, cada tipo de objeto, vamos a coger un MQTT, perdón, 01:18:07
un HTTP. 01:18:13
Vale, pues lo mismo. 01:18:18
HTTP, si le pasas un payload, pues va a ser el cuerpo de la respuesta. 01:18:19
En status code, pues el 440, por ejemplo, el 404, si es un encontrado. 01:18:24
Es decir, cada propiedad en cada objeto se utiliza para unas cosas o para otras. 01:18:31
Sí, sí, sí. 01:18:37
En TCP, pues este, perdón, TCP out. 01:18:39
Vale, pues aquí te dice qué es. 01:18:44
Payload es lo que quieres enviar y session es... 01:18:45
No sé exactamente qué es lo que hace esto. 01:18:56
Vamos, cada nodo, utilizando la documentación que tenemos aquí, nos va diciendo qué es lo que utiliza 01:18:58
cada una de las posibles propiedades que pueda haber en el objeto. 01:19:05
Vale, a ver cómo lo llevamos. 01:19:14
Bueno, yo creo que hemos dejado ya un tiempo prudencial. 01:19:18
¿Os parece si lo vamos corregiendo? 01:19:21
Vale. 01:19:28
Vamos. 01:19:30
Voy a crear una nueva pestaña. 01:19:31
Y nada, pues voluntarios. 01:19:33
Idealmente, uno diferente para cada ejercicio. 01:19:35
¿Alguien se anima con el uno? 01:19:40
Que esté fácil. 01:19:42
Va bien. 01:19:51
Pues es que yo me animo a todo, Jorge. 01:19:53
Pero digo, yo me callo por si alguien quiere. 01:19:54
Venga, pues dale. 01:19:56
Pues empezamos con el primero. 01:19:59
¿Qué hago? ¿Lo comparto o qué hago? 01:20:00
No, vete diciéndome. 01:20:03
Vale. 01:20:05
Pues el punto número uno que tengo aquí era... 01:20:06
Era un flujo vacío. 01:20:09
Que era un flujo vacío. 01:20:11
Pues nada, lo que hago es arrastrar a la interfaz, a la pantalla, un Injet. 01:20:12
Un momentito, que no me está dejando mover aquí la pantalla esto. 01:20:20
No sé qué me está haciendo. 01:20:22
Bueno, me está dando un error listo operativo, pero bueno, ya lo arreglo. 01:20:23
Entonces, arrastro un Injet y luego pongo un Debug. 01:20:26
Y lo que hago es, dejo la configuración por defecto de los dos. 01:20:30
Y lo que me sale es, si le doy al Injet para que me genere una salida, pues me sale... 01:20:34
Bueno, es que luego le he metido también el JSON y todo eso, claro. 01:20:42
Pero ahora ya no... 01:20:45
Si no sale por defecto, espera que lo quito. 01:20:47
Lo quito en un momento. 01:20:49
A ver, añadir payloads. 01:20:51
Había metido el JSON y ahora ya, claro, me genera un montón de cosas. 01:20:55
Por lo de antes. 01:21:00
Deploy y vale. 01:21:02
Y me sale MS... 01:21:04
Bueno, me sale el... 01:21:07
Pues me salen un montón de cosas. 01:21:09
Me sale el numerito del payload, lo que sale. 01:21:11
Si no hacen nada más... 01:21:17
Eso es. 01:21:18
Básicamente, que luego si tú le haces click, puedes llegar a ver cuál es la fecha en la que se ha generado ese mensaje. 01:21:20
Eso, es el número... 01:21:25
Lo que se llama el timestamp. 01:21:27
Ya que está, el primero ha sido muy fácil. 01:21:31
Lo que voy a hacer es, voy a copiar... 01:21:33
Voy a ir haciendo los ejercicios, lo voy a poner más o menos bonito. 01:21:36
Y luego exportaré el JSON para subirlo por el chat. 01:21:39
De esa manera lo podéis copiar en vuestro ordenador y probarlo más adelante. 01:21:44
Vale, pues el segundo era modifica... 01:21:52
¿Sigo? 01:21:54
Sí. 01:21:55
Modifica el foco para incorporar otro nodo de debug conectado a la misma serie que el anterior. 01:21:57
Entonces, pues nada. 01:22:02
Insertamos otro nodo de debug en la pantalla. 01:22:03
Le conectamos ese INYET que hemos puesto. 01:22:05
Pinchando y arrastrando al debug2, que en este caso me ha llamado a mí. 01:22:07
Y configura este nuevo nodo para que muestre todo el mensaje. 01:22:11
Al generar manualmente el mensaje, ¿qué cambio observas en la depoblación? 01:22:16
Bueno, pues para que se vea todo el mensaje... 01:22:19
Lo que he hecho ha sido... 01:22:21
¿Qué es lo que he hecho? 01:22:24
Espérate. 01:22:25
Todo el mensaje... 01:22:28
INYET... 01:22:29
A ver que he borrado todo porque... 01:22:30
Hasta aquí, un segundo. 01:22:32
Vale, pues lo que le he puesto es msg... 01:22:34
No, he puesto... 01:22:36
¿Qué he puesto? 01:22:38
Espérate que se me ha ido la cabeza ya. 01:22:40
¿Qué hago para todo el mensaje? 01:22:42
A ver... 01:22:46
Pues nada, he puesto msg.payload. 01:22:47
Y le he dado DONE y... 01:22:51
Ese es para el normal, ¿no? 01:22:55
Sí, para el normal. 01:22:57
Pues le quito lo de payload, ¿no? 01:22:58
Era... 01:23:00
msg.complete. 01:23:01
Eso es. 01:23:03
Eso puede ser. 01:23:04
Vale, un segundo. 01:23:05
Y en lugar de querer mostrar solo la propiedad o el objeto payload, 01:23:06
queremos el complete, el mensaje de objeto. 01:23:10
Y la diferencia es que cuando yo inyecto... 01:23:15
Pues uno de ellos, el de arriba, va a mostrar lo mismo que mostraba antes, 01:23:20
pero no ha cambiado. 01:23:24
Y el segundo mostrará el JSON que contiene lo que conté el otro día. 01:23:25
Este es el topic, aunque esté vacío. 01:23:29
El payload, que es lo mismo que el anterior. 01:23:32
Y esto, que es un identificador de mensaje que es único, 01:23:35
es una trazabilidad. 01:23:38
Y este mensaje, si yo inyecto otra vez, será diferente. 01:23:39
Aquí es el 4K y este era el AF0 tal tal. 01:23:43
Venga, ¿quién se anima con el tercero? 01:23:51
Yo mismo. 01:23:54
Venga, yo mismo. 01:24:03
Venga. 01:24:04
Vale, pues nada. 01:24:10
A ver, se edita la configuración del nodo Inyect que ya tienes puesto 01:24:11
para generar un mensaje con el mismo contenido que el JSON del ejemplo mostrado. 01:24:14
Entonces... 01:24:19
Pues vamos al... 01:24:21
Eso, al mensaje del Inyect. 01:24:26
Entonces, hay que borrar payload. 01:24:28
O renombrarlo. 01:24:32
Sí, o renombrarlo. 01:24:33
Y pues payload, por ejemplo, se puede renombrar a name. 01:24:35
Y ahí se pone string Alice. 01:24:40
El siguiente, en lugar de topic, middle name. 01:24:45
Y ahí ponemos string, lo dejamos vacío. 01:24:47
Vale. 01:24:53
Sí, ¿no? 01:24:54
Vale, pues sí, yo lo voy a dejar vacío. 01:24:57
Se añade en age. 01:25:00
Sería un número con valor 30. 01:25:04
Favorites. 01:25:12
Favorites. 01:25:13
Pues ahí pondríamos un JSON. 01:25:15
Correcto. 01:25:17
Y entre corchetes, 5, blue. 01:25:19
Voy a cometer un error, ¿vale? 01:25:24
Vale. 01:25:27
En comillas. 01:25:28
¿Veis que este se ha quedado en rojito? 01:25:30
A lo mejor no se aprecia muy bien en el streaming, pero... 01:25:33
Sí, sí, sí se ve. 01:25:35
Aquí se ha marcado, y de hecho, si yo me vengo... 01:25:36
Os recomiendo que cuando generéis un JSON, especialmente cuando lo tecleáis en lugar de copiarlo, 01:25:39
que os vengáis aquí, porque esto nos permite ver los errores. 01:25:44
Aquí nos está diciendo que hay un carácter no esperado en la columna 5 del JSON. 01:25:50
La columna 5, 1, 2, 3, 4, 5, esta A, B, no se la esperaba. 01:25:57
Y aquí, de hecho, lo que tendría que aparecer es, en lugar de un error, tendría que aparecer un JSON bien formateado. 01:26:01
Aquí lo que me doy cuenta es que esto no es una propiedad en sí mismo. 01:26:07
O sea, es una propiedad, pero es un texto. 01:26:11
Y ahora ya sí que aparece correctamente. 01:26:14
Entonces, es importante, cuando estamos generando propiedades de objetos, garantizar que no hay ninguno que está en rojito. 01:26:17
Ya, perdona. 01:26:25
Vale, nada. 01:26:27
Y el siguiente sería cats. 01:26:28
Pondríamos otra vez un JSON. 01:26:32
Y entre cochete, bueno, yo creo que he acabado. 01:26:36
Así tal cual, ¿verdad? 01:26:40
Eso sí. 01:26:41
Es un array que contiene dos objetos, este y este. 01:26:43
Como vemos en el editor visual está todo correcto, con lo cual, listo. 01:26:47
Y nos queda una última cosa más, ¿verdad? 01:26:51
Sería a live. 01:26:53
Sería booleano con valor verdadero. 01:26:57
Perfecto. 01:27:01
¿Vale? 01:27:06
Y ahora, ¿qué es lo que va a pasar con estos dos debugs cuando yo le dé al injector? 01:27:08
Van a salir, bueno, diferentes. 01:27:16
Unos saldrán un poquito diferentes. 01:27:19
Uno sale todo agrupado entre el payload y otro sale... 01:27:22
Ah, no, en estos, perdona. 01:27:25
El de payload va a dar un error. 01:27:27
Exactamente, va a decir que está indefinido. 01:27:30
Que no existe payload. 01:27:32
Y, sin embargo, en MSG aparecerán todas las propiedades sueltas. 01:27:34
Vamos a comprobarlo. 01:27:38
Actualmente, el mensaje de debug de arriba aparece que payload está indefinido. 01:27:41
Y el segundo, junto con el MSG ID, que es la trazabilidad, 01:27:47
aparecen el resto de los campos de las propiedades que hemos ido añadiendo. 01:27:52
¿Vale? 01:27:57
Perfecto. 01:28:02
Vale. 01:28:06
El cuarto. 01:28:07
El cuarto, de hecho, es casi fácil. 01:28:12
Si yo... 01:28:15
Bueno, ¿alguien lo quiere...? 01:28:16
No quiero masacrar esta forma de hacerlo. 01:28:18
¿Quieres animar a hacerle el cuarto? 01:28:24
Vale. 01:28:27
¿Vale? 01:28:36
Venga, yo. 01:28:39
Me animo. 01:28:40
Soy modesto. 01:28:42
Vale, pues en el cuatro, bien, es quizá más fácil que el otro. 01:28:44
Crear un widget y, dentro de la propiedad payload, elegir el formato JSON. 01:28:48
Que, de hecho, ha sido del mensaje anterior. 01:28:57
Lo he copiado. 01:29:01
Y ahora lo vamos a editar para quitar el MSG ID. 01:29:02
Ya estaría. 01:29:06
Y ahora lo que nos pedía el ejercicio es que comparemos entre qué pasa cuando inyectamos este y cuando inyectamos este. 01:29:14
Supuestamente solo con los que aparecen el mensaje completo. 01:29:23
Y aquí se ve como que en este todo cuelga de payload excepto el MSG ID. 01:29:28
Mientras que en este está todo al mismo nivel. 01:29:36
MSG ID, name, middle name, age y demás. 01:29:39
Está todo como agrupado colgando de mensaje. 01:29:42
Vale. 01:29:50
Siguiente. 01:29:53
Vale, ¿alguien se animó? 01:30:04
No, no es bien. 01:30:13
¿Marcos? 01:30:15
Pues a ver. 01:30:24
Dice, inserta un nuevo nodo INYECT que genere un timestamp en la propiedad payload cada segundo a partir del segundo 20 de ejecución. 01:30:26
Es decir, genera un nodo INYECT que genera un timestamp. 01:30:36
No nos dice nada del topic, con lo cual yo lo voy a eliminar. 01:30:40
Y una vez por segundo, a partir del segundo 20, que para este ejercicio se lo voy a poner a partir del segundo 5 para no estar mucho rato mirando. 01:30:44
Y cada segundo. 01:30:57
Vale, lo tenéis así. 01:30:59
Pero con un 20 aquí, imagino. 01:31:00
¿Vale? ¿Vamos a eliminar esto? 01:31:04
Sí, así es. 01:31:05
Limpiamos aquí para que no nos moleste. 01:31:09
Hago clic. 01:31:11
Contamos hasta 5. 01:31:12
2, 3, 4 y 5. 01:31:14
Y a partir de ahí cada segundo nos tiene que mostrar esto. 01:31:18
Vale. 01:31:22
Este, como decía Jesús, nos va a estar molestando todo lo que queda de ejercicios. 01:31:23
Así que me vengo aquí y lo voy a desalguir. 01:31:29
Y creo que no nos pide nada más. 01:31:35
A ver. 01:31:36
¿Cuánto he salido? 01:31:37
Hasta que no hagas el de hoy. 01:31:42
Vale. 01:31:43
Espera, espera, que me he dejado la mitad del ejercicio por hacer. 01:31:44
Porque lo que nos pide también es que en el estado queremos que nos aparezca también esto. 01:31:50
Vale, esperamos 5 segundos. 01:32:00
Ahí está. 01:32:03
Vale. 01:32:07
Vale. 01:32:14
Con esta subsalida nuevo de bug que hemos tenido que soltar, 01:32:15
espero que la gente no se conozca, 01:32:18
tenemos ahí también el mensaje de estado. 01:32:20
Siempre preferido generarse el timestamp en esta propiedad. 01:32:22
Vale. Pues, nada. 01:32:28
O sea, ¿qué sucede si en lugar de generar el timestamp en payload lo generamos en topic? 01:32:29
Y aquí generamos, por ejemplo, un true. 01:32:38
Pues, bueno, pasa lo esperado. 01:32:43
Que cada segundo, a partir del quinto, va a aparecer un true. 01:32:47
Y solo se va a mostrar un true en ambos. 01:32:52
Si queremos que se muestre el timestamp que ahora está en topic, 01:32:54
pues una de dos. 01:32:59
O lo cambiamos aquí para que se muestre en los dos sitios. 01:33:00
O aquí para que se muestre en la parte de abajo. 01:33:04
Vale, ahí tenemos. 01:33:13
En la ventana de curación que aparecerá el payload 01:33:14
y en la parte de abajo de status aparece lo que es el timestamp. 01:33:20
Vale, arrastra... 01:33:27
¿Alguien quiere hacer el 6? 01:33:28
¿No? ¿Vale? 01:33:30
Arrastra... ¿Alguien quiere hacer el 6? 01:33:31
¿No? ¿Vale? 01:33:48
Bueno, este nos pide que cojamos el Json, este no, este, y nos pide que lo configure 01:33:49
solo para que la salida de depuración, con lo cual yo voy haciendo esto, que la salida 01:34:09
de depuración, nos muestre solo la edad del asustado. ¿Vale? No debe mostrarse más 01:34:17
información. ¿Quién me ayuda? 01:34:24
Pues si le das al Injet... 01:34:29
Ah, sí, tal cual, con el mensaje completo, ¿verdad? 01:34:34
Sí, le das al Injet y haces clic en el objeto que has recibido. 01:34:36
Espera, dame un segundo para que muteo a Darío, debe ser. No, Darío, eres tú. 01:34:43
Espera, es que hay alguien hablando. 01:34:50
Vale, perdona. Sí, continúa. 01:34:54
Sí, y le das al objeto que has recibido. 01:34:57
Y ahí si te metes en el gato, en el nombre del gato, que ya no me acuerdo cuál era. 01:35:02
¿El otro o el segundo? 01:35:07
Ah, es Charlie, sí, correcto. 01:35:09
Sí, es Charlie. Y le das a Copy Path, a copiar. 01:35:10
Correcto. 01:35:17
Y lo pegas ahí, en vez del Pay Now, le das a Done, Deplay, y ya suele tener que salir esto. 01:35:19
¿Cuál es la parte de ahora? 01:35:28
Los tres. 01:35:29
Vale, perfecto. 01:35:32
Vale, el siete. 01:35:34
Vale, con esta parte estoy haciendo como mucho hincapié porque luego es como... 01:35:38
O sea, tenemos que tener bastante soltura a la hora de jugar con los Injects y con los Debugs. 01:35:42
Bueno, este no lo voy a hacer, ¿vale? Este no lo voy a saltar. 01:35:52
Que básicamente es reemplazar los nodos anteriores con Links In y Links Out. 01:35:55
No lo voy a hacer a no ser que alguien le haya dado problemas. 01:36:03
Entiendo que a todos los que lo habéis intentado os ha salido bien. 01:36:06
Vale, el ocho igual. 01:36:14
Pues esto es ejercicio un poco que os voy a dejar para vosotros. 01:36:16
Que sería el de, digamos, maquetar todo esto un poquito. 01:36:19
Como os estoy haciendo aquí con el comentario de vez en cuando. 01:36:23
En el Inject, que no se llame Inject, sino que sea, por ejemplo, JsonGatos. 01:36:26
Y que aquí en lugar de aparecer msg.payload.cache, tal, tal, tal, tal. 01:36:33
Que aparezca solo edad de Charlie. 01:36:37
Vale, esto es lo que nos pide el ejercicio ocho. 01:36:46
Para dejarlo un poquito bonito. 01:36:50
Vale. 01:36:53
El BT1. 01:36:54
¿Quién se anima? 01:36:58
Vamos a ver lo que nos pide. 01:37:03
Dice desde un nuevo nodo Inject y Debug interconectados. 01:37:04
Voy a coger esto. 01:37:08
Un Inject y un Debug interconectados. 01:37:09
Consigue que al generar un mensaje que contenga únicamente una propiedad que contenga timestamp. 01:37:16
Se muestre este en la vista de curación. 01:37:21
Y el texto mensaje recibido en su mensaje de estado. 01:37:24
¿Alguien lo tiene resuelto este? 01:37:29
¿Marcos? 01:37:31
¿Alguien se anima? 01:37:42
Sí, Jorge, a ver. 01:37:43
Sí, sí, dime. 01:37:47
Sí. 01:37:52
Hola, no sé si estaba haciendo algo, pero sí. 01:37:58
Ah, vale. 01:38:00
Soy Javier. 01:38:01
A ver, sí, lo haces como has hecho otro ejercicio anterior. 01:38:02
Y en la parte de nodo de status, le pones que te ponga un mensaje y le escribes una cadena de texto que ponga mensaje recibido entre comillas. 01:38:05
Aquí. 01:38:15
Hay. 01:38:16
Mensaje. 01:38:17
MSG. 01:38:19
Perdón. 01:38:23
Y hay entre comillas mensaje recibido. 01:38:25
No va a funcionar esto. 01:38:28
O quizá en expression, ¿no? 01:38:30
Eso es. 01:38:32
Esto ya lo veremos, ¿vale? 01:38:34
En JSONata. 01:38:37
Pero por ahora que sepáis que aquí podríamos poner directamente un texto mensaje recibido. 01:38:38
Podríamos concatenarlo, podríamos hacer apariciones aritméticas, podríamos hacer un montón de cosas. 01:38:47
Y este, tal y como pasaba con los objetos de tipo JSON, tiene un validador. 01:38:52
¿Vale? 01:38:58
Podemos comprobar si lo que llega, es decir, dado un determinado payload, podemos ver cuál es el resultado que va a producir este JSONata. 01:38:59
En este caso, como es un literal, pues da igual cuál sea el payload que siempre va a generar mensaje recibido. 01:39:09
Ok. 01:39:17
Vamos a despegar. 01:39:18
Y vamos a comprobar que cuando yo mando un timestamp, efectivamente, la salida por el puerto de depuración es el número que estábamos esperando. 01:39:19
Pero por el nodo de status aparece el texto literal mensaje recibido. 01:39:28
Vale. 01:39:38
Y el último. 01:39:39
Perdón. 01:39:40
¿Qué validador has puesto? 01:39:41
¿Dónde? 01:39:46
Ninguno. 01:39:51
Ahí no has puesto nada. 01:39:52
Has dejado lo de hello world y ya está, ¿no? 01:39:53
Sí, sí, sí. 01:39:56
Porque esto es, por si tú quieres, imagínate que quisieras... 01:39:57
Claro que hay que... 01:40:00
No quiero entrar aquí ahora, pero tú aquí pegas el payload de ejemplo de tu sensor, de tu cacharro. 01:40:01
Y vas jugando con diferentes expresiones JSONata para ver si el resultado es el adecuado. 01:40:07
Entonces, en este caso, como es un literal, vamos a mostrar un literal independientemente de lo que aparezca en tu posazón. 01:40:14
Si aquí pones otro dato... 01:40:21
Uy, perdón, prueba 2.17. 01:40:24
También va a salir mensaje recibido. 01:40:28
Vale, vale. 01:40:32
Esto lo que te permite es comprobar que lo que has puesto aquí es correcto. 01:40:33
Y obtienes el resultado esperado. 01:40:37
Pero realmente no estás validando nada. 01:40:41
Ahora no. En este no, porque es un literal. 01:40:44
Esto lo que nos permite es... 01:40:46
Imagínate que tú quieres... 01:40:47
De un churro de JSON que te lleva, quieres coger un valor y multiplicarlo por otro. 01:40:50
De los que forman parte del propio JSON. 01:40:56
¿Vale? 01:40:59
Entonces, si tú tienes que estar escribiendo el JSONata, inyectando el mensaje, volviendo aquí y ver el resultado, no sé qué, tardas un montón de tiempo. 01:41:00
Entonces, lo más cómodo es pegar aquí el JSON entrada y aquí, con las expresiones, vas comprobando qué es lo que te llega. 01:41:08
¿Vale? 01:41:18
Y qué resultado produce. 01:41:19
Cuando ya lo tengas listo, pues hasta le das a Done y acabado. 01:41:20
O sea, es una forma de participar rápidamente. 01:41:24
Pero esto ya lo veremos con calma, el JSONata. 01:41:26
Jorge, perdona. El BT1 se puede hacer también de otra manera, ¿no? 01:41:30
O por lo menos a mí me ha salido de otra manera. 01:41:36
Ahí en vez de poner eso, he puesto MSG. 01:41:40
He puesto en mi caso Topic y me he ido al Injet. 01:41:44
Ah, correcto. 01:41:50
Bien pensado. 01:41:51
Sí, perfecto. Y así también funciona. 01:41:54
Vamos a comprobarlo. 01:41:57
Estupendo. 01:42:00
Sí, muy bien resuelto. En esta no había caída. 01:42:02
Y además esta se puede hacer con cosas que habíamos explicado por ahora. 01:42:09
Y el BT2. 01:42:15
Yo el BT2 he intentado, pero me he dado un error en el sonata. 01:42:20
No sé qué estoy haciendo mal. 01:42:26
Basándonos en este, por lo cual me voy a coger este Injet, que es el que está aquí. 01:42:29
Es el que inyecta, de hecho, antes de hacer nada voy a pasarlo tal cual y que me muestre el mensaje completo. 01:42:38
A ver lo que tenemos. 01:42:47
Efectivamente este es el que en la misma jerarquía en la que se muestra el ID de mensaje, 01:42:49
aparece en la misma jerarquía en la que se muestra el ID de mensaje. 01:42:55
Sin usar nodos adicionales, es decir, solo con este Injet y este debug, 01:43:02
queremos que se muestre la diferencia entre Alice y Bob. 01:43:08
La edad de Alice, ¿cuál es? 01:43:13
Es esta propiedad, ¿no? 01:43:18
Es 30, que corresponde con la propiedad Age. 01:43:21
Pues vale, vamos a jugar aquí un poquito. 01:43:24
Este es el que requiere. 01:43:26
Utilizar los Jotaspression. 01:43:28
Entonces vamos a decirle que queremos depurar... 01:43:30
Esperad, voy a hacer una cosa, para que veáis lo que explicaba antes. 01:43:35
Voy a coger esto. 01:43:39
Y vamos a decirle que queremos depurar... 01:43:41
Esperad, voy a hacer una cosa, para que veáis lo que explicaba antes. 01:43:46
Voy a coger esto. 01:43:49
He cogido todo el mensaje completo. 01:43:53
Y así podemos ver qué es lo que hace el Jotasonata. 01:43:55
Y entonces, me vengo aquí, y en el test, en el mensaje de ejemplo, 01:43:58
voy a pegar justo lo que me va a llegar a mí, incluido el msgID. 01:44:04
Voy a ordenarlo para que quede un poquito más claro. 01:44:09
Un rato por ahí, otro rato por ahí, y aquí se tiene que arreglar ahí. 01:44:16
Bien con esto, ¿no? 01:44:27
Digamos que yo aquí en el test pongo lo que me va a llegar, 01:44:32
y ahora aquí puedo empezar a hacer ciertas operaciones. 01:44:36
Por ejemplo, si yo quiero seleccionar la edad de Alice, 01:44:40
pues como ella forma parte del propio mensaje, yo puedo probar con age. 01:44:46
Y ya veis que el resultado de escribir un Jotasonata, una expresión de Jotasonata, 01:44:53
poniendo solo el nombre de una propiedad, ya me devuelve que es 30. 01:45:01
Si yo lo dejara así, aparecería en la depuración este 30. 01:45:05
Esto no cambia mucho con respecto a cuando yo cogía objeto.propiedad en la parte de arriba. 01:45:08
La cuestión es que ahora lo que me piden es otra cosa, 01:45:15
quieren que haga una operación aritmética. 01:45:17
Dicen, obtén la diferencia de edad entre Alice, que es la persona, y Bob, que es su gato. 01:45:19
Entonces, ¿cómo restamos? 01:45:26
Bueno, pues con el símbolo menos. 01:45:29
¿Y qué queremos restar? 01:45:31
Pues el otro campo. 01:45:33
Pues yo me puedo venir aquí, ¿vale? 01:45:37
Para no tocar nada con el teclado. 01:45:39
Me vengo aquí, me vengo aquí. 01:45:41
Y esto es lo que quiero restar, ¿no? 01:45:43
Voy a copiar este valor. 01:45:46
Perdón, el valor no. 01:45:49
Disculpad, quiero copiar la ruta. 01:45:50
¿Vale? ¿Tiene sentido? 01:45:57
La edad menos la edad del gato. 01:46:00
El elemento cero del array gatos.h. 01:46:05
Y aquí ya tendría parcialmente el resultado. 01:46:10
Aquí tengo la diferencia de edad real entre Alice y su gato Bob. 01:46:13
Ahora nos dicen, bueno, pero comparativamente, ¿cuánta diferencia de edad tienes 01:46:20
asumiendo que los gatos cada año que pasan, en realidad, cumplen cuatro? 01:46:26
¿Vale? A partir de aquí, ¿alguien se le ocurre? 01:46:31
Multiplicar ese valor por cuatro. 01:46:38
Está de acuerdo. 01:46:41
Entre paréntesis. 01:46:42
Bueno, en realidad, como tiene preferencia la multiplicación. 01:46:44
Pero sí que es cierto que a mí soy muy fan de los paréntesis. 01:46:47
Así que se lo vamos a poner igualmente. 01:46:51
Pues ya está. 01:46:54
La edad, que es esta propiedad, menos la edad del primer gato multiplicado por cuatro 01:46:55
nos da un resultado de dos años de vida. 01:47:02
Que tiene más, en teoría, Alice que Bob. 01:47:05
Esto se podría complementar con esto, por ejemplo. 01:47:11
La diferencia de edad es... 01:47:16
Ahí tendríamos una concatenación de un texto con una operación aritmética de propiedades del objeto que nos ha llegado. 01:47:34
Pues esto sí es potente, ¿eh? 01:47:47
Sí, sí, sí. Pueden hacer cosas muy chulas. 01:47:49
Lo que pasa es que yo le he metido la copia de lo que salía del MSG sin formatearlo, como lo has formateado tú para que se viera. 01:47:53
Y no me coge el resultado. O sea, le pongo age y no me saca el tres de la edad. 01:48:02
¿Puede ser que hayas cogido el jotazón completo en lugar de...? 01:48:10
Claro, sí. 01:48:13
Ah, porque esto está basado en el objeto que no está dentro de payload. 01:48:15
En el objeto que no está dentro de payload. 01:48:23
Claro, tenemos dos copias del jotazón este. Uno que va dentro de payload y otro que va a payload, que es el que he cogido yo para este ejercicio. 01:48:25
¿Me enseñas el formateo que te has pegado? A ver si... 01:48:37
Sí, sí. Mira, espera. Este es el... 01:48:40
Vale, este es el otro diferente. 01:48:45
Si yo cojo este y lo pego aquí... 01:48:48
Vale, aquí vamos a poner un debug. 01:48:53
Y quiero el mensaje completo. 01:48:58
No, perdón. Bueno, sí. Quiero el mensaje completo. 01:49:01
Voy a generar primero un mensaje que aparezca todo esto para poder coger la ruta. 01:49:05
Y ahora copio la ruta de aquí. 01:49:12
Y con esto ya podemos empezar a generar el jotaspersion. 01:49:14
Lo pongo aquí. 01:49:19
Y, bueno, justamente aquí ya puedo poner payload age y voy a probar. 01:49:21
A ver qué es lo que sucede. 01:49:25
Vale, y aquí ya tenemos que es esto. 01:49:28
Pero yo no quiero eso. Yo quiero payload age menos esto. 01:49:30
Entonces es menos esto multiplicado por 4. 01:49:39
Y ahora ya aquí tenemos nuestro 2, que es el resultado de esta expresión. 01:49:48
¿Por qué le pones las llaves? 01:49:54
Ah, porque está dentro de otro... Es como otro array. Sí. Sí, ¿no? 01:49:57
Ah, los corsetes. 01:50:01
No, no. Las llaves justamente que pones antes del payload age. 01:50:04
No, es un paréntesis. 01:50:08
Es un paréntesis. 01:50:10
Sí, sí, sí. Vale, vale. 01:50:11
Se podría quitar, como hemos visto antes, pero me gusta cerrar las operaciones anémicas unas en otras. 01:50:12
Sí, sí. Es más fácil de lo que yo pensaba, sí. 01:50:19
Este es el PT2 sin payload. 01:50:22
Y este es PT2 con payload. 01:50:27
Entonces, lo que voy a hacer ahora es... Voy a venir aquí. Voy a exportar esto. 01:50:32
Perdona, Jorge. 01:50:40
Sí. 01:50:41
Para unir el texto al resultado numérico, ¿cómo lo harías? Porque me sale aquí un error. 01:50:42
Ah, ahora te lo digo. Déjame que comparta esto en el chat. 01:50:48
¿Se pueden subir ficheros al chat? 01:50:51
Sí, creo que sí, ¿no? 01:50:55
Entiendo que sí, sí. 01:50:56
Vale, un segundito. Lo voy a exportar como fichero mejor, que seguro que queda más... 01:50:57
Current flow. 01:51:02
Vale. Download. 01:51:05
Esto, Jorge, ¿lo puedes subir a la página del curso? 01:51:10
Ah, sí, mejor. 01:51:14
Vale. 01:51:17
Sí, mejor. 01:51:18
Vale. 01:51:20
Un segundito. 01:51:22
Vale, pues en ese caso lo voy a subir luego, ¿vale? 01:51:25
Vale. 01:51:29
Vale, y entonces, respondiendo a la pregunta de cómo concatenar. 01:51:31
Aquí, por ejemplo, en este último, nos sale un 2. 01:51:34
Pero yo quiero que aparezca un texto descriptivo. 01:51:36
¿Cómo hago? 01:51:39
Pues me vengo aquí. 01:51:40
Y yo lo que quiero hacer es... 01:51:42
Tengo que poner el texto descriptivo, ¿vale? 01:51:45
Diferencia. 01:51:47
Es, ¿vale? Por ejemplo, puntos como el espacio. 01:51:49
Pongo un ampersand. 01:51:53
Que el ampersand es como se concatena en cosas en Jsonata. 01:51:55
Y después es importante que se concatene solo una sola cosa. 01:51:59
De forma que tenemos que rodear de paréntesis todo el conjunto de la expresión. 01:52:03
Vale, vale. 01:52:09
Porque quizá era eso lo que te estaba fallando. 01:52:10
Ah, sí, sí, era eso. 01:52:12
Ahí lo tenéis. 01:52:14
Diferencia es 2. 01:52:15
Si yo modifico aquí la edad del gato. 01:52:19
Y le pongo que Bob ya no tiene 7 años, sino que tiene 3. 01:52:22
Despego. 01:52:28
Pues ahora la diferencia será 18 años. 01:52:29
¿Vale? 01:52:36
Bueno, pues si os parece, se nos ha pasado un poco la mitad de la clase. 01:52:37
Aprovechamos ahora para hacer un pequeño descansito de 5 minutos. 01:52:42
Y nos vemos a las 7 en punto. 01:52:46
Ya está, perfecto. 01:52:51
Vale, ahora. 01:52:52
Muy bien. Venga, pues, hasta ahora. 01:52:53
A ver. 01:53:13
Libre. 01:53:29
Seca. 01:53:31
¿Me ha gustado? 01:53:43
Dime. 01:53:45
Me ha gustado, ¿eh? 01:53:47
Pues mira, es que le habíamos hecho una operación en el apartamento abierto, 01:53:50
y entonces había que cerrarla. 01:53:54
Lo han dejado sin cerrar, y he tenido que poner yo a la garrafa. 01:53:56
Y claro, le he puesto papel celos. 01:53:58
Un poco aguantará, pero... 01:54:00
No. 01:54:02
No, no, no, no, no. 01:54:03
No, no, no, no, no. 01:54:04
No, no, no, no, no. 01:54:05
No, no, no, no, no. 01:54:06
No, no, no, no, no. 01:54:07
No, no, no, no, no. 01:54:08
No, no, no, no, no. 01:54:09
No, no, no, no, no. 01:54:10
No. 01:54:11
Claro que sí. 01:54:12
¿En serio? 01:54:13
Pues lo pago, sí. 01:54:14
Pero usted... 01:54:15
Ay, Dios mío, Blanca. 01:54:17
Ay, Dios. 01:54:19
Blanca. 01:54:20
Tu padre te está tomando el pelo a dos manos. 01:54:21
¿Te lo estaba tomando en serio? 01:54:26
Pues hija, empieza a tomarte la vida un poco más a forma, cariño. 01:54:32
Pues no, que Aitana se ha asustado. 01:54:37
Pues he tenido un mareo. 01:54:40
Pero un mareo en el coche y he tenido el hijo muy mal a cara y ella se ha asustado y no 01:54:42
quería... 01:54:50
Chicos, hay un micro abierto. 01:54:51
...que habrá llamado a la tía alguna vez. 01:54:53
Y alguna vez le habrá dado ordenes de que llamara a tu padre. 01:54:56
Estoy en casa. 01:55:00
De hospital nada. 01:55:06
Yo no vuelvo a estar en un hospital, no te preocupes. 01:55:08
Exactamente. 01:55:13
Me muero en mi cama y todo arreglado. 01:55:17
Me muero en mi cama y todo arreglado. 01:55:20
...que hueles con él. 01:55:27
Una espalda, otra espalda, una espalda. 01:55:30
Huele un trozo de... 01:55:33
Es un perro. 01:55:40
Es un perro. 01:55:41
Es un perro. 01:55:45
Yo sé, ¿no? 01:55:56
Que a mí me quedan esas cosas solamente de que... 01:55:57
Pues no, un mareo. 01:55:59
Pues de nosotros es un mareo que queda negativo. 01:56:02
Pero aquí ya está todo el mundo llenado. 01:56:06
Todavía creo que voy a morir. 01:56:09
Pero la primera que me acorde es que me he puesto a salir de ahí. 01:56:11
Pero eso porque... 01:56:18
¿Qué? 01:56:28
No, papá, para ti. 01:56:30
Para ti, papá. 01:56:32
Yo ya estoy cansada. Estoy cansada. 01:56:35
¿Cómo que ya no lo pienso? 01:56:45
¿Cómo que no lo pienso? 01:56:47
Que no estoy dispuesta a regresar. 01:56:48
¿Cómo que quiero ir más lejos? 01:56:51
¿En serio me iré más lejos? 01:56:54
No, por lo visto, por lo visto no me iré más lejos. 01:56:57
No me voy a ir más lejos porque tengo que ir más lejos. 01:57:01
Por eso no voy a ir más lejos. 01:57:05
No te preocupes que no te encuentras tu padre acá. 01:57:06
A mí solamente. 01:57:09
Subtítulos realizados por la comunidad de Amara.org 01:57:30
Subtítulos realizados por la comunidad de Amara.org 01:58:00
Hola. 01:58:30
¿Hola? ¿Estáis para ahí? 01:59:01
Sí, sí. 01:59:07
Ah, vale, vale. 01:59:08
Sí. 01:59:12
Sí. 01:59:30
Vale, ya tenéis subido en la plataforma en una nueva carpeta. 01:59:56
Y los efectos resueltos del primer tema. 02:00:00
Vale. 02:00:09
Bueno, pues nada. 02:00:10
Saquemos... 02:00:11
Este tema ya lo podemos cerrar. 02:00:13
Y vamos a abrir el tema 2. 02:00:17
Lo tenemos ya. 02:00:22
Ahí. 02:00:31
Sí. 02:00:34
Vale. 02:00:36
Sí, pregunta José Manuel que si incluyendo los bonos. 02:00:37
Sí, están incluidos los bonos. 02:00:39
¿Es lo mismo que habéis visto que estaba reformando? 02:00:41
Pues eso es lo que os he mandado. 02:00:44
Los bonos y el segundo resuelto de las dos formas. 02:00:46
Uno con el JSON que incluye Payload y otro sin Payload. 02:00:48
Vale. 02:00:55
Venga, pues. 02:00:57
Vamos a ver. 02:00:59
En este tema la idea es tratar los 3-4 nodos más relevantes. 02:01:03
De hecho, con los cuales se puede hacer casi todo el trabajo. 02:01:12
De la parte de lógica de Node-RED. 02:01:16
Es decir, nosotros por lo general cuando trabajamos con Node-RED. 02:01:20
Recibimos información de una fuente de información. 02:01:23
Realizamos una serie de procesos. 02:01:26
Una serie de lógicas que nos permiten manipular esa información. 02:01:28
Y tomar una decisión. 02:01:31
Y por último generamos una acción que recibe alguien que es capaz de hacer cosas. 02:01:33
Podemos hacer en base de datos. 02:01:38
O mover motores. 02:01:39
O encender LEDs. 02:01:40
O lo que sea. 02:01:42
Vale, pues. 02:01:43
Esos nodos intermedios los que toman decisiones. 02:01:44
Son los siguientes. 02:01:46
Son el nodo Change. 02:01:47
Que nos permite modificar ciertas partes del interior de un JSON. 02:01:49
Lo vamos a ver todos con mucho más detalle. 02:01:55
El Switch. 02:01:58
Que sería el equivalente a un If. 02:01:59
En programación tradicional. 02:02:01
Evaluamos un mensaje. 02:02:03
Y una de las propiedades la consultamos. 02:02:06
Existe no se que. 02:02:09
El contenido del payload.edad es mayor de 18. 02:02:11
El día es mayor que 15. 02:02:16
Y en función de si el resultado es sí o no. 02:02:20
Sacar la información por un sentido. 02:02:23
Por una salida o por la otra. 02:02:25
Luego tenemos el nodo Función. 02:02:29
Que esto requerirá que aprendamos un poquito de lo básico de programación en Javascript. 02:02:32
Porque en su interior directamente ya no hacemos programación gráfica. 02:02:38
Sino que en su interior directamente vamos a poner trozos de código de Javascript. 02:02:43
Afortunadamente todos los que estáis aquí ya os habéis pegado con Arduino, con SP32. 02:02:48
O con Promocionación C. 02:02:53
Y el Javascript que vamos a ver es muy similar a C. 02:02:55
Con lo cual confío en que no supondrá mucha dificultad. 02:03:00
Y estas son las funciones que vamos a ver en este segundo tema. 02:03:06
Sin embargo, antes de empezar. 02:03:13
Os tengo que contar algo que es un poco lioso. 02:03:16
Digamos que aparte de... 02:03:21
La información generalmente en NodeRED. 02:03:24
Se transmite, como ya hemos visto. 02:03:27
A través de mensajes que pasan de un nodo a otro a través de un cable. 02:03:29
Esto es lo que les hemos estado. 02:03:33
Sin embargo. 02:03:35
Existe otra forma de que los diferentes nodos se comuniquen entre sí. 02:03:37
De igual forma que dos funciones en C. 02:03:43
Pueden comunicarse entre sí. 02:03:46
Bien mediante el paso de parámetros. 02:03:48
Que es una de las formas. 02:03:51
O bien mediante el uso de variables globales. 02:03:53
Por así decirlo. 02:03:56
No sé si alguien se ha perdido un poco con esta parte. 02:03:57
Que necesita que explique un poco más el tema. 02:04:01
¿Os entiende bien lo que quiero decir? 02:04:04
¿Sí? ¿No? 02:04:13
¿Hola? 02:04:14
Bien. 02:04:16
Entonces. 02:04:23
NodeRED proporciona tres tipos de variables diferentes. 02:04:25
Tenemos las variables de tipo global. 02:04:31
Que estas son como las de C. 02:04:34
¿Vale? Básicamente. 02:04:38
Las de Flow. 02:04:40
Bueno, las globales son variables que tú las estableces. 02:04:42
En un punto de tu código. 02:04:45
Y todas las pestañas y todos los elementos de NodeRED. 02:04:48
Pueden acceder a esa información. 02:04:53
Las variables de Flow. 02:04:57
Son aquellas que solo son accesibles para los nodos que están presentes. 02:04:59
Dentro de una misma pestaña. 02:05:05
De hecho podríamos tener aquí la variable. 02:05:09
Yo que sé. 02:05:11
Contador. 02:05:13
Y que fuera un 7. 02:05:14
Y aquí la misma variable de tipo Flow. 02:05:16
Que fuera contador también en su nombre. 02:05:19
Y que tuviera un valor 18. 02:05:21
Que serían dos variables diferentes. 02:05:23
¿Vale? 02:05:26
Y por último. 02:05:28
Tenemos las funciones context. 02:05:29
Que las context las vamos a ver luego con un poco más de detalle. 02:05:32
Vale. 02:05:41
Para liar un poco más las cosas. 02:05:42
Resulta que el lugar en el que se almacenan estas variables. 02:05:44
Estos tres tipos de variables. 02:05:51
Las globales. 02:05:52
Las de Flujo. 02:05:53
Y las de Contexto. 02:05:54
Se llama a su vez Contexto. 02:05:55
¿Vale? 02:05:57
Aquí yo lo siento por los creadores de NodeRED. 02:05:58
El día que decidieron esto. 02:06:02
Pero no tuvieron un buen día. 02:06:04
¿Vale? 02:06:06
Esto es un poco lioso. 02:06:07
Pero bueno. 02:06:08
Que sepáis que las variables de Contexto. 02:06:09
Están dentro del Contexto. 02:06:11
Pero no todo lo que está en Contexto. 02:06:12
Son variables de Contexto. 02:06:14
Siento el trabalenguas. 02:06:16
¿Vale? 02:06:19
Es decir, Contexto es el lugar donde se almacenan las variables. 02:06:20
O la información que se transmite de unos nodos a otros. 02:06:23
Sin tener que pasar por cables. 02:06:26
Por hilos. 02:06:27
Y dentro del Contexto. 02:06:28
Hay tres tipos de variables. 02:06:29
Las globales. 02:06:31
Que se comparten para todo el mundo. 02:06:32
Las de Flujo. 02:06:33
Que solo se comparten en Flujo. 02:06:34
Y las de Contexto. 02:06:36
Que ya las veremos. 02:06:37
¿Vale? 02:06:38
Vale. 02:06:44
Vamos a comenzar buscando el nodo Change. 02:06:45
Y viendo un poco cuál es su comportamiento. 02:06:49
Por cierto. 02:06:58
Os voy a empezar a dar ciertos atajos. 02:06:59
Aquí ya está. 02:07:02
Esto lo conté el miércoles pasado. 02:07:03
Para buscar un nodo. 02:07:07
Pues yo puedo ponerme aquí a buscar. 02:07:08
¿Cuál es la lista? 02:07:10
O puedo. 02:07:11
Arriba a la izquierda. 02:07:12
Puedo escribir la parte de las palabras. 02:07:13
Con lo cual me aparecen solo. 02:07:17
Aquellos que empiecen por lo que he empezado a escribir. 02:07:18
¿Vale? 02:07:21
O incluso. 02:07:22
Que acaben en. 02:07:23
Si se acaban en G. 02:07:24
Pues me aparecerán. 02:07:25
Change. 02:07:26
Frames. 02:07:27
Y Trigger. 02:07:28
¿Vale? 02:07:29
Y una vez que lo encuentre. 02:07:30
Pues puedo ya. 02:07:31
Arrastrarla. 02:07:32
¿Vale? 02:07:33
Pero. 02:07:34
Yo normalmente. 02:07:35
Ni. 02:07:36
Ni cojo los nodos. 02:07:37
De aquí de la izquierda. 02:07:38
Y los. 02:07:39
Y los arrastro. 02:07:40
Y tampoco vengo aquí. 02:07:41
Y escribo la palabra para luego arrastrarla. 02:07:42
¿Vale? 02:07:45
Yo lo que hago. 02:07:46
Es. 02:07:47
Voy a usar este. 02:07:48
Es utilizar un atajo. 02:07:49
Que es. 02:07:50
Muy muy cómodo. 02:07:51
Que es. 02:07:52
Mientras mantengo apretada la tecla Control. 02:07:53
Hago click. 02:07:54
¿Vale? 02:07:55
Y esto me permite ya. 02:07:56
Aquí directamente. 02:07:57
Puedo ir elegiendo los nodos. 02:07:58
Puedo escribir. 02:07:59
Y al darle intro. 02:08:00
Ya se pega. 02:08:01
Y se pega donde yo quiero. 02:08:02
¿Vale? 02:08:03
Entonces aquí. 02:08:04
Depende un poco. 02:08:05
Si tenéis. 02:08:06
Si tenéis. 02:08:07
Si tenéis. 02:08:08
Si tenéis. 02:08:09
Si tenéis. 02:08:10
Si tenéis. 02:08:11
Si tenéis. 02:08:12
Si tenéis. 02:08:13
Si tenéis. 02:08:14
Depende un poco. 02:08:15
Si tenéis más habilidad con el ratón. 02:08:16
Que con el teclado. 02:08:17
Pues. 02:08:18
Lo ir sacando los. 02:08:19
Lo que aquí vas a sacar del esquema. 02:08:20
A lo mejor le resulte más cómodo. 02:08:21
Para aquellos aquellas. 02:08:22
Que tengáis más. 02:08:24
Comodidad. 02:08:25
A la hora de manejar el teclado y el ratón. 02:08:26
Pues. 02:08:28
Control click. 02:08:29
A mi me resulta maravilloso. 02:08:30
Que sepáis que tenéis este recurso más. 02:08:31
Vale. 02:08:37
¿Tenéis el nodo de. 02:08:39
De. 02:08:41
De change cargado. 02:08:42
Si. 02:08:43
Vale. 02:08:44
Si. 02:08:45
Si. 02:08:46
Si os fijáis. 02:08:47
En cuanto yo saco el nodo change. 02:08:48
Que aquí aparece como change. 02:08:49
En realidad él se cambia a set. 02:08:50
Vale. 02:08:51
Vamos a ver lo que permite hacer el nodo. 02:08:52
El nodo change. 02:08:53
Porque tiene. 02:08:54
Varias. 02:08:55
Varias. 02:08:56
Varias utilidades. 02:08:57
Antes de eso. 02:08:59
Si. 02:09:00
Quería comentaros. 02:09:01
Esto. 02:09:02
Que ahora ya va a tener sentido. 02:09:03
De todos los. 02:09:04
De todos los bloques. 02:09:05
De todos los nodos. 02:09:06
Que vamos a. 02:09:07
Que vamos a utilizar. 02:09:08
Siempre aparece. 02:09:09
Esta tabla de características. 02:09:10
Vale. 02:09:11
Entonces. 02:09:12
Lo primero que nos aparece es. 02:09:13
Una descripción. 02:09:14
¿De qué? 02:09:15
De. 02:09:16
De. 02:09:17
De. 02:09:18
De. 02:09:19
De. 02:09:20
De. 02:09:21
De. 02:09:22
De. 02:09:23
De. 02:09:24
De. 02:09:25
De. 02:09:26
De. 02:09:27
De. 02:09:28
De, etc. 02:09:29
Entonces. 02:09:30
Una descripción. 02:09:31
De lo que hace. 02:09:32
En este caso. 02:09:33
El nodo Change. 02:09:34
Pues, gestablece. 02:09:35
Cambia. 02:09:36
Elimina. 02:09:37
Mueve. 02:09:38
Propiedades del mensaje. 02:09:39
Variables de flujo. 02:09:40
O variables globales. 02:09:41
¿Vale? 02:09:42
Es decir. 02:09:43
Va-se de flow o las global. 02:09:44
Eh. 02:09:45
Esto es. 02:09:46
¿En qué lugar podemos encontrarlas? 02:09:47
¿Vale? 02:09:48
Cómo a veis. 02:09:49
Forman parte. 02:09:50
De la categoría. 02:09:51
De. 02:09:52
Función. 02:09:53
Eh. 02:09:54
Módulo común. 02:09:55
Para que aparezca. 02:09:56
¿Vale? 02:09:57
El tipo de nodo de flujo. 02:09:58
Eh. 02:09:59
Pues esto es lo que nos dice. 02:10:00
Si es una entrada o una salida. 02:10:01
O si es de procesamiento. 02:10:02
Es decir. 02:10:03
Si recibe información por un lado. 02:10:04
Y saca información por el otro lado. 02:10:05
Vale. 02:10:06
Propiedades de entrada. 02:10:07
Eh. 02:10:08
Esto. 02:10:09
Cuando antes expliqué. 02:10:10
La parte de MQTT. 02:10:11
Comenté. 02:10:12
Que yo podía. 02:10:13
En ciertos nodos. 02:10:14
Meterles un mensaje. 02:10:15
Y ese mensaje. 02:10:16
Cambiaba las propiedades. 02:10:17
De ese nodo. 02:10:18
En este caso. 02:10:19
Yo no puedo alterar. 02:10:20
El funcionamiento. 02:10:21
Y tampoco genera. 02:10:23
Propiedades. 02:10:24
Eh. 02:10:25
Raras a la salida. 02:10:26
Vale. 02:10:27
Por último. 02:10:28
El ámbito. 02:10:29
Nos dice. 02:10:30
Con qué tipo. 02:10:31
De. 02:10:32
De. 02:10:33
De mensajes. 02:10:34
Es capaz de trabajar. 02:10:35
¿Vale? 02:10:36
En este caso. 02:10:37
Este nodo change. 02:10:38
Es capaz de trabajar con MSG. 02:10:39
Que MSG. 02:10:40
Recordemos. 02:10:41
Es. 02:10:42
Eh. 02:10:43
Lo que se transmite. 02:10:44
A través. 02:10:45
De. 02:10:46
De. 02:10:47
De. 02:10:48
De. 02:10:49
De. 02:10:50
De mensajes. 02:10:51
Entonces. 02:10:52
Este. 02:10:53
A esto. 02:10:54
Dice. 02:10:55
Lo que se transmite. 02:10:56
A través de cables. 02:10:57
Vale. 02:10:58
Cuando yo. 02:10:59
Uno nodo. 02:11:00
Con otro. 02:11:01
Pues. 02:11:02
Ese cable. 02:11:03
Ese mensaje. 02:11:04
Que habíamos estado. 02:11:05
Jugando que era MSG. 02:11:06
Y habitualmente punto payload. 02:11:07
¿Vale? 02:11:08
Pues este. 02:11:09
Este. 02:11:10
Ese. 02:11:11
Este. 02:11:12
Nodo es capaz de trabajar con mensajes. 02:11:13
Que. 02:11:14
Que pasan por. 02:11:15
A través de él. 02:11:16
Y también. 02:11:17
Es capaz de manipular. 02:11:18
Eh. 02:11:19
Realidamente con el table. 02:11:20
Claro que es cierto. 02:11:21
Llegado a este punto. 02:11:22
Es muy importante que. 02:11:23
Tengáis. 02:11:24
La biblioteca completa. 02:11:25
La e-belita. 02:11:26
Que bueno. 02:11:27
¿Vale? 02:11:28
Entonces. 02:11:29
Yo voy a empezar. 02:11:30
Realizando lo más diferente posible. 02:11:31
!Que es esto! 02:11:32
¿Vale? 02:11:33
Es un. 02:11:34
Un sitio proxima. 02:11:35
Vale. 02:11:36
Es otro. 02:11:37
Es elு. 02:11:38
Es otra. 02:11:39
En realidad. 02:11:40
Es otro. 02:11:41
Vamos a. 02:11:42
Este. 02:11:43
Ese. 02:11:44
Ese es otro. 02:11:45
El otro. 02:11:46
Este es otro. 02:11:47
Ese es otro. 02:11:48
Y bueno vamos a. 02:11:49
Ehh. 02:11:51
Voy a colocar. 02:11:52
Maestros. 02:11:53
Vale mira un momento aquí. 02:11:54
Vamos como. 02:11:55
Bueno pero. 02:11:56
Eeee. 02:11:57
Vale colocarlo. 02:11:58
Una. 02:11:59
Mesal. 02:12:00
Es el propio. 02:12:01
Que opjuesto es el otro. 02:12:02
Lastime. 02:12:04
¿Vale? 02:12:05
Una mierda. 02:12:06
Pues listo. 02:12:07
Ahora. 02:12:08
Vamos a tätä. 02:12:09
Vamos aました que es la e. 02:12:10
He. 02:12:11
Museum Freeze. 02:12:12
Ahora. 02:12:13
Ahora. 02:12:14
Vamos a que es la. 02:12:15
Un maduración. 02:12:16
Ahora. 02:12:17
Es un maduración. 02:12:18
Vamos a que es la. 02:12:19
Una cosa. 02:12:20
A la pegada. 02:12:21
Una. 02:12:22
De ellas. 02:12:23
Vamos a empezar con Pelin. 02:12:24
O sea perdón es se. 02:12:25
Eses como su nombre indique. 02:12:26
Quiere decir. 02:12:27
Establecer. 02:12:28
Ehhhh. 02:12:29
Vale. 02:12:30
Y esto básicamente lo que hace es. 02:12:31
O bien. 02:12:32
Crea una propiedad que no existe. 02:12:33
Y le da un valor. 02:12:34
O bien. 02:12:35
Ehh. 02:12:36
Machaca una propiedad que ya exista. 02:12:37
Y le da otro valor. 02:12:38
Vale. 02:12:39
Vamos a poner aquí. 02:12:40
Por ejemplo. 02:12:41
Pola. 02:12:42
Y entonces. 02:12:43
Si yo. 02:12:44
No he tocado el nodo. 02:12:45
Están. 02:12:46
¿Por qué. 02:12:47
Yo lo que tendré. 02:12:49
Es que. 02:12:50
En payload. 02:12:51
Tendré. 02:12:52
Pues eso. 02:12:53
Un timestamp. 02:12:54
Y en topic. 02:12:55
Nada. 02:12:56
Pero. 02:12:57
Como aquí. 02:12:58
En el nodo. 02:12:59
Change. 02:13:00
Le estoy diciendo. 02:13:01
Que establezca payload. 02:13:02
El texto. 02:13:04
Pola. 02:13:05
En realidad. 02:13:06
Cuando yo despegue esto. 02:13:07
Y le vea. 02:13:08
Inyectar. 02:13:09
Que es lo que voy a obtener aquí. 02:13:10
En la salida. 02:13:11
Vale. 02:13:12
Especialmente. 02:13:13
La palabra. 02:13:14
Pola. 02:13:15
Vale. 02:13:16
Ahora. 02:13:17
Para sacar. 02:13:18
El payload. 02:13:19
Que ya existía. 02:13:20
Vamos a decirle. 02:13:21
Que me cree un topic2. 02:13:22
¿Alguien sabe qué va a pasar cuando le dé a. 02:13:23
A inyectar. 02:13:24
¿O alguien se atreve a pronosticarlo? 02:13:25
Que saldrá el timestamp. 02:13:26
Y nada más. 02:13:27
¿Verdad? 02:13:28
Y nada más. 02:13:29
Claro. 02:13:30
¿Por qué? 02:13:31
Porque solo es el payload. 02:13:32
No lo tiene la declaración. 02:13:33
Eso es. 02:13:34
Así que vamos. 02:13:35
A ver. 02:13:36
A ver. 02:13:37
Vale. 02:13:38
Efectivamente. 02:13:39
El payload. 02:13:40
Se ha mantenido. 02:13:41
Ha pasado a través de este. 02:13:42
De este nuevo nodo. 02:13:43
Sin ser modificado. 02:13:44
Topic. 02:13:45
También ha pasado sin ser modificado. 02:13:46
Mientras que topic2. 02:13:47
Se ha mantenido sin ser modificado. 02:13:48
Vale. 02:13:49
Efectivamente. 02:13:50
Así que vamos. 02:13:51
A ver. 02:13:52
A ver. 02:13:53
A ver. 02:13:54
A ver. 02:13:55
A ver. 02:13:56
A ver. 02:13:57
A ver. 02:13:58
A ver. 02:13:59
A ver. 02:14:00
A ver. 02:14:01
A ver. 02:14:02
A ver. 02:14:03
A ver. 02:14:04
A ver. 02:14:05
A ver. 02:14:06
Topic1 ha pasado sin ser modificado mientras que topic2 ha adquirido el valor que le hemos 02:14:07
indicado en este, en este mensaje. 02:14:09
Bien. 02:14:10
Con lo que hace SET. 02:14:11
O sea, SET o machaca o añade una nueva propiedad al objeto de mensaje. 02:14:14
Bien, hasta aquí, ¿no? 02:14:25
Por cierto, esto lo podemos hacer que sea... 02:14:29
Es decir, si yo aquí pongo otra vez, a ver qué coja el ejemplo de los datos. 02:14:32
Si yo quiero que haga Alicia, ya no sea Alicia, sino que sea Federica, pues establezco msg.payload.name 02:14:37
Federica. 02:15:05
Y el resto del objeto va a pasar tal cual. 02:15:06
Voy a eliminar. 02:15:09
Vale, y ahora vuelvo a tener aquí mi objeto de los gatos con todas las propiedades exactamente 02:15:10
igual que estaban, pero ahora esta propiedad pues ya no es Alicia, sino que es Federica. 02:15:16
Con lo cual puedo cambiar cualquier cosa dentro de cualquier cosa o puedo cambiar la edad 02:15:23
de un gato. 02:15:28
Si vengo aquí, modifico esto, vengo aquí y ahora esto, como es un valor numérico, pues 02:15:29
ahora el gato Darío va a tener un año. 02:15:37
Aquí tenemos que el gato Darío ha cambiado su edad a un año, a pesar de que el INYECT 02:15:44
decía otra cosa. 02:15:55
Por cierto, esto es algo que yo suelo hacer muy a menudo, sobre todo cuando empecemos 02:15:56
a jugar con bloques que cambian cosas, me gusta hacer esto, que es el mismo mensaje 02:16:02
verlo a través del nodo que estoy generando y tal cual. 02:16:09
De esta manera puedo comprobar que efectivamente lo que estoy mandando es lo que se ha modificado 02:16:16
con respecto a lo que ya había. 02:16:21
Aquí tenemos a Darío que tiene un año y sin embargo aquí Darío tiene 7. 02:16:25
Si esto lo opineo y lo elimino, pues aquí me queda más claro qué es lo que ha cambiado. 02:16:32
Bien, hasta aquí. 02:16:41
¿Alguna duda con esto? 02:16:43
¿Queréis dos o tres minutos para probarlo por vuestra cuenta? 02:16:45
Bueno, no es una pregunta. 02:16:50
Probarlo por vuestra cuenta. 02:16:52
Sí, perdona. 02:17:20
Estoy viendo que cuando le cambias el contenido a la propiedad, en el momento de cambiarlo 02:17:49
incluso le puedes cambiar el formato, porque veo que yo he cambiado de edad, que tenía 02:17:56
un valor numérico, lo cambio a un valor texto y lo ha cambiado sin quejarse nada. 02:18:02
Sí, esto es heredado de Javascript. 02:18:12
Javascript ya lo veremos, creo que el miércoles vamos a empezar con ello, cuando empecemos 02:18:15
a ver el bloque de función. 02:18:18
Resulta que es un lenguaje de tipado débil y entre otras cosas permite lo que para mí 02:18:21
son guarradas, como por ejemplo crear una variable y que sea numérica y cinco líneas 02:18:28
más abajo decirle que ahora ese valor numérico ya no es un número sino que es una cadena 02:18:34
de texto. 02:18:38
O que es un array o que es un objeto. 02:18:40
Entonces tienes variable igual a siete y cinco líneas más atrás tienes variable 02:18:42
igual a llave, propiedad, propiedad, propiedad, propiedad y se lo come tal cual. 02:18:47
Es decir, no tiene ningún tipo de limitaciones en cuanto a que haya que respetar los tipos 02:18:52
previos de las variables o de las propiedades de los objetos. 02:18:57
No sé si era eso a lo que te referías. 02:19:10
Sí, sí, desde el punto de vista de C es un poco guarrete, sí. 02:19:13
Un poco aberración, sí, pero bueno. 02:19:18
Exige tener un poco más de precaución a la hora de... porque es muy fácil lidiarla 02:19:23
con esto. 02:19:27
Vale. 02:19:32
¿Qué tal es lo más? 02:19:33
Pues puedes probar el comportamiento del nodo change en su estilo de set. 02:19:34
Vale. 02:19:41
Vamos a dejar esto por aquí. 02:19:42
Y vamos a probar otro diferente que es... vale. 02:19:49
Hemos visto hasta ahora el set. 02:19:56
Pues vamos a hacer el change. 02:20:00
El change es bastante potente. 02:20:03
Esto lo que nos permite es un búsqueda y reemplazo de algo que forme parte del payload. 02:20:07
Vale. 02:20:16
Entonces, por ejemplo, yo antes tenía... 02:20:17
Pero vamos a generar este mensaje para tenerlo de referencia. 02:20:20
Yo antes tenía, por ejemplo, que el nombre del gato era Darío. 02:20:24
Voy a copiar esta ruta. 02:20:29
Y le voy a decir que cambie el nombre del primer gato. 02:20:34
Y siempre que sea Darío, me lo va a cambiar por Darío pero en mayúsculas. 02:20:40
Por ejemplo. 02:20:47
Si yo despego esto... 02:20:52
Aquí tenemos el de entrada. 02:20:55
Tenemos a nuestro gato que se llama Darío. 02:21:00
Voy a tenerlo. Elimino general. 02:21:04
Y aquí veis que a la salida, que este es el mensaje generado que ha pasado por el nodo de debug, 02:21:07
tenemos que el nombre me lo ha cambiado por Darío en mayúsculas. 02:21:13
Sin embargo, si el segundo gato, el primer gato, se llamara Daría, por ejemplo, 02:21:16
pues esta búsqueda y reemplazo no funcionaría. 02:21:26
¿Bien con esto? Es un búsqueda y reemplazo. 02:21:36
Cámbiame tal cosa por tal otra cuando lo encuentres en la propiedad de un objeto o una propiedad. 02:21:40
Bueno, probando por favor. 02:21:52
Bien. 02:22:10
¿Bien con esto eso ha funcionado? 02:22:41
¿Habéis podido probarlo? 02:22:45
Sí, sí. 02:22:47
Por cierto, no me voy a meter ahí porque es un fregado interesante, 02:22:49
pero esto, lo pone en la documentación, ¿vale? 02:22:54
Para las cadenas de texto, para las cosas que sean strings, permite utilizar expresiones regulares. 02:22:59
¿Vale? Una expresión regular básicamente lo que nos permite es establecer, digamos, 02:23:06
patrones de búsqueda bastante complejos y sustituciones bastante complejas. 02:23:12
¿Vale? Pero no vamos a entrar ahí. 02:23:17
Simplemente para el que ya sepa lo que es una expresión regular, 02:23:19
que sepa que se pueden utilizar dentro de este change. 02:23:22
¿Vale? Más cosillas que tenemos. 02:23:29
Voy a crear de nuevo el bloque. 02:23:32
Este vamos a ponerle como shift. 02:23:38
Este vamos a ponerle como change. 02:23:42
Y este vamos a jugar con el delete. 02:23:48
¿Vale? ¿Tercera cosa que se pueden hacer? 02:23:53
Pues, deletes. 02:23:55
Yo puedo decidir eliminar algo. 02:23:57
Por ejemplo, ya que tengo seleccionado esto, puedo eliminarme el gato cero. 02:24:00
De forma que hago el inject. 02:24:14
Aquí tenemos el mensaje tal cual ha pasado. 02:24:16
Directo, sin entrar en el delete. 02:24:20
Y vemos que tenemos aquí nuestro array de dos elementos, 02:24:24
con Daría y Elías, que no han sufrido ningún daño. 02:24:27
Sin embargo, en el mensaje que proviene del delete, 02:24:31
vemos que aquí los gatos ya es un array de un único elemento 02:24:36
y el gato cero ha sido, el que antes era el gato cero, ha sido eliminado 02:24:42
y solo queda Elías. 02:24:47
¿Vale? Podemos eliminar incluso payloads. 02:24:50
Podemos cargarnos cualquier cosa. 02:24:53
Por cierto, no podemos cargarnos msgid. 02:24:55
Si alguien está pensando en eso. 02:24:58
Lo podemos cargar, pero a continuación lo vuelve a generar automáticamente. 02:25:00
Se nota que lo hemos eliminado, porque msgid siempre es la primera propiedad que tiene un objeto 02:25:08
y aquí en este caso es la última. 02:25:15
Si os fijáis en el detalle, esto denota que efectivamente el nodo delete ha borrado 02:25:17
y el msgid lo ha cargado. 02:25:26
Si os fijáis en el detalle, esto denota que efectivamente el nodo delete ha borrado 02:25:28
y el msgid, pero como los mensajes para que se puedan enviar de un sitio a otro 02:25:36
necesitan esa trazabilidad, pues automáticamente se ha vuelto a crear un mensaje diferente. 02:25:41
Fijaos también, con respecto a eso último, que en este caso anterior he hecho click en este inject. 02:25:49
Este inject iba directo al msg por un lado y pasaba por el change. 02:26:01
Pero fijaos que el identificador de mensaje es el mismo, porque ese mensaje tiene su origen en este inject. 02:26:06
Aquí sin embargo, como este delete se ha cargado el msgid que venía de origen 02:26:16
el que viene directo del inject conserva el que ha salido del inject 02:26:29
pero el otro identificador de mensaje tiene un nuevo id que se ha generado en este nodo. 02:26:34
No es que sea muy relevante, ni que nos vaya a servir mucho, pero es una curiosidad. 02:26:42
Con respecto a cómo funciona una red internamente. 02:26:46
Os voy a pedir aquí que os carguéis, por ejemplo, la propiedad de si Alice está viva o no. 02:26:53
La última opción. 02:27:01
Y me decís si os funciona o si no, si os da algún problema. 02:27:05
Si os da algún problema, dejádnoslo en los comentarios. 02:27:41
Y si os da algún problema, dejádnoslo en los comentarios también. 02:27:45
Y si os gusta, por favor no os olvidéis de suscribiros. 02:27:55
Y si os gusta, por favor no os olvidéis de suscribiros. 02:28:00
Gracias. 02:28:04
¿Vale? ¿Bien con el delete? 02:28:11
Sí. 02:28:21
Vale, perfecto. 02:28:23
Nos quedaría una última, que es la posibilidad de hacer un move. 02:28:25
Esta me la voy a dejar para un pelín más adelante. 02:28:31
Nos la dejamos apuntada como que falta correr. 02:28:34
Y vamos a sacar el siguiente nodo, que es el switch. 02:28:37
Como antes, vamos a ver exactamente qué es lo que hace. 02:28:45
Vamos a ver, ya lo conté antes. 02:28:49
Pero en función de una pregunta que podemos rechazarnos, 02:28:51
decide si genera un mensaje de salida, si no genera nada, 02:28:57
o si lo genera por un camino o lo genera por otro camino. 02:29:01
También forma parte de la paleta de función. 02:29:05
Está en el módulo normal. 02:29:08
Es de procesamiento, es decir, tiene una entrada y una salida, 02:29:10
aunque salida a veces puede ser que no lo saque. 02:29:13
Y trabaja, igual que antes, en los ámbitos de mensaje, de flow y de global. 02:29:18
Lo que pasa es que en estos dos últimos es de solo lectura. 02:29:27
Vamos a ver un pequeño ejemplo. 02:29:33
Vamos a construir, como siempre, un inject, un debug y un switch. 02:29:36
Os espero para que tengáis esta misma estructura. 02:29:45
Irá haciéndolo, por favor. 02:29:49
Una vez que lo tengáis, aquí vamos a hacer un pequeño cambio en ese timestamp. 02:30:02
Vamos a generar ese timestamp para tener en la propiedad payload un valor. 02:30:18
Vamos a ponerle nota, por ejemplo, y vamos a poner un valor numérico. 02:30:25
Este va a tener un 7 y le vamos a llamar a prueba. 02:30:35
Y vamos a generar otro nodo que se llama suspendio, que en la nota va a tener un 4,55. 02:30:40
Bien, tenemos estos dos nodos. Ambos tienen la propiedad nota, no tienen payload. 02:30:53
Vamos a ver ahora cómo se comporta el switch. 02:31:09
Entonces, el name es lo que hemos visto ya en otros nodos, permite darle un nombre solamente a efectos visuales. 02:31:16
Y aquí tenemos que decirle qué queremos evaluar. 02:31:26
¿Qué queremos evaluar? Pues la nota. 02:31:30
Y entonces aquí tenemos una serie de valores o de tipos de comparaciones que podemos realizar. 02:31:33
Desde igualdades, desigualdades, mayor que, menor que. 02:31:41
Podemos comprobar si una propiedad existe, si está entre un rango, si contiene algo, si coincide con una expresión regular, si es verdadero o falso. 02:31:46
Es decir, si está vacío o no vacío. 02:31:55
Ahora veremos lo de vacío o no vacío, porque salió antes un error que se podría haber evitado con un switch de estos. 02:31:58
En este caso, para evaluar la nota, lo que quiero saber es si algo es mayor de un 5. 02:32:08
Y lo vamos a dejar así. 02:32:22
Simplemente vemos que aquí hay una flechita y un 1. 02:32:24
Lo dejamos ahí, desplegamos y vamos a ver qué sucede. 02:32:29
Ah, perdón. Esto, para que me aparezca alguna información, tengo que poner que quiero ver el mensaje completo. 02:32:34
Y vamos a ver qué pasa con el mensaje de aprueba. 02:32:42
Como veis, ha pasado. Es el empezador del mensaje y la nota es la que tenemos. 02:32:50
¿Y qué pasa con el suspende? 02:32:56
Aquí arriba veis que efectivamente se ha inyectado este mensaje. 02:33:00
Pero, ¿qué es lo que está pasando? 02:33:04
Pues que el switch, básicamente, lo que está haciendo es descartarlo. 02:33:09
Porque como no cumple esta condición, no se va a ningún lado. 02:33:14
Entonces, aquí podemos, digamos que por defecto este es el comportamiento del switch, que es que si se cumple la condición, progresa. 02:33:20
Si no se cumple la condición, pues no se va a ningún lado. 02:33:28
¿Cómo puedo hacer? Por ejemplo, si aquí en lugar de hacer esto, quisiéramos mostrar un texto, que ya lo hemos visto antes. 02:33:35
El alumno ha aprobado. 02:33:44
Sin embargo, aquí me gustaría que apareciera el alumno suspendido. 02:33:53
¿Cómo lo podemos hacer? En mi opinión, la forma no adecuada, pero quizá un poco más obvia. 02:33:58
Y luego vemos la forma buena. 02:34:06
¿La forma no adecuada? Pues yo puedo duplicar esto. 02:34:08
Y aquí, al contrario que en programación tradicional, no tengo por qué elegir entre un if y otro. 02:34:11
Puedo hacer que las dos señales lleguen a los dos switches. 02:34:17
Y este será el switch que evalúa el aprobado. 02:34:23
Y este es el switch que evalúa el suspenso. 02:34:30
Lo único que el suspenso será cuando sea menor que 5. 02:34:37
Y aquí lo ponemos así. 02:34:43
De esta manera ya tenemos que se genere el mensaje que se genere. 02:34:50
Ambos van a llegar a los dos if, pero como son cosas excluyentes, pues solo saldrá el mensaje por uno de ellos. 02:34:54
Vamos a comprobarlo. 02:35:01
La prueba. 02:35:02
Vamos a ver quién ha generado este mensaje. 02:35:03
Ahí lo tenéis, es el debug de arriba. 02:35:05
Y el suspende. 02:35:08
Ahí lo tenéis, se ha generado mediante el debug de abajo. 02:35:10
Os doy dos minutillos para que lo podáis replicar en vuestro ordenador. 02:35:15
Y ahora comentamos la forma buena, por así decirlo, de hacer esto con un único switch. 02:35:20
Probadlo por favor y me decís. 02:35:26
No. 02:35:40
No. 02:36:01
Bueno. 02:36:29
¿Qué tal? ¿Lo tenemos? 02:36:58
¿Alguien necesita un poco más de tiempo para probarlo? 02:37:02
¿Pues ha funcionado? 02:37:06
Sí, sí. 02:37:12
Perdona, ¿podría repetir la configuración del switch? 02:37:13
El de arriba es básicamente msg.nota. 02:37:18
Preguntar si es mayor o igual que 5. 02:37:23
Y el de suspenso es igual, evaluamos nota y preguntamos por si es menor de 5. 02:37:30
¿Y el texto del alumno ha probado o el alumno ha suspendido? 02:37:38
¿Dónde está en la salida? 02:37:43
Está en el debug y está configurado para que se muestre un texto. 02:37:45
Está configurado como un jsonatar. 02:37:49
Vale, entendido, gracias. 02:37:54
El jsonatar luego lo veremos un poquito, ¿no? 02:38:02
Vamos, en algún capítulo próximamente, ¿no? 02:38:06
Lo que es más o menos la forma de utilizarlo, ¿no? 02:38:10
Porque, bueno, pues lleva otro formateo diferente, ¿no? 02:38:16
Sí, el json. 02:38:20
Es lo que hemos visto antes en el ejercicio, en el bonus track del tema anterior. 02:38:22
Vale, que básicamente pues tiene... 02:38:26
Pues sí, la forma de concatenar, por ejemplo, los mensajes es diferente de lo que utiliza JavaScript. 02:38:30
Se utiliza en ampersands. 02:38:36
Hay funciones especiales para hacer sumas, funciones especiales para acceder a elementos de los objetos. 02:38:39
Lo vamos a ver un pelín más en detalle en un ejercicio más adelante. 02:38:46
Pero no lo vamos a cubrir con mucho detalle. 02:38:51
Pero si te interesa el tema, te aconsejo... 02:38:54
En jsonatar.org... 02:39:03
Este vídeo a mí me gusta mucho, ¿vale? 02:39:16
No lo quiero poner porque digamos que se sale un poco de la temática del curso. 02:39:18
Pero este vídeo, si tienes 5 minutos, te recomiendo que lo veas porque... 02:39:23
Digamos que presenta... 02:39:27
Presenta de una forma como muy rápida las diferentes capacidades que tiene Jsonata. 02:39:34
Te vas poniendo... 02:39:40
Vas seleccionando diferentes expresiones. 02:39:44
Un poco como hemos visto antes en el validador de Jsonata. 02:39:47
Aquí te muestra cómo se concatena. 02:39:52
Aquí tienes, por ejemplo, cómo accedes a un array. 02:39:56
O a un determinado elemento de un array. 02:39:59
O cómo accedes a todos los números de un... 02:40:02
O sea, es muy muy potente. 02:40:05
Voy a hacer un montón de cosillas. 02:40:06
Y a ver si llegamos a la parte en la que enseño las funciones. 02:40:08
Por ejemplo, si queremos saber cuánto vale... 02:40:13
Aquí, por ejemplo, está cogiendo el precio de un producto y multiplicándolo por la cantidad. 02:40:18
Vale. 02:40:23
Entonces te saca el array de todos los elementos. 02:40:24
Todos los elementos que forman el array de este Json. 02:40:26
Que tienen unos precios y unas unidades para un pedido. 02:40:29
Pues te muestra cuál es el valor total. 02:40:32
Utilizando este tipo de... 02:40:37
Esto lo hicimos antes. 02:40:39
Las operaciones aritméticas. 02:40:40
Pero aquí, por ejemplo, podemos hacer... 02:40:42
Tiene esta suma. 02:40:44
Que suma todo. 02:40:45
He visto que la función suma la tiene, pero la resta no la ha visto. 02:40:47
O por lo menos como tal no... 02:40:51
La función resta no la ha visto. 02:40:54
Claro, porque esto no es una suma. 02:40:56
Es un sumatorio. 02:40:58
Claro. 02:40:59
Entonces no tiene sentido... 02:41:00
No hay nada opuesto al sumatorio, ¿no? 02:41:03
Sí. 02:41:07
Porque la suma aritmética sí que la puedes hacer tal cual. 02:41:09
Sí, sí, directamente. 02:41:12
Con el símbolo más. 02:41:14
La lista de todos los operadores los tienes aquí. 02:41:16
Si entras en la parte de documentación... 02:41:20
Aquí tienes los filtros, los que permiten ordenar cosas. 02:41:26
Es que es muy, muy extenso. 02:41:30
Te pueden hacer un montonazo de... 02:41:32
Sí, pero sí le da una potencia terrible a todo lo que es. 02:41:35
Luego el poder parsear el código que te venden en JSON. 02:41:38
Para poder hacer... 02:41:44
Sí. 02:41:46
O sea, facilita mucho las cosas. 02:41:48
Yo la verdad es que lo utilizo menos de lo que debería. 02:41:51
Porque me da pereza ya aprender un lenguaje más. 02:41:54
Porque esto al final es otro lenguaje. 02:41:58
Sí, claro. 02:42:00
Y es que luego empieza a mezclarse todo, como me pasa a mí. 02:42:01
Ya no sabes si lo que lleva punto, lo que lleva coma, lo que lleva dos puntos... 02:42:05
Eso es. Entonces yo sé que es muy potente. 02:42:10
He visto gente utilizarlo, hacer las verdaderas figuerías. 02:42:12
Pero yo entre Python, C, Javascript... 02:42:15
Sí, sí, sí. 02:42:18
O sea, digamos que los problemas se pueden resolver directamente con Javascript. 02:42:20
Y prefiero tirar por ahí. 02:42:25
Para no meter una variable más en... 02:42:27
Pero por ejemplo, para la parte de debug sí que es muy cómodo. 02:42:29
Y que aparezcan, digamos, con el puerto CD y con lo que yo quiera. 02:42:34
O el formateo en JSONate sí que lo hago. 02:42:37
Porque es muy cómodo. Mucho más cómodo contener una función y contener cosas en Javascript. 02:42:39
Ajá. 02:42:44
Y luego en try.jsonata.org... 02:42:46
Try. 02:42:53
Aquí tienes un editor. 02:42:55
Te viene cargado. 02:42:57
Como varios JSON de ejemplo. 02:42:59
Uno de facturas. 02:43:02
Uno de direcciones. 02:43:04
Uno de... 02:43:06
Uno de una biblioteca. 02:43:10
El ejemplo este es un poco una locura. 02:43:15
Tienes aquí para ir probando diferentes cosas. 02:43:20
Por ejemplo, este invoice es el que aparecía. 02:43:23
Puedes ir probando diferentes cosillas y ves el resultado. 02:43:26
Es la suma de todos los pedidos. 02:43:30
Pero puede ser, por ejemplo... 02:43:32
Sí, que luego lo complicas como pasa cuando haces una selección de SQL que puedes anidar las historias. 02:43:35
Exactamente. 02:43:42
Vale, tenemos el primer producto. 02:43:50
Vas introduciendo los diferentes valores que creas en la expresión. 02:43:53
Y vas viendo el resultado que se produce en el momento. 02:44:00
Sí, pero está muy bien. Está muy chido. 02:44:03
Yo tenía nociones, pero vamos... 02:44:06
Había utilizado cuatro cosas que había visto por ahí, pero muy... 02:44:09
Ya nada. 02:44:14
Pues nada, continuamos con la parte del switch. 02:44:21
Iba a decir if. 02:44:25
¿Todos bien con esto? ¿Habéis conseguido que aparezca lo de alumno aprobado y abstandido? 02:44:27
Pues vamos a ver cómo se hace bien. 02:44:36
Cómo se hace mejor. 02:44:39
Voy a duplicar la parte esta. 02:44:40
Y ahora en lugar de hacer un if o un switch diferente para decidir si aprueba o suspende... 02:44:43
Lo que vamos a hacer va a ser lo siguiente. 02:44:50
Aquí veis que tenemos otra vez el bloque de as. 02:44:54
Lo que va a hacer el bloque de as es añadir otra posible salida. 02:44:58
¿Vale? Que es... 02:45:02
Por ejemplo, vamos a hacer press. 02:45:04
Vamos a hacer que si es mayor que 9, que salga por una salida. 02:45:05
En caso contrario, si es mayor que 5... 02:45:11
Pues es otra salida. 02:45:18
Y aquí en lugar de hacer otra comparación numérica, vamos a decirle que sea en caso contrario. 02:45:20
Es decir, en cualquier otro caso. 02:45:27
El otherwise sería como el else en programación. 02:45:29
Entonces ahora tenemos que más de 9 sería matriculado o no. 02:45:33
El 5 sería aprobado, a partir de ahí. 02:45:37
Y en cualquier otro caso, pues está eso. 02:45:39
Y esto lo que me genera es que ahora mi if y switch ya tienen tres salidas diferentes en lugar de una. 02:45:41
Entonces me faltaría por duplicar aquí y poner esta. 02:45:50
Me ha faltado más de 9. 02:45:58
Y ahora cada camino que sale de este switch, lo dirigimos hacia donde queramos. 02:46:04
¿Vale? Aquí... 02:46:09
Bueno, no hace falta decirlo, entiendo, pero... 02:46:11
Estamos sacando salidas que van a debug, pero en realidad... 02:46:13
Seguiría el flujo hasta conseguir procesar el mensaje de la forma que consideremos. 02:46:16
Vamos a generar otro mensaje aquí que sea matriculado. 02:46:24
Que se nota va a ser... 02:46:32
De forma que el que suspende se ha sacado la salida por el nodo de abajo. 02:46:40
El que aprueba ha sacado el mensaje por el nodo de en medio. 02:46:46
Y el de la matrícula... 02:46:51
Uy, lo he hecho mal. 02:46:52
Ah, no, espera, lo he liado con el otro. 02:46:55
Si es mayor... 02:47:07
Ah, vale, sí, claro, lo he liado. 02:47:11
Si queremos que se detenga en la primera regla, que es normalmente lo que solemos querer... 02:47:14
Tenemos que decirle que en cuanto encuentre algo que le gusta, que pare. 02:47:20
Porque si no lo que va a hacer va a ser sacar el mensaje por tantos nodos como toque. 02:47:26
Es decir, voy a sacar el de la matrícula. 02:47:32
¿Y veis por dónde ha salido el mensaje de la matrícula? 02:47:37
Como ha cumplido las dos condiciones, la de que sea mayor que 9 y la de que sea mayor de 5, 02:47:43
el switch ha generado mensaje por las dos salidas. 02:47:50
Sin embargo, lo que queremos en este caso es una perspectiva un poco más de lenguaje C, 02:47:56
de un IF-ELSE y un IF-ELSE-IF-ELSE. 02:48:00
Si queremos ese comportamiento, en lugar de decirle que queremos que compruebe cada mensaje todas las reglas, 02:48:05
le decimos que pare en la primera que coincida. 02:48:10
Se hará el despliego y ahora ya sí. 02:48:15
El que suspende, suspende. 02:48:17
El que aprueba, solo aprueba. 02:48:19
Y el que saca matrícula, solo saca matrícula. 02:48:21
¿Lo podéis probar, por favor? 02:48:31
Aprovecho la pausa para poner el código de salida. 02:48:40
Son ya las 8 menos 10, así que para que ya lo vayan teniendo la gente. 02:48:52
Por cierto, me acabo de dar cuenta que no se veía bien el código completo. 02:49:02
Perdona, una pregunta. ¿Cómo se pueden borrar los flujos si creas flujos por equivocación? 02:50:10
¿A qué te refieres con flujos? ¿Esto? 02:50:18
Una pestaña. 02:50:21
Ah, para las pestañas. Mira, le haces doble clic a la pestaña. 02:50:23
Y aquí arriba a la izquierda aparece DELETE. 02:50:31
Ah, vale. Vale, gracias. 02:50:34
No es intuitivo, ¿no? 02:50:36
Vale, ¿qué tal? ¿Funciona? 02:51:06
¿Habéis conseguido generar los aprobados, suspensos y matrículas? 02:51:26
Sí, sí, funciona. 02:51:33
Vale, estupendo. A ver, ¿qué hora tenemos? Nos quedan 5 minutillos. 02:51:45
Creo que no voy a empezar ahora con la parte de funciones, que prefiero verla con calma. 02:51:50
Entonces, no sé si queréis aprovechar esos 5 minutillos para hacer alguna pregunta o comentar algo. 02:52:00
Si no, yo también tengo una pregunta con respecto a la última parte del curso, que estuve hablando con Juanra el otro día. 02:52:11
Quisiera hacer una pregunta. En el módulo que es para cambiar el change, tienes que decirle exactamente el punto en el que es el name, ¿vale? 02:52:20
En payload, cat, 0. ¿Hay alguna forma de poder buscar en todas las ramas o a partir de una rama una propiedad? 02:52:32
Seguro que sí, con expresiones regulares. 02:52:46
Seguro que se puede hacer. Segunda parte de la respuesta, no sé cómo se hace. 02:52:53
Quiero decir, si tienes aquí un montón de gatos, ¿vale? Y quieres no saber en qué rama 0, 1, 2, 3, 4, 5 está el que quieres cambiar. 02:52:58
Es que al final le estás dando la información de la rama en la que está y el nombre. Cuando eso es un evoke, quiero decir un evoke, no va a tener dos nombres en la misma rama. 02:53:11
Sí, sí, sé lo que me quieres decir. Que cómo haces para buscar en cualquier rama, cualquier gato que se llame Darío y que me lo cambie por Darío mayúsculas, ¿no? 02:53:22
Esté en la posición del índice que esté. 02:53:31
Exactamente. 02:53:33
Yo creo que eso se hace con expresiones regulares, pero te voy a generar, te voy a buscar la expresión regular y te lo digo el miércoles. 02:53:34
Vale, pues apuntado está. Ya te enseñaré el churro de expresión regular que debería salir ahí. 02:54:05
Espero que se pueda hacer con expresión regular porque si no, la otra opción es hacerlo de forma programática. 02:54:14
Es decir, coger el bloque de función, que es el que vamos a empezar explicando la semana que... perdón, el miércoles, y recorrer básicamente la raíz de gatos y cambiarlo ahí. 02:54:19
Vale, que sería la forma que a mí de primera estiraría yo por ahí. 02:54:31
Vale, más preguntas. 02:54:37
Pues nada, os hago yo una pregunta a vosotros. 02:54:47
Cuando empezamos a organizar el curso, me dijo, me comentó Juanra, que había varios de vosotros, varios de vosotras, que estabais interesadas en la parte de Home Assistant. 02:54:50
Entonces, la cuestión es que me surgen dudas. De hecho, mi idea es dedicarle la mitad de la última sesión a explicar cosas con respecto a Home Assistant. 02:55:02
Pero, por un lado, es muy extenso. Por otro lado, requiere instalación en un servidor propio. 02:55:12
Y entonces me gustaría que me concretarais un poquillo cuáles son las inquietudes que tenéis con respecto a Node-RED. 02:55:17
Por ejemplo, ¿sólo queréis ver cómo una instalación que ya está hecha y qué posibilidades tiene? 02:55:23
¿O queréis ver una especie de repaso general de lo que tiene? ¿O cómo se instala? 02:55:28
Orientadme un poquillo a cómo queréis, por favor, que organice esa última media sesión. 02:55:33
Yo, por ejemplo, te pongo mi caso. Yo tengo Home Assistant. Tengo todas las mesas domotizadas con Home Assistant y utilizo muchísimo Node-RED. 02:55:42
Lo que pasa es que, bueno, es a un nivel que, bueno, he investigado yo no muy profundo. 02:55:53
Y, bueno, pues, efectivamente me encantaría porque es que con Node-RED puedes hacer cualquier tipo de automatización que se te ponga. 02:55:58
Y como viene perfectamente integrado con Home Assistant, pues, bueno, pues es una herramienta ideal. 02:56:07
Te comentaba que no me acabas de responder a mi pregunta, en realidad. 02:56:22
Yo prefiero que indagues en todo lo que puedas porque, al final, con Home Assistant, pues, no dejan de ser recetillas para instalar tal sensor, para instalar tal... 02:56:28
Y, bueno, pues, el sabido, lo complicado, por lo menos yo lo veo así. 02:56:38
Lo complicado de todo esto no es instalar Home Assistant ni instalar un sensor. 02:56:45
Lo complicado es programar y hacer que todos los sensores que tiene trabajen al unísono o bajo un marco común que es, en este caso, Node-RED, ¿no? 02:56:50
Entonces, pues, es lo complicado. 02:57:02
Y ya si le metes basa de datos, pues, no sé, ya... 02:57:05
Vale, ¿más opiniones? 02:57:13
Porque yo coincido bastante contigo. 02:57:15
De hecho, yo empecé instalándome Home Assistant y, en cuanto descubrí Node-RED, dejé de hacer automatizaciones y meter sensores en Home Assistant y los empecé a migrar todo a Node-RED. 02:57:17
Claro, mira, lo que te estaba diciendo, aprovechando ahora ya que supongo que ya la gente... 02:57:27
Mira, voy a compartir mi pantalla para que veas lo que te estaba diciendo que es uno de los problemas que veo en el tema de Node-RED. 02:57:31
Y te pregunto porque yo tampoco sé programar en Node-RED. 02:57:41
A lo mejor tienes tú algún otro estilo, pero como yo vengo de la parte de programación de PLCs, pues, he trasladado esa parte a Node-RED. 02:57:45
Entonces, mira, te comparto la pantalla. 02:57:55
Vamos a ver... 02:58:03
Compartir... 02:58:11
No sé si lo ves... Lo ves, ¿eh? 02:58:14
Bien, mira, yo tengo aquí... Yo, como hacemos en PLCs, yo tengo unas entradas que las tengo todas alineadas para que en diferentes flujos... 02:58:16
Todos estos son sensores, ¿vale? 02:58:31
Y entonces, porque claro, cambias un sensor y es que descojonas todo el programa. 02:58:33
Como no lo tengas enlazado en un único sitio, ¿eh? 02:58:38
Porque si lo utilizas el sensor en diferentes sitios, en diferentes flujos, entonces tú tienes nada más que un flujo donde tienes toda la sensórica de entrada. 02:58:41
Que son los sensores de entrada. 02:58:50
Y luego, un único flujo donde tienes los actuadores, como hacemos en los PLCs. 02:58:52
Entonces, tú, y entre medias, pues tienes tu programación de los diferentes flujos. 02:58:59
Y vas cogiendo, o bien variables globales, o bien, pues eso, los link-in o link-out, y vas jugando con el Node-RED. 02:59:04
Lo veo perfecto, vamos, que no se me ocurre tampoco otra forma de hacerlo. 02:59:16
Es que no sé, que a lo mejor existe otra y por eso es mejor o más factible, no sé, por eso te pregunto. 02:59:21
No, no, o sea, es que la alternativa a esto es el espagueti. 02:59:28
Es una colección de hilos y variables que siempre cruzan. 02:59:33
Claro, claro, claro, por eso, porque es que si no, esto, en el momento que tienes ya algo un poco complicado, se hace ingobernable. 02:59:38
Sobre todo, inmantenible. Más que ingobernable, no, inmantenible. 02:59:47
Si queréis, cuando esté más avanzado el curso, os enseñaré la automotrización que tengo en mi casa con Node-RED. 02:59:52
Y yo, en lugar de utilizar la estrategia que tienes tú, de las entradas en un lado y las salidas que tienes en otro, 03:00:01
yo lo que tengo son bloques funcionales. 03:00:06
Yo que tienes ciertas habitaciones, lo que tengo es, en una pestaña, una habitación. 03:00:10
Entonces ahí tengo las entradas y las salidas de esa habitación. 03:00:16
Y me queda ordenadito. 03:00:19
Entradas y salidas, pero claro, si tú tienes algún problema de la meta o que utilices de esa habitación 03:00:21
pero quieres utilizar en otro flujo, ya tienes un problema, ¿no? 03:00:26
Sí, pero no se me ha dado la situación. 03:00:30
Ya. 03:00:33
Sí. 03:00:35
Sí, bueno. 03:00:38
Por ejemplo, para el control de la temperatura de una habitación, te vas a basar en el sensor de temperatura de esa habitación. 03:00:39
Sí, pero si por ejemplo controlas una caldera, como en mi caso, a nivel global de todo lo sensórico que tienes en la casa, 03:00:46
pues ya lo estás extrayendo a otro lado, que es el control de la caldera. 03:00:53
Claro, supongo que depende de cada caso. 03:00:57
De cualquier forma, tu forma de atacar el problema me parece muy ordenadito, muy bien. 03:01:01
No, te preguntaba porque digo, bueno, a lo mejor hay otra forma. 03:01:08
Y como esto es lo que se aplica en autómatas programables, pues yo lo voy a hacer así. 03:01:13
Y así lo he hecho. 03:01:20
Porque es que de la otra forma, es lo que te digo. 03:01:21
Tú cambias aquí un sensor y te puedes volver loco de dónde has tocado eso en otro flujo. 03:01:23
Sí, sí, es buena idea que se obtengan todos en un solo lugar. 03:01:30
Bueno, ya me compartirás por ahí alguna idea que otra. 03:01:39
Vale, sí, sí, ya os enseñaré un poquito más adelante. 03:01:43
Cuando hayamos aprendido a hacer funciones y todo, os enseñaré un poquito de lo que tengo yo montado por casa. 03:01:46
Vale. 03:01:53
Por curiosidad, ¿qué tipo de hardware de sensores usáis para hacer toda esta domótica? 03:01:54
Yo en concreto lo que tengo es una mezcla entre Tasmotas, SP Homes y Zigbee. 03:02:03
Yo utilizo Zigbee. 03:02:14
El Tasmota está todo hecho. 03:02:17
Entonces, como prácticamente un sensor de temperatura, el que te cuesta 15 euros en Aliexpress, 03:02:19
y hacerte un SP32, te puede costar poco más o menos, pero ya tienes que investigar. 03:02:26
Y encima no queda tan ordenadito como algo que viene ya hecho. 03:02:32
Entonces, no, no me complico. 03:02:36
Directamente con Zigbee y va a lo fenómeno. 03:02:39
Jorge, como estabas teniendo opiniones sobre esto, yo quería contarte la mía. 03:02:46
Lo que me gustaría ver es cómo funciona, porque hay gente que ya sabe cómo va, cerrar el círculo, digamos. 03:02:51
Cuando has hablado de Home Assistant, es verdad que no debe ser muy complicado. 03:02:59
El tema está en que yo quiero saber cómo, teniendo un dispositivo, me imagino que inalámbrico, 03:03:02
que lo detecto por medio de la red de mi casa, me llega esa información y luego ya cómo la gestiono con la red y todo esto. 03:03:06
Pero no sé qué papel entra aquí, en este caso Home Assistant o no. 03:03:12
O sea, quiero conocer el proceso, cómo funciona. Eso es lo que me gustaría conocer. 03:03:16
Y si solo le falta media sesión de clase, o una, o un cuarto, no lo sé, pues esa es mi opinión. 03:03:20
El problema es que como te metas en el mundo de Home Assistant o de red, 03:03:26
lo vas a, vamos, porque aquí es un mundo. Es un mundo. 03:03:29
Es meterse, que tiene otro curso, Home Assistant. 03:03:34
¿Me estáis diciendo que tengo que montar otro curso de Home Assistant? 03:03:39
No, no, espera, espera. 03:03:43
A ver, el problema que le veo a Home Assistant de cara a montar cursos, es que esta gente corre muchísimo. 03:03:47
Cada mes han sacado una versión nueva que inutiliza, invalida o cambia los métodos anteriores que tenías de hacer normal. 03:03:53
Ese es el problema, sí. 03:04:04
Yo puedo preparar un curso, me puede llevar dos meses de preparación y resulta que cuando lo lanzo, ya no vale. 03:04:06
O que doy el curso y a los alumnos que toman el curso, cuando lo quieren implementar en su aula, 03:04:12
el semestre siguiente, ya ha cambiado y no vale. 03:04:17
Esa es la principal pega que yo le veo a Home Assistant y que no pasa con Node-RED. 03:04:21
Porque Node-RED será un poquito más complicado, tendrá un poquito menos de interfaces menos bonitas, 03:04:26
pero por lo menos es estable. Es decir, lo que yo os enseño ahora, os va a valer los próximos N años. 03:04:31
Por eso soy reticente a hacer un curso de Home Assistant y por eso preguntaba ahora que queréis que os cuente al respecto. 03:04:38
Sí, pero puedes dar las dos cosas de ambos mundos, que no cambian. 03:04:48
Home Assistant como plataforma donde va imbuida el Node-RED. 03:04:53
Y a través de Home Assistant poder atacar a esos diferentes sensores. 03:04:57
Porque otra de las cosas buenas que tiene el Home Assistant es que tiene con los sensores, 03:05:02
con el tema del ZigBee por lo menos en mi caso, tiene como el Plug and Play ese, 03:05:07
que simplemente pones un sensor y automáticamente te lo detecta la plataforma ZigBee que tengas, 03:05:12
o el maestro que tengas de ZigBee. Entonces, pues eso ya te olvidas. 03:05:19
No tienes que andar a hacer un marco feria para hacerlo funcionar el sensor. 03:05:23
Sí, hasta que deciden cambiar la interfase. 03:05:30
Bueno, en ese aspecto han cambiado. Yo llevo ya con él casi dos años, casi tres. 03:05:33
Entonces, hago las actualizaciones de muy tarde en tarde. 03:05:41
Sí que es verdad que hay algunas veces que dices, ostia, esto ha dejado de funcionar. 03:05:45
Y es porque hay una actualización que yo no sé por qué, porque si está funcionando hasta ahora, 03:05:48
¿por qué deja de funcionar? Pues te deja de funcionar. No lo sé por qué. 03:05:53
Sí, a mí me ha pasado tres veces. Tres veces en dos años también que tengo el calzado activo en casa. 03:05:58
Sí. Pero vamos, esto corre en una Raspberry Pi. Yo tengo una A4 y le he metido un disco duro 03:06:06
con un tiro, vamos, la de 8 gigas y va fenómeno. Lo bueno del Home Assistant es que es una plataforma 03:06:13
que auna todo. Entonces, yo lo que quería era eso, que aunara todo. 03:06:23
Y bueno, pues tienes ahí un centro que puedes hacer infinidad de cosas. 03:06:28
Y con lo de redes es ya la caña. 03:06:33
Pues Jorge, escuchándoos, yo lo que me gustaría es, como yo intuyo cómo va todo, 03:06:35
de hecho ahora tengo plazas solares y me he puesto un inversor, 03:06:39
ahora tengo que poner un cargador de coches también porque me he comprado un coche eléctrico, 03:06:42
todas estas cosas, pues no sé, de alguna manera ver cómo puedo manejar todos esos dispositivos, 03:06:45
integrarlos en algo para luego yo ya empezar a programar lo que fuera, 03:06:49
o recibir esa información para utilizarla como sensor y actuador para cualquier cosa, ¿no? 03:06:53
Algo así. Y eso es lo que me gustaría. 03:06:58
Puedo orientar esa última media sanción a hacer una especie de visión general 03:07:01
acerca de las integraciones que tiene Home Assistant y de los plugins que tiene 03:07:07
para conectarse a diferentes cosas y cómo se integra con diferentes sistemas domóticos. 03:07:13
Sí, luego tú veas. 03:07:20
Vale. 03:07:23
Muy bien. 03:07:24
Estupendo, pues si no tenéis más dudas nosotros lo podemos... 03:07:25
Yo quería hacerte una pregunta, si se puede. 03:07:31
Sí, claro. 03:07:34
Yo tengo algún cacharrito domótico de un fabricante chino, que son muy baratos, 03:07:35
de Aliexpress, se llama Tuya, y por ejemplo Home Assistant tiene una integración. 03:07:41
En Node32 también se pueden integrar fácilmente. 03:07:47
Los míos son dispositivos Wi-Fi. 03:07:53
A ver. 03:07:57
Home Assistant probablemente hable bien con ellos porque tenga la integración picada, 03:07:59
alguien se habrá currado esa integración. 03:08:04
Con NodeRed tendrías que mirar a ver si hay... 03:08:07
Algún nodo que haga la... 03:08:12
Porque eso te tienes que dar de alta, yo no tengo Tuya. 03:08:15
Te tienes que dar de alta por ahí en algún servicio de la plataforma. 03:08:18
Sí, ustedes tienen un servicio en la nube. 03:08:22
Sí. 03:08:25
Y el problema de todo eso es... 03:08:27
No sé si tendrá cadencia a la hora de trabajar entre los dispositivos, no lo sé. 03:08:30
O simplemente una vez que te das de alta ya no hace falta pasar por sus servidores. 03:08:35
No sé cómo irá con Tuya. 03:08:41
Claro. 03:08:43
Primero, habría que mirar si NodeRed tiene algún nodo, que no estoy seguro. 03:08:44
Esto lo contaré más detalladamente más adelante. 03:08:50
En posicionar la paleta, si te vienes aquí a instalar y buscas algo, Tuya... 03:08:54
Vale, pues parece que sí. 03:09:00
Tiene un nodo, sí. 03:09:03
Vale, entonces tú te instalas el nodo, que a veces estos... 03:09:05
Digamos, puede haber varias personas que han hecho nodos de Tuya para NodeRed. 03:09:08
Pues te tocará probar todos y ver el que mejor funciona. 03:09:13
Pero, lo que te recomiendo, lo que desde mi punto de vista mola más, 03:09:17
es mirar a ver si hay compatibilidad en Tasmota. 03:09:21
Tasmota es un firmware que cargas machacando el que hace el fabricante 03:09:25
y entonces tu cacharro lo dejas libre. 03:09:31
Y entonces ya lo puedes conectar por MQTT, que para mí es la panacea de la conectividad. 03:09:34
Y ya las integraciones con NodeRed o con lo que te dé la gana son triviales. 03:09:38
Son muy sencillas. 03:09:42
Pero claro, para instalar este firmware tienes que manipular todos los dispositivos que tienes. 03:09:45
Claro, yo tengo algunos ya instalados y están puestos en las típicas cajas de registro. 03:09:51
Entonces pasar por eso es bastante complicado. 03:09:56
Aquí lo que te toca es eso. 03:10:01
Entras en la lista de dispositivos soportados y te dice incluso con fotos, con vídeos, 03:10:03
cómo se hace para programar este firmware. 03:10:10
A ver si encuentro los tuyos. 03:10:15
Bueno, aquí hay uno de los sensores de infrarrojos. 03:10:24
Bueno, este por ejemplo, que es el que veo por ahora. 03:10:28
Ah, pues es una pregunta que te voy a hacer ahora de Tasmota. 03:10:33
¿El Sonoff? ¿Qué tienes del Sonoff? 03:10:36
Yo tengo todo Sonoff. 03:10:38
¿Y cuando utilizas más de un coordinador de ZigBee? 03:10:41
¿Tienes más de un coordinador ZigBee? 03:10:46
No, no se puede utilizar. 03:10:48
Claro, por eso te digo. 03:10:50
ZigBee solo permite un coordinador. 03:10:52
Sí, hay por ahí un proyecto, pero es alto complicado. 03:10:55
Hay que poder multiplexar el coordinador. 03:10:58
Pero los routers son para... 03:11:02
Hacen la misma función que coordinadores. 03:11:05
No en cuanto a crear la red y gestionarla, 03:11:08
que es otra tarea exclusiva del coordinador, 03:11:13
sino en cuanto a ampliar el rango de acción. 03:11:15
Entonces lo que tengo de vez en cuando por toda la casa son enchufes ZigBee 03:11:18
que, como están conectados permanentemente a la red, 03:11:22
tienen el rol de router. 03:11:25
Y entonces son capaces de retransmitir información para otros sensores. 03:11:26
Ah, o sea, los utilizas de repetidores. 03:11:30
Ah, pues eso me interesa. 03:11:32
Eso me interesa. 03:11:34
Porque es que, claro, yo hay un sitio de la casa que no llego. 03:11:35
Donde está el coordinador, no llego. 03:11:38
Claro, pues eso es poner enchufes. 03:11:40
Los enchufes son routers. 03:11:43
¿Los enchufes de Sonoff de ZigBee, dices, por ejemplo? 03:11:46
Eso es, claro. 03:11:50
Todo lo que esté conectado a la red, permanente, 03:11:55
normalmente, salvo que el fabricante haya decidido lo contrario 03:11:58
por algún motivo extrañísimo, 03:12:01
deberían ser routers. 03:12:03
Que son capaces de recibir la señal. 03:12:04
Y encaminárselos hacia el coordinador. 03:12:07
Para que luego él decida a quién le tiene que llegar. 03:12:09
Yo es que he conseguido poner dos, 03:12:12
pero uno directamente enganchado en la Raspberry, 03:12:14
USB, que es un, no me acuerdo cómo se llama. 03:12:18
Ahí. 03:12:22
Uno de estos que es engancha, que vienen con, 03:12:23
que luego, pues el, sí, que es un pincho. 03:12:27
Sí, el ZigBee2MQTT, ¿no? 03:12:30
Efectivamente. 03:12:32
Y luego el otro, el Sonoff, 03:12:33
que es el que lo he claseado con el Tasmota. 03:12:35
Claro, pero ahí no se hablan entre ellos. 03:12:38
Tienes dos redes de Sonoff. 03:12:40
No, no, no, no se hablan entre ellos. 03:12:41
Tengo dos redes, porque no me llegaba. 03:12:43
El Sonoff no me llegaba. 03:12:45
No sabía el tema de los enchufes. 03:12:46
Porque yo pensaba que entre los mismos dispositivos 03:12:49
quedaban redes de repetición, pero no, no es así. 03:12:51
Pero sí, los enchufes a lo mejor sí, sí. 03:12:54
¿Los end devices no? 03:12:56
Es decir, sensores no, porque están con baterías y... 03:12:57
Claro, pueden, sí. 03:13:00
Pero lo que está conectado directamente a la red, 03:13:02
¿no hay motivo para que no haga de router? 03:13:04
Pues voy a mirarlo. 03:13:06
Acabo de darme idea. 03:13:08
Sí, sí, sí. 03:13:11
Vale. 03:13:13
Bueno, muchas gracias. 03:13:14
Bueno, si queréis, como veo que es un tema que tiene interés, 03:13:15
pues hablaremos más adelante. 03:13:18
De todas formas, lo principal para mí es cubrir el temario de nueve redes. 03:13:20
Sí, sí, nueve redes es importante, sí. 03:13:23
Muy bien. 03:13:26
Pues lo dejamos por aquí y nada, que tengáis buena tarde. 03:13:27
Nos vemos en el mes. 03:13:30
Vale. 03:13:31
Venga, hasta luego. 03:13:32
Adiós. 03:13:33
Hasta luego. 03:13:34
Hasta luego. 03:13:35
Hasta luego. 03:13:36
Adiós. 03:13:37
Jorge. 03:13:45
Jorge. 03:13:51
Sí, dígame. 03:13:56
Pues, nada 03:14:00
Venga, hasta luego. 03:14:02
Un saludo a los tres hermanos. 03:14:44
Gracias. 03:14:47
Qué bien que nos has invitado a este evento. 03:14:49
Sí, sí. 03:14:51
Un saludo a todos. 03:14:52
Gracias. 03:14:54
Y a vosotros, a todos. 03:14:55
Gracias. 03:14:57
Y a todos los demás. 03:14:58
Adiós. 03:15:00
Adiós. 03:15:01
Adiós. 03:15:02
Adiós. 03:15:03
Adiós. 03:15:04
Adiós. 03:15:05
Adiós. 03:15:06
Adiós. 03:15:07
Adiós. 03:15:08
Adiós. 03:15:09
Adiós. 03:15:10
Adiós. 03:15:11
Adiós. 03:15:12
Adiós. 03:15:13
Adiós. 03:15:14
Adiós. 03:15:15
Adiós. 03:15:16
Adiós. 03:15:17
Adiós. 03:15:18
Adiós. 03:15:19
Valoración:
  • 1
  • 2
  • 3
  • 4
  • 5
Eres el primero. Inicia sesión para valorar el vídeo.
Idioma/s:
es
Autor/es:
CTIF Madrid-Este
Subido por:
Tic ctif madrideste
Licencia:
Todos los derechos reservados
Visualizaciones:
9
Fecha:
18 de abril de 2023 - 14:06
Visibilidad:
Clave
Centro:
C.TER.INN.Y FORM CTIF MADRID-ESTE
Duración:
3h′ 16′ 55″
Relación de aspecto:
1.78:1
Resolución:
1920x1080 píxeles
Tamaño:
1.33

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid