Archivo de la categoría: Formación Node-RED

Presentación Curso Fundamentos IoT 5G

Título: “Fundamentos IoT 5G para Formadores”

El curso on-line “Fundamentos IoT 5G para Formadores” ha sido diseñado para conocer los fundamentos de IoT en aplicaciones en redes celulares. Este curso está enfocado en dar a conocer las nuevas tecnologías utilizadas en IoT extremo a extremo, con el fin de operar e integrar con las plataformas IoT.

Motivación

Este curso está diseñado para los formadores de Integra Conocimiento & Innovación que ha sido adjudicatario junto a Vodafone para el programa Formación Profesional para el Empleo en Tecnología 5G, un proyecto de la Junta de Andalucía.

Noticias: 

Gracias a las herramientas libres/Open Source es posible democratizar el IoT y la industria 4.0. Antes se necesitaba muchísimo dinero no solo en HW y licencias de SW, sino en consultores que hacen un diseño a medida y realizan la integración de los sistemas, ahora no solo el SW libre y el HW libre y barato, sino que la comunidad da soporte a las dudas, hace documentación y tutoriales, así como librerías para facilitar el trabajo.

Actualmente apenas existen módulos de 5G para conectar a microcontroladores y su precio es muy alto, por ese motivo, en este curso vamos a usar las tecnologías de transición al 5G y que muy posiblemente se usen en paralelo al 5G en el futuro. Estas tecnologías son LTE-M y NB-IoT que son con las que trabajaremos en el curso.

LTE-M y NB-IoT son estándares creados por 3GPP, la organización de estándares responsable de LTE y 5G. Permiten a los operadores aprovechar la infraestructura celular existente para admitir una implementación muy amplia de dispositivos IoT. Debido a que operan en espectro con licencia, son seguros, confiables y brindan calidad de servicio garantizada.

Por supuesto, los operadores ya usan redes 2G y 3G más antiguas para algunas aplicaciones de IoT, como el seguimiento de flotas. Pero LTE-M y NB-IoT son diferentes porque están específicamente diseñados y optimizados para dispositivos IoT que comunican pequeñas cantidades de datos durante largos períodos de tiempo. Por lo tanto, son más simples que otros estándares celulares, con muchos menos gastos generales. 

Otras opción que se puede hacer es usar un router wifi 5G y conectar dispositivos wifi, para ello se puede seguir este curso de IoT centrado en dispositivos wifi: https://www.aprendiendoarduino.com/cursos/fundamentos-iot-open-source-para-formacion-profesional/ 

El 5G se está desarrollando principalmente en tres vías:

  • Banda ancha móvil mejorada o eMBB
  • IoT para servicios de misión crítica
  • IoT masivo

Ahora, esta tecnología IoT LTE está evolucionando hacia el IoT 5G Masivo. Uno de los avances específicos de 5G aplicado a IoT será la capacidad de admitir una densidad muy alta de dispositivos IoT en un área pequeña, llegando al millón de dispositivos por kilómetro cuadrado.

A medida que el 5G comienza su implantación generalizada nos podemos preguntar si vale la pena seguir invirtiendo en IoT LTE o hemos de esperar a IoT 5G. Invertir en IoT LTE hoy no solo satisface las necesidades del mercado actual, sino que también establece una base sólida para abordar las oportunidades del futuro de manera efectiva. La confrontación entre IoT LTE y IoT 5G no existe, no son conceptos contrarios sino complementarios. IoT LTE es la clave para el éxito en IoT 5G. La industria que quiera ser líder en IoT deberá tener una base sólida en IoT LTE o de lo contrario correrá el riesgo de ser adelantada por la competencia.

Como encaja NB-IoT y LTE-M en el ecosistema IoT: https://www.qorvo.com/design-hub/blog/how-nb-iot-and-lte-m-fit-into-iot-ecosystem-future-of-cellular-iot 

La siguiente figura muestra algunos de los casos de uso de IoT habilitados por MTC (machine-type communications) masivo y aplicaciones críticas de MTC. El MTC masivo se basa en tecnologías LPWAN, incluidas NB-IoT y LTE-M, mientras que el MTC crítico requerirá comunicaciones en tiempo real con muy baja latencia y alta confiabilidad.

Objetivos

El objetivo de este curso es conocer los fundamentos de IoT para redes celulares actuales que actualmente los operadores están usando desde LTE-M y NB-IoT como paso previo al 5G aplicado a IoT.

Se verán las tecnologías necesarias para el desarrollar soluciones IoT extremo a extremo, puesto que las redes celulares solo es el medio de transporte de los datos y es una parte del ecosistema IoT. Nos valdremos para ello de herramientas, tecnologías, protocolos y software libre (open source) que hay a nuestra disposición, en especial el uso del protocolo MQTT y Node-RED, para el desarrollo e integración con sistemas externos y plataformas IoT de Smart Cities.

Otro objetivo de este curso es conocer las tecnologías necesarias para el desarrollar soluciones IoT y valiéndonos para ello de herramientas, tecnologías, protocolos y software libre/open source que hay a nuestra disposición. También elaborar dos prácticas para dar soporte al curso y ser utilizadas a posteriori.

El curso se componen dos partes, una primera de fundamentos IoT necesarios para entender todas las tecnologías necesarias en la pila IoT y una segunda parte donde se explicarán los experimentos desarrollados y se pondrán en práctica.

La documentación del curso se entregará en formato web en https://www.aprendiendoarduino.com/cursos/fundamentos-iot-5g-para-formadores/ 

Se desarrollarán dos experimentos IoT basados en la placa Arduino MKR NB 1500 con las siguientes características:

  • Experimento básico: Conexión a red LTE-M mediante un Arduino MKR NB 1500 y envío de al menos dos parámetros ambientales de sensores conectados, mediante API REST y MQTT a la plataforma https://thingspeak.com/, configuración de un dashboard y almacenado de datos históricos.
  • Experimento avanzado: sobre la base del experimento básico, conectar una entrada digital para mandar órdenes remotas y una salida digital para recibir órdenes remotas a una plataforma IoT. Se usará como plataforma IoT Thingspeak para una interacción y de forma más avanzada usando una plataforma IoT desarrollada con Node-RED que permite más acciones y personalización.

Estos dos experimentos se entregan con toda la documentación, paso a paso y código utilizado tanto en los dispositivos Arduino como en la plataforma IoT desarrollada con Node-RED.

Con los conocimientos adquiridos, los asistentes aprenderán las tecnologías necesarias para hacer aplicaciones IoT o integrar desarrollos propios.  Se adquirirán conocimientos en cuanto manejo, montaje y parametrización de redes de comunicación IoT, protocolos IoT y hardware IoT.

Se aprenderá a usar Node-RED, un framework enfocado a IoT para programar, automatizar e integrar plataformas IoT.

Metodología Curso On-Line

El curso on-line consiste en 6 horas de formación, repartidas en 3 sesiones de 2 horas de fundamentos IoT generales y 4 horas de formación, repartidas en 2 sesiones de 2 horas de explicación y montaje de los experimentos desarrollados previamente con los Arduinos MKR1500.

El curso se realizará entre el 22 de febrero y el 9 de marzo de 2023 en las siguientes sesiones:

  • 5 sesiones los días 22 de febrero, 1, 2, 8 y 9 de marzo de 2023 de 17:30 a 19:30

Además se propondrá ampliar documentación y hacer ejercicios entre sesión y sesión. 

La plataforma en vídeo usada será https://meet.jit.si/aprendiendoarduino y se grabarán todas las sesiones. En casos de problemas con esta plataforma se podrá usar Google Meet.

Los recursos utilizados para la realización de este curso son:

Toda la documentación será on-line con el objetivo de mantenerla actualizada y no con un documento físico que se queda obsoleto rápidamente. Después de finalizar el curso toda la documentación on-line seguirá estando disponible de forma pública.

Toda la documentación está liberada con licencia Creative Commons.

Reconocimiento – NoComercial – Compartir Igual (by-nc-sa): No se permite un uso comercial de la obra original ni de las posibles obras derivadas, la distribución de las cuales se debe hacer con una licencia igual a la que regula la obra original.

Aprendiendo Arduino by Enrique Crespo is licensed under a Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional License.

Requisitos

Para la realización de este curso es necesario tener conocimientos básicos o experiencia en algunas de estas áreas: programación, redes TCP/IP, redes inalámbricas, protocolos de comunicación, bases de datos, uso de sistemas linux, microcontroladores, autómatas, electrónica, uso de sensores, actuadores, etc…

Es recomendable un conocimiento medio de Inglés puesto que gran parte de la documentación oficial de referencia está en Inglés.

Programación del Curso

FechaTemarioHoras
X 22/02/2317:30-19:30Hardware IoT. Programación y comunicaciones Arduino2h
X 01/03/2317:30-19:30Protocolos IoT. API REST y MQTT. Plataforma Thingspeak2h
J 02/03/2317:30-19:30Node-RED. Programación básica y Dashboard2h
X 08/03/2317:30-19:30Experimento Básico IoT LTE-M2h
J 09/03/2317:30-19:30Experimento Avanzado IoT LTE-M2h
TOTAL10h

Contenido del Curso

Toda la documentación del curso y el código usado es libre y accesible desde: https://www.aprendiendoarduino.com/cursos/fundamentos-iot-5g-para-formadores/ 

  • Presentación Curso Fundamentos IoT 5G
    • Presentación del Curso
    • Material de Prácticas
  • Fundamentos IoT
    • Qué es IoT
    • Ecosistema IoT 
    • Arquitecturas IoT 
  • Hardware IoT
    • Arduino en IoT 
    • Programación Arduino
    • Arduino MKR NB 1500
    • Sensores y Actuadores
    • Comunicaciones IoT. LTE-M, NB-IoT y 5G
  • Protocolos IoT
    • Protocolos IoT Capa Aplicación 
    • Protocolo HTTP 
    • API REST 
    • MQTT 
  • Node-RED
    • Qué es Node-RED
    • Uso del Editor de Node-RED
    • Mensajes Node-RED
    • Biblioteca Node-RED
    • Programación Básica Node-RED
    • Dashboard Node-Red
  • Plataformas IoT
    • ThingSpeak 
  • Prácticas
    • IoT Básico
    • IoT Avanzado

Presentaciones

  • ¿Nombre?
  • Breve presentación y experiencia con los puntos que vamos a tratar.

Contacto

Para cualquier consulta durante el curso y en cualquier otro momento mediante email: aprendiendoarduino@gmail.com

Twitter @jecrespo: https://twitter.com/jecrespom

Y más información sobre el curso y el autor: http://www.aprendiendoarduino.com/acerca-de/

Anuncio publicitario

Presentación del Curso: Raspberry Pi y Node-RED para IoT 2ªed

Título: “Raspberry Pi y Node-RED para IoT 2ªed”

Motivación

En la industria conectada, cada vez se está haciendo más popular el uso de Node-RED debido a su estabilidad, continuo desarrollo y aportaciones externas que hacen de ella una herramienta de programación utilizada para conectar dispositivos de hardware, APIs y servicios de internet.

Dado que la mayoría de dispositivos IoT para industria 4.0 posibilitan realizar un programa de control con la herramienta de Node-Red, el dominio de dicha herramienta permitirá a una empresa explorar y ampliar las soluciones que ofrece.

Raspberry Pi es un ordenador de placa reducida, ordenador de placa única u ordenador de placa simple (SBC) de bajo costo muy popular en la industria conectada y con gran apoyo de la comunidad. Es el complemento perfecto para Node-RED en el entorno de trabajo.

Este curso es una introducción práctica para aprender a manejar Raspberry Pi y para aprender a programar en en entorno de IoT/Industria 4.0/digitalización incluso para quien no está familiarizado con la programación por código.

Este curso surge de diversas conversaciones con gente de empresas, alumnos de los cursos de Arduino y especialmente personal del Think TIC en los últimos años donde se ha habla de la necesidad de que las pequeñas y medianas empresas puedan acceder a las ventajas de soluciones IoT o Industria 4.0 con herramientas sencillas de usar y de bajo coste.

Curso: https://www.larioja.org/thinktic/es/cursos-eventos/cursos-comenzados-completos/curso-raspberry-pi-node-red-iot 

Gracias a las herramientas libres/Open Source es posible democratizar el IoT y la industria 4.0. Antes se necesitaba muchísimo dinero no solo en HW y licencias de SW, sino en consultores que hacen un diseño a medida y realizan la integración de los sistemas, ahora no solo el SW libre y el HW libre y barato, sino que la comunidad da soporte a las dudas, hace documentación y tutoriales, así como librerías para facilitar el trabajo.

Muchas empresas no dan el salto de digitalización porque la inversión inicial puede ser muy alta al necesitar contratar a una empresa externa o herramientas profesionales, pero quién mejor que el personal de la propia empresa que es quien mejor conoce los procesos internos, gracias a la tecnología abiertas, es posible con una pequeña inversión económica y una formación centrada en la digitalización de los procesos.

Propuesta Formativa

Este curso está diseñado para que cualquier trabajador cualificado de una empresa pueda introducir el concepto de IoT y la automatización de tareas  aplicado al sector en que trabaje, usando tecnologías libres y pueda ver resultados rápidos y con una inversión económica mínima.

El curso se basa en la programación mediante Node-RED que es una programación por flujos.

Este curso está enfocado a profesionales cualificados de diversos sectores que deseen hacer una aplicación de IoT en sus empresas y pueda montar un piloto de IoT en sus instalaciones, así como realizar tareas de automatización.

Conceptos:

  • Raspberry Pi es un ordenador de placa reducida, ordenador de placa única u ordenador de placa simple (SBC) de bajo costo desarrollado en el Reino Unido por la Raspberry Pi Foundation. Se ha convertido en un hardware muy popular debido a su bajo coste y gran potencia ampliamente utilizado en proyectos IoT e Industria conectada.
  • Node-RED es una herramienta de programación que se utiliza para conectar dispositivos de hardware, APIs y servicios de internet. Adecuado para los equipos dedicados al Internet de las cosas Industrial( IIoT) y personal dedicado al diseño y prueba de soluciones para la comunicación de equipos de planta con aplicaciones de IT. Dado que la mayoría de dispositivos IoT para industria 4.0 posibilitan realizar un programa de control con la herramienta de Node-Red, el dominio de dicha herramienta permitiría al equipo IIoT explorar y ampliar las soluciones que ofrece a la empresa que lo use.

Objetivo

El objetivo de este curso es que el alumno obtenga un conocimiento de la placa Raspberry Pi basada en linux y sea capaz de instalar, configurar y realizar proyectos sencillos usando Node-RED y la programación visual mediante flujos, para su uso en entornos IoT o de automatización.

Al finalizar el curso el alumno será capaz de:

  • Conocer el HW Raspberry Pi
  • Instalar Raspberry Pi OS
  • Conocer comandos básicos de Linux
  • Instalar servicios en Raspberry Pi OS
  • Conocer el protocolo MQTT
  • Instalar Node-RED en diversas plataformas
  • Configurar y usar de forma segura Node-RED
  • Usar la programación de flujos de forma eficiente
  • Hacer debug de los programas Node-RED
  • Instalar y utilizar nodos
  • Configurar un dashboard

Palabras Clave:

  • Raspberry Pi
  • Node-RED
  • IoT
  • Automatización
  • Low-Code Programming
  • Edge Computing
  • OT vs IT

Requisitos

Para la realización de este curso no es necesario ningún conocimiento previo. Es recomendable un conocimiento medio de Inglés puesto que gran parte de la documentación está en Inglés.

Metodología

El curso es principalmente práctico donde se empieza a instalar, configurar y usar una Raspberry Pi para posteriormente, programar una serie de retos usando Node-RED instalado en Raspberry Pi interactuando en nodos remotos basados en placas ESP8266 con diferentes shields, que hacen de nodos remotos conectados con protocolo MQTT. También desde Node-RED se interactuará con aplicaciones de terceros.

La duración total del curso es de 30 horas.

Los recursos utilizados para la realización de este curso son:

Además están disponibles otros recursos para ampliar información:

Para realizar las prácticas de este curso se usará el material disponible en el Think TIC que veremos a fondo en un apartado posterior.

Toda la documentación será on-line con el objetivo de mantenerla actualizada y no con un documento físico que se queda obsoleto rápidamente. Después de finalizar el curso toda la documentación on-line seguirá estando disponible de forma pública.

Todo el material entregado es en préstamo y debe cuidarse al máximo, a la hora del montaje de las prácticas se seguirán las instrucciones para evitar dañar los componentes.

Toda la documentación está liberada con licencia Creative Commons.

Reconocimiento – NoComercial – Compartir Igual (by-nc-sa): No se permite un uso comercial de la obra original ni de las posibles obras derivadas, la distribución de las cuales se debe hacer con una licencia igual a la que regula la obra original.

Aprendiendo Arduino by Enrique Crespo is licensed under a Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional License.

Organización del curso

El curso tiene una duración total de 30 horas. El curso se celebra del 13 al 24 de junio de 2022 de Lunes a Viernes en horario de 18.00 a 21.00. Se hará un descanso de 10-15 minutos aproximadamente a mitad de la sesión.

Diario de curso donde se seguirá lo explicado cada día y puntos adicionales que se traten en el curso: https://aprendiendoarduino.wordpress.com/2022/06/04/diario-curso-raspberry-pi-y-node-red-2a-ed/

Contenido del Curso

Toda la documentación del curso y el código usado es libre y accesible desde: https://www.aprendiendoarduino.com/cursos/raspberry-pi-y-node-red-para-iot-2a-ed/

Contenido

  • Presentación del Curso
  • Material del Curso
  • Qué es Raspberry Pi
  • HW Raspberry Pi
  • Instalación Raspberry Pi OS
  • Raspberry Pi en la Industria
  • Conceptos básicos de Linux
  • Programación Básica en Python
  • GPIO
  • Instalación de Servicios en Raspberry Pi OS
  • Edge Computing
  • Uso de Raspberry Pi y Node-RED en la convergencia IT-OT
  • Protocolo MQTT
  • Qué es Node-RED
  • Instalación de Node-RED
  • Configurar y securizar Node-RED
  • Paso a Paso: Instalar, Configurar y Securizar Node-RED en Raspberry Pi
  • Fundamentos Programación Node-RED
  • Uso del Editor de Node-RED
  • Mensajes Node-RED
  • Dashboard Node-Red
  • Nodos de Configuración en Node-RED
  • Nodos Node-RED
  • Debug Node-RED

Presentaciones

  • ¿Nombre?
  • ¿Experiencia con Linux y/o Node-RED?
  • ¿Sector de aplicación o aplicaciones que se quieran hacer?

Contacto

Para cualquier consulta durante el curso y en cualquier otro momento mediante email: aprendiendoarduino@gmail.com

Twitter @jecrespo: https://twitter.com/jecrespom

Y más información sobre el curso y el autor: http://www.aprendiendoarduino.com/acerca-de/

Ejercicios Finales Node-RED

Ejercicio 1

Hacer un CSV con los datos de temperatura, memoria y CPU que manda vuestra Raspberry PI y guardar en un fichero llamado raspberrypi.csv. Añadir también el campo timestamp al fichero csv.

Para ello tomar los datos publicados en MQTT, ordenarlos y prepararlos para que los pase a un nodo join y los ponga en este orden: timestamp,CPU,Memory,Temperature 

Para que los ordene de forma automática el nodo join debemos hacer uso de la propiedad parts como hace el nodo split usando:

  • parts.index – para el orden de los elementos del grupo a unir
  • parts.id – para indicar que es el mismo grupo
  • parts.count – para indicar el nº de mensajes del grupo

También crear un flujo con un nodo inject que cree el fichero con la cabecera: “timestamp,CPU,Memory,Temperature” y que además al hacerlo vacíe el fichero existente.

Crear otro flujo con un nodo inject que lee con “file in” el contenido del fichero y lo mande a la pantalla de debug.

Luego con un botón del dashboard hacer la parte de inicializar el fichero (que aparezca una notificación del dashboard para confirmar que se desea inicializar) y con otro botón del dashboard un flujo que lea el fichero y lo mande al nodo chart del dashboard y hacer las gráficas.

Opcionalmente, hacer un tercer botón que mande por email el fichero csv, como fichero adjunto.

Opcionalmente, hacer un flujo que lea los datos del fichero llamado raspberrypi.csv y obtener los datos de media, máxima y mínima de la temperatura, memoria y CPU y mostrar en el dashboard en un nodo texto.

Opcionalmente, hacer un flujo que agrupe los datos en grupos de 100 y sacar los datos de media, máxima y mínima cada 100 valores y guardar en otro fichero llamado raspberrypi_agrupados.csv con los campos: timestamp,CPU_AVG,CPU_MAX,CPU_MIN,Memory_AVG,Memory_MAX,Memory_MIN,Temperature_AVG,Temperature_MAX,Temperature_MIN

Mandar datos al nodo chart: https://github.com/node-red/node-red-dashboard/blob/master/Charts.md 

Código: https://github.com/aprendiendonodered/ejercicio10

Ejercicio 2 – Seguridad

Poner un pin para encender los Reles, de forma que si no hay pin no se puede encender desde el dashboard. Simular una cerradura de forma que al poner el pin correcto se abre y luego a los 5 segundos se cierra.

Mostar en el dashboard el estado de la cerradura.

Crear un tab nuevo en el dashboard llamado pin de seguridad

Basarse en el flujo:

Hacer el flujo como un subflow.

Dashboard

Flujo

Subflow

Código:

Ejercicio 3 – Email y SMS

Hacer un formulario en el dashboard para mandar un correo electrónico y otro para mandar un SMS usando el servicio de Twilio: https://www.twilio.com/

Dashboard

Flujo

Código: https://github.com/jecrespo/Curso-Node-RED/blob/master/04-Ejercicio%20Final/Ejercicio_4/Ejercicio_4.json

Luego usar esta configuración para enviar un correo y un SMS cuando se pulse el botón de la Raspberry Pi y el relé del nodo remoto 14 esté encendido, viéndolo en un dashboard.

Ejercicio 4 – Predicción de Lluvia con datos AEMET

Hacer un panel de control que muestre la predicción de lluvia de los próximos 7 días de una ciudad usando los datos de AEMET y su API.

Solución: https://github.com/aprendiendonodered/AEMET_Prediccion_Dias

Además mostrar la predicción de temperatura de los próximos 5 días usado el nodo de open weather map https://flows.nodered.org/node/node-red-node-openweathermap 

Por último publicar todos los datos por MQTT con el topic: “educantabria/nodo00/santander/predicción/[lluvia/santander]/{dia}/{hora}”

Topics publicados:

  • casa/santander/prediccion/lluvia/{dia} – Publica la predicción de lluvia de santander obtenida de AEMET
  • casa/santander/prediccion/temperatura/{dia}/{hora} – Publica la predicción de temperatura de santander obtenida de Open Weather

JSONata para Node-RED

JSONata es un lenguaje de consulta y transformación de objetos JSON

Las estructuras de datos son uno de los elementos más importantes de cualquier lenguaje de programación. Nos permite estructurar los datos de manera consistente y realizar operaciones que requieren algunos patrones. Sin un patrón, es difícil para cualquier desarrollador encontrar una forma eficiente de extraer o manipular los datos. JSON es un formato muy conocido que la mayoría de nosotros usamos todos los días. Al trabajar con él, hay operaciones que hacemos habitualmente, como consultar, filtrar, ordenar, agrupar y otras.

JSONata es un lenguaje ligero de consulta y transformación para datos JSON. Inspirado en la semántica de ‘location path’ de XPath 3.1, permite expresar consultas sofisticadas en una notación compacta e intuitiva. Se proporciona un rico complemento de operadores y funciones incorporados para manipular y combinar datos extraídos, y los resultados de las consultas se pueden formatear en cualquier estructura de salida JSON utilizando un objeto JSON familiar y una sintaxis de array. Junto con la posibilidad de crear funciones definidas por el usuario, se pueden crear expresiones avanzadas para abordar cualquier tarea de transformación y consulta JSON.

Web: https://jsonata.org/

Documentación: http://docs.jsonata.org/overview.html

Más información:

Para admitir la extracción de valores de una estructura JSON, se define una sintaxis de ruta de ubicación. Al igual que XPath, esto seleccionará todos los valores posibles en el documento que coincidan con la ruta de ubicación especificada. Las dos construcciones estructurales de JSON son objetos y arrays.

Un objeto JSON es una matriz asociativa. La sintaxis de la ruta de ubicación para navegar en una estructura profundamente anidada de objetos JSON comprende los nombres de campo separados por un punto ‘.’ delimitadores. La expresión devuelve el valor JSON al que se hace referencia después de navegar al último paso en la ruta de ubicación. Si durante la navegación de la ruta de ubicación, no se encuentra un campo, la expresión no devuelve nada (representado por Javascript undefined). No se producen errores como resultado de datos no existentes en el documento de entrada.

Ejemplos en:

Los arrays JSON se utilizan cuando se requiere una colección ordenada de valores. Cada valor de la matriz está asociado con un índice (posición) en lugar de un nombre, por lo que para abordar valores individuales en una matriz, se requiere sintaxis adicional para especificar el índice. Esto se hace usando corchetes después del nombre de campo de la matriz. Si los corchetes contienen un número o una expresión que se evalúa como un número, entonces el número representa el índice del valor a seleccionar. Los índices tienen un desplazamiento cero, es decir, el primer valor de una matriz arr es arr [0]. Si el número no es un número entero, entonces se redondea a un número entero. Si la expresión entre corchetes no es numérica o es una expresión que no se evalúa como un número, entonces se trata como un predicado.

Los índices negativos cuentan desde el final de la matriz, por ejemplo, arr [-1] seleccionará el último valor, arr [-2] el penúltimo, etc. Si se especifica un índice que excede el tamaño de la matriz, entonces no se selecciona nada.

Si no se especifica ningún índice para una matriz (es decir, no hay corchetes después de la referencia del campo), se selecciona toda la matriz. Si la matriz contiene objetos y la ruta de ubicación selecciona campos dentro de estos objetos, se consultará cada objeto dentro de la matriz para su selección.

Ejemplos en:

Predicate Expressions

En cualquier paso de una ruta de ubicación, los elementos seleccionados se pueden filtrar utilizando un predicado – [expr] donde expr se evalúa como un valor booleano. Cada elemento de la selección se compara con la expresión, si se evalúa como verdadero, entonces el elemento se mantiene; si es falso, se elimina de la selección. La expresión se evalúa en relación con el elemento actual (contexto) que se está probando, por lo que si la expresión de predicado realiza la navegación, entonces es relativa a este elemento de contexto.

Ejemplos:

  • Account.Order.Product.[ProductID=858383]
  • Account.Order.Product[ProductID=858383].`Product Name`

Ejemplos en:

Comodines

Uso de * en lugar del nombre del campo para seleccionar todos los campos de un objeto.

El comodín descendiente ** en lugar de * atravesará todos los descendientes (comodín de varios niveles).

Al procesar el valor de retorno de una expresión JSONata, podría ser conveniente tener los resultados en un formato coherente, independientemente de cuántos valores coinciden, es decir, forzar a que devuelva un array de valores. La expresión se puede modificar para que devuelva un array incluso si solo se coincide con un valor único. Esto se hace agregando corchetes vacíos [] a un paso dentro de la ruta de ubicación.

Funciones y Expresiones

Strings

Las expresiones de ruta que apuntan a un valor de cadena (string) devolverán ese valor.

Los literales de strings también se pueden crear encerrando la secuencia de caracteres entre comillas. Se pueden utilizar comillas dobles » o comillas simples ‘, siempre que se utilice el mismo tipo de comillas para el inicio y el final del literal de cadena. Los caracteres de comillas simples se pueden incluir dentro de una cadena de comillas dobles y viceversa sin escapar. Caracteres dentro del string se puede escapar utilizando el mismo formato que las cadenas JSON.

Las cadenas se pueden combinar utilizando el operador de concatenación &. Este operador unirá las dos cadenas devueltas por las expresiones a cada lado. Este es el único operador que intentará forzar sus operandos al tipo esperado (cadena).

Numéricos

Los literales numéricos también se pueden crear utilizando la misma sintaxis que los números JSON. Los números se pueden combinar utilizando los operadores matemáticos habituales para producir un número resultante. Operadores admitidos:

  • + suma
  • – resta
  • * multiplicación
  • / división
  • % resto (módulo)

$number pasa a número el dato y poder operar en JSONata

Comparación

Se utiliza a menudo en predicados, para comparar dos valores. Devuelve un valor booleano verdadero o falso. Operadores admitidos:

  • = igual
  • ! = no es igual
  • < menor que
  • <= menor o igual que
  • > mayor que
  • > = mayor o igual que
  • in valor está contenido en una matriz

Booleanos

Se utiliza para combinar resultados booleanos, a menudo para admitir expresiones de predicado más sofisticadas. Operadores admitidos:

  • and
  • or

Ejemplo: $[data.age > 16 and data.age < 20]

Tenga en cuenta que not se admite como función, no como operador.

Ejemplos en:

Otras tareas que se pueden realizar:

  • Ordenar
  • Hacer funciones
  • Trabajar con fechas
  • Trabajar con strings
  • etc…

Ejercicios Básicos Node-RED

Primer Flujo en Node-RED

Vamos a probar un flujo muy simple. Lo que hará es mostrar un texto por el panel de debug. Arrastra un nodo inject de la categoría input y un nodo debug de la categoría output al flujo. Los tienes que conectar entre ellos arrastrando el punto de la parte derecha del nodo inject sobre el punto de la parte izquierda del nodo debug.

primer flujo node-red

A continuación vamos a editar el nodo inject. Si haces doble click sobre el nodo se abrirá un panel donde nos muestra diferentes parámetros. En este panel tienes que seleccionar del menú desplegable donde pone Payload, la opción que pone String.

En el campo de texto pon cualquier cosa como por ejemplo Hola mundo 🙂

Para guardar la aplicación sólo tienes que dar a Deploy que si te has dado cuenta, ha pasado de estar en un color gris oscuro a rojo.

deploy node-red

Una vez que lo hayas pulsado, volverá de nuevo al color gris oscuro. Esto quiere decir que ya tenemos guardados todos los cambios del flujo de Node-RED.

Para probar este primer flujo con Node-RED tenemos que abrir el panel de debug que está situado en la parte derecha. Luego, tienes que hacer click sobre la parte izquierda del nodo inject.

Esto hará que en el panel debug aparezca lo que hemos escrito en la configuración del nodo inject.

Como puedes ver, el mensaje se muestra en el panel debug.

Para saber que se ha hecho un deploy, se puede hacer que mande un correo cada vez que se reinicia Node-RED. Flujo:

[{"id":"67252650.d05f28","type":"e-mail","z":"45a71fc.1bebde","server":"smtp.gmail.com","port":"465","secure":true,"tls":true,"name":"micuenta@gmail.com","dname":"manda email alerta","x":410,"y":580,"wires":[]},{"id":"fc4c30da.caea3","type":"inject","z":"45a71fc.1bebde","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":true,"onceDelay":0.1,"topic":"Mi instancia Node-RED deployed","payload":"Mi instancia de Node-RED ha hecho un redeploy o se ha reiniciado.","payloadType":"str","x":210,"y":580,"wires":[["67252650.d05f28"]]}]

Más información: https://programarfacil.com/blog/raspberry-pi/introduccion-node-red-raspberry-pi/

Node-RED y MQTT con Wemos D1 Mini

Capturar los datos mandados por los nodos remotos por MQTT.

Sólo tienes que arrastrar el nodo mqtt que está en la categoría input al flujo.

sistema alarma node-red

Ahora hay que configurarlo. Aquí es donde vemos la potencia de Node-RED. Cuando utilizamos una tecnología, nos centramos en lo superficial. En el caso de MQTT lo único que tenemos que hacer es configurar el broker y el topic.

Al tratarse de un nodo de entrada, lo que hace es recibir los mensajes publicados en un topic es decir, se suscribe al topic. Haz doble click sobre el nodo para que abra el panel de configuración.

En el panel de configuración MQTT vamos a configurar primero el broker MQTT. Haz click en el lápiz que aparece en Server.

sistema alarma node-red

Esto abre un nuevo panel de configuración. Pon un nombre al broker MQTT por ejemplo RASPBERRY PI MOSQUITTO. En Server tienes que poner la IP donde está instalado el broker MQTT y el puerto que utiliza, normalmente es el 1883.

Esta sería la configuración mínima. No te olvides de hacer click en el botón Add.

sistema alarma node-red

Después de esta acción volverás al panel de configuración del nodo mqtt y automáticamente, habrá seleccionado el broker MQTT que acabamos de crear.

Por último, vamos a rellenar el campo de Topic. Debe ser el mismo que hemos puesto en Arduino o el ESP8266, /casa/puerta/alarma. Una vez lo tengas, haz click en Done.

sistema alarma node-red

Ahora sólo nos queda probarlo. Para ello vamos a utilizar el mismo nodo debug de la categoría output que hemos utilizado antes.

Arrástralo al flujo, conecta los dos nodos y haz click en el botón Deploy.

sistema alarma node-red

Para probar el sistema lo podemos hacer de dos formas. Desde una terminal de Raspberry Pi podemos publicar un mensaje en el topic o directamente conectando la placa y simulando que abren la puerta.

El resultado sería el siguiente.

sistema alarma node-red

Segundo Flujo

Obtener los datos de los terremotos en el mundo descargando un csv de una web pública.

Pasos:

  • Añade un nodo inject
  • Añade un nodo http request que consulte esta web: https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/significant_month.csv
  • Añade un nodo csv
  • Añade un node debug
  • Únelo todo
  • Añade un nodo switch de forma que saque aquellos datos cuyo valor de magnitud (​​msg.payload.mag) sea mayor o igual que 7
  • Añade un nodo change que ponga en msg.payload el valor PANIC!!!
  • Añade un nodo de debug que muestre el dato del nodo change

Código:

[{"id":"e36406f2.8ef798","type":"inject","z":"f03b57d5.e525f8","name":"","topic":"","payload":"","payloadType":"str","repeat":"300","crontab":"","once":false,"x":130,"y":900,"wires":[["c3c50023.3bbed"]]},{"id":"c3c50023.3bbed","type":"http request","z":"f03b57d5.e525f8","name":"Recent Quakes","method":"GET","url":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/significant_month.csv","tls":"","x":300,"y":900,"wires":[["8afc6cac.e0812"]]},{"id":"8afc6cac.e0812","type":"csv","z":"f03b57d5.e525f8","name":"","sep":",","hdrin":true,"hdrout":"","multi":"one","ret":"\\n","temp":"","x":470,"y":900,"wires":[["44779781.4190f8","6f0eb546.9e208c"]]},{"id":"44779781.4190f8","type":"debug","z":"f03b57d5.e525f8","name":"","active":true,"complete":false,"x":630,"y":900,"wires":[]},{"id":"6f0eb546.9e208c","type":"switch","z":"f03b57d5.e525f8","name":"","property":"payload.mag","propertyType":"msg","rules":[{"t":"gte","v":"7","vt":"num"}],"checkall":"true","outputs":1,"x":510,"y":960,"wires":[["d78d4aa8.8c8208"]]},{"id":"d78d4aa8.8c8208","type":"change","z":"f03b57d5.e525f8","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"PANIC!","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":650,"y":1020,"wires":[["72fddece.fac0d"]]},{"id":"72fddece.fac0d","type":"debug","z":"f03b57d5.e525f8","name":"","active":true,"complete":false,"x":750,"y":960,"wires":[]}]