Diferència entre revisions de la pàgina «10 / 4 / 2021 - Tecnologías IoT, Hands on y MVP»

De binefa.com
Salta a la navegació Salta a la cerca
 
(Hi ha 35 revisions intermèdies del mateix usuari que no es mostren)
Línia 1: Línia 1:
 
= Conceptos previos (9 / 4 / 2021) =
 
= Conceptos previos (9 / 4 / 2021) =
- Pequeño ejercicio conjunto de MQTT con MySQL.
+
- putty, FileZilla y órdenes básicas de GNU/Linux
  
- Ejercicio del ascensor (concepto de la pasarela IoT -''IoT Gateway''-). Snap!, NodeRED usando HTTP y control desde el móvil.
+
- Pequeño ejercicio conjunto de MQTT con MySQL
  
- Google Sheets desde el NodeRED.
+
- Ejercicio del ascensor (concepto de la pasarela IoT -''IoT Gateway''-). Snap!, NodeRED usando HTTP y control desde el móvil
  
- Protocolos para la IOT. TCP, HTTP, HTTPS, CoAP, ModBus-TCP, MQTT, MQTTS y OPC-UA.
+
- Google Sheets desde el NodeRED
 +
 
 +
- Protocolos para la IOT. TCP, HTTP, HTTPS, CoAP, ModBus-TCP, MQTT, MQTTS y OPC-UA
  
 
- Ejemplos HTTP, OPC-UA y ModBus TCP en Python y Node.js
 
- Ejemplos HTTP, OPC-UA y ModBus TCP en Python y Node.js
  
- Combinaciones de protocolos.
+
- Combinaciones de protocolos
 +
 
 +
([https://binefa.cat/training/upcSchool/2021/20210410/influxPythonNodeJS.zip Códigos en Python y node.js de acceso a bases de datos temporales InfluxDB])
 +
 
 +
sudo pm2 start node-red20
 +
sudo pm2 stop node-red20
 +
 
 +
= Temario (10 / 4 / 2021) =
 +
== Para realizar antes de la siguiente clase ==
 +
- '''Mastodon'''. Solicitar credenciales para acceder a esta [https://botsin.space/about instancia de Mastodon pensada para usarla como ''bot'']. La respuesta a la solicitud no es inmediata.
 +
 
 +
[https://botsin.space/@siarq_sensors Ejemplo de ''bot'' de Mastodon] para hacer lecturas de sensores cada hora.
 +
 
 +
- Instalar '''Telegram''' en vuestro dispositivo móvil.
 +
 
 +
- Instalar [https://play.google.com/store/apps/details?id=net.routix.mqttdash '''MQTT-Dash'''] para Android (los ejemplos se han hecho con esta aplicación). [https://apps.apple.com/us/app/mqttool/id1085976398 MQTTool para iOS] (es gratuita. La tendreis que usar de forma autónoma, partiendo de las similitudes con la aplicación para Android)
 +
 
 +
- Pedir credenciales a [https://www.thethingsnetwork.org/ The Things Network].
 +
 
 +
== Repaso ==
 +
=== Protocolos TCP ===
 +
[https://www.ionos.es/digitalguide/servidores/know-how/que-es-tcp-transport-control-protocol/ TCP (Transmission Control Protocol): retrato del protocolo de transporte]
 +
 
 +
==== HTTP ====
 +
[https://developer.mozilla.org/es/docs/Web/HTTP/Overview Generalidades del protocolo HTTP]
 +
 
 +
[[Image:01simpleWifiServer.png|center|01_simpleWifiServer]]
 +
 
 +
[https://binefa.cat/training/upcSchool/2021/20210410/IoT-02_wifi_01_simpleWiFiServer_upcSchool.zip Firmware comprimido en zip que presenta una página web en HTML capaz de controlar el led blanco]. [https://github.com/jordibinefa/IoT-02/tree/master/codes/IoT-02_wifi_01_simpleWiFiServer IoT-02_wifi_01_simpleWiFiServer en GitHub]
 +
 
 +
==== MQTT y MQTTS ====
 +
[[Conexión entre la placa IoT-02 y Snap! mediante MQTT]]
 +
 
 +
[https://binefa.cat/training/upcSchool/2021/20210410/IoT-02_mqtt_09_upcSchool.zip Firmware comprimido en zip de la placa IoT-02 de subscripción y publicación MQTT]
 +
 
 +
[http://extensions.snap.berkeley.edu/snap/snap.html#open:https://raw.githubusercontent.com/pixavier/mqtt4snap/master/IoT-02board/prueba_IoT02_mqtt.xml Código prueba_IoT02_mqtt en xml para Snap!] (enlace directo. El código se puede abrir directamente en una nueva pestaña del navegador). Sirve para probar el firmware del enlace anterior.
 +
 
 +
==== Protocolo UDP ====
 +
[https://www.ionos.es/digitalguide/servidores/know-how/udp-user-datagram-protocol/ UDP: ¿qué es el protocolo UDP?]
 +
 
 +
[https://binefa.cat/training/upcSchool/2021/20210410/IoT-02_wifi_04_udp_upcSchool.zip Firmware que implementa el protocolo UDP para la placa IoT-02].
 +
 
 +
unsigned int udpPortRx = 3334;
 +
unsigned int udpPortTx = 3333;
 +
 
 +
=== Introducción a NodeRED ===
 +
 
 +
[[Image:04wifiUdp.png|center|04_wifiUdp]]
 +
 
 +
[https://binefa.cat/training/upcSchool/2021/20210410/IoT-02_wifi_04_udp_upcSchool.nodered.txt Código para importar en el NodeRED funcionando con el protocolo UDP]. El puerto de recepción del ordenador (3333) tiene que ser el de transmisión de la placa y el de recepción de la placa (3334) tiene que ser el de transmisión del ordenador.
 +
Puerto Rx = 3333
 +
Puerto Tx = 3334
 +
 
 +
=== Graficación básica con un panel de control del NodeRED ===
 +
Verificar si están instalados los nodos '''node-red-dashboard''' en el NodeRED (ir a ''Settings/Palette/Nodes''). En caso de que no estén, ir a ''Settings/Palette/Install'' y hacer la instalación.
 +
 
 +
'''¡Atención!''': Sólo puede haber un escuchador (''listener'') UDP por puerto. Si se copia este flujo en otra pestaña del NodeRED, '''borrad''' el nodo UDP escuchador del flujo anterior. Se podría cambiar el número de puerto para que no hubiese colisión, pero también se tendría que cambiar en el código del firmware de la placa IoT-02.
 +
 
 +
[[Image:06udpNodeRed.png|center|06_udpNodeRed]]
 +
 
 +
 
 +
[[Image:07udpNodeRed.png|center|07_udpNodeRed]]
 +
 
 +
 
 +
[https://binefa.cat/training/upcSchool/2021/20210410/IoT-02_wifi_06_udp_upcSchool.nodered.txt Código para importar en el NodeRED funcionando con el protocolo UDP y graficando la lectura analógica de la LDR]. Se hacen consultas en el intervalo de un segundo. Para la visualización se usa una gráfica (''chart'') y un reloj (''gaugage''). También se han incorporado unos botones para controlar el led blanco y el verde.
 +
 
 +
== Ejercicio NodeRED con MQTT ==
 +
'''ex1)''' ''Hacer las modificaciones necesarias al [https://binefa.cat/training/upcSchool/2021/20210410/IoT-02_wifi_06_udp_upcSchool.nodered.txt código para importar en el NodeRED funcionando con el protocolo UDP y graficando la lectura analógica de la LDR] para que funcione mediante MQTT.''
 +
 
 +
== Integración de la placa IoT-02 con el ejercicio del ascensor ==
 +
* Código [https://binefa.cat/training/upcSchool/2021/20210410/elevador/elevator04.xml elevator04.xml] para ejecutarse en un [http://extensions.snap.berkeley.edu Snap! sobre HTTP (no HTTPS)] que simula el comportamiento de un ascensor de tres pisos. ('''¡Atención!''': Actualizad la variable MAC con el valor de MAC de vuestra placa IoT-02)
 +
 
 +
* [https://binefa.cat/training/upcSchool/2021/20210410/elevador/elevador04.nodered.txt Código de NodeRED de interacción con el ascensor] ('''¡Atención!''': Actualizad los temas con el valor de la MAC de vuestra placa IoT-02)
 +
 
 +
'''ex2.1)''' ''Indicador de piso con los leds''
 +
 
 +
Desarrollad '''elevator05.xml''' (con la base de [https://binefa.cat/training/upcSchool/2021/20210410/elevador/elevator04.xml elevator04.xml] añadid el código necesario de Snap!) para que '''cuando llegue a la planta de destino''' se encienda un led (planta 0: led verde, planta 1: led amarillo y planta 2: led rojo). Por tanto, si pasa de la planta 0 a la 2, no hace falta que se encienda el amarillo cuando pase por la planta 1.
 +
 
 +
Podeis consultar los temas (''topics'') de los tres leds requeridos abriendo este enlace en nueva pestaña: [http://extensions.snap.berkeley.edu/snap/snap.html#open:https://raw.githubusercontent.com/pixavier/mqtt4snap/master/IoT-02board/prueba_IoT02_mqtt.xml prueba_IoT02_mqtt.xml].
 +
 
 +
No hace falta hacer ninguna modificación al NodeRED.
 +
 
 +
'''ex2.2)''' ''Control de posición del ascensor simulado usando los botones de la placa IoT-02''
 +
 
 +
Desarrollad '''elevador05.nodered.txt''' (con la base de [https://binefa.cat/training/upcSchool/2021/20210410/elevador/elevador04.nodered.txt elevador04.nodered.txt]) para que haga de pasarela de los mensajes enviados por la placa IoT-02, cuando se presiona alguno de los tres botones, y los reciba '''elevator05.xml'''.
 +
 
 +
Aquí hay un ejemplo para hacer la pasarela de un botón [https://binefa.cat/training/upcSchool/2021/20210410/elevador/unBotonDePlaca.nodered.txt unBotonDePlaca.nodered.txt]. Recordad que se tiene que enviar el array como texto y no como objeto JSON.
 +
 
 +
Propuesta de función después de recibir el mensaje MQTT mediante el tema /AC67B228CDD4/btI34 (cambiad AC67B228CDD4 por la MAC de vuestra placa):
 +
if(msg.payload == "I34 pressed"){
 +
    msg.payload = "[1,\"1) AC67B228CDD4\"]";
 +
    return msg;
 +
}
 +
 
 +
[https://binefa.cat/training/upcSchool/2021/20210410/elevador/elevator05.xml elevator05.xml] (''Solución'')
 +
 
 +
'''ex2.3)''' ''Uso de la pantalla OLED para introducir información de valor para el usuario''
 +
 
 +
Desarrollad '''elevator06.xml''' (con la base de '''elevator05.xml''') para que '''cuando llegue a la planta de destino''' salga por la pantalla OLED el número de planta con el tipo de letra más grande de los tres posibles.
 +
 
 +
== Uso del VPS del Máster de Industria 4.0 el curso 2020-2021 ==
 +
[[ Uso del VPS del Máster de Industria 4.0 el curso 2020-2021 ]]
 +
 
 +
== InfluxDB básico ==
 +
[[Uso de InfluxDB en el VPS del Máster de Industria 4.0 el curso 2020-2021]]
 +
 
 +
== Conexión InfluxDB con NodeRED ==
 +
[[Uso de InfluxDB en el VPS del Máster de Industria 4.0 el curso 2019-2020]]
 +
 
 +
== Introducción a Grafana ==
 +
[[Uso de Grafana en el VPS del Máster de Industria 4.0 el curso 2019-2020]]
 +
 
 +
== Ejercicio ==
 +
Lectura de la LDR, temperatura, presión y humedad de la placa IoT-02 y graficarlas con Grafana.
 +
 
 +
== Uso de ''bots'' ==
 +
=== ''Bot'' de Telegram ===
 +
[https://wiki.binefa.cat/index.php?title=Bot_de_Telegram Bot de Telegram]
 +
 
 +
=== ''Bot'' de Mastodon ===
 +
No todas las instancias de [https://ca.wikipedia.org/wiki/Mastodon_(xarxa_social) Mastodon] facilitan la instalación de ''bots''. Para hacer los primeros pasos os recomiendo esta [https://botsin.space/ instancia pensada para hospedar ''bots'' de Mastodon].
 +
 
 +
[https://botsin.space/@siarq_sensors Ejemplo de bot de Mastodon] para hacer lecturas de sensores cada hora.
 +
 
 +
[https://gist.github.com/aparrish/661fca5ce7b4882a8c6823db12d42d26 Getting credentials for the Mastodon API with Mastodon.py, step by step]

Revisió de 10:46, 10 abr 2021

Conceptos previos (9 / 4 / 2021)[modifica]

- putty, FileZilla y órdenes básicas de GNU/Linux

- Pequeño ejercicio conjunto de MQTT con MySQL

- Ejercicio del ascensor (concepto de la pasarela IoT -IoT Gateway-). Snap!, NodeRED usando HTTP y control desde el móvil

- Google Sheets desde el NodeRED

- Protocolos para la IOT. TCP, HTTP, HTTPS, CoAP, ModBus-TCP, MQTT, MQTTS y OPC-UA

- Ejemplos HTTP, OPC-UA y ModBus TCP en Python y Node.js

- Combinaciones de protocolos

(Códigos en Python y node.js de acceso a bases de datos temporales InfluxDB)

sudo pm2 start node-red20
sudo pm2 stop node-red20

Temario (10 / 4 / 2021)[modifica]

Para realizar antes de la siguiente clase[modifica]

- Mastodon. Solicitar credenciales para acceder a esta instancia de Mastodon pensada para usarla como bot. La respuesta a la solicitud no es inmediata.

Ejemplo de bot de Mastodon para hacer lecturas de sensores cada hora.

- Instalar Telegram en vuestro dispositivo móvil.

- Instalar MQTT-Dash para Android (los ejemplos se han hecho con esta aplicación). MQTTool para iOS (es gratuita. La tendreis que usar de forma autónoma, partiendo de las similitudes con la aplicación para Android)

- Pedir credenciales a The Things Network.

Repaso[modifica]

Protocolos TCP[modifica]

TCP (Transmission Control Protocol): retrato del protocolo de transporte

HTTP[modifica]

Generalidades del protocolo HTTP

01_simpleWifiServer

Firmware comprimido en zip que presenta una página web en HTML capaz de controlar el led blanco. IoT-02_wifi_01_simpleWiFiServer en GitHub

MQTT y MQTTS[modifica]

Conexión entre la placa IoT-02 y Snap! mediante MQTT

Firmware comprimido en zip de la placa IoT-02 de subscripción y publicación MQTT

Código prueba_IoT02_mqtt en xml para Snap! (enlace directo. El código se puede abrir directamente en una nueva pestaña del navegador). Sirve para probar el firmware del enlace anterior.

Protocolo UDP[modifica]

UDP: ¿qué es el protocolo UDP?

Firmware que implementa el protocolo UDP para la placa IoT-02.

unsigned int udpPortRx = 3334;
unsigned int udpPortTx = 3333;

Introducción a NodeRED[modifica]

04_wifiUdp

Código para importar en el NodeRED funcionando con el protocolo UDP. El puerto de recepción del ordenador (3333) tiene que ser el de transmisión de la placa y el de recepción de la placa (3334) tiene que ser el de transmisión del ordenador.

Puerto Rx = 3333
Puerto Tx = 3334

Graficación básica con un panel de control del NodeRED[modifica]

Verificar si están instalados los nodos node-red-dashboard en el NodeRED (ir a Settings/Palette/Nodes). En caso de que no estén, ir a Settings/Palette/Install y hacer la instalación.

¡Atención!: Sólo puede haber un escuchador (listener) UDP por puerto. Si se copia este flujo en otra pestaña del NodeRED, borrad el nodo UDP escuchador del flujo anterior. Se podría cambiar el número de puerto para que no hubiese colisión, pero también se tendría que cambiar en el código del firmware de la placa IoT-02.

06_udpNodeRed


07_udpNodeRed


Código para importar en el NodeRED funcionando con el protocolo UDP y graficando la lectura analógica de la LDR. Se hacen consultas en el intervalo de un segundo. Para la visualización se usa una gráfica (chart) y un reloj (gaugage). También se han incorporado unos botones para controlar el led blanco y el verde.

Ejercicio NodeRED con MQTT[modifica]

ex1) Hacer las modificaciones necesarias al código para importar en el NodeRED funcionando con el protocolo UDP y graficando la lectura analógica de la LDR para que funcione mediante MQTT.

Integración de la placa IoT-02 con el ejercicio del ascensor[modifica]

  • Código elevator04.xml para ejecutarse en un Snap! sobre HTTP (no HTTPS) que simula el comportamiento de un ascensor de tres pisos. (¡Atención!: Actualizad la variable MAC con el valor de MAC de vuestra placa IoT-02)

ex2.1) Indicador de piso con los leds

Desarrollad elevator05.xml (con la base de elevator04.xml añadid el código necesario de Snap!) para que cuando llegue a la planta de destino se encienda un led (planta 0: led verde, planta 1: led amarillo y planta 2: led rojo). Por tanto, si pasa de la planta 0 a la 2, no hace falta que se encienda el amarillo cuando pase por la planta 1.

Podeis consultar los temas (topics) de los tres leds requeridos abriendo este enlace en nueva pestaña: prueba_IoT02_mqtt.xml.

No hace falta hacer ninguna modificación al NodeRED.

ex2.2) Control de posición del ascensor simulado usando los botones de la placa IoT-02

Desarrollad elevador05.nodered.txt (con la base de elevador04.nodered.txt) para que haga de pasarela de los mensajes enviados por la placa IoT-02, cuando se presiona alguno de los tres botones, y los reciba elevator05.xml.

Aquí hay un ejemplo para hacer la pasarela de un botón unBotonDePlaca.nodered.txt. Recordad que se tiene que enviar el array como texto y no como objeto JSON.

Propuesta de función después de recibir el mensaje MQTT mediante el tema /AC67B228CDD4/btI34 (cambiad AC67B228CDD4 por la MAC de vuestra placa):

if(msg.payload == "I34 pressed"){
   msg.payload = "[1,\"1) AC67B228CDD4\"]";
   return msg;
}

elevator05.xml (Solución)

ex2.3) Uso de la pantalla OLED para introducir información de valor para el usuario

Desarrollad elevator06.xml (con la base de elevator05.xml) para que cuando llegue a la planta de destino salga por la pantalla OLED el número de planta con el tipo de letra más grande de los tres posibles.

Uso del VPS del Máster de Industria 4.0 el curso 2020-2021[modifica]

Uso del VPS del Máster de Industria 4.0 el curso 2020-2021

InfluxDB básico[modifica]

Uso de InfluxDB en el VPS del Máster de Industria 4.0 el curso 2020-2021

Conexión InfluxDB con NodeRED[modifica]

Uso de InfluxDB en el VPS del Máster de Industria 4.0 el curso 2019-2020

Introducción a Grafana[modifica]

Uso de Grafana en el VPS del Máster de Industria 4.0 el curso 2019-2020

Ejercicio[modifica]

Lectura de la LDR, temperatura, presión y humedad de la placa IoT-02 y graficarlas con Grafana.

Uso de bots[modifica]

Bot de Telegram[modifica]

Bot de Telegram

Bot de Mastodon[modifica]

No todas las instancias de Mastodon facilitan la instalación de bots. Para hacer los primeros pasos os recomiendo esta instancia pensada para hospedar bots de Mastodon.

Ejemplo de bot de Mastodon para hacer lecturas de sensores cada hora.

Getting credentials for the Mastodon API with Mastodon.py, step by step