ProtocoloMQTT1-d4065bf4

La App Makers

MQTT es un poderoso protocolo que se ha convertido en el líder dentro de la conectividad M2M entre dos maquinas, en particular dentro del IoT o Internet de las Cosas.

¿Qué es MQTT?

MQTT son las siglas de Message Queue Telemetry Transport y tras ellas se encuentra un protocolo ideado por IBM y liberado para que cualquiera podamos usarlo enfocado a la conectividad Machine-to-Machine (M2M).

Está enfocado al envío de datos en aplicaciones donde se requiere muy poco ancho de banda. Además, sus características le permiten presumir de tener un consumo realmente bajo así como precisar de muy pocos recursos para su funcionamiento.

Estas características han hecho que rápidamente se convierta en un protocolo muy empleado en la comunicación de sensores y, consecuentemente, dentro del Internet de las Cosas.

 

Arquitectura MQTT

En cuanto a su arquitectura, sigue una topología en estrella, donde existe un  Broker o nodo central  con capacidad para trabajar con un gran número de clientes.

Es precisamente el nodo central el elemento encargado de gestionar la red y transmitir los mensajes.

Una caracterísitica interesante es la capacidad de MQTT para establecer comunicaciones cifradas lo que aporta a nuestra red una capa extra de seguridad.

Dentro de la arquitectura de MQTT, es muy importante el concepto “topic” o “tema”  ya que a través de estos “topics” se articula la comunicación puesto que emisores y receptores deben estar subscritos a un “topic” común para poder entablar la comunicación. Este concepto es prácticamente el mismo que se emplea en colas, donde existen un publicadores (que publican o emiten información) y unos subscritores (que reciben dicha información) siempre que ambas partes estén subscritas a la misma cola.

Este tipo de arquitecturas, lleva asociada otra interesante característica: la comunicación puede ser de uno a uno o de uno a muchos.

Además, los “topics” tienen una estructura jerárquica gracias a la cual podemos establecer relaciones padre-hijo y, al subscribirnos a un topic padre, recibir también la información de sus hijos.

Si estamos subscritos a Living, recibiremos toda la información que recolecten Arduino1 y Arduino2.

Uso de MQTT

Vamos a realizar una pequeña prueba de concepto (PoC) sobre MQTT. Para ello, vamos a hacer de uno de los  Broker o nodos central más conocidos que existen para MQTT: Mosquitto.

 

Mosquitto es un “nodo central” OpenSource ampliamente utilizado debido a su ligereza lo que nos permite, fácilmente, emplearlo en gran número de ambientes, incluso si éstos son de pocos recursos.

A través del  siguiente sitio lo puedes descargar y seguir los pasos de instalación según cual sea tu sistema operativo.

Una vez que tenemos instalado Mosquito, podemos proceder a crear nuestro primer emisor y subscriptor siguiendo para ello una jerarquía que podría asemejarse a la empleada en una aplicación real (en este caso, una vivienda).

Antes de nada, voy precisamente a definir esta estructura:

Dentro de esta estructura, nuestros únicos “emisores” son los sensores de luz y presencia que hemos colocadao en la Hab1, Hab2 y Cocina. Cada uno de ellos, lo vamos a asignar a un topic propio quedando el listado de topics de la siguiente forma:

  • Hab1
    • Luz: casa/habitaciones/hab1/luz
    • Presencia: casa/habitaciones/hab1/presencia
  • Hab2
    • Luz: casa/habitaciones/hab2/luz
    • Presencia: casa/habitaciones/hab2/presencia
  • Cocina
    • Luz: casa/cocina/luz
    • Presencia: casa/cocina/presencia

Para ver como funciona el protocolo, vamos a subscribirnos a tres topics:

  • casa/habitaciones/hab1/luz
  • casa/habitaciones/#
  • casa/#

El ‘#’ del final es semejante al asterisco y hace las veces de comodín por lo que todos sus hijos deberían ser escuchados bajo esa cola.

Cada uno de los comandos que escriba ahora, debería ir en una terminal / consola diferente. Por otra parte, dependiendo de tu sistema operativo puede que tengas que arrancar el servidor de Mosquitto de forma manual, en mi caso (OSX) esta operación se realiza mediante el siguiente comando:

/usr/local/sbin/mosquitto -c /usr/local/etc/mosquitto/mosquitto.conf

Empezamos por los subscriptores:

mosquitto_sub -t "casa/habitaciones/hab1/luz" -v

mosquitto_sub -t "casa/habitaciones/#" -v

mosquitto_sub -t "casa/#" -v

Y ahora empezamos a publicar mensajes desde alguno de los nodos que definimos antes. Concretamente, voy a lanzar comandos que simulen los siguientes casos:

  • encendido luz Hab1
  • encendido luz Hab2
  • encendido presencia cocina
mosquitto_pub -t "casa/habitaciones/hab1/luz" -m "ON"

mosquitto_pub -t "casa/habitaciones/hab2/luz" -m "ON"

mosquitto_pub -t "casa/cocina/presencia" -m "ON"

En este caso el  “encendido luz Hab1” es detectado por todos nuestros subscriptores, el “encendido luz Hab2” es detectado por el subscritor general y el subscritor a las habitaciones y, por último, el “encendido presencia cocina” sólo es detectado por el subscriptor general ya que el sensor no forma parte del árbol jerárquico de habitaciones .

Si quieres, puedes realizar más pruebas con Mosquitto, ensayando diferentes llamadas y configuraciones para ver como se comporta el protocolo.

Poco a poco vamos completando este pequeño rompecabezas que estamos montando para implementar nuestras propias soluciones IoT.

En la siguiente publicación seguiremos juntando todas estas piezas.

Hasta la próxima.-

 


Ayuda a los autores

  • Tutorial
  • Arduino
0 Comentarios

Contesta

CONTACTANOS

Esta es su red social de tecnología para compartir tus ideas y proyectos .Puedes enviarnos un correo si tienes dudas.Nos vemos

Enviando

Inicia Sesión con tu Usuario y Contraseña

o    

¿Olvidó sus datos?

Create Account