Archivo de la categoría: Formación IoT

Proyecto Final IoT con Node-RED

Descripción del Proyecto

Proyecto final full stack IoT con Node-RED aplicando los conceptos vistos.

Repositorio: https://github.com/jecrespo/proyecto-fundamentos-iot 

Material del Proyecto

M5stack: https://m5stack.com/collections/m5-core/products/basic-core-iot-development-kit 

M5Stick-C con sensor ENV:

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.

Wibeee ONE 2W

Si el alumno tiene algún HW con que quiera interactuar, puede presentarlo y lo integramos en las prácticas.

Esquema del Proyecto

Topología del proyecto IoT:

Datos Disponibles

Topic Map Nodo00 (Enrique):

  • educantabria/nodo00/wemos1/dato10s – publica mensaje numerado cada 10s
  • educantabria/nodo00/wemos1/dato60s – publica mensaje numerado cada 60s
  • educantabria/nodo00/wemos1/reset – publica mensaje cada reset o inicio
  • educantabria/nodo00/wemos1/led – suscrito (1 led ON, otro valor  led OFF)
  • educantabria/nodo00/wemos1/text – suscrito (muestra el mensaje por pantalla)
  • educantabria/nodo00/wemos1/rele – suscrito (1 relé ON, otro valor  relé OFF). Con firmware relé
  • educantabria/nodo00/wemos2/dato10s – publica mensaje numerado cada 10s
  • educantabria/nodo00/wemos2/dato60s – publica mensaje numerado cada 60s
  • educantabria/nodo00/wemos2/reset – publica mensaje cada reset o inicio
  • educantabria/nodo00/wemos2/led – suscrito (1 led ON, otro valor  led OFF)
  • educantabria/nodo00/wemos2/text – suscrito (muestra el mensaje por pantalla)
  • educantabria/nodo00/wemos2/temperatura – publica dato temperatura cada 10 segundos. Con firmware DS18B20
  • educantabria/nodo00/wibeee/# – datos eléctricos de Wibeee. Varios parámetros.
  • educantabria/nodo00/m5atom/aviso – suscrito (“alarma” – leds rojos, “aviso” – leds amarillos, “ok” – leds verdes, otro mensaje apaga)
  • educantabria/nodo00/m5atom/boton – al pulsar publica “press” o “longpress”
  • educantabria/nodo00/m5stack/boton/A – al pulsar botón A publica “press”
  • educantabria/nodo00/m5stack/boton/B – al pulsar botón B publica “press” 
  • educantabria/nodo00/m5stack/boton/C – al pulsar botón C publica “press”
  • educantabria/nodo00/m5stack/led – suscrito (1 dibuja en pantalla círculo rojo, otro valor  dibuja en pantalla círculo verde)
  • educantabria/nodo00/m5stack/text – suscrito, muestra por pantalla el texto
  • educantabria/nodo00/m5stick/temperatura – publica dato temperatura cada 1 segundo
  • educantabria/nodo00/m5stick/humedad – publica dato humedad cada 1 segundo
  • educantabria/nodo00/m5stick/presion – publica dato presión cada 1 segundo
  • educantabria/nodo00/m5stickplus/distancia – publica dato distancia cuando se activa
  • educantabria/nodo00/m5stickplus/button – al pulsar botón publica “press”
  • educantabria/nodo00/m5stickplus/led – suscrito (1 led ON, otro valor  led OFF)
  • educantabria/nodo00/m5stickplus/label  – suscrito (“red” – circulo rojo, “yellow” – circulo amarillo, “green” – circulo verde, “black” – círculo verde)
  • educantabria/nodo00/raspberry3/CPU – publica Node-RED el datos de CPU 
  • educantabria/nodo00/raspberry3/Temperatura – publica Node-RED el datos de temperatura procesador
  • educantabria/nodo00/raspberry3/Memoria – publica Node-RED el datos de memoria libre
  • educantabria/nodo00/raspberry3/Dashboard/# – publica Node-RED cualquier dato del Dasboard
  • educantabria/nodo00/raspberry3/Datos/# – suscrito Node-RED para recibir cualquier dato externo
  • educantabria/nodo00/raspberry3TT/CPU – publica Node-RED el datos de CPU 
  • educantabria/nodo00/raspberry3TT/Temperatura – publica Node-RED el datos de temperatura procesador
  • educantabria/nodo00/raspberry3TT/Memoria – publica Node-RED el datos de memoria libre
  • educantabria/nodo00/raspberry3TT/Dashboard/# – publica Node-RED cualquier dato del Dasboard
  • educantabria/nodo00/raspberry3TT/Datos/# – suscrito Node-RED para recibir cualquier dato externo
  • educantabria/nodo00/raspberryzero/tomafotomqtt – suscrito Node-RED un valor cualquiera enviado, toma una foto y publica en el topic educantabria/nodo00/raspberryzero/foto en baja resolución.
  • educantabria/nodo00/raspberryzero/foto – publica Node-RED una foto al mandar cualquier dato en el topic educantabria/nodo00/raspberryzero/tomafotomqtt 
  • educantabria/nodo00/raspberryzero/tomafotoweb suscrito Node-RED un valor cualquiera enviado, toma una foto y la actualiza en https://www.aprendiendoarduino.com/servicios/imagen.jpg en alta resolución

Topic Map Alumnos Nodoxx:

  • educantabria/nodo{xx}/wemos{y}/dato10s – publica mensaje numerado cada 10s
  • educantabria/nodo{xx}/wemos{y}/dato60s – publica mensaje numerado cada 60s
  • educantabria/nodo{xx}/wemos{y}/reset – publica mensaje cada reset o inicio
  • educantabria/nodo{xx}/wemos{y}/led – suscrito (1 led ON, otro valor  led OFF)
  • educantabria/nodo{xx}/wemos{y}/text – suscrito (muestra el mensaje por pantalla)
  • educantabria/nodo{xx}/wemos{y}/rele – suscrito (1 relé ON, otro valor  relé OFF). Con firmware relé
  • educantabria/nodo{xx}/wemos{y}/oled – suscrito (muestra el mensaje por pantalla oled). Con firmware oled
  • educantabria/nodo{xx}/wemos{y}/temperatura – publica dato temperatura cada 10 segundos. Con firmware DS18B20
  • educantabria/nodo{xx}/wemos{y}/matrix – suscrito (0 efecto y apaga, de 1 a 8 ilumina de 1 a 8 líneas de matriz). Con firmware matrix.
  • educantabria/nodo{xx}/raspberry{y}/CPU – publica Node-RED el datos de CPU 
  • educantabria/nodo{xx}/raspberry{y}/Temperatura – publica Node-RED el datos de temperatura procesador
  • educantabria/nodo{xx}/raspberry{y}/Memoria – publica Node-RED el datos de memoria libre
  • educantabria/nodo{xx}/raspberry{y}/Dashboard/# – publica Node-RED cualquier dato del Dasboard
  • educantabria/nodo{xx}/raspberry{y}/Datos/# – suscrito Node-RED para recibir cualquier dato externo

{xx} número de alumno

{y} número de sensor

AlumnoNº Nodo
SERGIO A.nodo01
Alberto B.nodo02
Pablo C.nodo03
Soraya C.nodo03
isaías C.nodo04
Mª del Mar E.nodo05
Santiago F.nodo06
José Ángel G.nodo07
Oscar G.nodo08
MARCOS G.nodo09
Jose Luis G.nodo10
Evelio H.nodo11
Roberto I.nodo12
RAMON L.nodo13
Eduardo P.nodo14
FRANCISCO JAVIER R.nodo15
Sara T.nodo16

Tareas del Proyecto

Fase 1 – Monitorización Local

Instalar nodo con todo el SW:

Instalar los sensores en la ubicación.

Fase 2 – Conectar a la Nube

Conectar sensores:

Fase 3 – Automatizar

Configurar y securizar Node-RED: 

Programar Node-RED y MQTT:

Fase 4 – Integración con Terceros

Integración de datos con terceros:

Instalación Software Raspberry Pi

Instalar servidor LAMP

El acrónimo LAMP está compuesto por las iniciales de sus cuatro componentes: Linux, Apache, MySQL y PHP. Estos forman la infraestructura en el servidor, que hace posible la creación y el alojamiento de páginas web dinámicas. Los componentes individuales se acumulan unos sobre otros, por lo que esta plataforma también recibe el nombre de LAMP stack (del inglés “apilar”).

Su funcionamiento es muy simple. Linux sirve como sistema operativo base para ejecutar el servidor web Apache. Este último no puede interpretar contenidos dinámicos, pero es aquí donde PHP entra a ejercer sus funciones de programación del lado del servidor. El proceso funciona entonces de la siguiente manera: Apache le envía un código fuente al intérprete PHP, incluyendo la información correspondiente sobre las acciones del visitante de la web, y permite el acceso a la base de datos MySQL. El resultado es devuelto a Apache y este se muestra finalmente en el navegador web del visitante.

El lenguaje de programación PHP es uno de los más extendidos para el desarrollo de páginas web. La ventaja de utilizar PHP para el desarrollo de páginas web es que nos permite crear páginas web dinámicas, es decir, que se generan cuando un usuario visita la página.

MySQL es un sistema de gestión de bases de datos relacional desarrollado bajo licencia dual: Licencia pública general/Licencia comercial por Oracle Corporation y está considerada como la base datos de código abierto más popular del mundo, y una de las más populares en general junto a Oracle y Microsoft SQL Server, sobre todo para entornos de desarrollo web.

La alternativa libre es mariaDB: https://mariadb.org/ 

Este proyecto monta un pequeño servidor web Apache con lo que podrías por ejemplo alojar tu propia página web entre otras cosas. Además, si despliegas alrededor de tu casa, por ejemplo, varios sensores y actuadores (temperatura, humedad, luces, etc…) comandados por Arduino, podrías utilizar la Raspberry Pi 3como centro de envío y recepción de datos a través de su red. Y por supuesto utilizar la página Web para mostrar y controlar los datos a través de Internet.

Instrucciones para su instalación:

#Update system

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

#Install Apache2

  • sudo apt-get install apache2

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

La página web por defecto está en /var/www/html

Crear un fichero prueba.html en el directorio /var/www/html que contenga el texto: “HOLA MUNDO”

Para comprobar que funciona entrar desde un navegador a la dirección: http://ip_raspberry/prueba.html y ver que aparece el texto “HOLA MUNDO”

También podemos comprobar que funciona conectando un Arduino a la red de la Raspberry Pi y cargar este sketch: https://github.com/jecrespo/Curso-IoT-Open-Source/blob/master/Conecta_Raspberry/Conecta_Raspberry.ino 

Curso configuración Apache: https://plataforma.josedomingo.org/pledin/cursos/apache24/ 

#Install PHP

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

La versión que se instala es la 7.

Para comprobar el funcionamiento crear un fichero llamado info.php y en su interior el código: <?php phpinfo(); ?>

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

#Install MariaDB

  • 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 mismo que tiene el usuario pi de la Raspberry Pi y poner a Yes todas las opciones de mysql_secure_installation 

Estos comando instalan una BBDD MariaDB

Para comprobar que todo funciona ejecutar sudo mysql -u root -p y poner la contraseña, 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.

#Install MySQL (Opcional)

En caso de querer instalar MySQL usar estos comandos:

Más información:

#Install PhpMyAdmin

  • 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

IMPORTANTE: Seleccionar con la barra espaciadora apache2 y asegurarse que aparece un asterisco que indica que se ha seleccionado.

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

phpMyAdmin es una herramienta escrita en PHP con la intención de manejar la administración de MySQL a través de páginas web, utilizando Internet. Actualmente puede crear y eliminar Bases de Datos, crear, eliminar y alterar tablas, borrar, editar y añadir campos, ejecutar cualquier sentencia SQL, administrar claves en campos, administrar privilegios, exportar datos en varios formatos y está disponible en 72 idiomas. Se encuentra disponible bajo la licencia GPL Versión 2.

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. Para crear un usuario “pi” con privilegios ejecutar:

  • 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’; (Para acceso local)
  • GRANT ALL PRIVILEGES ON *.* TO ‘pi’@’%’;  (Para acceso remoto)
  • GRANT GRANT OPTION ON *.* TO ‘pi’@’localhost’; (Privilegios para dar permisos a otros usuarios)
  • FLUSH PRIVILEGES;

Para conectarnos desde otro servidor: mysql -h ip_raspberry -u root -p

#Install servidor ftp (VSFTPD) (Opcional)

  • sudo apt-get install vsftpd

Una vez instalado, configurar con: sudo nano /etc/vsftpd.conf 

Comentar estas dos opciones:

#local_enable=YES
#ssl_enable=NO

Y añadir al final del fichero:

# CUSTOM
ssl_enable=YES
local_enable=YES
chroot_local_user=YES
local_root=/var/www
user_sub_token=pi
write_enable=YES
local_umask=002
allow_writeable_chroot=YES
ftpd_banner=Welcome to my Raspberry Pi FTP service.

También necesitamos añadir el usuario pi al grupo www-data, dar la propiedad de la carpeta /var/www al usuario y al grupo www-data, cambiar la carpeta de inicio del usuario pi a la misma, y aflojar algunos permisos en la carpeta /var/www:

  • sudo usermod -a -G www-data pi
  • sudo usermod -m -d /var/www pi
  • sudo chown -R www-data:www-data /var/www
  • sudo chmod -R 775 /var/www

Y reiniciar el servicio: sudo service vsftpd restart 

Para comprobar que funciona usar un cliente ftp con https://filezilla-project.org/ y hacer una conexión con la siguiente configuración:

  • Host – 192.xxx.x.xxx (IP address)
  • Port – 21
  • Protocol – FTP (File Transfer Protocol)
  • Encryption – Use explicit FTP over TLS if available
  • Logon Type – Normal (username & password)
  • Username – pi
  • Password – [enter password]

Más información: 

Y si quisieramos instalar un wordpress: https://www.raspberrypi.org/learning/lamp-web-server-with-wordpress/

Con esto ya tenemos listo un servidor para recibir conexiones de arduino y guardar datos y mostrarlos

Recordar cada vez que se haga una modificación grande en Raspberry Pi hacer una copia de seguridad de la tarjeta SD con Win32DiskImager.

Descarga https://sourceforge.net/projects/win32diskimager/

Escribir el nombre de la imagen en la ruta donde los guardemos.

Y luego pulsar read. Una vez hecho esto, esperar a que el proceso finalice.

Probar LAMP con Arduino

Para probar el servidor LAMP que acabamos de instalar en nuestra Raspberry Pi vamos a usar Arduino y mandar datos de luminosidad de la sala usando un LDR.

Una fotorresistencia o LDR (por sus siglas en inglés “light-dependent resistor”) es un componente electrónico cuya resistencia varía en función de la luz.

Se trata de un sensor que actúa como una resistencia variable en función de la luz que capta. A mayor intensidad de luz, menor resistencia: el sensor ofrece una resistencia de 1M ohm en la oscuridad, alrededor de 10k ohm en exposición de luz ambiente, hasta menos de 1k ohm expuesto a la luz del sol. Aunque estos valores pueden depender del modelo de LDR.

El LDR actúa como una resistencia variable. Para conocer la cantidad de luz que el sensor capta en cierto ambiente, necesitamos medir la tensión de salida del mismo. Para ello utilizaremos un divisor de tensión, colocando el punto de lectura para Vout entre ambas resistencias. De esta forma:

Dónde Vout es el voltaje leído por el PIN analógico del Arduino y será convertido a un valor digital, Vin es el voltaje de entrada (5v), R2 será el valor de la resistencia fija colocada (10k ohm generalmente) y R1 es el valor resistivo del sensor LDR. A medida que el valor del sensor LDR varía, obtendremos una fracción mayor o menor del voltaje de entrada Vin.

Instalación:

Más información https://www.luisllamas.es/medir-nivel-luz-con-arduino-y-fotoresistencia-ldr/ 

Crear una base de datos llamada “DatosArduino” con una tabla llamada “luminosidad” que tenga 4 campos: “id” auto incremental y sea el campo clave, “fecha” de  tipo timestamp y que se actualice al actualizar, un campo “arduino” de tipo entero y un campo “IntensidadLuminosa” que sea de tipo entero.

O con la query:

CREATE TABLE `luminosidad` (
  `id` int(11) NOT NULL,
  `fecha` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  `arduino` int(11) NOT NULL,
  `IntensidadLuminosa` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

ALTER TABLE `luminosidad`
  ADD PRIMARY KEY (`id`);

ALTER TABLE `luminosidad`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;

Para insertar un dato:

INSERT INTO `luminosidad` (`arduino`, `IntensidadLuminosa`) VALUES ('22', '22');

Subir por FTP seguro los ficheros Graba_GET.php y Graba_POST.php a Raspberry Pi al directorio /var/www/html o crearlos con el comando nano:

Se puede probar que funciona ejecutando desde el navegador: http://127.0.0.1/Graba_GET.php?arduino=2&IntensidadLuminosa=89 

Ejecutar en Arduino estos sketches para GET o POST para mandar cada 5 segundos el dato de luminosidad:

Ver en la web de phpmyadmin los datos que se están subiendo y descargar en formato csv los datos guardados en unos minutos.

NOTA: Para ver los errores de PHP activar en /etc/php/7.0/apache2/php.ini la línea:

  • Development Value: E_ALL

Instalar Node-RED

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

Seguir esta instalacióm: https://nodered.org/docs/getting-started/raspberrypi 

Ejecutar el comando para instalar y actualizar: bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)

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

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

Instalar Webmin

Webmin es una herramienta de configuración de sistemas accesible vía web para sistemas Unix, como GNU/Linux y OpenSolaris. Con él se pueden configurar aspectos internos de muchos sistemas operativos, como usuarios, cuotas de espacio, servicios, archivos de configuración, apagado del equipo, etcétera, así como modificar y controlar muchas aplicaciones libres, como el servidor web Apache, PHP, MySQL, DNS, Samba, DHCP, entre otros.

Web: http://www.webmin.com/

Instalación:

Para comprobar que se ha instalado acceder desde un navegador a https://ip_address:10000 con usuario pi y la contraseña

Más información:

Manejar GPIO Raspberry Pi

Blink Led

Antes de empezar recordar comprobar la posición de los pines porque en caso de error podemos dañar la Raspberry Pi ya que los GPIO no tienen ninguna protección.

  • Cuando conectes cables a los GPIO procura no equivocarte y fíjate bien.
  • Usa cables con recubrimiento del tipo Dupont Macho-hembra por ejemplo, y no acerques cables sin proteger a tus GPIO (Y mucho menos un destornillador) porque puedes hacer un corto con facilidad.
cables M-F
  • Una vez que conectes un cable hembra protegido, vuelve a mirar y asegúrate de que lo has conectado al pin que querías y no al de al lado.
  • Especial cuidado con los pines que uses para sacar 3V o 5V de tu Raspi. No dejes el otro extremo al aire: Asegúrate de conectarlo a algún sitio.
  • NO CONECTES NADA DE 5V si no estás seguro. Tu Raspberry funciona a 3.3V y meterle 5V en un pin puede suponer quemar el procesador central. 

Instalar las librerías para el uso de los pines GPIO desde Python, asegurandonos de tener actualizado Raspbian:

  • sudo apt-get update
  • sudo apt-get upgrade
  • sudo apt-get install python-dev
  • sudo apt-get install pyton-rpi.gpio

Tened en cuenta que en esta ocasión vamos a alimentar el LED con 3.3V (Que es lo que proporciona un pin de la Raspi) y que la intensidad que obtendremos será: 3.3 / 1K Ω = 3 mA, que no es mucho para iluminar un LED pero suficiente.

Esquema de GPIO:

Conectamos GND al pin 6 de la Raspberry y vamos a usar el pin 12 (GPIO 18) como control del encendido mediante una resistencia intermedia. El esquema de conexión es:

Abrir el IDLE de Python 3 para empezar nuestro programa:

Y copiar código:

import RPi.GPIO as gpio

import time

gpio.setmode(gpio.BOARD)
gpio.setup(12, gpio.OUT)

for  x in range ( 0, 10):

    gpio.output(12, True)
    time.sleep(0.5)

    gpio.output(12, False)
    time.sleep(0.5)

print “Ejecución finalizada”

Guardar el fichero con el nombre blink.py en /home/pi y ejecutarlo pulsando F5

Más información:

¿Qué es IoT?

Internet de las cosas (en inglés Internet of things, abreviado IoT) es un concepto que se refiere a la interconexión digital de objetos cotidianos con Internet. En el caso que queramos interconectar los elementos de una empresa o una Industria es lo que se denomina IIOT (Industrial Internet of Things) o Industria 4.0

Definición de wikipedia:

¿Qués Internet de las Cosas?: http://www.ticbeat.com/tecnologias/que-es-el-internet-de-las-cosas/

Arduino y Raspberry Pi son dos elementos muy populares y abiertos que nos permiten de forma sencilla y económica conectar cualquier cosa a Internet. Con un Arduino y un sencillo módulo ethernet o wifi podemos conectar a Internet sensores para informar, controlar motores o bombillas desde cualquier parte del mundo o mandar un SMS o email cada vez que se abra la puerta de casa. Con una Raspberry Pi disponemos de un ordenador de bolsillo fácilmente conectable a Internet y que puede ejecutar tareas automatizadas, almacenar datos, mostrar información o hacer de pasarela para conectarnos a otras ubicaciones o dispositivos remotos.

Arduino y Raspberry Pi se han convertido en unas figuras destacadas e incluso unos de los impulsores del IoT y no por casualidad, sino que  por sus características son HW con gran capacidad para usar en proyectos de IoT.

Características de Arduino y Raspberry Pi para IoT

  • Barato y rápido prototipado.
  • HW libre y por lo tanto es modificable para que consuma menos y para hacer un HW final de características industriales.
  • Disponibilidad de HW de comunicaciones de todo tipo para conectar con Arduino. Nuevas tecnologías de comunicación llegan antes que para elementos comerciales
  • Librerías y SW públicos para su reutilización o adaptación.
  • Flexibilidad en la programación.
  • Apoyo de la comunidad.

Intersante web con publicaciones sobre IoT: https://iot-analytics.com/ 

Como afecta IoT a nuestro dia a dia: http://socialgeek.co/tecnologia/8-formas-que-the-internet-of-things-impactara-dia-dia

IoT en 5 minutos con Arduino: http://hackaday.com/2016/01/08/internet-of-things-in-five-minutes/ 

Aplicaciones de IoT: https://temboo.com/iot-applications 

7 Lecciones sobre IoT: https://www.greenbiz.com/article/7-essential-lessons-about-internet-things

IoT vs M2M

Una visión del IoT aplicado a la industria es lo denominado como Industria 4.0 o Industria conectada o IIoT que deriva del concepto de M2M (machine to machine) que se refiere al intercambio de información o comunicación en formato de datos entre dos máquinas remotas sin necesidad de conexión a Internet sino que puede ser en una red privada y crear una industria inteligente donde todos los elementos están interconectados y comparten los datos.

Definiciones de wikipedia:

Diferencias entre IoT y M2M: https://www.pubnub.com/blog/2015-01-02-iot-vs-m2m-understanding-difference/

El coche autónomo, en el que trabajan grupos como Google, BMW, Volvo o Tesla, es toda una proeza de la robótica.La conducción autónoma se basa en las comunicaciones máquina a máquina (M2M), por las que los vehículos pueden intercomunicarse con las señales, los semáforos y los otros automóviles. Todo esto también tiene mucho que ver con las smart cities. 

http://www.dr4ward.com/.a/6a00e54fd9f059883301a73dc37274970d-800wi

Interesantes artículos de Basic IoT:

Reflexiones de David Cuartielles sobre IoT en base a un paper de IBM: https://vimeo.com/299112221 

Ontología IoT https://www.w3.org/Submission/2015/SUBM-iot-lite-20151126/

Empresas en el Mercado IoT

El artículo de Matt Turck hace un buen desglose de IoT https://mattturck.com/iot2018/, que resume en esta imagen:

Imagen completa: link

Listado de compañías IoT: http://dfkoz.com/iot-landscape/

Divide los mercados o aplicaciones verticales en:

  • Personal
  • Home
  • Vehículos
  • Empresa
  • Industria

Divide las Plataformas Horizontales en:

  • Software
  • Seguridad
  • Conectividad
  • Analítica
  • Desarrollo
  • Pagos
  • Interfaces
  • 3D

Y los Building Blocks de IoT los divide en:

  • Hardware
  • Infraestructura
  • Conectividad
  • Partners

Más información: https://mattturck.com/iot2018/

Mercados Verticales IoT

La Internet de los objetos está unificada por un principio común (extracción y análisis de datos digitales del mundo físico), así como por características comunes (combinación de hardware y software), oportunidades (personalización e inteligencia, servicios en tiempo real) y retos (conectividad, seguridad, etc.).  Más allá de estas, sin embargo, áreas tan diversas como la domótica, los aviones no tripulados comerciales, la maquinaria industrial o los coches autónomos están sujetos a dinámicas industriales muy diferentes.

En este curso vamos a ver IoT desde un punto general para poder ser aplicable en cualquier sector, pero cuando se va a acometer un proyecto IoT suele ser adecuado hacer un enfoque vertical en función del sector en el que se vaya a aplicar puesto que cada sector tienen unas características concretas.

Conceptos como Industria 4.0, Smart Cities, Agricultura 2.0, Smart Home, Smart factory, etc… al final son etiquetas y en lugar de especializarse en áreas tecnológicas como sensores, comunicaciones, protocolos, sistemas, etc… pensamos como especialistas de sectores porque un mismo concepto como el de IoT se puede aplicar a muchos sectores de de una forma distinta.

El vino y el IoT http://www.elmundo.es/economia/2016/11/03/5819d37346163f9c528b45c9.html

Visión horizontal IoT

Algunos mercados verticales IoT:

  • Sanidad/Salud
  • Retail
  • Construcción
  • Gobierno/Servicios Públicos
  • Smart Cities
  • Defensa
  • Manufactura y Cadena de Suministro
  • Fabricación
  • Industria
  • Robótica Industrial
  • Automoción/Coche Conectado/Coche Autónomo
  • Movilidad Urbana (BIcis/Patinetes)
  • UAV (Vehículos Aéreos no Tripulados)
  • Logística/Transporte/Almacenes
  • Agricultura/Medio ambiente/Agricultura Vertical
  • Energía/Smart Metering y Eficiencia Energética
  • Hogar Inteligente/Domótica/Inmótica y Robótica Doméstica.
  • Hoteles/Turismo
  • eHealth/Deporte
  • Smart Grid
  • Alimentación
  • Seguridad (Alarmas)
  • Wearables
  • Fitness/Sports
  • Educación/Juguetes
  • Asistentes de voz/Plataformas de voz

Más verticales en el artículo de Matt Turck: https://mattturck.com/iot2018/

Encuesta: https://www.forbes.com/sites/louiscolumbus/2016/11/27/roundup-of-internet-of-things-forecasts-and-market-estimates-2016/#28e2ea4d292d 

Mercado Vertical Seguridad

El sector de la seguridad es uno de los más avanzados en IoT. Por ejemplo Securitas Direct:

Minut, startup sueca:

¿Qué Dispositivos podemos conectar a Internet?

La respuesta es: Cualquier cosa que podamos imaginar.

IoT en su amplio concepto es conectar a Internet cualquier cosa, teniendo sentido o sin tenerlo. Por ejemplo, podríamos conectar a internet un sofá con un Arduino y unos pocos sensores, este sofá podría tuitear que nos acabamos de sentar a ver nuestra serie favorita, simplemente detectando el peso de la persona y conectándose a una API de un servidor de streaming como netflix y comprobando que acabo de poner un capítulo de westworld.

Puede parecer una idea sin sentido, pero esta idea para Netflix podría ser muy interesante, monitorizar a la gente que ve su canal, cuántas veces se levanta el espectador o si se queda dormido.

Un ejemplo más serio de IoT es aplicar las nuevas tecnologías a elementos cotidianos que no imaginarías que tuviera sentido conectar a Internet, pero que pensándolo puede ser muy útil. Por ejemplo, pensemos en conectar a Internet un cortacésped. Con un Arduino podríamos conectar diversos sensores de temperatura del motor, temperatura externa, revoluciones del motor, consumo eléctrico (cortacésped eléctricos), gps, logs, etc… que podrían ser mandados a una plataforma del fabricante y le permitiría analizar esos datos para mejorar sus futuros productos o detectar averías de forma precoz. Podría mandar una desconexión remota en caso que en una determinada partida de fabricación se haya detectado un fallo que podría provocar daños al usuario o actualizar on-line el firmware si se detecta un fallo sin necesidad de llevar al servicio técnico.

Ejemplos de cortacesped conectados:

También podemos conectar a Internet un bastón o una botas de seguridad:

Otra aplicación de IoT usando Arduino o Raspberry Pi como herramienta, es la de obtener información externa disponible mediante APIs del open data. Un ejemplo es el de un sistema de riego automático que podemos tener en una ciudad. En los inicios de la automatización se usaron programadores conectados a una electroválvula donde indicamos las horas entre las que deseamos regar. El siguiente paso fue poner detectores de lluvia para no regar si estaba lloviendo. Otro paso fue poner sensores de temperatura y humedad ambientales y sensores de humedad de suelo que nos indican cuándo debemos regar y en qué áreas de la ciudad.

El paso más avanzado que ofrece el IoT es poder conectar todo este sistema, ya de por sí muy eficiente, a los opendata meteorológicos disponibles en Internet como el de la aemet http://www.aemet.es/es/datos_abiertos/AEMET_OpenData y que nuestro sistema obtenga datos de prediciones meteorológicas y decida no regar si la predicción de lluvia es mayor del 80% en los próximos dos días o simplemente ajustar el algoritmo de riego en función los valores de los sensores + es de los datos meteorológicos. También puede recibir alertas de tormenta o pedrisco y tomar determinadas acciones o simplemente mandar un email o SMS al propietario del huerto. ¿Podríamos hacer esto con un sistema comercial?

Esto podría extenderse a explotaciones agrícolas usando un servicio como el sistema de información agroclimática de La Rioja:

Un ejemplo práctico de esto es el proyecto Aggrofox: 

Aggrofox: IoT sensing, notifications and analytics platform for urban and large-scale agriculture with automated irrigation, using Sigfox technology: https://www.hackster.io/107329/aggrofox-large-scale-and-urban-agriculture-iot-solution-8155fe 

IoT no es que un coche se pueda conectar a Internet para ver videos de youtube, sino que este coche esté conectado a Internet para que pueda actualizar su firmware automáticamente para dotar de nuevas funcionalidades sin necesidad de ir al concesionario, pueda ser inmovilizado en caso de robo o pueda mandar datos de los parámetros internos del coche para que sean analizados y poder detectar alertas precoces de fallo y actualizar automáticamente ese fallo sin que el usuario tenga que hacer nada o avisar al usuario para que lleve el coche a reparar y parar el coche si el usuario no ha llevado a revisión al cabo de unos kms para evitar males mayores.

Interesantes reflexiones sobre IoT: 

Ejemplo de Aplicaciones IoT

El conectar dispositivos a Internet puede tener muchos usos y aplicaciones que hasta ahora no hubiéramos imaginado.

Aplicaciones de IoT: https://temboo.com/iot-applications 

http://www.dragino.com/media/k2/galleries/119/LG01-40.jpg 

Algunos ejemplos

  • Monitorización en Tiempo real
  • Avisos precoces
  • Control remoto de instalaciones
  • Eficiencia energética
  • Automatización de procesos
  • Automatización de informes/Cuadros de mando
  • Mantenimientos Predictivos
  • PRL (Prevención de Riesgos Laborales)
  • análisis de datos (data mining, etc…)
  • Monitorización y notificación
  • Business intelligence (detectar problemas comunes, medir cuellos de botella, etc…) y ayudar en el mantenimiento predictivo.
  • Integrar con el software corporativo. ERP, CRM, GMAO (Gestión del Mantenimiento Asistido por Ordenador), CMMS
  • Recoger datos y tenerlos en tiempo real por ejemplo datos para sanidad en cámaras frigoríficas.
  • Automatizar todo el papeleo siendo recogidos los datos y guardados y generados los informes.

Ejemplos de uso:

  • Estación meteorológica: medidas de temperatura y humedad exterior (tiempo real)
    • Posible caso de uso 1:controlar la temperatura interior (encender/apagar el aire acondicionado, los radiadores, etc.)
    • Posible caso de uso 2: jardinería (urbanizaciones, comerciales o incluso smart cities que gestionan grandes jardines comunitarios) el riego fácil gracias a las previsiones.
  • Sistema de alarma: basado en la detección de personas, la seguridad del edificio puede ser más fácil.
    • Posible caso de uso 1: despliegue de varias aplicaciones de alarma, sensores de personas o de llama/calor en combinación con aplicaciones para smartphones, para estar siempre conectados a edificios públicos o locales comerciales.
  • Previsión del tráfico: a partir de medidas de tráfico regulares, se pueden construir ciudades inteligentes.
    • Posible caso de uso 1: escenarios para comunicarse con la gente que está en la calle -> tráfico potencial en la carretera con sugerencias directas de alternativas -> muy útil para los servicios de entrega de alimentos en las grandes ciudades.
  • Servicios de entrega (por ejemplo, servicio de pizza): seguimiento de los vehículos de entrega, búsqueda de las rutas más rápidas y posterior análisis de marketing (basado en datos históricos) para centrar las futuras actividades de marketing en las «zonas calientes».

Interesante web donde sacar más información de IoT: https://www.insight.tech/ 

Ejemplo real de uso empresa riojana: https://www.encore-lab.com/es/proyectos/humecfol 

Buen artículo de Luis del Valle sobre Proyectos IoT: https://programarfacil.com/podcast/proyectos-iot-con-arduino/

Ejemplo Práctico IoT

Riego automático de un jardín personal, explotación agrícola o ciudad. Fases:

  • Riego manual
  • Riego automatizado por horario y remoto → Temporizador
  • Riego bajo demanda con sensores de humedad, etc… → PLCs
  • Riego sostenible aprovechando las lluvia y las previsiones → IoT

Conectar a Internet los sistemas de riego para obtener las previsiones de lluvia y programar en función de los sensores de lluvia y las previsiones de lluvia ¿cómo?:

Para ello hay que leer la documentación de la API, buscar el “comando” que nos interesa, darse de alta en el servicio para obtener la API key (contraseña) y ejecutar en nuestro sistema.

Y un paso más, predecir enfermedades de los cultivos: http://apisiar.larioja.org/help 

AEMET

Llamada desde acceso: https://opendata.aemet.es/opendata/api/prediccion/especifica/municipio/diaria/39075/?api_key=111111111111

Obtengo:

{
  "descripcion" : "exito",
  "estado" : 200,
  "datos" : "https://opendata.aemet.es/opendata/sh/b904851e",
  "metadatos" : "https://opendata.aemet.es/opendata/sh/dfd88b22"
}

Visores JSON:

Predicción diaria por municipio: https://opendata.aemet.es/dist/index.html?#!/predicciones-especificas/Predicci%C3%B3n_por_municipios_diaria_Tiempo_actual 

Ejemplo con Node-RED: https://github.com/aprendiendonodered/AEMET_Prediccion_Dias 

OpenWeatherMap

Llamada: https://api.openweathermap.org/data/2.5/forecast?q=santander&units=metric&appid=1111

Ejemplo con Node-RED: 

[{"id":"ceb7af605b6e347f","type":"tab","label":"Flow 3","disabled":false,"info":""},{"id":"4f69f0089f144b46","type":"openweathermap","z":"ceb7af605b6e347f","name":"","wtype":"forecast","lon":"","lat":"","city":"santander","country":"ES","language":"en","x":260,"y":60,"wires":[["0ecd1ae54f3fc616"]]},{"id":"4a4ee3087a02a1bb","type":"inject","z":"ceb7af605b6e347f","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":110,"y":60,"wires":[["4f69f0089f144b46"]]},{"id":"0ecd1ae54f3fc616","type":"debug","z":"ceb7af605b6e347f","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":410,"y":60,"wires":[]}]

Material de Prácticas Fundamentos IoT para Formación Profesional

Para el curso on-line “Fundamentos IoT Open Source para Formación Profesional”, el material recomendado por parte de los alumnos para realizarlo es:

  • Nodo Edge/Gateway:
    • Una Raspberry Pi 3B+ (o superior) + tarjeta SD 8Gb (o superior) + alimentador conectada a Internet por alumno.
    • En caso de no tener Raspberry Pi virtualizar Raspberry Pi OS con Virtual Box. (No recomendado)
  • 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
    • Opcionalmente podrán usarse otras que los alumnos usen o estén interesados como https://thingsboard.io/ 

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 educantabria/#

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.

Saber Más Fundamentos IoT para Formación Profesional

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

Curso Semipresencial “Fundamentos IoT para Formación Profesional”: https://www.aprendiendoarduino.com/cursos/fundamentos-iot-open-source-para-formacion-profesional/

Sesión 1 (on-line)

Puntos vistos:

Otros temas:

Sesión 2 (on-line)

Puntos vistos:

Otros temas:

  • Enlaces adicionales del lunes
  • Disponibilidad del material de prácticas
  • Entraremos en temas prácticos desde hoy e intercalaremos otros temas más teóricos
  • Tener Node-RED instalado y funcionando desde sesión 3 o 4 para ir conociendo y hacer ejemplos aunque no entendamos al 100%, nos servirá como «pegamento» entre los conceptos que veamos. Dar un poco de ritmo al curso.
  • Node-RED con 2021: https://nodered.jp/noderedcon2021/index-en.html

Sesión 3 (on-line)

Puntos vistos:

Otros temas:

Sesión 4 (on-line)

Puntos vistos:

Otros temas:

Sesión 5 (on-line)

Puntos vistos:

Otros puntos:

xkcd: Dependency

Sesión 6 (on-line)

Puntos vistos:

Otros puntos:

Sesión 7 (on-line)

Puntos vistos:

Otros puntos:

Sesión 8 (on-line)

Puntos vistos:

Otros puntos:

  • Integrar sistemas con Node-RED: «pegamento». Cualquier «cosa» con IP puede manejarse con Node-RED y facilita el consumo de datos IP (APIs).
  • Con Node-RED puedo hacer todo lo que hace IFTTT: https://ifttt.com/
  • Ejemplo IoT: monitorizar estructuras de edificios. ¿HW? ¿Comunicaciones? ¿Protocolo? ¿Gestión y almacenamiento de datos? ¿Gestión de dispositivos (alta, baja, avería, alerta, error de comunicación, etc…)? ¿Programación Node-RED? ¿Algo más?
  • Material alumnos para sesiones presenciales:
    • Ordenador o portátil por cada alumno
    • Acceso a su Raspberry Pi o instancia Node-RED, puede ser en local o instalada en casa con acceso por VNC o similar. Puedo proporcionar instancia de Node-RED.
    • Placas o dispositivos para conectar. Si es posible configuradas, pero sino las configuraremos en el aula.
    • Otros dispositivos a integrar con Node-RED: Gateway y dispositivos LoRa, PLCs Siemens, gateway KNX y dispositivos KNX, Asterisk, gateway y dispositivos Z-Wave, hub delta dore y dispositivos, etc… (comprobar requisitos del aula e indicar si es necesario alguno adicional)
  • Material aula para sesiones presenciales:
    • Proyector con HDMI o VGA
    • Pizarra y rotuladores de pizarra
    • Red Wifi protegida con acceso a Internet
    • Uno o varios switches con al menos 10 bocas, IP por DHCP y acceso a internet
    • Cables ethernet varios
    • Un par de cables HDMI y un par de teclados y ratones para conectar a las Raspberry Pi
    • Varias regletas eléctricas
    • Alimentadores USB si es posible

Sesión 9 (presencial)

Puntos vistos:

  • Proyecto Final
  • Conectar dispositivos
  • Conectar Raspberry Pis y otros Node-RED

Otros puntos:

Sesión 10 (on-line)

Puntos vistos:

Otros puntos:

IoT Reference Model | CC BY-SA @tamberg, FHNW | Thomas Amberg | Flickr

Sesión 11 (on-line)

Puntos vistos:

Otros puntos:

Sesión 12 (presencial)

Puntos vistos:

[{"id":"af22b399.12614","type":"exec","z":"8a81314e.a0f79","command":"vcgencmd measure_temp","addpay":false,"append":"","useSpawn":"","timer":"","name":"RPi Temp.","x":325.2221908569336,"y":46.33333683013916,"wires":[["14f0a295.59181d"],[],[]]},{"id":"408435c9.447fec","type":"exec","z":"8a81314e.a0f79","command":"top -d 0.5 -b -n2 | grep \"Cpu(s)\"|tail -n 1 | awk '{print $2 + $4}'","addpay":false,"append":"","useSpawn":"","timer":"","name":"CPU Load","x":325.2221908569336,"y":126.33333683013916,"wires":[["2c7475c7.6cc01a"],[],[]]},{"id":"8fbcbdf9.549b7","type":"exec","z":"8a81314e.a0f79","command":"free | grep Mem | awk '{print 100*($4+$6+$7)/$2}'","addpay":false,"append":"","useSpawn":"","timer":"","name":"Free Memory","x":325.2222099304199,"y":190.55557250976562,"wires":[["daf6433c.bad81"],[],[]]},{"id":"14f0a295.59181d","type":"function","z":"8a81314e.a0f79","name":"","func":"str = msg.payload\nmsg.payload = str.substring(5,9);\nreturn msg;","outputs":1,"noerr":0,"x":471.888858795166,"y":33.00000190734863,"wires":[["46daa272.4333ac","334a9ddd.345602"]]},{"id":"daf6433c.bad81","type":"function","z":"8a81314e.a0f79","name":"","func":"str = msg.payload\nmsg.payload = parseInt(str.substring(0,str.length - 1));\nreturn msg;","outputs":1,"noerr":0,"x":530,"y":180,"wires":[["1ba39571.ba75ab"]]}]
INSERT INTO `Datos_Node` (`nodo`, `json`) VALUES ('nodo00', '{\"temp\":53,\"CPU\":30\",\"mem\":120\"}');

Otros puntos:

Otro Material no Visto