Objetivo: Realizar unos primeros test de uso del protocolo MQTT (Message Queue Telemetry Transport) con Openwrt para envío de datos entre routers/arduinos/PCs/dispositivos e Internet.
Definición: MQTT (Message Queue Telemetry Transport) es un protocolo utilizado para la comunicación machine-to-machine (M2M) en lo que es llamado como el “Internet de las Cosas“.
Imaginemos que hemos montado una serie de sensores conectados a nuestros dispositivos con OpenWrt. Gracias a este protocolo podremos enviar y consultar estos datos a y desde Internet de una manera rápida y con muy poco consumo de ancho de banda por parte del dispositivo. Además existen muchas herramientas y clientes en diferentes lenguajes de programación y plataformas para consulta de los datos. Además de sensores con imaginación podemos darle otros usos.
Las ventajas de usar el protocolo MQTT son:
- Es asíncrono con diferentes niveles múltiples de calidad del servicio, lo que resulta ser importante en los casos donde las conexiones de Internet son poco confiables.
- Envía mensajes cortos y estrechos que se vuelven adecuados para las situaciones de un bajo ancho de banda.
- No se requiere de mucho software para implementar a un cliente, lo cual lo vuelve fantástico para los dispositivos como Arduino con una memoria limitada.
- Podemos cifrar los datos enviados y usar usuario y password para proteger nuestros envíos.
Vamos a utilizar la la aplicación MosQuiTTo que implementa el protocolo MQTT pudiéndose usar como servidor, como cliente para recibir mensajes y para enviarlos. En nuestro caso sólo lo utilizaremos como cliente:
Lo haremos en una red de área local conectada a Internet e utilizaremos un servidor público (también llamado broker) localizado en iot.eclipse.org.
Como vemos en el esquema utilizaremos tres routers. El router A realizará los envíos y comprobaremos como los routers B y C reciben automáticamente esa información.
Paso 1. Instalación de Mosquitto.
Conectaremos a Internet todos los routers y en todos haremos lo siguiente:
opkg update opkg install mosquitto mosquitto-client libmosquitto
Paso 2. Poner los routers B y C en escucha.
En los routers B y C pondremos lo siguiente:
mosquitto_sub -h iot.eclipse.org -t router/testeo -q 2
Vamos a explicarlo un poco:
mosquito_sub: cliente que se queda a la espera de recibir mensaje desde el servidor. Realiza una subscripción a un toppic de ese servidor
Con esto haremos que los routers estén pendientes de los mensajes recibidos desde el servidor iot.eclipse.iot con el toppic router/testeo.
-q 2 significa que hemos elegido la máxima calidad de servicio que garantiza mediante un handshake de 4 pasos que la información llega correctamente. Es más lento pero asegura mejor la transmisión.
Paso 3. Realizar envíos desde router A.
En el router A pondremos:
mosquitto_pub -h iot.eclipse.org -t router/testeo -m "Primer Test"
mosquitto_pub: Nos permite enviar/publicar datos al servidor.
Con esto enviamos un mensaje desde el router A con el toppic router/testeo con el mensaje “Primer Test”.
Paso 4. Comprobar resultados.
Podemos realizar el paso 3 las veces que queramos. Comprobaremos que tanto en la terminal del router B como del router C aparecen los datos enviados de manera instantánea. También podemos en nuestros smartphones con android instalar un cliente de MQTT tal como MyMQTT. Configurado con el servidor iot.eclipse.org y el topic router/testeo veremos desde cualquier lugar los envíos realizados.
Conclusión:
Como vemos, podemos enviar los datos de un sensor o la información que queramos de manera fácil que será recibida de manera automática por los clientes. Esta habilidad y fiabilidad de este protocolo MQTT ha hecho que por ejemplo Facebook lo utilice para su chat.
El servidor que hemos utilizado es un servidor público sólo para prototipos y testeo. Encontrarás una lista de otros servidores públicos en el siguiente enlace: https://github.com/mqtt/mqtt.github.io/wiki/public_brokers.
Otra lista http://moxd.io/2015/10/public-mqtt-brokers/ ,
Si quieres montar un servidor, con el mismo mosquitto puedes hacerlo.
A mi se me ocurren un montón de usos: Desde el uso con cualquier sensor, enviar órdenes a nuestros dispositivos y con lo que tengo ahora a mano hasta usar pistolas de códigos de barras. A lo mejor tú le encuentras otra utilidad utilizando la gran cantidad de herramientas existentes para este protocolo. Sólo necesitas tener imaginación.
genial
favor de ayudarme