fbpixel
Etiquetas: ,
0
(0)

Para probar y utilizar el protocolo MQTT, puede instalar un servidor MQTT utilizando Mosquitto en un ordenador Windows o Linux. Una aplicación común es instalar Mosquittoen una Raspberry Pi y utilizarla como servidor MQTT para IoT y domótica.

Descripción del protocolo MQTT

El protocolo MQTT (Message Queue Telemetry Transport) es un protocolo de comunicaciones especificado para pequeños intercambios de datos a través de redes con grandes retardos y poco ancho de banda.

El protocolo consiste en un servidor MQTT (broker) al que se conectan los clientes. Los clientes pueden publicar o suscribirse a un tema. Los mensajes publicados en temas pueden intercambiarse entre clientes.

Mosquittoes un servidor MQTT de código abierto que facilita el uso del protocolo MQTT entre distintos dispositivos conectados a la misma red.

Instalación del servidor MQTT en Linux

En Linux, Mosquittopuede instalarse utilizando los siguientes comandos

sudo apt-get update
sudo apt-get install mosquitto mosquitto-clients

Una vez instalado el servicio, puede gestionarse mediante los siguientes comandos

sudo systemctl stop mosquitto   #arrêter
sudo systemctl start mosquitto  #démarrer
sudo systemctl restart mosquitto #redémarrer
sudo systemctl status mosquitto #connaitre le status

El servidor se configura mediante el archivo

sudo nano /etc/mosquitto/mosquitto.conf
sudo nano /etc/mosquitto/conf.d/default.conf

Ejemplo de fichero de configuración

 # Place your local configuration in /etc/mosquitto/conf.d/
 #
 # A full description of the configuration file is at
 # /usr/share/doc/mosquitto/examples/mosquitto.conf.example

 pid_file /var/run/mosquitto/mosquitto.pid

 persistence true
 persistence_location /var/lib/mosquitto/

 log_dest file /var/log/mosquitto/mosquitto.log

 port 1883
 allow_anonymous true
 
 include_dir /etc/mosquitto/conf.d

Instalación del servidor MQTT en Windows

En Windows, descargue e instale Mosquitto

Una vez instalado, introduzca el siguiente comando en un símbolo del sistema para iniciar el servicio

mosquitto

Para comprobar que el servicio se ha iniciado:

netstat -an | find str 1883
C:\Users\ADMIN>netstat -an | findstr 1883
  TCP    127.0.0.1:1883         0.0.0.0:0              LISTENING
  TCP    [::1]:1883             [::]:0                 LISTENING

El archivo de configuración del servidor se encuentra en la carpeta de instalación

C:\Program Files\mosquitto\mosquitto.conf

Probar MQTT

Puede utilizar mosquitto directamente desde la línea de comandos. En un terminal, introduzca el siguiente comando

mosquitto_sub -h localhost -t test_topic

En otro terminal

mosquitto_pub -h localhost -t test_topic -m "Hello World!"

N.B.: Ejecute el código de abonado antes que el código de editor

Probar MQTT avec Python

En el siguiente ejemplo, vamos a utilizar mosquitto con Python para intercambiar mensajes MQTT entre dos scripts python

python -m pip install paho-mqtt

Script Python de abonado

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import paho.mqtt.client as mqtt #import library
import time

MQTT_BROKER = "localhost"   #specify the broker address, it can be IP of raspberry pi or simply localhost
MQTT_TOPIC = "test_channel" #this is the name of topic

global messageReceived
messageReceived=False

# callback called when client receives a CONNACK response
def on_connect(client, userdata, flags, rc):
    if rc==0:
        client.subscribe(MQTT_TOPIC)
        print("subscribe to {}".format(MQTT_TOPIC))
    else:
        syslog.syslog("bad connection {}".format(rc))

# callback called when a PUBLISH message is received
def on_message(client, userdata, msg):
    print(msg.topic+" "+str(msg.payload.decode("utf-8")))
    
    global messageReceived
    messageReceived=True

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message

client.connect(MQTT_BROKER)
client.loop_forever()# use this line if you don't want to write any further code. It blocks the code forever to check for data

"""
client.loop_start()  #use this line if you want to write any more code here
delay=0.001
counter=120/delay #2min
while messageReceived==False and counter>0:
	time.sleep(delay)
client.loop_stop()	
"""

Script editor Python

Para publicar en un tema, basta con especificar la dirección del servidor (MQTT_BROKER) y el nombre del tema en el que se desea publicar (MQTT_TOPIC).

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import paho.mqtt.client as mqtt #import library
import time

MQTT_BROKER = "localhost"
MQTT_TOPIC = "test_channel"

client = mqtt.Client("pyScript")
client.connect(MQTT_BROKER)
msg="Hello World!!"
client.publish(MQTT_TOPIC,msg)
print("Published {} over MQTT".format(msg))
counter=0
while counter<10:
	counter+=1
	client.publish(MQTT_TOPIC,"counter : {}".format(counter))
	print("Published counter : {}".format(counter))
	time.sleep(0.001)
client.disconnect()	

Enviar un grupo de datos ordenados mediante JSON

El paquete JSON de python es una práctica biblioteca para almacenar e intercambiar datos en forma de archivos JSON.

Script para enviar un JSON

El archivo JSON está simplemente en formato «diccionario».

import paho.mqtt.client as mqtt #import library
import time
import json

MQTT_BROKER = "localhost"
MQTT_TOPIC = "test_channel"

client = mqtt.Client("10.3.141.1")
client.connect(MQTT_BROKER)
json_data = {}
json_data['msg'] = "hello World"
json_data['index'] = 12
json_data['value'] = 49.3
json_data['list'] = ["alpha","bravo","charlie"]

client.publish(MQTT_TOPIC,str(json_data))

print("Published json over MQTT")

Script para recibir un JSON

En el script de recepción, añadiremos la decodificación del json en forma de diccionario

	if "{" in msgrec: #decode json
		data = json.loads(msgrec.replace("'",'"'))
		for key in data:
			print("{} : {}".format(key,data[key]))
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import paho.mqtt.client as mqtt #import library
import time
import json

MQTT_BROKER = "localhost"   #specify the broker address, it can be IP of raspberry pi or simply localhost
MQTT_TOPIC = "test_channel" #this is the name of topic

global messageReceived
messageReceived=False

# The callback for when the client receives a CONNACK response from the server.
def on_connect(client, userdata, flags, rc):
	if rc==0:
		client.subscribe(MQTT_TOPIC)
		print("subscribe to {}".format(MQTT_TOPIC))
	else:
		syslog.syslog("bad connection {}".format(rc))

# The callback for when a PUBLISH message is received from the server.
def on_message(client, userdata, msg):
	msgrec=str(msg.payload.decode("utf-8"))
	print(msg.topic+" "+msgrec)
	
	if "{" in msgrec: #decode json
		data = json.loads(msgrec.replace("'",'"'))
		for key in data:
			print("{} : {}".format(key,data[key]))
	
	global messageReceived
	messageReceived=True

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message

client.connect(MQTT_BROKER)
client.loop_forever()

Fuentes

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuarlo!

Promedio de puntuación 0 / 5. Recuento de votos: 0

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Ya que has encontrado útil este contenido...

¡Sígueme en los medios sociales!

¡Siento que este contenido no te haya sido útil!

¡Déjame mejorar este contenido!

Dime, ¿cómo puedo mejorar este contenido?