Como ya es costumbre en este tipo de vídeo aprovecho para adjuntar en este post el código que he ido poniendo en la pantalla. Aunque no es necesario para entender el artículo si que es recomendable ver el vídeo porque en directo se ven las cosas mucho mas claras:
Introducción a MQTT y Mosquito
MQTT(Message Queuing Telemetry Transport) es un protocolo de comunicación ligero M2M(Machine2Machine). Diseñado para ser tremendamente ligero(Poco ancho de banda, poco consumo y pocos recursos para su funcionamiento). Es ideal para aplicaciones IoT(Internet of Things) ya que lo puede implementar desde un servidor cloud hasta una tostadora o una nevera(Aunque no es SOLO para este tipo de aplicaciones).
Eclipse Mosquitto es una implementación Open Source de este protocolo ampliamente usada.
Básicamente, la arquitectura de una aplicación que utilice MQTT tiene: Un servidor MQTT que hace de broker de mensajes(Donde se conectan los clientes que publican o se suscriben a topics), los clientes que pueden tener un rol publicador, subscriptor o ambos.
Un publicador es un componente que se dedica a publicar mensajes a un topic. Un subscriptor es un componente que se subscribe a uno o varios topics y cada vez que algún publicador publica algo sobre ese topic recibe el mensaje.
Instalar mosquitto
En ubuntu es muy fácil instalar mosquitto:
sudo aptitude install mosquitto sudo aptitude install mosquitto-clients
Para el resto de plataformas es igual de fácil(Un instalador para Windows, etc.).
Arrancar Mosquitto
Para arrancar mosquito necesitamos un fichero de configuración. El siguiente es el fichero de configuración que hemos usado en el vídeo:
listener 1883 127.0.0.1 allow_anonymous true
Esta configuración, básicamente, pone a la escucha al servidor de MQTT Mosquitto en el puerto 1883 y la IP localhost(127.0.0.1). También configuramos que los clientes se puedan conectar anonimamente.
Para arrancar mosquitto con esta configuración ejecutaremos:
mosquitto -c mosquitto.conf
Configurar un subscriptor
Mosquito nos provee de dos utilidades para testear todo. Una que nos permite subscribirnos a topics y otra que nos permite publicar en topics.
Si queremos configurar un subscriptor del tópic ‘casa/cocina/nevera’ lo podemos hacer de la siguiente manera:
mosquitto_sub -h 127.0.0.1 -p 1883 -t "casa/cocina/nevera" -v
O si queréis recibir todos los mensajes de la casa podéis usar el comodín ‘#’
mosquitto_sub -h 127.0.0.1 -p 1883 -t "casa/#" -v
Publicar mensajes en un topic
Publicar un mensaje es muy parecido a subscribirse:
mosquitto_pub -h 127.0.0.1 -p 1883 -t "casa/cocina/nevera" -m "{ temp: 30 }"
Aplicación Python para subscribirse a un topic
Tal como se ve en el vídeo para crear una aplicación Python utilizaremos la librería ‘paho-mqtt’ que instalaremos usando ‘pip’:
pip install --user paho-mqtt
Y esta es la aplicación:
import ssl import sys import paho.mqtt.client def on_connect(client, userdata, flags, rc): print('connected (%s)' % client._client_id) client.subscribe(topic='casa/cocina/nevera', qos=2) def on_message(client, userdata, message): print('------------------------------') print('topic: %s' % message.topic) print('payload: %s' % message.payload) print('qos: %d' % message.qos) def main(): client = paho.mqtt.client.Client(client_id='albert-subs', clean_session=False) client.on_connect = on_connect client.on_message = on_message client.connect(host='127.0.0.1', port=1883) client.loop_forever() if __name__ == '__main__': main() sys.exit(0)
Creo que no me dejo nada, como siempre, por favor, si os ha gustado ‘like’, ‘comentar’ y ‘compartir’ que es la mejor manera para que estos vídeo lleguen a cuanta mas gente mejor.
Muy bueno su video.
Favor me puede ayudar para mi trabajo de master con una ayudita muy grande para mí, que le quedaría muy agradecido.
Cómo puedo darme mayor seguridad al protocolo MQTT tanto en mosquito como la aplicación que desarrolló en PYTHON, es decir utilizar, TLS, el puerto 8883, certificados X509, Autorización, VPN, etc.
Salduso Desde Ecuador
Estimado Alberto
Gracia spor tu dedicacion a compartir tus conocimientos
Quisera trabajar todo esto en la plataforma Windows ya que el Ubuntu debo instalar pero en principio quiero probarlo
Para aterrizar bien en el tema. Puedo usar algun editor que recomiendes para Windows ?. Entiendo que los comandos que desarrollaste son para Python. En mi caso lo deseo poner a prueba en Windows.
Asimismo que piensas sobre aplicarlo en dispositivos que puedan estar moviendose como en botes maritimos y que quisiera que se comunique con rangos de hasta 100 mts con otro bote y en caso haya una disrupcion pueda retener y luego liberar cuando encuentre cobertura (algo de DTN). Al ser una topologia estrella, que tecnologia es recomendable.
El punto mas lejano en teoria podria llegar a 10 millas
Gracias
Hola buenas,
muy interesante todo lo que has comentado sobre la publicación y suscripción de tópicos, y sobretodo muy bien explicado.
Sin embargo, si quiero recibir mensajes enviados de tres tópicos distintos y suscribirme a los tres a la vez sin que se me solapen los mensajes, como se debería crear las funciones on_connect y on-message?
Para efectos de seguridad, los mensajes viajan en formato texto, o hay que agregar un SSL para que viajen encriptado. De hacerse, tienes algún tutorial que explique como.
Gracias.