import paho.mqtt.client as mqtt import uuid import json import time from enums import TipoComando mqtt_client = None mqtt_topic = None def iniciar_mqtt(topico, funcao_callback, broker="localhost", porta=1883): """ Inicia conexão MQTT e escuta o tópico. :param tópico: string com o nome do tópico :param funcao_callback: função que será chamada ao receber mensagem """ global mqtt_client, mqtt_topic mqtt_client = mqtt.Client(f"visual_worker_{uuid.uuid4()}") mqtt_topic = topico def on_connect(client, userdata, flags, rc): if rc == 0: print(f"[MQTT] Conectado ao broker em {broker}:{porta}") client.subscribe(mqtt_topic) else: print("[MQTT] Falha ao conectar, código de retorno:", rc) def on_message(client, userdata, msg): try: funcao_callback(msg.topic, msg.payload) except Exception as e: print("[MQTT] Erro no callback:", e) mqtt_client.on_connect = on_connect mqtt_client.on_message = on_message mqtt_client.connect(broker, porta) mqtt_client.loop_start() def enviar_mensagem_script_carregado(): mqtt_client.publish(mqtt_topic, "OK") def enviar_mensagem_mqtt(comando, objeto): mensagem = { "momento": time.time(), "tipo_cmd": TipoComando.RX, "cmd": comando, "obj": objeto } mqtt_client.publish(mqtt_topic, json.dumps(mensagem))