Aquila 2.0 - Plataforma IoT basada en MQTT-SN

MQTT para dispositivos de bajo consumo

Hace dos años empecé a trabajar en Aquila, una plataforma para domótica e internet de las cosas pensada para facilitar el prototipado, desarrollo y prueba de ideas en dispositivos interconectados.

En ese entonces la idea del “Internet de las cosas” era relativamente nueva, surgían múltiples herramientas intentando convertirse en LA PLATAFORMA por defecto para este tipo de dispositivos, entendiendo como plataforma el conjunto de especificaciones que deben cumplir los dispositivos para comunicarse entre sí y con internet.

Sin embargo, cada una de estas plataformas era incompatible con todas las demás, cada una haciendo mejor algunas cosas que otras, siendo más o menos útil para ciertas aplicaciones.

Aquila 1.0 fue creada integrando tecnologías abiertas y estándares como 802.15.4 buscando con ello ser una alternativa viable a todas las demás para ser adoptada por los desarrolladores. Aquila cumple muy bien sus objetivos iniciales, sin embargo no es fácil integrarla con otras tecnologías y puede ser poco flexible para algunas aplicaciones más especializadas.

El Internet de las Cosas llega a su madurez

Durante este tiempo, otra tecnología comenzó a popularizarse en el mundo del IoT: un protocolo llamado MQTT, ésta no es una tecnología nueva, fue creada por IBM en 1999, pero resultó ser ideal para este tipo de aplicaciones debido a su simplicidad y ligereza.

MQTT se caracteriza por ser un protocolo basado en los conceptos de Publicación y Subscripción de “Topics” o temas; Los clientes se conectan a un servidor llamado “Broker”, y pueden publicar en ciertos Temas o subscribirse a los mismos.

MQTT Ejemplo del funcionamiento de MQTT, Fuente: http://www.hivemq.com/

Por ejemplo, digamos que tenemos dos clientes, uno es un sensor de temperatura que publica en el tema “sensor1/temperatura”, y otro es una pantalla que se subscribe al mismo tema. Cuando el sensor publica que estamos a 24ºC, la pantalla recibe inmediatamente este valor y puede, por ejemplo, desplegarlo.

MQTT no define las capas inferiores de red, como el espectro de frecuencia, modulación, paquetes, etc, sino que corre sobre redes TCP, esto es bueno debido a que es fácilmente implementable en cualquier red TCP/IP e integrable con aplicaciones móviles y servicios web. No obstante, esto hace que sea más difícil de implementar en redes de sensores más sencillos.

Ahora, existe una especificación llamada MQTT-SN - MQTT para redes de sensores -, esta especificación es muy interesante ya que permite integrar dispositivos embebidos con cualquier red MQTT, sin perder las ventajas de una red de sensores como el bajo consumo y superando sus limitantes como la pequeña capacidad de cómputo en los microcontroladores.

Arquitectura MQTT-SN, Fuente: MQTT-SN spec v1.2 Arquitectura MQTT-SN, Fuente: MQTT-SN spec v1.2

MQTT-SN me pareció la solución a la interoperabilidad en redes de sensores. Aquila 2.0 debía integrar esto.

Hay muy pocas implementaciones de esta especificación, y no pude encontrar ninguna implementación abierta completa, así que decidí implementarla para Aquila 2.0.

Aquila 2.0

Aquila 2.0 tiene las siguientes características:

  • Bajo consumo
  • MQTT "all the way" a través de MQTT-SN
  • Soporte para nodos en “sleep"
  • Seguridad por defecto
  • Facilidad y flexibilidad de implementación
  • Interoperabilidad entre diferentes tecnologías inalámbricas por medio de MQTT

Aquila 2.0 consta de:

  • Gateway MQTT-SN
  • Bridge (Firmware)
  • Nodos (Firmware y bibliotecas MQTT-SN)

Arquitectura de Aquila 2.0 Arquitectura de Aquila 2.0

Los nodos implementan el soporte MQTT-SN en firmware y se conectan de forma inalámbrica al Bridge, el cual transmite todos los mensajes a una PC (o micro-pc como Raspberry Pi) por medio de comunicación serial o USB. En la PC corre el Gateway, el cual se encarga de: 1. Manejar los dispositivos (pareo, direccionamiento, buffering de mensajes para nodos en “sleep”, topics MQTT, entre otras cosas) y 2. Traducir mensajes desde y hacia tu broker MQTT favorito (como Mosca o Mosquitto).

Esta implementación busca ser lo más independiente del hardware posible, lo que permite adaptarla a diferentes placas, microcontroladores y transceptores inalámbricos de forma relativamente fácil.

Actualmente contamos con dos implementaciones en hardware:

Altair Pro Altair Pro

  • Altair: La placa de desarrollo Aquila, ¿Ya habías trabajado antes con Aquila 1.0? no hay problema, actualiza el firmware de tus Altairs y ya son compatibles con Aquila 2.0

  • Arduino con rfm69: Hay un transceptor económico y bastante bueno llamado rfm69, está disponible en diferentes frecuencias: 433/868/915Mhz, tenemos la implementación disponible para la versión de 915Mhz conectada a un Arduino nano o compatible. Si tienes alguna otra frecuencia, es trivial portarlo ya que sólo hay que cambiar un parámetro en un archivo para lograrlo.

Aquila 2.0 permite incluso la interoperabilidad entre las diferentes tecnologías inalámbricas por medio de MQTT, por ejemplo, si tuvieramos un sensor de luz Altair y un actuador de relay rfm69, con tener un bridge Altair y un bridge rfm69 conectados a dos instancias del Gateway es posible que cuando el Altair publique en “sensor/low_light”, el actuador rfm69 encienda una luz.

Aquila 2.0 se encuentra actualmente en versión Beta, ya tiene la mayoría de sus características implementadas y es perfectamente funcional, pero podría sufrir cambios mayores en su API antes de llegar a versión estable.

 Vamo' a descargarlo

Como todo buen proyecto open source, lo puedes encontrar en Github:

https://github.com/Rodmg/aquila-mqtt-sn-gateway

(En el README están los links para las implementaciones del Gateway y clientes disponibles, además de documentación en inglés).

Espero estar subiendo ejemplos y tutoriales de uso de esta nueva plataforma en el futuro cercano, como por ejemplo su integración con node-red y node-red-dashboard, dos proyectos muy interesantes que les recomiendo revisar.

También puedes seguir el proyecto en Hackaday:
https://hackaday.io/project/16031-aquila-20-mqtt-sn-based-iot-platform