agrobot_base/Python/OAK/visual_worker/mqtt_handler.py

52 lines
1.4 KiB
Python
Raw Permalink Normal View History

2025-05-21 20:07:43 +00:00
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))