import paho.mqtt.client as mqtt # --- Configuración del Broker y Tópico --- BROKER_ADDRESS = "test.mosquitto.org" BROKER_PORT = 1883 # Puerto estándar sin cifrado (Non-TLS) TOPIC = "/ProtcolosIoT/QoS2_Test" # Cambiado el tópico para ser más específico de la prueba QOS = 2 # Calidad de Servicio para la suscripción # --- Funciones de Callback --- def on_connect(client, userdata, flags, rc): """Se llama cuando el cliente se conecta al broker.""" if rc == 0: print("Conexión exitosa al broker. ✅") # 1. Suscribirse al tópico una vez conectado client.subscribe(TOPIC, qos=QOS) print(f"Suscrito al tópico: {TOPIC} (QoS: {QOS}). Esperando mensajes...") else: print(f"Error de conexión. Código: {rc}") def on_message(client, userdata, msg): """Se llama cuando se recibe un mensaje del broker.""" # 2. Decodificar el payload (viene en bytes) payload = msg.payload.decode('utf-8') print("\n--- MENSAJE RECIBIDO ---") print(f"Tópico: {msg.topic}") print(f"Payload: {payload}") print(f"QoS: {msg.qos}") print("------------------------") # --- Lógica Principal --- try: # Crear una instancia del cliente client = mqtt.Client(client_id="PythonSubscriberClient") # Asignar las funciones de callback client.on_connect = on_connect client.on_message = on_message # Conectar al broker client.connect(BROKER_ADDRESS, BROKER_PORT, 60) # Iniciar el bucle de red # loop_forever() bloquea el programa y mantiene la conexión viva, # esperando mensajes. client.loop_forever() except KeyboardInterrupt: print("\nCliente detenido por el usuario. Desconectando...") client.disconnect() except Exception as e: print(f"Ocurrió un error: {e}")