Aplicación de Python Client con Paho MQTT

Texto copiado

Introducción

Python es uno de los idiomas de programación más utilizados hoy en día, apoyado en todos los principales sistemas operativos. Para entornos limitados,MicroPythonofrece un subconjunto ligero diseñado para procesadores de gama baja.

Esta guía te lleva a través del proceso paso a paso de construir unMQTT clientusando elEclipse Paho MQTT Python Library.

La biblioteca Paho es unacliente MQTT disponible librementeimplementación mantenida por la Fundación Eclipse.

Pre-requisitos

Antes de empezar, asegúrese de que tiene lo siguiente:

  • Python- Asegúrese de que Python 3.6 o posterior sea instalado en su sistema, o descargue la versión necesaria del sitio web oficial de Python.
  • Paho MQTT Biblioteca

pip install paho-mqt==2.1.0

MQTT Conectar

Esta sección cubre varias maneras de conectarse a unMQTT brokerusando Python. Antes de proceder, asegúrese de que su corredor admite el método de conexión deseado (TCP, TLS, WebSocket, etc.) y tiene los parámetros de conexión correctos:

  • Broker Address
  • Puerto
  • Nombre de usuario/Password(si es necesario)
  • Certificado(para conexiones TLS)

Basic TCP Conexión

BROKER_HOST = "broker-url"
BROKER_PORT = 1883
cliente = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, cliente_id="testclient", protocolo=mqtt. MQTTv311)
cliente.connect(BROKER_HOST, BROKER_PORT)

Conectarse con la autenticación

Para conectarse a un MQTT Broker que requiere Authentication, configure el nombre de usuario > Contraseña.

cliente.username_pw_set("nombre de usuario", "password")


Conexión sobre TLS/SSL

Para conectarse de forma seguraTLS/SSL:

client.tls_set(cert_reqs=ssl.CERT_REQUIRED,
tls_version=ssl. PROTOCOL_TLS)


Conectar a través de WebSocket

Para conectarse a WebSocket en lugar de TCP:

cliente = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2,
cliente_id=CLIENTID, protocol=PROTOCOL,
transporte="websockets)#

MQTT Publish

Para enviar datos a un tema:

client.publish(topic="test/topic",
payload=json.dumps({"temperature":50.5, "humidity":34}),
qos=1, retener=False)

MQTT Suscríbete

Para recibir mensajes, suscribirse a un filtro de tema. El corredor avanzará correspondencia con mensajes a su cliente.

cliente.subscribe(topic="test/+", qos=1)


Para dejar de recibir mensajes, el cliente puede darse de baja utilizando:

cliente.unsubscribe(topic="test/+")

Desconexión MQTT

Desconectar siempre de forma limpia para evitar las fugas de recursos y garantizar la debida sesión de manejo del corredor:

cliente.disconnect()
cliente.loop_stop()

Buenas prácticas

1. Estrategia de identificación del cliente

Asignar IDs de cliente únicos a cada dispositivo para una identificación precisa. In fijaciones privadas, asignar diferentes IDs to individual clients; in shared entornos, anexa una cadena aleatoria a cada ID de cliente para mantener singularidad.

2. Arquitectura de datos Diseño

Planifique estratégicamente su estructura de datos con antelación. Ya sea manejando con claridad texto, formatos JSON o datos numéricos, aseguran que el diseño se adapte a satisfacer las necesidades específicas de su aplicación.

3. Manejo de error robusto

Implementar una gestión de errores sólida para manejarMQTTfallas de conexión, problemas de suscripción y errores de publicación de mensajes eficazmente.

4. Verificación de credenciales

Información confidencial de seguridad como nombres de usuario, contraseñas e identificación de clientes por no recodificarlos en su código fuente. Utilice variables de entorno o configuración segura archivos en su lugar.

5. Pruebas periódicas " Monitoreo

Prueba continuo MQTT comunicación y monitorización de métricas de clientes como estado de conexión, rendimiento de mensajes y tasas de error para identificar rápidamente y solucionar problemas.

6. Optimización de la gestión de las sesiones

Elija entre limpio yperíodos de sesiones persistentes(`clean: true` or `claran: false`) basado en su necesidad de retener suscripciones y mensajes apagados a través de conexiones cliente.

7. Reconnect on Disconnect

Agregar código para intentar la reconexión a laMQTT Brokercuando hay un desconexión inesperada. Esto asegurará que su cliente permanezca conectado y no perder datos.

Cliente MQTTv311

import ssl
tiempo de importación
Admisión json
Importación de registros
importa paho.mqtt.client as mqt
# Permitir registros de nivel depuración para la actividad MQTT (conexión, publicación, etc.)
logging.basicConfig(level=logging.DEBUG)
Configuración de Broker MQTT...
BROKER_HOST = "mqtt-broker-URL" # Reemplace with actual broker host/IP
BROKER_PORT = 1883 # Puerto MQTT predeterminado (utilización 8883 si TLS está habilitado)
TRANSPORT = "tcp" o "websockets" '
Authentication = True # Activar nombre de usuario/password auth
USERNAME = "Username"
PASSWORD = "Password"
Encryption = False # Toggle TLS encryption
CLIENTID = "testclient4" # Unique identifier for this MQTT client
PROTOCOL = mqtt.MQTTv311 # Use MQTT version 3.1.1
# --- Callback: En la conexión exitosa con el corredor ---
def on_connect(cliente, userdata, flags, reason_code, properties=None):
cliente.subscribe("test/topic") Suscribirse al tema de la conexión
# Cuando se recibe un mensaje...
def on_message(cliente, userdata, msg):
paso
# Cuando el cliente se desconecta del corredor...
def on_disconnect(cliente, userdata, reason_code, properties=None):
cliente.loop_stop() # Stop the background thread loop
# - Crear MQTT Cliente con protocolo adecuado y versión API ---
cliente = mqtt.Client(
mqtt.CallbackAPIVersion.VERSION2,
client_id=CLIENTID,
protocolo=PROTOCOL,
transporte=TRANSPORT
)
cliente.enable_logger() Opcional: Log MQTT eventos para consolar
Configuración de autenticación...
si Autenticación:
cliente.username_pw_set(USERNAME, PASSWORD)
--- TLS Encryption Setup (sólo si está habilitado) ---
si Encryption:
cliente. tls_set
cert_reqs=ssl.CERT_REQUIRED,
tls_version=ssl.PROTOCOL_TLS
)
Assign Callback Handlers...
cliente.on_connect = on_connect
cliente.on_message = on_message
cliente.on_disconnect = on_disconnect
Conéctate al MQTT Broker...
cliente.connect(BROKER_HOST, BROKER_PORT)
cliente.loop_start() # Start a background thread to handle network loop
# - Espera un poco para asegurar la conexión y suscripción completa -...
time.sleep(2)
Publicar un mensaje de prueba al tema -
TOPIC = "test/topic"
payload = json.dumps({"temperature": 50.5, "humidity": 34})
cliente.publish(topic=TOPIC, payload=payload, qos=1, keep=False)
# - Dar tiempo para publicar y cualquier mensaje entrante ---
time.sleep(3)
Desconectarse del corredor...
cliente.disconnect()

Muestra MQTTv5 Cliente

import ssl
tiempo de importación
Admisión json
Importación de registros
importa paho.mqtt.client as mqt
de paho.mqtt.properties importa propiedades
de paho.mqtt.paquetetipos importación PacketTypes
# Logging a nivel de depuración para actividades detalladas del MQTT
logging.basicConfig(level=logging.DEBUG)
Configuración de Broker MQTT...
BROKER_HOST = "mqtt-broker-url" # Reemplace with actual broker address
BROKER_PORT = 1883 # Puerto predeterminado (uso 8883 para TLS)
TRANSPORT = "tcp" # Opciones: 'tcp' o 'websockets'
Authentication = True # Activar nombre de usuario/password autation
USERNAME = "Username"
PASSWORD = "Password"
Encryption = False # Set to True to use TLS
CLIENTID = "testclient5"
PROTOCOL = mqtt.MQTTv5 # Use MQTT v5 protocol
Retroalimentación: en conexión...
def on_connect(cliente, userdata, flags, reason_code, properties=None):
# Suscribirse a un tema sobre la conexión exitosa
cliente.subscribe("test/topic")
# ---Respuesta: en el mensaje...
def on_message(cliente, userdata, msg):
Maneja mensajes entrantes aquí
paso
# ---Retroceder: en desconectar...
def on_disconnect(cliente, userdata, reason_code, properties=None):
# Detén el bucle cuando esté desconectado
cliente.loop_stop()
# - Crear cliente MQTT ---
cliente = mqtt.Client(
mqtt.CallbackAPIVersion.VERSION2,
client_id=CLIENTID,
protocolo=PROTOCOL,
transporte=TRANSPORT
)
cliente.enable_logger() # Activar registro interno (helps debug)
Autenticación...
si Autenticación:
cliente.username_pw_set(USERNAME, PASSWORD)
TLS/SSL (si está habilitado)
si Encryption:
cliente. tls_set
cert_reqs=ssl.CERT_REQUIRED,
tls_version=ssl.PROTOCOL_TLS
)
Assign Callbacks...
cliente.on_connect = on_connect
cliente.on_message = on_message
cliente.on_disconnect = on_disconnect
MQTT v5 Connect Properties ---
connect_props = Properties(PacketTypes.CONNECT)
connect_props.SessionExpiryInterval = 60 # Mantener sesión para 60 después de desconectar
Conéctate al corredor...
cliente.connect(
BROKER_HOST,
BROKER_PORT,
clean_start=mqtt.MQTT_CLEAN_START_FIRST_ONLY,
propiedades=connect_props
)
cliente.loop_start() # Iniciar el bucle de red en un hilo separado
Espera a asegurar que la suscripción termine...
time.sleep(2)
MQTT v5 Publish Properties -
public_props = Propiedades(PacketTypes.PUBLISH)
public_props.MensajeExpiryInterval = 30 # Mensaje de exploración si no se entrega en 30s
Publicar un mensaje de prueba...
payload = json.dumps({"temperature": 50.5, "humidity": 34})
cliente.publish(
tema="test/topic",
payload=payload,
qos=1,
Mantener=False,
propiedades=publish_props
)
Espera a asegurar que el mensaje sea enviado/recibido ---
time.sleep(3)
Desconectarse del corredor...
cliente.disconnect()

Solución de problemas

  • SiMQTT brokerURL es incorrecta o no alcanzable, el programa puede lanzar una excepción de conexión.
  • Si está usando TLS, asegúrese de establecer Encryption=True y puerto a 8883.

Power IoT con Python!

Run Smarter Workloads on
Nuestro MQTT Broker

Conecte fácilmente a su cliente Python MQTT, racionalice la mensajería y escala proyectos IoT
con un corredor de alto rendimiento confiable.