▷ #ESP32 - #MQTT (Introducción)

⭐⭐⭐⭐⭐ #ESP32 - #MQTT (Introducción) 

MQTT (Message Queue Telemetry Transport) es un protocolo de transporte de mensajes Cliente/Servidor basado en publicaciones y subscripciones a los denominados “tópicos”. Cada vez que un mensaje es publicado será recibido por el resto de los dispositivos adheridos a un tópico del protocolo.

El protocolo MQTT es idóneo para aplicaciones de Internet de las Cosas en las cuales se envían cantidades pequeñas de información y por tanto no se necesita un gran ancho de banda.

Antes de aprender a construir una red MQTT, te ayudará a entender parte de la jerga que se utiliza y cómo cada pieza encaja para crear tu red.

  • Bróker – El bróker es el servidor que distribuye la información a los clientes interesados conectados al servidor.
  • Cliente – El dispositivo que se conecta al bróker para enviar o recibir información.
  • Tópicos- Es el indicador al que están asociados los mensajes en este protocolo. Este es el que se utilizara para que los clientes puedan suscribirse, publicar o hacer ambas cosas a un tópico.
  • Publicar – Se refiere a la acción que realizan los Clientes de enviar un mensaje (el cual está asociado a un tópico) para distribuirla a los clientes subscritos al mismo tópico.
  • Suscribirse – Se refiere a la acción que realizan los Clientes de conectarse a un tópico del bróker, con la finalidad de recibir los mensajes asociados a dicho tópico. 


MQTT BROKERS O SERVIDORES: El término original era “broker” pero ahora ha sido estandarizado como “Server”. Verás que se utilizan ambos términos. Este bróker es donde se realizan todas las configuraciones del servidor, tales como usuarios y contraseñas, certificados, cantidad de dispositivos, credenciales, entre otros. Hay muchos brokers MQTT disponibles que puede utilizar para pruebas y para aplicaciones reales. Hay brokers gratuitos auto alojados, los más populares son Mosquitto y los comerciales como HiveMQ. 

MQTT BROKERS COMERCIALES: Como su nombre lo indica son servidores comerciales que ofrecen compañías, la principal característica de estos servidores es que la configuración y mantenimiento de estos, está a cargo de la empresa que ofrece el servicio, permitiendo que no sea necesario que el cliente tenga un conocimiento profundo del tema, solo limitándose a conocer las credenciales del servidor, puerto, usuario y contraseña. Otra ventaja fundamental es que no requiere de una infraestructura física donde alojar el servidor, ahorrando en la adquisición de equipo especializado, o consumo energético del servidor alojado localmente. Además de ofrecer una mayor seguridad ante cualquier tipo de ataque. Podría parecer que todas son ventajas, pero la realidad es que hay características que se deben tener en cuenta a la hora de pensar en el uso de estos, la principal es que en su gran mayoría los MQTT Broker comerciales son de paga, es decir, que se debe pagar una mensualidad para el uso de estos, que, según las características que te puedan ofrecer, pueda ser un valor pequeño hasta planes muy costosos. Otra cuestión para tener en consideración es que, al ser un servicio externo, estaremos obligados de tener una conexión a internet para la transmisión de la información. Limitando los escenarios en donde podemos implementar el servicio, así como si durante la aplicación, existe una perdida de internet, se perderán los datos. A si como si se olvida de pagar la cuota se dejarán de enviar y recibir datos, posiblemente perdiendo información importante o perdiendo procesos.

Actualmente tenemos muchos ejemplos de estos, tales como:

MQTT BRÓKER NO COMERCIALES: Como un nombre lo describe estos servidores se refieren a los que podemos montar por nuestra propia cuenta, existe una gran variedad, pero para nuestro caso utilizaremos el famoso Eclipse Mosquitto, este es un agente de mensajes de código abierto (con licencia EPL / EDL) que implementa las versiones 5.0, 3.1.1 y 3.1 del protocolo MQTT. Mosquitto es liviano y adecuado para su uso en todos los dispositivos, desde computadoras de placa única de baja potencia hasta servidores completos. La ventaja fundamental de este servidor es que es completamente configurable, desde credenciales de conexión, protocolos de cifrado, tipos de conexión, habilitación y des habilitación de tópicos, entre otra configuración. Otras de las ventajas que otorga es que ante un sistema local no requiere de una conexión a internet, es decir, con una conexión WIFI presente ya se pueden comunicar varios dispositivos en la misma área, permitiendo realizar sistemas en diferentes entornos. Sin embargo, presenta unas desventajas notables, en primer lugar, se requiere de un conocimiento previo para el montaje y la configuración de este, debido que se tiene que configurar todo desde cero. Y la mas importante es la infraestructura necesaria, para correr el mosquitto Bróker se requiere de una plataforma que corra el servidor, esta puede ser desde un ordenador con Windows o Linux, hasta una placa Raspberry Pi. Esto presenta una problemática adicional si se necesita que el servidor este las 24 horas, deberíamos dejar la computadora todo el día encendido, lo que podría elevar el consumo energético, y si optamos a usar una Raspberry pi para minimizar el gasto, deberíamos considerar el costo de la inversión para adquirir la placa y la infraestructura para mantenerla, por lo que este puede ser uno de los mayores motivos por lo que decidirse ante un Mosquitto Bróker o un Servidor MQTT comercial. 

TÓPICOS Y SUBTÓPICOS (TOPIC AND SUBTOPIC): Una vez que ya tenemos nuestro bróker en funcionamiento, toca profundizar en la parte mas importante de dicho protocolo, el cual son los tópicos, estos son cadenas de texto con una longitud máxima de 65536 (en su mayoría son lo más corto posible). Cuando un Cliente publica un mensaje, a este esta asociado su tópico, con el cual se identifica que cliente recibirá dicho mensaje. La ventaja del servidor MQTT que a un mismo Topic se pueden subscribir varios clientes, de tal manera que cuando otro cliente publica a ese tópico, todos reciben la información de inmediato, esto podemos verlo mejor en el siguiente ejemplo:

En este ejemplo concreto contamos con 3 clientes, un sensor de temperatura, una Lapto y un dispositivo móvil. Como podemos observar los dispositivos Lapto y celular están subscrito al tópico llamado “temperatura”. El sensor de temperatura se prepara para publicar un mensaje en este caso el mensaje es 28*C al tópico “temperatura”, en ese momento dicho mensaje es recibido por todos los dispositivos conectados a ese tópico, y finalmente ambos le llega el mensaje 28*C. Como podemos observar esta es la interacción básica para este protocolo, tener un cliente que se va a encargar de enviar datos, y los diferentes clientes que recibirán dicha información.  Pero que sucedería si en el sensor se cambia el tópico, digamos “Temperatura”, bajo ese caso, aunque el sensor publique los mensajes varias veces, el celular y la Lapto no recibirán la información, y esto se debe que el tópico es diferente, para que el mensaje llegue debe ser publicado en el mismo tópico, que esta subscrito el cliente. Tener presente que, si se diferencian las mayúsculas y minúsculas, y aunque previamente ya hubo una comunicación entre los dispositivos, si se cambia el tópico, pude cambiar todo el funcionamiento.
Con eso en mente, agregar mas dispositivos no presenta mayor inconveniente, solo deberían subscribirse al topico existente, y ya podrían recibir datos. Sin embargo, que sucede cuando queremos agregar otro sensor, si utilizamos el mismo topico llamado “temperatura” para los dos sensores, seria complicado diferenciar de cual de los dos dispositivos se envió la información, para solucionar esto solo bastaría en publicar en un tópico diferente y con eso podemos agregar mas y mas publicadores. Pero que sucede cuando usamos un broker comercial, en donde solo se nos asigna un tópico principal para uso. Si tuviéramos otro sensor, no podríamos crear un “Temperatura2” porque inmediatamente seria rechazado. Para enfrentar esta problemática se introducen los subtopicos, o niveles de un tópico. Como su nombre lo indica nosotros podemos agregar niveles a un tópico, con la finalidad de organizar mejor el manejo de los tópicos: esto se visualizará mejor en la siguiente imagen:

De un mismo Tópico puede nacer, diferentes subtópicos y a la vez este tener sus propios Subtópicos y así de largo. Cada nivel esta separado de otro por un / , de manera escrita tendrían este formato:
Topic/SubTopic/SubTopic
Esto puede ser de utilidad para la organización de nuestro servidor, utilizando el ejemplo de los sensores, en vez de tener dos tópicos:
  • “Temperatura1”
  • “Temperatura2“
Tener un solo topico principal y este tener un nivel adicional tales como:
  • “Sensores/Temperatura1”
  • “Sensores/Temperatura2”
Aunque en ambos casos pareciera que tenemos dos tópicos, resulta que no es cierto, en el segundo caso solo tenemos un tópico llamado Sensores, de este nacen los dos subtopicos Temperatura1 y Temperatura 2. Siendo de utilidad debido que con un tópico único poder crear varios, solucionando la problemática de los servidores MQTT comerciales.
Cabe mencionar que, aunque el tópico principal es “Sensores”, la información publicada por “Sensores/Temperatura1” y “Sensores/Temperatura2” esta completamente separada la una de la otra, una no afecta a la otra. De igual manera los Subtópicos creados a partir de estos Subtópicos, a continuación, se presenta otro ejemplo del uso de tópicos y subtópicos:
  • casa/cocina/refrigerador
  • casa/cocina/microondas
  • casa/dormitorio/televisor
  • casa/sala/lampara
  • casa/sala/aire_acondicionado
  • casa/sala/ventilador
Como podemos observar de un tópico principal llamado, casa, se logró crear 6 Subtópicos cada uno siendo diferente y aislado del otro, es decir, cualquier mensaje publicado en casa/sala/lampara solo se publicará en dicho subtópicos y el mensaje no llegara a los demás.
Por último, cabe mencionar que el tópico principal “casa” no tiene nada que ver con los subtópicos creados, es decir, si publico el mensaje “Hola mundo” en el tópico “casa”, solo llegara a los clientes que estén suscritos a “casa” no importa que este tenga subtópicos creados, para enviar la información, debe ser publicado en el Subtópicos exacto.







Comentarios

Popular Posts

▷ #ESP32 - REAL-TIME CLOCK #RTC INTERNO

▷ Especificaciones del módulo ESP32

▷ #ESP32 - SINCRONIZAR RTC INTERNO CON SERVIDOR NTP

▷ #ESP32 - Display OLED 128x64

▷ #ESP32 - Over-The-Air programming #OTA

▷ SISTEMAS EMBEBIDOS, PROYECTOS PROPUESTOS (2020 1er Término)

▷ SISTEMAS EMBEBIDOS, PROYECTOS PROPUESTOS (2021 PAO1)

▷ Artificial Intelligence #AI based on #FPGA

▷ PROTEUS PCB DESIGN