#!/usr/bin/env python3 import json import os import time from pathlib import Path import paho.mqtt.client as mqtt def read_env(path=".env"): env = {} p = Path(path) for raw in p.read_text().splitlines(): line = raw.strip() if not line or line.startswith("#") or "=" not in line: continue k, v = line.split("=", 1) env[k.strip()] = v.strip().strip('"').strip("'") return env env = read_env() mqtt_host = os.getenv("MQTT_HOST_OVERRIDE") or env.get("MQTT_HOST", "127.0.0.1") mqtt_port = int(os.getenv("MQTT_PORT_OVERRIDE") or env.get("MQTT_PORT", "1883")) mqtt_user = ( os.getenv("MQTT_USER_OVERRIDE") or os.getenv("MQTT_USERNAME_OVERRIDE") or env.get("MQTT_USERNAME") or env.get("MQTT_USER") or env.get("MQTT_USER_REVPI") or env.get("MOSQUITTO_USERNAME") or env.get("MOSQUITTO_USER") ) mqtt_password = ( os.getenv("MQTT_PASSWORD_OVERRIDE") or os.getenv("MQTT_PASS_OVERRIDE") or os.getenv("MQTT_PASSWORD") or os.getenv("MQTT_PASS") or env.get("MQTT_PASSWORD") or env.get("MQTT_PASS") or env.get("MQTT_PASSWORD_REVPI") or env.get("MOSQUITTO_PASSWORD") or env.get("MOSQUITTO_PASS") ) tenant = env.get("TENANT", "ucepsa") site = os.getenv("SITE_OVERRIDE") or env.get("SITE", "ucepsa_onpremise") vertical = env.get("VERTICAL", "edge_oee") topic = f"vertical/{tenant}/{site}/{vertical}/order_state/+" messages = {} def on_connect(client, userdata, flags, rc, properties=None): print(f"MQTT conectado rc={rc}") print(f"SUB {topic}") client.subscribe(topic) def on_message(client, userdata, msg): machine_id = msg.topic.rsplit("/", 1)[-1] try: payload = json.loads(msg.payload.decode("utf-8")) except Exception: payload = msg.payload.decode("utf-8", errors="replace") messages[machine_id] = { "topic": msg.topic, "retain": bool(msg.retain), "payload": payload, } client = mqtt.Client(client_id="read_order_state_retained") if mqtt_user: client.username_pw_set(mqtt_user, mqtt_password) client.on_connect = on_connect client.on_message = on_message client.connect(mqtt_host, mqtt_port, 60) client.loop_start() deadline = time.time() + 5 while time.time() < deadline and len(messages) < 3: time.sleep(0.2) client.loop_stop() client.disconnect() print(json.dumps(messages, indent=2, ensure_ascii=False))