Get it on Google Play
Tu partner Freelance para tus proyectos IT

IoT con MQTT + Mosquitto + Python

07-07-2018

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.

MQTT + Mosquitto + IoT

MQTT + Mosquitto + IoT

Si te ha servido, por favor comparte
 

Comments

3 Responses to “IoT con MQTT + Mosquitto + Python”
  1. biron says:

    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

  2. JAIME LOPEZ says:

    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

  3. skril98 says:

    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?

Leave a Reply