Para el curso on-line “Node-RED Developer Nivel 1”, el material necesario por parte de los alumnos para realizarlo es:
1 PC o Portátil con conexión a internet.
Para seguir el curso on-line es recomendable dos pantallas, una para seguir el vídeo y otra para programar en Node-RED.
Una cuenta en github o bitbucket.
Opcionalmente software de virtualización instalado para ejecutar Node-RED. p.e. VirtualBox, VMWare Fusion o Docker.
Opcionalmente una Raspberry Pi conectada a Internet. Estas Raspberry Pi podrían ser proporcionadas por el Think TIC y configurarlas para acceso remoto desde casa del alumno a los dispositivos ubicados en el Think TIC.
Opcionalmente los alumnos con dispositivos IoT podrían conectarse e interactuar con ellos.
Todo el software y documentación utilizado en el curso es libre con licencia creative commons o similar.
Toda la documentación generada para la impartición de este curso será liberada con licencia Creative Commons y podrá ser utilizada bajo sus términos. La documentación estará disponible en https://www.aprendiendoarduino.com/
Entorno On-Line de Prácticas
Arquitectura
Se dispone de tres servidores:
enriquecrespo.com (S.O. CentOS 8)
Mosquitto
Grafana
Docker
Otros servicios públicos
aprendiendoarduino.com
Documentación curso con WordPress
BBDD MySQL públicas
Servidor cloud con las siguientes características:
1 vCPU
2 GB RAM
20 GB SSD
Node-RED
Cada alumno debe tener al menos una instancia de Node-RED instalada en el S.O. o virtualización que desee.
Opcionalmente se puede proporcionar una instancia en enriquecrespo.com. El usuario y contraseña se enviará por correo.
Broker MQTT. Mosquitto
Se usará un broker común para comunicar todos los dispositivos en la dirección: mqtt://enriquecrespo.com:1883
Los alumnos recibirán usuario y contraseña para acceder al broker con permisos de lectura y escritura en aprendiendonodered21/#
Opcionalmente hay una dirección de MQTT seguro en: mqtts://enriquecrespo.com:8883 y MQTT sobre websocket en ws://enriquecrespo.com:9001
Servicios
Base de datos MySQL en https://qaej225.aprendiendoarduino.com/ donde los alumnos podrán usar para almacenar datos. Recibirán por correo las credenciales de acceso.
Grupo de telegram para comunicarse y programar bots.
Hardware Usado para Interactuar
Para interactuar en el curso disponemos de diversos HW conectados.
Raspberry Pi Zero: Instalada en local con cámara y programada con Node-RED, usada como dispositivo remoto.
Raspberry Pi 3B: Instalada en local con Node-RED, Mosquitto y BBDD, usada como servidor.
Wibeee instalado y publicando datos.
Si el alumno tiene algún HW con que quiera interactuar, puede presentarlo y lo integramos en las prácticas.
Configuración de las Instancias de Node-RED Alumnos
Las instancias de Node-RED de los alumnos están desplegadas con Docker y con configuración personalizada y una serie de configuraciones adicionales ya hechas.
Node-RED se está convirtiendo en un lenguaje de programación muy popular en IoT/Industria 4.0, que cada vez están adoptando más empresas en sus desarrollo.
Node-RED es una herramienta de programación visual (low-code). Node-Red se ha consolidado como framework open-source para la gestión y transformación de datos en tiempo real en entornos de Industry 4.0, IOT, Marketing digital o sistemas de Inteligencia Artificial entre otros. La sencillez de aprendizaje y uso, que no requiere de conocimientos de programación, su robustez y la necesidad de bajos recursos de cómputo ha permitido que hoy en día se encuentre integrado en prácticamente la mayoría de dispositivos IOT e IIOT del mercado, así como equipos Raspberry, sistemas cloud o equipos locales.
Dentro del itinerario de formación para IoT/Industria 4.0, este curso profundiza de forma práctica en la programación dentro del entorno IoT/Industria 4.0/digitalización. Anteriormente se trataron muchos temas y tecnologías de forma práctica sin profundizar en ellas, para entrar ahora en la programación.
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 que solo pueden acceder las grandes corporaciones.
En anteriores cursos se ha introducido qué es IoT con el uso de tecnologías libres en el Think TIC:
Gracias a la 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.
Objetivo
Node-Red es una herramienta open source de desarrollo/programación basada en flujos. Es una programación visual desarrollada originalmente por IBM para conectar dispositivos de hardware, API y servicios en línea como parte del Internet de las cosas (IoT).
El objetivo de este curso es que el alumno aprenda el uso de Node-RED y la programación visual mediante flujos para su uso en entornos de domótica, IIoT e IoT. El alumno será capaz de instalar, configurar y realizar proyectos de dificultad intermedia usando Node-RED.
Node red es adecuado para profesionales 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.
Al finalizar el curso el alumno será capaz de:
Instalar Node-RED en diversas plataformas
Conocer el protocolo MQTT
Configurar y usar de forma segura Node-RED
Usar la programación de flujos de forma eficiente
Hacer módulos de funciones en Node-RED
Hacer debug de los programas Node-RED
Instalar y utilizar nodos
Configurar un dashboard
Integrar Node-RED con servicios de terceros
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, motores, etc…
También es recomendable nociones básicas de programación, especialmente javascript o Node.js, protocolos IoT (REST y MQTT) y servicios IoT on-line
Es recomendable un conocimiento medio de Inglés puesto que gran parte de la documentación está en Inglés.
Metodología
El curso on-line consiste en 20 horas de formación en directo, repartidas en 10 sesiones de 2 horas en horario de 18:00 a 20:00 entre el 23 de noviembre y el 4 de diciembre.
Al finalizar cada sesión de 2 horas, se propondrá un reto o ejercicio para realizar a lo largo de la duración del curso. Cada día se hará una sesión de tutoría de 1 hora de duración para ayuda, en grupos reducidos, sobre las dudas relativas a los retos o ejercicios propuestos.
La plataforma en vídeo usada será https://meet.jit.si/ y se grabarán todas las sesiones, tanto las de formación como las de tutorías para las prácticas.
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 – CompartirIgual (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.
Reto/Ejercicio: Hacer los primeros flujos sencillos. Hacer que cuando la temperatura esté fuera de un rango entre 18 y 22 grados, ponga en rojo un elemento del dashboard y mande un email.
Congratulations! Your certificate and chain have been saved at:/etc/letsencrypt/live/xxxxx/fullchain.pem Your key file has been saved at:/etc/letsencrypt/live/xxxxx/privkey.pem Your cert will expire on xxxx. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew"
Una vez tenemos los certificados TLS en la ruta indicada, dependiendo del software que los necesite configurarlo, indicando la ruta donde están los certificados.
Reto/Ejercicio: Hacer un flujo para publicar datos de CPU, Memoria y temperatura de las Raspberry Pi de casa en MQTT topic aprendiendonodered/alumnoxx/raspberrypi/[CPU,Memoria,Temperatura] y que la instancia de Node-RED del curso las recoja y muestre en el dashboard. Para ello usar el broker MQTT. Opcionalmente usar el broker integrado en Node-RED aedes o HTTP endpoint.
Reto/Ejercicio: Hacer un dashboard para ver la temperatura de todas las Raspberry Pi publicada en MQTT y sus gráficas. Usar MQTT Explorer para ver que datos
Reto/Ejercicio: Hacer un IFTTT con Node-RED. ¿Ideas?. P.e. si recibo un correo con el subject «twitter», twittear el contenido del correo. P.e. si recibo una llamada por la el HTTP endpoint mandar un email.
IFTTT Propio. Como IFTTT es ahora de pago, hacer tu propio IFTTT con Node-RED. Planes IFTTT: https://ifttt.com/plans
Reto/Ejercicio: Hacer un subflujo con 3 salidas, que pasándole una variable de entorno del topic donde se suscriba y el número de datos a analizar, devuelva la media, máxima y mínima de esos datos por cada salida.
Reto/Ejercicio: Clonar el proyecto https://github.com/aprendiendonodered/ejercicio04 y añadir toda la información de todas las Raspberry Pi que publican datos en mqtt://enriquecrespo.com:1883 y añadir las chart a cada datos, mostrando los datos de forma visual y personalizando el dashboard.
Corregido los códigos a importar del botón de cambia de color y subflow con variables de entorno MAX y MIN.
Reto/Ejercicio: Hacer una función que guarde los últimos 20 valores en una variable de contexto y una vez tenga los 20, mande la media, máximo y mínimos por tres salidas y en una cuarta mande los 20 mensajes que ha retenido de forma consecutiva.
Hacer también este mismo ejercicio buscando nodos en https://flows.nodered.org/ que hagan esas funciones.
Reto/Ejercicio: Hacer una aplicación con Node-RED y publicar. Recoger datos de una Raspberry Pi, ordenarlos y guardar en formato csv. Luego, obtener los datos pulsando un botón del dashboard y mostrarlos en un chart del dashboard.
Disponibilidad de los servicios tras el curso
nodered.enriquecrespo.com se apagará, pero si queréis usarlo durante un tiempo, lo puedo mantener un tiempo
mosquitto en enriquecrespo.com permanecerá activo. Si alguien desea un usuario con acceso exclusivo a un grupo de topics, puedo suministrarlo.
si alguien quiere una instancia de Node-RED basada en docker en enriquecrespo.com puedo suministrarla.
Veamos unos ejercicios completos con todo lo aprendido durante el curso.
Este ejercicio consiste en el montaje de 15 nodos remotos basados en Wemos D1 mini que gestionaremos con Node-RED y 15 Raspberry Pi con un led y un pulsador cada una y que además ejecutarán Node-RED localmente.
Montaje
Esquema de conexión nodo Remoto Wemos D1 Mini basado en:
NOTA: este firmware es para el nodo 14, pero en caso de que el nodo sea otro nº de nodo sustituir estas líneas, siendo X = 1, 2, 3, 4 ,5, 6, ….:
const char* publish_10sec = «nodoX/dato10s»;
const char* publish_60sec = «nodoX/dato60s»;
const char* publish_reset = «nodoX/reset»;
const char* subs_led = «nodoX/led»;
const char* subs_rele = «nodoX/rele»;
if (client.connect(«wemosd1mini187222X»,»usuario_mosquitto»,»password_mosquitto»))
Este firmware publica en un topic cada 10 segundos y en otro cada 60 segundos. Los topics son:
nodoX/dato10s
nodoX/dato60s
En caso de que el nodo se resete publica en el topic: nodoX/reset
Los nodos estás suscrito a dos topic:
nodoX/led – enciende y apaga el led integrado de ESP8266
nodoX/rele – enciende y apaga el relé
Para el control del LED y botón de Raspberry Pi, se hará mediante la programación en cada uno de los Node-RED de cada Raspberry Pi.
RPiX/led – topic al que se suscribe para indicar si se enciende o apaga
RPiX/pulsador – topic al que publica el estado: pulsado (1) o liberado (0)
Testeo del Sistema
Una vez configurado todo el sistema comprobar que cada nodo y Raspberry Pi está publicando los datos y funciona el control al modificar los valores de los topics a los que están suscritos.
Para ello usar un cliente MQTT como MQTT.fx:
suscrito a los topics:
nodoX/dato10s
nodoX/dato60s
nodoX/reset
RPiX/pulsador
publicando a los topics:
nodoX/led
nodoX/rele
RPiX/led
Una vez comprobado que leo los valores que publican los nodos y que puedo modificar el estado de los leds y relé publicando en los topics, pasamos a programar el sistema completo usando Node-RED.
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
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.
Usando el node de OpenWeatherMap, hacer un dashboard con la temperatura, humedad y presión donde se actualice el dato en un gauge y se haga una gráfica que muestre los últimos 7 días.
Mandar el dato de la temperatura a los nodos remotos, para ello publicar en el topic “nodoX/temperatura” el dato de temperatura y comprobar que llegan, para ello modificar el firmware para que los nodos remotos estén suscritos y lo muestren por el puerto serie.
Hacer un botón para que mande la predicción de los próximos 5 días al correo electrónico.
help – Ayuda start – Inicio enciende – Enciende Led apaga – Apaga led lee – Muestra datos broker
Y ya tengo los comandos configurados:
/help
/start
/enciende
/apaga
/lee
Para configurar el bot en Telegram solo hace falta poner el nombre del bot y el token.
Crear un canal o un grupo y hacer un flujo sencillo que al pulsar mande un un mensaje por Telegram a tu usuario y a al grupo o canal.
Ahora queda que desde Node-RED lea los comandos y responda. Al mandar el comando /enciende el LED de la Raspberry Pi al mandar el comando /apaga el LED de la Raspberry Pi. El comando /lee me devuelve el estado del LED.
Una forma de hacer esto es publicando el el topic /raspberrypi/led el valor ON u OFF y ya tengo otro flujo hecho en el ejercicio 1.
Para saber el estado, se puede guardar en una variable de flujo que se actualiza con el topic /raspberrypi/led de forma que no solo cuando modifico desde el bot sino desde otros lugares.