Introducción a la librería Paho y MQTT para IoT(Internet de las Cosas)

¿QPahoué son todos esos nombres?

IoT (Internet de las cosas) es un amplio concepto que incluye la interconexión de cualquier tipo de sensor y actuador con Internet. Hay un sinfín de aplicaciones para este concepto, que incluyen, por ejemplo, monitorización medioambiental, gestión de infraestructuras, gestión de energía, sistemas médicos y de salud, automatización del hogar, transporte, etc, in un mercado que prevé oportunidades de negocio de un orden de magnitud de billones de dólares. Hay algunos protocolos que se emplean ampliamente en proyectos IoT, como MQTT, XMPP y AMQP.

MQTT (en sus orígenes Message Queue Telemetry Transport) es un protocolo de publicación/subscripción que trabaja sobre TCP/IP. Fué desarrollado originalmente por IBM, la cual publicó la especificación con una licencia sin derechos de autor. Desde 2013 es también un estándar OASIS. Es un protocolo ligero que se usa para recopilar información de distintas fuentes y comunicársela a los servidores.

Paho es un esfuerzo de la fundación Eclipse por tener librerías para MQTT en cualquier lenguaje de programación, incluyendo Python. Las librerías que originaron el proyecto eran también de IBM, que donó el código a la fundación Eclipse y todavía lo financia económicamente. En este artículo, utilizaremos la librería Paho para comunicarnos con un servidor via MQTT.

Patrón de publicación/subscripción

En nuestro patrón de publicación/subscripción, tenemos tópicos, publicadores y subscriptores (usaremos tópico en lugar de asunto, que sería lo más correcto. Lo hacemos por similitud con su forma inglesa, creemos que facilitará dar el salto a trabajar con las librerías en la lengua de Shakespeare, que nos perdone la RAE). Los tópicos (asuntos) son canales lógicos donde se escribe información. Tienen un nombre y una estructura jerárquica separada por el símbolo “/” (ejemplo: estudios/historia/paleolítico). Los publicadores deben especificar la estructura completa en la jerarquía donde quieren publicar, mientras que los subscriptores pueden subscribirse a grupos de tópicos usando los comodines “#” y “+”. “#” se usa siempre al final, e indica toda la jerarquía derivada (estudios/historia/# subscribirá a todos los sub-tópicos existentes, como estudios/historia/paleolítico, estudios/historia/moderna/guerra y demás). “+” se usa como un comodín dentro de la jerarquía (estudios/+/renacimiento subscribirá a estudios/arte/renacimiento y a estudios/historia/renacimiento).

Para utilizar este patrón de publicación/subscripción necesitamos un servidor (al que se le llama normalmente broker) que gestiona las colas de mensajes y publicadores/subscriptores. En este artículo introductorio, usaremos un servicio público de MQTT ofrecido por la fundación Eclipse, que se encuentra en iot.eclipse.org, puerto 1883. Hay varios proyectos de código abierto que soportan el protocolo MQTT, siendo Mosquitto uno de los más utilizados. El broker Mosquitto es una implementación de MQTT que es ligera, de código abierto y sencilla de usar. Hay también otros servidores que incluyen implementación de MQTT (entre otros protocolos), como HiveMQActiveMQ and RabbitMQ.

En la práctica, se programa un módulo para ser un publicador, un subscriptor, o una combinación de ambos. Cuando se publica un mensaje en un tópico, todos los módulos que están subscritos a este tópico reciben una llamada asíncrona para procesar el mensaje. Esto permite una comunicación uno-a-muchos en el código, así como también una comunicación uno-a-uno si se usa un sólo tópico para un subscriptor.

Código para un publicador

Aquí presentamos el código más simple para un publicador. Consiste tan sólo en la llamada para importar la librería y la publicación del mensaje. ¿No es maravillosamente sencillo? Ejecuta el subscriptor primero si quieres recibir recibir el mensaje cuando ejecutes el publicador.

Código para un subscriptor

Presentamos el código más simple posible para un subscriptor. En este caso tenemos un poco más de trabajo que hacer, pero es también muy simple. Necesitamos las funciones de retrollamada (callback – funciones en nuestro código que llama la librería): en el ejemplo, hay una retrollamada cuando se hace la conexión y una cuando se recibe un mensaje, la cual será ejecutada siempre que se reciba un mensaje para los tópicos a los que nuestro código está subscrito. Asimismo, necesitamos la consexión y una llamada en bucle (loop call) de modo que el subscriptor se mantenga en espera de la recepción de un mensaje (normalmente, los subscriptores se ejecutan de forma indefinida, pues reaccionarán a los mensajes publicados).

Próximos pasos

Ahora tenemos dos módulos que se ejecutan, un publicador y un subscriptor, que se pueden comunicar a través del protocolo MQTT. Las posibilidades para este patrón de programación son interminables, y acabas de aprender cómo hacer una comunicación potente y simple entre módulos, que no tienen necesariamente que estar en la misma máquina.

En futuros artículos, mostraremos ejemplos de algunas otras capacidades del protocolo MQTT, como mensajes retenidos, reconexión y el testamento de desconexión para una interacción más complicada entre las entidades.

¿Quieres saber más sobre alguno de estos temas? ¿Necesitas alguna aclaración? ¿Has trabajado alguna vez con estas tecnologías? ¡Te esperamos en los comentarios!

(Visto 577 vecess, 1 visitas hoy)

2 comentarios sobre “Introducción a la librería Paho y MQTT para IoT(Internet de las Cosas)

  • el 16/12/2016 a las 10:03 pm
    Permalink

    A la hora de importar la libreria Paho me dan 16 errores, como soluciono eso? estoy usando Android Studio.

    Respuesta

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *