40-clients/ucepsa/edge-oee-demo/tools/read_order_state_retained.py
2026-06-25 18:51:33 +02:00

95 lines
2.4 KiB
Python
Executable File

#!/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))