Archivo de la etiqueta: IoT

Presentación Curso Node-RED Developer. 2021

Título: “Curso Node-RED Developer. Nivel 1”

Motivación

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.

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.

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 19 y 30 de abril de 2021.

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.

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

Contenido del Curso

Toda la documentación del curso y el código usado es libre y accesible desde https://www.aprendiendoarduino.com/cursos/node-red-developer-2021-nivel-i/

  • Presentación del Curso
  • Entorno On-Line de Prácticas
  • Instalación de Node-RED
  • Protocolo MQTT
  • Edge Computing
  • Configurar y securizar Node-RED
  • Node-Red en la Nube
  • Programación Node-RED
  • Nodos Node-RED
  • Dashboard Node-Red
  • Debug Node-RED
  • Funciones en Node-RED
  • Integración con Servicios de Terceros
  • Proyectos con Node-RED

Presentaciones

  • Nombre
  • ¿Has usado Node-RED?
  • ¿Aplicaciones de Node-RED?
  • ¿Hardware con el que interactuar?

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/

Conceptos Básicos de Ciberseguridad

La seguridad y la privacidad de los datos son los conceptos principales de la protección de datos. 

La seguridad de los datos es la prevención de accesos no autorizados a conjuntos de datos. Dichos accesos son los que desembocan en vulneraciones o ataques, Para lograr la seguridad, las organizaciones utilizan herramientas y soluciones tecnológicas como firewalls, autenticación de usuarios, limitaciones en la red y prácticas de seguridad adaptadas a cada entorno u organización. También pueden incluirse los procesos de encriptación y tokenización de manera a que no pueda ser posible la lectura de los datos en fases clave del tránsito de los mismos, por parte de los cibercriminales.

La privacidad de los datos se encarga de asegurar que los datos; ya sean procesados, almacenados o transmitidos sean consumidos de acuerdo a las regulaciones y normas. Así también, que estos datos puedan ser manipulados bajo el consentimiento de quien sea dueño de los mismos.

Tokenización: https://en.wikipedia.org/wiki/Tokenization_(data_security) 

Los pilares de la seguridad son:

  • Confidencialidad
  • Integridad
  • Disponibilidad

Confidencialidad: Cualidad de la información para no ser divulgada a personas o sistemas no autorizados.  Se trata básicamente de la propiedad por la que esa información sólo resultará accesible con la debida y comprobada autorización.

El objetivo de la confidencialidad es, prevenir la divulgación no autorizada de la información sobre nuestra organización.

Integridad: Cualidad de la información para ser correcta y no haber sido modificada, manteniendo sus datos exactamente tal cual fueron generados, sin manipulaciones ni alteraciones por parte de terceros. Esta integridad se pierde cuando la información se modifica o cuando parte de ella se elimina. Una garantía para mantenerla intacta es la firma digital.

El objetivo de la integridad es prevenir modificaciones no autorizadas de la información.

Disponibilidad: Aquella información a la que podemos acceder cuando la necesitamos a través de los canales adecuados siguiendo los procesos correctos.

El objetivo de la disponibilidad es prevenir interrupciones no autorizadas de los recursos informáticos.

Más información:

Mejorar seguridad en entornos IoT: https://www.arsys.es/blog/seguridad-entornos-iot/ 

Guia seguridad IoT INCIBE:

Otros artículos interesantes:

Recomendaciones Seguridad IoT

Vulneravilidades comunes de los dispositivos IoT: https://www.infoplc.net/actualidad-industrial/item/108035-vulnerabilidades-dispositivos-iot

Recomendaciones:

  • No abrir puertos innecesariamente. Si un servidor envía datos a un dispositivo IoT, este debe estar escuchando con un puerto abierto de entrada. Esto supone que el dispositivo tiene que estar escuchando en todo momento para que los datos sean enviados. Por esta razón, implementar protocolos COAP, MQTT, WebSockets y HTTP2.0 son mejores prácticas para proteger una conexión, independiente del protocolo de red usado durante el intercambio de información.
  • Cifrado de extremo a extremo. TLS / SSL protege el nivel superior del flujo de datos entre los dispositivos y cifra los datos mientras son transferidos. TLS / SSL es adecuado para la seguridad de la transmisión de datos, pero no los datos que residen en el dispositivo a menos que está encriptado. Para una verdadera seguridad de extremo a extremo, los datos deben cifrarse con Advanced Encryption Standard (AES).
  • Control de acceso basado en tokens. Mientras AES y TLS / SSL se pueden utilizar para cifrar los datos a medida que se está transfiriendo, otro reto importante es definir el control de quién y qué puede transmitir y recibir datos. Dentro del paradigma de publicación / suscripción, un enfoque de control de acceso basado en token puede ser utilizado para distribuir señales a los dispositivos para permitir el acceso a los canales de datos específicos. En su defecto usar contraseñas seguras.
  • Interfaces web seguras y certificadas. Uso de HTTPS para proteger la información transmitida con acceso mediante usuario y contraseña.
  • Autenticación y autorización. No solo prestar atención a la autenticación, sino también a los datos o recursos a los que se puede acceder.
  • Prestar atención a la privacidad. Determinar la cantidad de información personal recopilada y protegerlos adecuadamente, así como desidentificar o anonimizar.
  • Configuración de la seguridad. Usar protocolos seguros y actualizados sin vulnerabilidades conocidas. Usar las soluciones de cifrado más potentes.
  • Usar software y firmware seguro. Asegurarse de tener los dispositivos actualizados y con los parches de seguridad aplicados. No usar sistemas operativos obsoletos, ni librerías no mantenidas en el desarrollo de aplicaciones o firmware.
  • Deshabilitar funcionalidades no utilizadas. No habilitar características no usadas, no conectar dispositivos si no es necesario o apagar cuando no se use, deshabilitar o proteger el acceso remoto a los dispositivos IoT.
  • Habilitar el uso de logs. Guardar los eventos que se producen como accesos, cambios de contraseña, actualizaciones, etc..
  • Prestar atención a la seguridad física. Limitar el acceso a puertos del dispositivo y ubicarlos en sitios seguros (p.e. vandalismo, acceso de terceros, pérdidas de energía).
  • Realizar auditorías de seguridad con regularidad. Pentesting, comprobar visibilidad de los dispositivos en Internet (p.e. shodan), etc…
  • Pensar en la seguridad desde la fase de requisitos y diseño.
  • Almacenamiento de datos seguro. No exponer las bases de datos y usar procesos intermedios para insertar, modificar y acceder a los datos.
  • Gestionar y monitorizar los dispositivos IoT de forma centralizada. Comprobar su correcto funcionamiento y que no se produzcan eventos que puedan afectar a su seguridad. Poder apagar dispositivos de forma remota en caso que sea comprometido.

Práctica 1: Instalación y configuración Raspberry Pi OS

Instalar y configurar una Raspberry Pi para dejar lista como un nodo edge o gateway IoT.

En caso de no disponer de Raspberry Pi:

  • Instalar y configurar Raspberry Pi OS y software, virtualizado en VirtualBox
  • Instalar y configurar una máquina física o virtual Linux.

Instalar:

  • Raspberry Pi OS
  • Base de Datos local: MariaDB
  • Visualización base de datos: PHPMyAdmin (Requisitos: Apache + PHP)
  • Herramienta de programación IoT que se utiliza para conectar dispositivos de hardware, APIs y servicios de internet: Node-RED

Solución

1 – Instalar Imagen Raspberry Pi OS (Antiguo Raspbian)

Instalación recomendada usando Raspberry Pi Imager: https://www.raspberrypi.org/software/

Raspberry Pi Imager es la forma rápida y fácil de instalar Raspberry Pi OS y otros sistemas operativos en una tarjeta microSD, lista para usar con su Raspberry Pi. Vídeo de 40 segundos de como usar Raspberry Pi Imager: https://www.youtube.com/watch?v=J024soVgEeM 

Descargue e instale Raspberry Pi Imager con un lector de tarjetas SD. Coloque la tarjeta SD que usará con su Raspberry Pi en el lector y ejecute Raspberry Pi Imager.

2 – Configuración Raspberry Pi OS

Pasos para la instalación con monitor, ratón y teclado:

  • Seguir con el asistente de instalación que aparece al iniciar: cambiar contraseña, cambiar el nombre (hostname), configurar y actualizar Raspberry Pi.
  • Conectar a Internet. Wifi o Ethernet
  • Activar VNC y SSH para acceso remoto

Pasos para instalación headless:

Vídeos:

Una vez entramos en Raspberry Pi, seguimos los pasos del asistente que nos indica para cambiar contraseña, cambiar el nombre (hostname), configurar y actualizar Raspberry Pi.

2b – Virtualizar Raspberry Pi Desktop en Virtualbox

En caso de no tener una Raspberry Pi, se puede virtualizar Raspberry Pi Desktop en Virtualbox.

Tutorial para virtualizar cualquier sistema operativo con Virtualbox: https://www.softzone.es/manuales-software-2/tutorial-de-virtualbox/

Pasos:

3 – Instalar Apache + PHP (requisitos para phpMyAdmin)

Update system:

  • sudo apt-get update
  • sudo apt-get upgrade

Instalar Apache2:

  • sudo apt-get install apache2

Comprobar que accedemos entrando a la IP de la Raspberry Pi desde un navegador:

Instalar PHP

  • sudo apt-get install php libapache2-mod-php

Para comprobar el funcionamiento crear un fichero llamado info.php y en su interior el código: <?php phpinfo(); ?> y guardado en la ruta /var/www/html

Luego en un navegador ir a http://IP-raspberry/info.php

4 – Instalar MariaDB

Pasos:

  • sudo apt-get install mariadb-server mariadb-client php-mysql
  • sudo mysql_secure_installation
  • sudo service apache2 restart

Durante el proceso de instalación se pedirá el password de root de MySQL, poner el que quieras, pero para no olvidarlo, recomiendo para el curso poner el mismo que tiene el usuario pi de la Raspberry Pi y poner a Yes todas las opciones de mysql_secure_installation 

Para comprobar que todo funciona ejecutar sudo mysql -u root -p y poner la contraseña de root, saldrá:

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 61
Server version: 10.1.23-MariaDB-9+deb9u1 Raspbian 9.0
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

5 – Instalar phpMyAdmin

Comando: sudo apt-get install phpmyadmin

Durante el proceso pide la contraseña del usuario phpmyadmin de MySQL y el servidor a instalar el apache y poner yes en dbconfig-common

En caso que no funcione o queramos hacer una configuración de phpmyadmin después de la instalación, usar el comando: sudo dpkg-reconfigure -plow phpmyadmin

Para probar que funciona ver en un navegador: http://IP-raspberry/phpmyadmin con el usuario phpmyadmin y la contraseña usada.

El usuario phpmyadmin no tiene privilegios y el usuario root por seguridad no puede usarse desde phpMyAdmin. 

Crear un usuario “pi” con privilegios. Ejecutar en la consola:

sudo mysql -u root -p
CREATE USER 'pi'@'localhost' IDENTIFIED BY 'tu_contrasena';
CREATE USER 'pi'@'%' IDENTIFIED BY 'tu_contrasena';
GRANT ALL PRIVILEGES ON * . * TO 'pi'@'localhost'; 
GRANT ALL PRIVILEGES ON *.* TO 'pi'@'%'; 
GRANT GRANT OPTION ON *.* TO 'pi'@'localhost';
FLUSH PRIVILEGES;

6 – Instalar Node-RED

No instalar la versión que aparece en software recomendado de Raspberry Pi OS.

Seguir esta instalacióm: https://nodered.org/docs/getting-started/raspberrypi, para ello ejecutar el comando para instalar y actualizar:

Para ejecutar Node-RED en el arranque: sudo systemctl enable nodered.service

En caso de problemas ver el log con: node-red-log

Saber Más Fundamentos IoT CEFIRE

La imagen tiene un atributo ALT vacío; su nombre de archivo es aprendiendoarduino_logo.png

Curso On-Line “Fundamentos IoT”: https://www.aprendiendoarduino.com/cursos/fundamentos-iot-open-source-para-aplicaciones-industriales/

Semana 1

Darse de alta en los servicios Thingspeak y Grafana Cloud

Práctica 1: Instalación y configuración Raspberry Pi OS. Para este fin de semana, mandar comentarios y tutoria si es necesario

Vídeo tutoriales de instalación Raspberry Pi OS Headless:

Video en drive

Monitorización para principiantes: https://endef.com/monitorizacion-ee-para-principantes/

Simatic IoT2050:

Limitación RPi virtual vs Rpi OS:

  • Ojo a las redes
  • Algún SW no viene instalado
  • Versión de kernel antigua 5.4 vs 4.19

Raspberry Pi 64 bits:

Semana 2

  • Programa del curso
  • Modo Kiosko
  • Problema con dashboard y muchos puntos en la gráfica
  • Demo y Dashboard Node-RED en móvil
  • Sensores
  • Actuadores y Periféricos
  • Librerías
  • Práctica 2
  • Consultas

Semana 3 Lunes

Semana 3 Miércoles

Semana 4 Lunes

Semana 4 Miércoles

Código para obtener los datos Raspberry Pi y mandar a MQTT: https://github.com/jecrespo/Curso-Node-RED/blob/master/Monitor%20Raspberry%20Pi/monitor_raspberrypi.json

Clonar imágenes Raspberry Pi:

Cómo funciona Node-RED: Arquitectura asíncrona y basada en eventos.

Cuando se hace clic en el botón de despliegue, el editor crea la representación JSON completa de su configuración de flujo. Esto se pasa a través de una petición HTTP Post al tiempo de ejecución. Asumiendo que se está haciendo un “despliegue completo”, el tiempo de ejecución detiene todos los nodos actuales y los descarta. A continuación, recorre cada nodo de la definición de flujo JSON y crea un nuevo objeto nodo del tipo apropiado, pasando su configuración.

Instalado en /usr/lib/node_modules/node-red y se ejecuta el fichero red.js

Semana 5 Lunes

Tutoría Fin de Curso

Puntos saltados que veremos lo que más interesen

Material de Prácticas Fundamentos IoT

Para el curso on-line “Fundamentos IoT Open Source para Aplicaciones Industriales”, el material necesario por parte de los alumnos para realizarlo es:

  • Raspberry Pi Zero: Instalada en local con cámara y programada con Node-RED, usada como dispositivo remoto.
  • Nodo Edge/Gateway:
    • Una Raspberry Pi 3B+ + tarjeta SD 8Gb + alimentador conectada a Internet por alumno.
    • En caso de no tener Raspberry Pi virtualizar Raspberry Pi OS con Virtual Box.
  • Plataformas IoT:
    • https://thingspeak.com/
    • enriquecrespo.com (S.O. CentOS 8, servidor público con 1 vCPU, 2 GB RAM, 20 GB SSD)
      • Node-RED
      • Mosquitto
      • Grafana
      • Base de Datos: influxDB, etc…
      • Otros servicios públicos
    • aprendiendoarduino.com
      • BBDD MySQL públicas

Node-RED Público

La instancia de Node-RED en enriquecrespo.com es la que va a centralizar los datos de los Node-RED remotos, haciendo de plataforma IoT.

Si algún alumno necesita una instancia de Node-RED pública, se levantará en el servidor enriquecrespo.com

Broker MQTT Público

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 el topic cursocefire/#

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.

Grafana en https://enriquecrespo.com:3000/ para representar gráficamente los datos. Recibirán por correo las credenciales de acceso.

Opcionalmente se podrán usar otras bases de datos como influxDB.

Todo el software y documentación utilizado en el curso es libre con licencia creative commons o similar.