{"id":12359,"date":"2024-06-08T19:14:33","date_gmt":"2024-06-08T17:14:33","guid":{"rendered":"https:\/\/www.palentino.es\/blog\/?p=12359"},"modified":"2024-06-09T12:53:48","modified_gmt":"2024-06-09T10:53:48","slug":"introduccion-a-mqtt-comunicacion-eficiente-para-dispositivos-iot","status":"publish","type":"post","link":"https:\/\/www.palentino.es\/blog\/introduccion-a-mqtt-comunicacion-eficiente-para-dispositivos-iot\/","title":{"rendered":"Introducci\u00f3n a MQTT: Comunicaci\u00f3n eficiente para dispositivos IoT"},"content":{"rendered":"<p><span style=\"color: #800080;\"><strong>MQTT<\/strong><\/span>, que significa <strong>Message Queuing Telemetry Transport<\/strong>, es un protocolo de mensajer\u00eda liviano y eficiente, dise\u00f1ado espec\u00edficamente para dispositivos con recursos limitados y conexiones de red poco fiables. Este protocolo fue desarrollado por <strong>IBM en 1999<\/strong> y ahora es un est\u00e1ndar abierto mantenido por <span style=\"color: #800080;\"><strong>OASIS<\/strong> <\/span>(Organization for the Advancement of Structured Information Standards).<\/p>\n<p>Es un protocolo de mensajer\u00eda ligero y eficiente, dise\u00f1ado para dispositivos con recursos limitados y conexiones de red poco fiables, y se utiliza ampliamente en el Internet de las Cosas (IoT), la automatizaci\u00f3n del hogar, el monitoreo industrial, el transporte y la log\u00edstica, la salud y el bienestar, la agricultura inteligente, la gesti\u00f3n de energ\u00eda y servicios p\u00fablicos, y aplicaciones m\u00f3viles y web; su modelo de comunicaci\u00f3n basado en la publicaci\u00f3n y suscripci\u00f3n, gestionado por un broker central, permite una comunicaci\u00f3n desacoplada, escalable y eficiente entre dispositivos, facilitando el monitoreo en tiempo real, el mantenimiento predictivo, la gesti\u00f3n de inventarios, el control remoto y la entrega de notificaciones en tiempo real, lo que lo convierte en una opci\u00f3n ideal para una amplia gama de aplicaciones tecnol\u00f3gicas.<\/p>\n<p><a href=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/06\/funcionamiento-mosquito-palentino.gif\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-12377 size-full\" src=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/06\/funcionamiento-mosquito-palentino.gif\" alt=\"\" width=\"1015\" height=\"671\" \/><\/a><\/p>\n<h2><span style=\"color: #800080;\">Caracter\u00edsticas Clave de MQTT<\/span><\/h2>\n<ol>\n<li><strong>Ligero y Eficiente<\/strong>:\n<ul>\n<li><strong>Bajo Consumo de Recursos<\/strong>: MQTT est\u00e1 dise\u00f1ado para minimizar el consumo de ancho de banda y la sobrecarga del sistema. Utiliza un formato de mensaje sencillo y ligero, lo que lo hace ideal para dispositivos con recursos limitados, como sensores y microcontroladores.<\/li>\n<li><strong>Peque\u00f1o Tama\u00f1o de Mensaje<\/strong>: Los encabezados de los mensajes MQTT son muy peque\u00f1os, lo que permite una comunicaci\u00f3n eficiente incluso en redes con baja capacidad de transmisi\u00f3n.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Publicaci\u00f3n\/Suscripci\u00f3n<\/strong>:\n<ul>\n<li><strong>Desacoplamiento de Emisores y Receptores<\/strong>: En lugar de un modelo cliente-servidor donde los dispositivos se comunican directamente entre s\u00ed, MQTT utiliza un modelo de publicaci\u00f3n\/suscripci\u00f3n. Los publicadores env\u00edan mensajes a un broker, que luego distribuye esos mensajes a los suscriptores que se han registrado para recibir informaci\u00f3n sobre temas espec\u00edficos.<\/li>\n<li><strong>Temas<\/strong>: Los mensajes se organizan en temas jer\u00e1rquicos. Por ejemplo, &#8220;casa\/sala\/temperatura&#8221; es un tema donde se podr\u00eda publicar la temperatura de la sala de estar. Esto facilita la organizaci\u00f3n y el filtrado de mensajes.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Confiabilidad y Calidad de Servicio (QoS)<\/strong>:\n<ul>\n<li><strong>QoS 0<\/strong>: Mensaje entregado al m\u00e1ximo una vez, sin confirmaci\u00f3n.<\/li>\n<li><strong>QoS 1<\/strong>: Mensaje entregado al menos una vez, con confirmaci\u00f3n de recepci\u00f3n.<\/li>\n<li><strong>QoS 2<\/strong>: Mensaje entregado exactamente una vez, con un proceso de confirmaci\u00f3n m\u00e1s riguroso para evitar duplicados.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Persistencia de Conexi\u00f3n<\/strong>:\n<ul>\n<li><strong>Sesiones Persistentes<\/strong>: MQTT puede mantener las sesiones de los clientes incluso cuando se desconectan, lo que permite que los mensajes se entreguen una vez que los clientes se reconecten.<\/li>\n<li><strong>Retained Messages<\/strong>: El broker puede almacenar el \u00faltimo mensaje publicado en un tema para que los nuevos suscriptores lo reciban inmediatamente despu\u00e9s de suscribirse.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Seguridad<\/strong>:\n<ul>\n<li><strong>Autenticaci\u00f3n y Autorizaci\u00f3n<\/strong>: MQTT soporta autenticaci\u00f3n de clientes mediante usuario y contrase\u00f1a.<\/li>\n<li><strong>Cifrado TLS\/SSL<\/strong>: Para proteger los datos transmitidos, MQTT puede utilizar cifrado TLS\/SSL.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p><a href=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/06\/mosquito.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-12362 size-full\" src=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/06\/mosquito.png\" alt=\"\" width=\"1075\" height=\"612\" srcset=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/06\/mosquito.png 1075w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/06\/mosquito-300x171.png 300w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/06\/mosquito-1024x583.png 1024w\" sizes=\"auto, (max-width: 1075px) 100vw, 1075px\" \/><\/a><\/p>\n<p><!--more--><\/p>\n<h2><strong><span style=\"color: #800080;\">\u00bfPor qu\u00e9 MQTT?<\/span><\/strong><\/h2>\n<h4>Modelo de Comunicaci\u00f3n Basado en Publicaci\u00f3n\/Suscripci\u00f3n<\/h4>\n<p>Lo que realmente me llam\u00f3 la atenci\u00f3n sobre MQTT es su modelo de comunicaci\u00f3n basado en la <strong>publicaci\u00f3n\/suscripci\u00f3n<\/strong>. Este modelo tiene varias ventajas sobre los modelos de comunicaci\u00f3n tradicionales, como el cliente-servidor:<\/p>\n<ol>\n<li><strong>Desacoplamiento<\/strong>:\n<ul>\n<li><strong>Temporal<\/strong>: Los publicadores y suscriptores no necesitan estar activos al mismo tiempo. Un publicador puede enviar un mensaje sin saber si hay suscriptores activos, y un suscriptor puede recibir mensajes publicados anteriormente una vez que se conecte.<\/li>\n<li><strong>Espacial<\/strong>: Los publicadores y suscriptores no necesitan conocerse entre s\u00ed. Solo necesitan conocer el broker y el tema relevante.<\/li>\n<li><strong>Sincronizaci\u00f3n<\/strong>: No se requiere sincronizaci\u00f3n directa entre los dispositivos que se comunican, lo que simplifica enormemente el dise\u00f1o y la implementaci\u00f3n del sistema.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Escalabilidad<\/strong>:\n<ul>\n<li><strong>Manejo de Grandes Vol\u00famenes de Datos<\/strong>: El broker centralizado puede manejar grandes vol\u00famenes de mensajes y distribuirlos eficientemente a los suscriptores.<\/li>\n<li><strong>Facilidad de Adici\u00f3n de Nuevos Dispositivos<\/strong>: Es f\u00e1cil agregar nuevos dispositivos al sistema sin necesidad de modificar los dispositivos existentes. Solo necesitan suscribirse a los temas relevantes.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Eficiencia en la Transmisi\u00f3n de Datos<\/strong>:\n<ul>\n<li><strong>Minimizaci\u00f3n de la Carga de la Red<\/strong>: Dado que los mensajes solo se env\u00edan a los suscriptores interesados, se minimiza la carga de la red y se optimiza el uso del ancho de banda disponible.<\/li>\n<li><strong>Manejo de Conexiones Inestables<\/strong>: MQTT est\u00e1 dise\u00f1ado para funcionar en redes poco fiables, con caracter\u00edsticas como la persistencia de mensajes y la calidad de servicio que garantizan la entrega de mensajes.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h2><span style=\"color: #800080;\">Suscripci\u00f3n en MQTT<\/span><\/h2>\n<h4>\u00bfQu\u00e9 es un Tema (Topic)?<\/h4>\n<p>Un tema en MQTT es una cadena de texto que jer\u00e1rquicamente organiza la informaci\u00f3n. Por ejemplo, un tema podr\u00eda ser &#8220;casa\/sala\/temperatura&#8221;. Los temas son utilizados para categorizar y organizar los mensajes que se env\u00edan a trav\u00e9s del broker.<\/p>\n<h4>Proceso de Suscripci\u00f3n<\/h4>\n<ol>\n<li><strong>Suscribirse a un Tema<\/strong>: Cuando un cliente se suscribe a un tema, le est\u00e1 diciendo al broker que quiere recibir todos los mensajes que se publiquen en ese tema. Por ejemplo, si un cliente se suscribe al tema &#8220;casa\/sala\/temperatura&#8221;, recibir\u00e1 todos los mensajes que se publiquen en ese tema.<\/li>\n<li><strong>Wildcard (Comodines) en Suscripciones<\/strong>:\n<ul>\n<li><strong>\u00a0+<\/strong> Se utiliza para sustituir exactamente un nivel de la jerarqu\u00eda del tema. Por ejemplo, &#8220;casa\/+\/temperatura&#8221; suscribe a todos los temas de temperatura en diferentes habitaciones de la casa.<\/li>\n<li>\u00a0<strong>#<\/strong> Se utiliza para sustituir cero o m\u00e1s niveles de la jerarqu\u00eda del tema. Por ejemplo, &#8220;casa\/#&#8221; suscribe a todos los temas bajo &#8220;casa&#8221;, como &#8220;casa\/sala\/temperatura&#8221; o &#8220;casa\/cocina\/humedad&#8221;.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Calidad de Servicio (QoS)<\/strong>: Al suscribirse, un cliente tambi\u00e9n puede especificar el nivel de calidad de servicio (QoS) que desea utilizar para los mensajes que recibe:\n<ul>\n<li><strong>QoS 0<\/strong>: El mensaje se entrega al m\u00e1ximo una vez, sin garant\u00eda de entrega.<\/li>\n<li><strong>QoS 1<\/strong>: El mensaje se entrega al menos una vez, con confirmaci\u00f3n de recepci\u00f3n.<\/li>\n<li><strong>QoS 2<\/strong>: El mensaje se entrega exactamente una vez, con un proceso m\u00e1s complejo para garantizar la entrega sin duplicados<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h3>Ventajas de la Suscripci\u00f3n en MQTT<\/h3>\n<ul>\n<li><strong>Eficiencia<\/strong>: Los clientes solo reciben los mensajes relevantes, lo que reduce la cantidad de datos transmitidos.<\/li>\n<li><strong>Desacoplamiento<\/strong>: Los publicadores y suscriptores no necesitan conocerse entre s\u00ed, solo necesitan saber el tema.<\/li>\n<li><strong>Escalabilidad<\/strong>: Permite manejar un gran n\u00famero de clientes y mensajes de manera eficiente.<\/li>\n<\/ul>\n<p>La suscripci\u00f3n en MQTT es un proceso fundamental que permite a los clientes recibir mensajes de inter\u00e9s sin necesidad de conocer los detalles del remitente. Esto facilita la creaci\u00f3n de sistemas escalables y eficientes, especialmente en aplicaciones de IoT donde m\u00faltiples dispositivos necesitan comunicarse de manera efectiva y en tiempo real.<\/p>\n<h2><strong><span style=\"color: #800080;\">Ejemplo Pr\u00e1ctico<\/span><\/strong><\/h2>\n<p>Un ejemplo pr\u00e1ctico de c\u00f3mo funciona MQTT podr\u00eda ser un sistema de automatizaci\u00f3n del hogar. Supongamos que tienes varios sensores de temperatura distribuidos en diferentes habitaciones de tu casa. Estos sensores pueden publicar la temperatura actual en temas como &#8220;casa\/sala\/temperatura&#8221;, &#8220;casa\/cocina\/temperatura&#8221;, etc.<\/p>\n<p>Un controlador central o una aplicaci\u00f3n en tu smartphone puede suscribirse a estos temas y recibir actualizaciones en tiempo real sobre las temperaturas en las diferentes habitaciones. Si se suscribe al tema &#8220;casa\/+\/temperatura&#8221;, recibir\u00e1 todas las actualizaciones de temperatura de todas las habitaciones. Esto permite una monitorizaci\u00f3n y control eficientes de las condiciones del hogar, todo gracias a la simplicidad y eficiencia del protocolo MQTT.<\/p>\n<p>MQTT es un protocolo potente y flexible que facilita la comunicaci\u00f3n eficiente entre dispositivos, especialmente en aplicaciones IoT. Su modelo de publicaci\u00f3n\/suscripci\u00f3n, junto con su bajo consumo de recursos y robustas caracter\u00edsticas de calidad de servicio, lo convierten en una opci\u00f3n ideal para una amplia gama de aplicaciones. Si est\u00e1s desarrollando soluciones IoT o sistemas de comunicaci\u00f3n entre dispositivos, te animo a explorar m\u00e1s sobre MQTT y considerar su implementaci\u00f3n en tus proyectos.<\/p>\n<h2><strong><span style=\"color: #800080;\">Componentes Clave de MQTT<\/span><\/strong><\/h2>\n<p>Para entender mejor c\u00f3mo funciona MQTT, es importante conocer sus componentes principales:<\/p>\n<ol>\n<li><strong>Broker<\/strong>: El coraz\u00f3n del sistema MQTT. El broker recibe todos los mensajes de los publicadores y los reenv\u00eda a los suscriptores correspondientes.<\/li>\n<li><strong>Clientes<\/strong>: Pueden ser dispositivos o aplicaciones que se conectan al broker para publicar o suscribirse a temas.<\/li>\n<\/ol>\n<h4>\u00bfQu\u00e9 Significa Suscripci\u00f3n en MQTT?<\/h4>\n<p>La suscripci\u00f3n en MQTT es el proceso mediante el cual un cliente se inscribe para recibir mensajes publicados en un tema espec\u00edfico. Cuando un cliente se suscribe a un tema, el broker le enviar\u00e1 todos los mensajes publicados en ese tema. Adem\u00e1s, MQTT soporta comodines para suscribirse a m\u00faltiples temas:<\/p>\n<ul>\n<li>+: Sustituye exactamente un nivel de la jerarqu\u00eda del tema.<\/li>\n<li>#: Sustituye cero o m\u00e1s niveles de la jerarqu\u00eda del tema.<\/li>\n<\/ul>\n<h4>Mantener un Cliente MQTT a la Escucha<\/h4>\n<p>Para que un cliente MQTT est\u00e9 siempre a la escucha de mensajes, necesita:<\/p>\n<ol>\n<li><strong>Conexi\u00f3n Persistente<\/strong>: Mantener una conexi\u00f3n activa con el broker MQTT.<\/li>\n<li><strong>Bucle de Eventos<\/strong>: Ejecutar un bucle de eventos que le permita recibir y procesar mensajes de manera continua.<\/li>\n<\/ol>\n<h4>Ejemplo con Mosquitto Client<\/h4>\n<p>Para suscribirse a un tema y mantenerse a la escucha de mensajes usando Mosquitto Client:<\/p>\n<p><strong>mosquitto_sub -h broker.hivemq.com -t &#8220;casa\/sala\/temperatura&#8221;<\/strong><\/p>\n<p>Para publicar un mensaje:<\/p>\n<p><strong>mosquitto_pub -h broker.hivemq.com -t <span class=\"hljs-string\">&#8220;casa\/sala\/temperatura&#8221;<\/span> -m <span class=\"hljs-string\">&#8220;Hello MQTT&#8221;<\/span><\/strong><\/p>\n<p><a href=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/06\/mosquito2.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-12365 size-full\" src=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/06\/mosquito2.png\" alt=\"\" width=\"1060\" height=\"605\" srcset=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/06\/mosquito2.png 1060w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/06\/mosquito2-300x171.png 300w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/06\/mosquito2-1024x584.png 1024w\" sizes=\"auto, (max-width: 1060px) 100vw, 1060px\" \/><\/a><\/p>\n<h2><span style=\"color: #800080;\">\u00bf Requiere servidor ?<\/span><\/h2>\n<p>S\u00ed, MQTT requiere un servidor central, conocido como <strong>broker<\/strong>, para manejar la comunicaci\u00f3n entre los clientes. El broker es responsable de recibir todos los mensajes de los clientes y redirigirlos a los clientes suscritos a los temas correspondientes. Aqu\u00ed se detallan las funciones del broker y algunas opciones de implementaci\u00f3n:<\/p>\n<h3>Funciones del Broker MQTT<\/h3>\n<ol>\n<li><strong>Gesti\u00f3n de Conexiones<\/strong>: Maneja las conexiones de los clientes, incluyendo autenticaci\u00f3n y autorizaci\u00f3n.<\/li>\n<li><strong>Enrutamiento de Mensajes<\/strong>: Recibe mensajes de los publicadores y los distribuye a los suscriptores correspondientes.<\/li>\n<li><strong>Persistencia de Mensajes<\/strong>: Almacena mensajes retenidos y garantiza la entrega de mensajes con QoS 1 y QoS 2.<\/li>\n<li><strong>Escalabilidad<\/strong>: Capacidad de manejar m\u00faltiples conexiones simult\u00e1neas y grandes vol\u00famenes de mensajes.<\/li>\n<li><strong>Seguridad<\/strong>: Implementa autenticaci\u00f3n, autorizaci\u00f3n y cifrado TLS\/SSL para proteger las comunicaciones.<\/li>\n<\/ol>\n<h3>Brokers MQTT Populares<\/h3>\n<p>Existen varios brokers MQTT que puedes usar, tanto para desarrollo como para producci\u00f3n. Aqu\u00ed hay algunos de los m\u00e1s populares:<\/p>\n<ol>\n<li><strong>Eclipse Mosquitto<\/strong>\n<ul>\n<li><strong>Descripci\u00f3n<\/strong>: Un broker ligero y de c\u00f3digo abierto, ideal para desarrollo y despliegues peque\u00f1os.<\/li>\n<li><strong>Instalaci\u00f3n<\/strong>:\n<div class=\"dark bg-gray-950 rounded-md border-[0.5px] border-token-border-medium\">\n<div class=\"flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md\">\n<p>sudo apt-get install mosquitto<br \/>\nsudo apt-get install mosquitto-clients<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li><strong>Iniciar el broker<\/strong>:\n<div class=\"dark bg-gray-950 rounded-md border-[0.5px] border-token-border-medium\">\n<div class=\"flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md\">\n<p>sudo systemctl start mosquitto<\/p>\n<\/div>\n<\/div>\n<\/li>\n<\/ul>\n<\/li>\n<li><strong>HiveMQ<\/strong>\n<ul>\n<li><strong>Descripci\u00f3n<\/strong>: Un broker comercial dise\u00f1ado para alta disponibilidad y escalabilidad en entornos empresariales.<\/li>\n<li><strong>Caracter\u00edsticas<\/strong>: Escalabilidad horizontal, panel de control para monitoreo, soporte para extensiones.<\/li>\n<\/ul>\n<\/li>\n<li><strong>EMQX<\/strong>\n<ul>\n<li><strong>Descripci\u00f3n<\/strong>: Un broker de alto rendimiento y c\u00f3digo abierto, adecuado para grandes despliegues IoT.<\/li>\n<li><strong>Instalaci\u00f3n<\/strong>:\n<div class=\"dark bg-gray-950 rounded-md border-[0.5px] border-token-border-medium\">\n<div class=\"flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md\">\n<p>sudo apt-get update<br \/>\nsudo apt-get install emqx<\/p>\n<\/div>\n<\/div>\n<\/li>\n<li><strong>Iniciar el broker<\/strong>:\n<div class=\"dark bg-gray-950 rounded-md border-[0.5px] border-token-border-medium\">\n<div class=\"flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md\">\n<p>sudo systemctl start emqx<\/p>\n<\/div>\n<\/div>\n<\/li>\n<\/ul>\n<\/li>\n<li><strong>AWS IoT Core<\/strong>\n<ul>\n<li><strong>Descripci\u00f3n<\/strong>: Un servicio gestionado de AWS para IoT, que incluye un broker MQTT completamente gestionado.<\/li>\n<li><strong>Caracter\u00edsticas<\/strong>: Integraci\u00f3n con otros servicios de AWS, alta disponibilidad, seguridad robusta.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>MQTT se puede implementar en una variedad de lenguajes de programaci\u00f3n gracias a su dise\u00f1o simple y a la disponibilidad de numerosas bibliotecas y clientes para diferentes entornos. Aqu\u00ed hay algunos de los lenguajes de programaci\u00f3n m\u00e1s comunes con sus respectivas bibliotecas MQTT:<\/p>\n<h2><span style=\"color: #800080;\">Lenguajes de Programaci\u00f3n y Bibliotecas Comunes para MQTT<\/span><\/h2>\n<ol>\n<li><strong>Python<\/strong>:\n<ul>\n<li>Biblioteca:\u00a0 paho-mqtt<\/li>\n<li>Instalaci\u00f3n: pip install paho-mqtt<\/li>\n<\/ul>\n<\/li>\n<li><strong>Java<\/strong>:\n<ul>\n<li>Biblioteca: Eclipse Paho<\/li>\n<li>Maven:<br \/>\n&lt;dependency&gt;<br \/>\n&lt;groupId&gt;org.eclipse.paho&lt;\/groupId&gt;<br \/>\n&lt;artifactId&gt;org.eclipse.paho.client.mqttv3&lt;\/artifactId&gt;<br \/>\n&lt;version&gt;1.2.5&lt;\/version&gt;<br \/>\n&lt;\/dependency&gt;<\/li>\n<\/ul>\n<\/li>\n<li><strong>JavaScript\/Node.js<\/strong>:\n<ul>\n<li>Biblioteca: mqtt.js<\/li>\n<li>Instalaci\u00f3n:npm install mqtt<\/li>\n<\/ul>\n<\/li>\n<li><strong>C\/C++<\/strong>:\n<ul>\n<li>Biblioteca: Eclipse Paho<\/li>\n<li>Ejemplo de uso: disponible en <a href=\"https:\/\/github.com\/eclipse\/paho.mqtt.c\" target=\"_new\" rel=\"noreferrer noopener\">Eclipse Paho GitHub<\/a><\/li>\n<\/ul>\n<\/li>\n<li><strong>Go<\/strong>:\n<ul>\n<li>Biblioteca: paho.mqtt.golang<\/li>\n<li>Instalaci\u00f3n: go get github.com\/eclipse\/paho.mqtt.golang<\/li>\n<\/ul>\n<\/li>\n<li><strong>Rust<\/strong>:\n<ul>\n<li>Biblioteca: rumqttc<\/li>\n<li>Instalaci\u00f3n: cargo add rumqttc<\/li>\n<\/ul>\n<\/li>\n<li><strong>Ruby<\/strong>:\n<ul>\n<li>Biblioteca: mqtt-ruby<\/li>\n<li>Instalaci\u00f3n: gem install mqtt<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h2><strong><span style=\"color: #800080;\">Programar MQTT en .NET<\/span><\/strong><\/h2>\n<p>S\u00ed, se puede programar MQTT en .NET. Existen bibliotecas disponibles para C# y .NET que permiten implementar clientes MQTT. La m\u00e1s popular es MQTTnet.<\/p>\n<h4>Programando con MQTT en VB.NET<\/h4>\n<p>Como desarrollador .NET, me emocion\u00f3 descubrir la biblioteca MQTTnet, que facilita la implementaci\u00f3n de clientes MQTT en aplicaciones .NET. Aqu\u00ed un ejemplo b\u00e1sico en VB.NET:<\/p>\n<pre><em>Imports System<\/em>\r\n<em>Imports System.Text<\/em>\r\n<em>Imports System.Threading.Tasks<\/em>\r\n<em>Imports MQTTnet<\/em>\r\n<em>Imports MQTTnet.Client<\/em>\r\n<em>Imports MQTTnet.Client.Options<\/em>\r\n\r\n<em>Module Program<\/em>\r\n<em>Sub Main(args As String())<\/em>\r\n<em>Dim mqttFactory = New MqttFactory()<\/em>\r\n<em>Dim mqttClient = mqttFactory.CreateMqttClient()<\/em>\r\n\r\n<em>Dim options = New MqttClientOptionsBuilder() _<\/em>\r\n<em>.WithClientId(\"ClientID\") _<\/em>\r\n<em>.WithTcpServer(\"broker.hivemq.com\", 1883) _<\/em>\r\n<em>.WithCleanSession() _<\/em>\r\n<em>.Build()<\/em>\r\n\r\n<em>AddHandler mqttClient.UseConnectedHandler, Async Sub(e)<\/em>\r\n<em>Console.WriteLine(\"Conectado al broker.\")<\/em>\r\n<em>Dim topicFilter = New MqttTopicFilterBuilder() _<\/em>\r\n<em>.WithTopic(\"casa\/sala\/temperatura\") _<\/em>\r\n<em>.Build()<\/em>\r\n<em>Await mqttClient.SubscribeAsync(topicFilter)<\/em>\r\n<em>End Sub<\/em>\r\n\r\n<em>AddHandler mqttClient.UseDisconnectedHandler, Sub(e)<\/em>\r\n<em>Console.WriteLine(\"Desconectado del broker.\")<\/em>\r\n<em>End Sub<\/em>\r\n\r\n<em>AddHandler mqttClient.UseApplicationMessageReceivedHandler, Sub(e)<\/em>\r\n<em>Console.WriteLine($\"Mensaje recibido en {e.ApplicationMessage.Topic}: {Encoding.UTF8.GetString(e.ApplicationMessage.Payload)}\")<\/em>\r\n<em>End Sub<\/em>\r\n\r\n<em>Await mqttClient.ConnectAsync(options)<\/em>\r\n\r\n<em>Dim message = New MqttApplicationMessageBuilder() _<\/em>\r\n<em>.WithTopic(\"casa\/sala\/temperatura\") _<\/em>\r\n<em>.WithPayload(\"23.5\") _<\/em>\r\n<em>.WithExactlyOnceQoS() _<\/em>\r\n<em>.WithRetainFlag() _<\/em>\r\n<em>.Build()<\/em>\r\n\r\n<em>Await mqttClient.PublishAsync(message)<\/em>\r\n\r\n<em>Console.WriteLine(\"Presiona cualquier tecla para salir.\")<\/em>\r\n<em>Console.ReadLine()<\/em>\r\n\r\n<em>Await mqttClient.DisconnectAsync()<\/em>\r\n<em>End Sub<\/em>\r\n<em>End Module<\/em><\/pre>\n<h2><\/h2>\n<h2><span style=\"color: #800080;\">Instalaci\u00f3n y Configuraci\u00f3n del Broker Mosquitto<\/span><\/h2>\n<p>Para comenzar, instal\u00e9 y configur\u00e9 mi propio broker MQTT usando Mosquitto:<\/p>\n<p><strong>Instalaci\u00f3n en Linux<\/strong>:<\/p>\n<ol>\n<li>Actualiza los paquetes de tu sistema:<\/li>\n<\/ol>\n<pre>sudo apt-get update<\/pre>\n<p>2. Instala Mosquitto y los clientes Mosquitto:<\/p>\n<div class=\"dark bg-gray-950 rounded-md border-[0.5px] border-token-border-medium\">\n<pre class=\"flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md\">mosquitto_pub -h localhost -t \"test\/topic\" -m \"Hello MQTT\"<\/pre>\n<div><\/div>\n<\/div>\n<div>3 &#8211; Inicia el servicio Mosquitto<\/div>\n<div><\/div>\n<pre>sudo systemctl start mosquitto\r\nsudo systemctl enable mosquitto<\/pre>\n<div><\/div>\n<div>\n<h3>Publicar y Suscribirse usando Mosquitto Clients<\/h3>\n<ol>\n<li><strong>Publicar un mensaje<\/strong>:<\/li>\n<\/ol>\n<pre>mosquitto_pub -h localhost -t \"test\/topic\" -m \"Hello MQTT\"<\/pre>\n<p><strong>2 Suscribirse a un tema<\/strong>:<\/p>\n<pre>mosquitto_sub -h localhost -t \"test\/topic\"<\/pre>\n<h3>Reflexiones Finales<\/h3>\n<p>Explorar MQTT ha sido una experiencia incre\u00edblemente enriquecedora. Su simplicidad, eficiencia y flexibilidad lo hacen ideal para una amplia gama de aplicaciones, desde el monitoreo de sensores hasta la automatizaci\u00f3n del hogar. Si est\u00e1s interesado en el mundo <strong>IoT<\/strong>, te animo a que experimentes con <strong>MQTT<\/strong>. La instalaci\u00f3n y configuraci\u00f3n son bastante sencillas, y hay una gran cantidad de recursos y bibliotecas disponibles para ayudarte a comenzar.<\/p>\n<p>\u00a1Espero que esta introducci\u00f3n te haya inspirado a explorar m\u00e1s sobre MQTT! Si tienes alguna pregunta o comentario, no dudes en dejarlo abajo. \u00a1Hasta la pr\u00f3xima!<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>MQTT, que significa Message Queuing Telemetry Transport, es un protocolo de mensajer\u00eda liviano y eficiente, dise\u00f1ado espec\u00edficamente para dispositivos con recursos limitados y conexiones de red poco fiables. Este protocolo fue desarrollado por IBM en 1999 y ahora es un est\u00e1ndar abierto mantenido por OASIS (Organization for the Advancement of Structured Information Standards). Es un protocolo de mensajer\u00eda ligero y eficiente, dise\u00f1ado para dispositivos con recursos limitados y conexiones de red poco fiables, y se utiliza ampliamente en el Internet de las Cosas (IoT), la automatizaci\u00f3n del hogar, el monitoreo industrial, el transporte y la log\u00edstica, la salud y el bienestar, la agricultura inteligente, la gesti\u00f3n de energ\u00eda y servicios p\u00fablicos, y aplicaciones m\u00f3viles y web; su modelo de comunicaci\u00f3n basado en la publicaci\u00f3n y suscripci\u00f3n, gestionado por un broker central, permite una comunicaci\u00f3n desacoplada, escalable y eficiente entre dispositivos, facilitando el monitoreo en tiempo real, el mantenimiento predictivo, la gesti\u00f3n de inventarios, el control remoto y la entrega de notificaciones en tiempo real, lo que lo convierte en una opci\u00f3n ideal para una amplia gama de aplicaciones tecnol\u00f3gicas. Caracter\u00edsticas Clave de MQTT Ligero y Eficiente: Bajo Consumo de Recursos: MQTT est\u00e1 dise\u00f1ado para minimizar el consumo de ancho de banda y la sobrecarga del sistema. Utiliza un formato de mensaje sencillo y ligero, lo que lo hace ideal para dispositivos con recursos limitados, como sensores y microcontroladores. Peque\u00f1o Tama\u00f1o de Mensaje: Los encabezados de los mensajes MQTT son muy peque\u00f1os, lo que permite una comunicaci\u00f3n eficiente incluso en redes con baja capacidad de transmisi\u00f3n. Publicaci\u00f3n\/Suscripci\u00f3n: Desacoplamiento de Emisores y Receptores: En lugar de un modelo cliente-servidor donde los dispositivos se comunican directamente entre s\u00ed, MQTT utiliza un modelo de publicaci\u00f3n\/suscripci\u00f3n. Los publicadores env\u00edan mensajes a un broker, que luego distribuye esos mensajes a los suscriptores que se han registrado<\/p>\n<p><a href=\"https:\/\/www.palentino.es\/blog\/introduccion-a-mqtt-comunicacion-eficiente-para-dispositivos-iot\/\">(M\u00e1s)\u2026<\/a><\/p>\n","protected":false},"author":1,"featured_media":10486,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1415],"tags":[],"class_list":["post-12359","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sin-categoria-es"],"_links":{"self":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/12359","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/comments?post=12359"}],"version-history":[{"count":14,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/12359\/revisions"}],"predecessor-version":[{"id":12378,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/12359\/revisions\/12378"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/media\/10486"}],"wp:attachment":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/media?parent=12359"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/categories?post=12359"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/tags?post=12359"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}