93 lines
2.1 KiB
Python
Executable File
93 lines
2.1 KiB
Python
Executable File
#!/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")
|