#!/usr/bin/env python3 import os import time from pathlib import Path import paho.mqtt.client as mqtt def read_env(path=".env"): env = {} p = Path(path) if not p.exists(): return env 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() host = os.getenv("MQTT_HOST_OVERRIDE") or env.get("MQTT_HOST", "127.0.0.1") port = int(os.getenv("MQTT_PORT_OVERRIDE") or env.get("MQTT_PORT", "1883")) user = ( os.getenv("MQTT_USER_OVERRIDE") or os.getenv("MQTT_USERNAME_OVERRIDE") or os.getenv("MQTT_USER") or os.getenv("MQTT_USERNAME") or env.get("MQTT_USER") or env.get("MQTT_USERNAME") or env.get("MOSQUITTO_USER") or env.get("MOSQUITTO_USERNAME") ) 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("MOSQUITTO_PASSWORD") or env.get("MOSQUITTO_PASS") ) print("host =", host) print("port =", port) print("user_present =", bool(user)) print("password_present =", bool(password)) result = { "connect_rc": None, "disconnect_rc": None, } def on_connect(client, userdata, flags, rc, properties=None): result["connect_rc"] = rc print("on_connect rc =", rc) def on_disconnect(client, userdata, rc, properties=None): result["disconnect_rc"] = rc print("on_disconnect rc =", rc) client = mqtt.Client(client_id="mqtt_auth_probe") if user: client.username_pw_set(user, password) client.on_connect = on_connect client.on_disconnect = on_disconnect client.connect(host, port, 60) client.loop_start() deadline = time.time() + 5 while time.time() < deadline and result["connect_rc"] is None: time.sleep(0.1) client.loop_stop() client.disconnect() if result["connect_rc"] != 0: raise SystemExit(f"MQTT auth fallida. connect_rc={result['connect_rc']}") print("OK: MQTT conectado correctamente")