Archivo de la categoría: Ejercicios

Ejercicio Node-RED: Reconocimiento de Matrículas

Hacer un sistema de reconocimiento de matrículas con Node-RED usando la API de https://platerecognizer.com/ 

Mandar una foto por diversos medios y obtener la matrícula o matrículas y otros datos que ofrece la API de https://platerecognizer.com/

Es posible montar una instancia on-premise de platerecognizer.com: 

Usar el nodo: https://flows.nodered.org/node/node-red-contrib-plate-recognizer (servicio externo)

Crear un dashboard para cargar, visualizar las imágenes y las matrículas detectadas y controlar las consultas hechas a la API con la versión Free.

Carga de imágenes:

Mostrar resultados:

Resultado de la detección: https://docs.platerecognizer.com/#read-number-plates-from-an-image

  • results/dscore – Confidence level for plate detection.
  • results/score Confidence level for reading the license plate text.

Mostrar en un panel el nº de consultas de mi cuenta este mes en https://platerecognizer.com/ y las que me quedan.

Repositorio con la solución: https://github.com/aprendiendonodered/EJERCICIO32_Reconocimiento_Matriculas 

Anuncio publicitario

Ejercicio Node-RED: Uso de BBDD Locales y Cloud

En una instancia de Node-RED montada como edge que recoge datos por MQTT realizar la siguiente configuración:

  • En una BBDD SQLite guardar los datos de forma local y que se pueda hacer búsqueda de datos rápidamente y compara datos
  • Mandar los datos de series temporales de datos a una BBDD InfluxDB en cloud
  • Mandar los datos de tablas de forma periódica a una BBDD MySQL en cloud

Crear una tabla en SQLite llamada sondas donde se guardarán los datos de las sondas de temperatura. Mantener sólo los datos durante 30 días. Los campos son el nombre del dispositivo y las variables que guarde.

Crear tabla:

CREATE TABLE "sondas" ( "id" INTEGER UNIQUE, "fecha" TEXT, "dispositivo" TEXT, "CPU" REAL,"Temperatura" REAL,"Memoria" INTEGER, PRIMARY KEY("id" AUTOINCREMENT) );

Borrar datos de los últimos 30 días:

DELETE FROM sondas WHERE unixepoch(fecha) < unixepoch('now','-1 months');

Insertar datos:

INSERT INTO "sonda" ("fecha", "raspberry","CPU","Temperatura","Memoria") VALUES (CURRENT_TIMESTAMP, $raspberry, $CPU, $Temperatura, $Memoria);

SQLite date and time functions: https://www.sqlite.org/lang_datefunc.html 

Los datos también se mandarán a una BBDD InfluxDB cloud en enriquecrespo.com

Grabar puntos de la monitorización del curso.

  • Para raspberry pi usar las tags: nombre raspberry pi y nombre de la persona
  • Para los wemos usar las tags: nombre del wemos y nombre de la persona

Ejemplo de punto:

[{"CPU":0.85,"Temperatura":63.4,"Memoria":107},{"raspberry":"raspberrypitt","nombre":"enrique"}]

Repositorio con las soluciones: https://github.com/aprendiendonodered/EJERCICIO31_Uso_BBDD

Ejercicios Node-RED

Ejercicio 01

Mostrar en el dashboard en un mismo grupo 3 widgets text donde cada segundo actualice el timestamp (epoch time), la fecha usando el nodo node-red-contrib-date y el día y hora en formato, usando el nodo moment para transformarlo.

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

Vídeo: https://youtu.be/wS0E1j1q7sM  

Ejercicio 02

Leer el dato de la temperatura publicado en MQTT y hacer que cuando la temperatura esté fuera de un rango entre 18 y 22 grados, ponga el estado de confort en un elemento del dashboard y mande un email.

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

Vídeos:

Imágenes:

Ejercicio 03

Hacer un dashboard para ver la temperatura de todas las Raspberry Pi publicada en MQTT y sus gráficas. Usar MQTT Explorer para explorar qué datos están publicados.

Opcionalmente hacer varias tabs/pestañas para mostrar: temperaturas, CPU y memoria agrupadas en cada pestaña.

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

Vídeos:

Flujo:

Dashboard Final:

Ejercicio 04

Sobre el Ejercicio02, añadir de forma dinámica los umbrales máximos y mínimos de alerta mediante dos sliders en el dashboard.

También hacer que los valores de los colores del gauge cambien en función del valor de MAX y MIN introducido por los sliders

Opcionalmente mostrar los mensajes de alerta y los iconos:

  • Todo Correcto: <i class=”fa fa-lightbulb-o fa-2x nr-dashboard-ok”></i>
  • Temperatura Alta: <i class=”fa fa-warning fa-2x nr-dashboard-warning”></i>
  • Temperatura Baja: <i class=”fa fa-exclamation-circle fa-2x nr-dashboard-error”></i>

Para cambiar la configuración de los widgets de dashboard se usa mediante msg.ui_control como se indica aquí: https://github.com/node-red/node-red-dashboard/blob/master/config-fields.md 

En este caso uso un nodo change donde borro payload y pongo las propiedades msg.ui_control.seg1 y msg.ui_control.seg2 a los valores almacenados en las variables de contexto.

Por último no dejar que el valor MIN sea mayor que MAX, ni que MAX sea menor que min en el dashboard, para ello controlar el valor de MIN y MAX al cambiar con un nodo switch y tomar la decisión a hacer.

Código: https://github.com/aprendiendonodered/ejercicio06.git 

Vídeos:

Ejercicio 05

Hacer un dashboard para controlar los wemos D1 Mini con el firmware instalado en el curso: https://aprendiendoarduino.wordpress.com/2021/02/20/mqtt-y-esp8266/

El Dashboard tendrá:

  • Un gauge y una gráfica indicando la temperatura de la sonda DS18B20
  • Un pulsador para encender y apagar el led del Wemos D1 Mini
  • Un pulsador para encender y apagar el relé
  • Un Input text o un formulario para mandar mensajes a la pantalla oled
  • Un slider para encender los 8 niveles de la matriz led.

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

Vídeo Youtube:

Flujo:

Dashboard:

Ejercicio 6 – 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.

Mostrar en el dashboard el estado de la cerradura.

Crear un flujo nuevo en el dashboard llamado pin de seguridad

Basarse en el flujo:

Hacer el flujo como un subflow.

Dashboard

Flujo

Subflow

Código:

Ejercicio 7 – 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

Ejercicio 8 – Mapa de Terremotos

Basándose en este flow: https://nodered.org/docs/tutorials/second-flow, hacer un mapa del mundo mostrando los terremotos actuales.

Usar el nodo worldmap: https://flows.nodered.org/node/node-red-contrib-web-worldmap 

Repositorio: https://github.com/aprendiendonodered/EJERCICIO27_Mapa_Terremotos.git

Ejercicio 9 – OwnTracks

Instalar la aplicación owntracks en un móvil: https://owntracks.org/

Configurar un broker MQTT público y que comience a transmitir datos:

  • Host: aprendiendonodered.com
  • Port: 8883
  • username: owntracks
  • Topic: owntracks/#

Programar un dashboard de worldmap y mostrar la posición y el track de los datos que mandamos por MQTT desde la app owntracks.

Adicionalmente guardar los datos en una BBDD InfluxDB. Hay un bucket en enriquecrespo.com llamado owntracks para guardar estos datos.

Repositorio: https://github.com/aprendiendonodered/EJERCICIO30_OWN_TRACKS

Ejercicio 10 – Open Weather Map

Usando el nodo 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 por MQTT al topic “cursomqtt/raspberrypixx/temperatura”.

Hacer un botón para que mande la predicción de los próximos 5 días al correo electrónico.

Dashboard

Flujo

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

Saber más: Raspberry Pi y Node-RED para IoT

Curso Raspberry Pi y Node-RED para IoT 2022: https://www.aprendiendoarduino.com/cursos/raspberry-pi-y-node-red-para-iot/

Día 1 (19/04/2022) – «Presentación del Curso»

Hoja de préstamo de material.

10 años de Raspberry Pi: https://www.youtube.com/watch?v=eiwm5TMHIy8 

Raspberry Pi Compute Module 4s: https://www.muycomputer.com/2022/04/06/raspberry-pi-compute-module-4s/

Día 2 (20/04/2022) – «Raspberry Pi OS y Linux»

Think TIC: https://www.larioja.org/thinktic/fr/contacto/think-tic

mDNS: https://en.wikipedia.org/wiki/Multicast_DNS

Conectar mediante SSH en Windows 10: ssh -l pi 192.168.6.xx

Raspberry Pi con Ethernet

Raspberry Pi con SSD: https://www.youtube.com/watch?v=gp6XW-fGVjo

Resumen día 1: Paso a Paso: Instalar Raspberry Pi OS

Continuar con:

Día 3 (21/04/2022) – «Linux e Instalación Servicios»

Servicios como ZeroTier o Remote.it nos permite administrar redes virtuales y entender el funcionamiento de las VPNs o los túneles.

Acceso por VNC usando remote.it. Añadir el servicio VNC en Remote.it

Comprobado el acceso a las Raspberry Pi desde Casa:

  • ZeroTier: conectado a la red ThinkTIC
  • Remote.it: acceso por SSH a Raspberry Pi
  • VNC: escritorio remoto

Contraseña por defecto Raspberry Pi: https://www.adslzone.net/noticias/seguridad/grave-fallo-raspberry-cambiar-contrasena/

Raspberry Pi OS elimina el usuario por defecto: https://www.muyseguridad.net/2022/04/13/raspberry-pi-usuario-por-defecto/

Ejercicio Paso a Paso: Instalar Node-RED, Webmin y SQLite

Día 4 (22/04/2022) – «Node-RED e Instalación de Servicios»

Resumen de lo visto hasta ahora y lo que veremos los próximos días.

Tenemos una Raspberry Pi instalada, configurada y con acceso remoto.

  • Podemos programarla con Python y Node-RED
  • Podemos administrarla con Webmin
  • Podemos almacenar datos con SQLite
  • Y todo en local o en remoto.

Acceso Remote.it a Node-RED HTTP y HTTPS.

Ejecutar un programa en el inicio en Raspberry Pi: https://www.dexterindustries.com/howto/run-a-program-on-your-raspberry-pi-at-startup/

Open Weather Map:

Día 5 (23/04/2022) – «MQTT»

Hacer copia de seguridad de la tarjeta SD.

Servidor MQTT:

  • Host: aprendiendonodered.com
  • Port: 8883
  • username: cursomqtt
  • Topic: cursomqtt/#

Encuesta Node-RED 2019: https://nodered.org/about/community/survey/2019/

Instrucciones instalación Node-RED: https://nodered.org/#get-started

Día 6 (25/04/2022) – «MQTT y Fundamentos Node-RED»

Resumen de lo visto en el ecuador del curso y lo que nos queda.

Dispositivos instalados, número de clientes en broker y carga del servidor

Aedes: https://flows.nodered.org/node/node-red-contrib-aedes

Xiaomi MiFlora: https://www.banggood.com/es/Global-Version-Xiaomi-4-In-1-Flower-Plant-Light-Temperature-Tester-Garden-Soil-Moisture-Nutrient-Monitor-p-1068369.html

Escanear dispositivos bluetooth: sudo hcitool lescan o bluetoothctl y luego poner scan on

zigbee2mqtt: https://www.zigbee2mqtt.io/

Ejercicio Paso a Paso: Node-RED y MQTT

Día 7 (26/04/2022) – «Instalación Node-RED»

Broker MQTT público: https://www.hivemq.com/mqtt-cloud-broker/

InfluxDB cloud: https://www.influxdata.com/products/influxdb-cloud/

MQTT broker escalable: https://vernemq.com/

Low Code Programming: https://aprendiendoarduino.wordpress.com/2021/11/07/low-code-programming/

Ejercicio Paso a Paso: Configurar Node-RED

Día 8 (27/04/2022) – «Programación Node-RED»

Eliminar o deshabilitar los flujos y empezamos desde cero.

Logs remote.it. Caída a las 0:14

MQTT Clean Session: http://www.steves-internet-guide.com/mqtt-clean-sessions-example/

Topic restriction: http://www.steves-internet-guide.com/topic-restriction-mosquitto-configuration/

Día 9 (28/04/2022) – «Programación Node-RED II»

Filtrar datos de un csv.

Precio de los combustibles: https://datos.gob.es/es/catalogo/e05068001-precio-de-carburantes-en-las-gasolineras-espanolas

Precio electricidad: https://www.ree.es/es/apidatos

Edge Computing: https://aprendiendoarduino.wordpress.com/2020/07/24/node-red-y-edge-computing/

Owntracks: https://owntracks.org/

Worldmap : https://flows.nodered.org/node/node-red-contrib-web-worldmap

Arte con Raspberry Pi y Node-RED

Día 10 (29/04/2022) – «Desarrollo con Node-RED»

Resumen de lo visto en el curso

Segunda edición del curso: https://www.larioja.org/thinktic/es/cursos-eventos/proximos-cursos-eventos/curso-raspberry-pi-node-red-iot

Curso Node-RED Developer

Códigos de los ejemplos del curso:

Alexa y Node-RED:

Flujo de node-red https://flows.nodered.org/node/node-red-contrib-amazon-echo sin skills. Se pone a escuchar Node-RED en el puerto 80 y debe estar Node-RED en la misma red que el amazon echo. En caso que el puerto 80 esté usado hay que usar un proxy. Proxy https://github.com/datech/node-red-contrib-amazon-echo/issues/89

Este nodo simula una lámpara HUE en Node-RED con las llamadas a la API de HUE, pero se puede usar para otras cosas. Simula una bombilla inteligente y como pone en el description solo tiene unas funciones limitadas, emula una Philips Hue bridge. Ver http://192.168.1.12/api/name (192.168.1.12 es la IP de Node-RED en una Raspberry Pi)
Al poner el node abre el puerto indicado mostrando http://192.168.1.12:8008/description.xml

Otra opción sin skills ni registro https://flows.nodered.org/node/node-red-contrib-alexa-local similar.

Opción con skill: https://flows.nodered.org/node/node-red-contrib-alexa-smart-home

Seguridad Node-RED:

  • Node-RED usa oauth2.0 para securiza la admin api
  • Usa auth bearer token. Expira en: 604800 segundos (7 días)
  • Ver https://discourse.nodered.org/t/node-red-configuration-adminauth-sessionexpirytime/8261/2. Parámetro sessionExpiryTime en settings.js
  • Ver AccessToken en Application – Storage – Local Storage
  • El navegador guarda el token y luego cuando vuelves a acceder no pide la contraseña. Puedes ver los token en el fichero /home/pi/-node-red/.sessions.json

El acceso al Dashboard y rutas HTTP usa basic Auth:

Nodos Node-RED y Prácticas!!!

Eliminar contraseñas de los ordenadores!!!!

Recoger material.

Y cualquier duda a aprendiendoarduino@gmail.com

Práctica 6: Integración de Datos en Plataforma IoT

Ejercicio 01

Hacer un dashboard para controlar los wemos D1 Mini con el firmware instalado en el curso: https://aprendiendoarduino.wordpress.com/2021/02/20/mqtt-y-esp8266/

El Dashboard tendrá:

  • Un gauge y una gráfica indicando la temperatura de la sonda DS18B20
  • Un pulsador para encender y apagar el led del Wemos D1 Mini
  • Un pulsador para encender y apagar el relé
  • Un Input text o un formulario para mandar mensajes a la pantalla oled
  • Un slider para encender los 8 niveles de la matriz led.

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

Flujo:

Dashboard:

Vídeos solución:

Ejercicio 02

Almacenar en la Base de datos MySQL instalada en la Raspberry Pi en la práctica 1 https://aprendiendoarduino.wordpress.com/2021/02/13/practica-1-instalacion-y-configuracion-raspberry-pi-os/ los datos de temperatura del sensor con el firmware de la práctica 2: https://aprendiendoarduino.wordpress.com/2021/02/15/practica-2-sensorizacion-iot-con-esp8266/

Hacer la lógica para controlar el relé de forma cuando la temperatura sea inferior a 21 grados encienda el relé y lo pare cuando alcance los 23 grados. Cuando el relé se encienda o apague, mandar un correo.

Hacer un dashboard que muestra la temperatura del sensor DS18B20 con un gauge y el estado del relé con un texto.

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

Flujo:

Dashboard:

Vídeos solución:

Ejercicio 03

Capturar foto de Raspberry Pi Zero mediante un botón del dashboard y mostrar la foto en el dashboard.

Tomar foto:

  • publicar un valor cualquiera en el topic educantabria/tomafotomqtt. La foto se publica en el topic educantabria/foto en baja resolución.
  • publicar un valor cualquiera en el topic educantabria/tomafotoweb. La foto se actualiza en https://www.aprendiendoarduino.com/servicios/imagen.jpg en alta resolución.

Hacer dos grupos en el dashboard para los dos métodos de captura de datos.

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

Flujo:

Dashboard: 

Vídeos solución:

Ejercicio 04

Configurar un cliente FTP y un servidor FTP con Node-RED e interactuar entre ellos:

Capturar datos de MQTT publicados en enriquecrespo.com:8883 y guarda los datos en un fichero local usando el nodo file en formato csv usando el nodo csv https://cookbook.nodered.org/basic/generate-csv. Poner un botón en el dashboard y al pulsarlo, mandar los datos del fichero csv con el cliente ftp al servidor y borrar los datos del fichero (inicializarlo).

Para mandar los datos se puede usar el servidor público ftp en enriquecrespo.com: 7021 o un servidor propio con node red o de otro tipo.

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

Flujo:

Dashboard:

Vídeos solución: