52 lines
1.4 KiB
Python
52 lines
1.4 KiB
Python
|
|
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))
|