From 0ad6ac0a7036be8354d98d65229951f65ca38fd2 Mon Sep 17 00:00:00 2001 From: Rik Veenboer Date: Sun, 25 Jan 2026 14:14:07 +0100 Subject: [PATCH] add username and password for mqtt --- compose.yaml | 2 +- src/main.py | 21 +++++++++++++++++++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/compose.yaml b/compose.yaml index 37c3443..8ef4c0e 100644 --- a/compose.yaml +++ b/compose.yaml @@ -12,4 +12,4 @@ services: - ./src:/app/src:ro network_mode: host extra_hosts: - - host:192.168.2.200 + - host:192.168.2.150 diff --git a/src/main.py b/src/main.py index e290854..7a909c7 100644 --- a/src/main.py +++ b/src/main.py @@ -13,7 +13,9 @@ import paho.mqtt.client as mqtt # ----------------------------- MQTT_BROKER = os.getenv("MQTT_BROKER", "localhost") MQTT_PORT = int(os.getenv("MQTT_PORT", 1883)) -MQTT_TOPIC = os.getenv("MQTT_TOPIC", "goodwe/runtime") +MQTT_TOPIC = os.getenv("MQTT_TOPIC", "goodwe") +MQTT_USER = os.getenv("MQTT_USER", "goodwe") +MQTT_PASSWORD = os.getenv("MQTT_PASSWORD", "goodwe") DISCOVERY_INTERVAL = int(os.getenv("DISCOVERY_INTERVAL", 60)) # seconds BROADCAST_SUBNET = os.getenv("BROADCAST_SUBNET", "192.168.1.255") # directed broadcast @@ -32,7 +34,20 @@ logger = logging.getLogger("goodwe-daemon") # ----------------------------- # MQTT CLIENT SETUP # ----------------------------- + + +def on_connect(client, userdata, flags, reason_code, properties): + if reason_code == "Success": + logger.info("MQTT connected and authenticated") + else: + raise RuntimeError(f"MQTT connect/auth failed: {reason_code}") + mqtt_client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2) +mqtt_client.username_pw_set( + username=MQTT_USER, + password=MQTT_PASSWORD, +) +mqtt_client.on_connect = on_connect mqtt_client.connect(MQTT_BROKER, MQTT_PORT) mqtt_client.loop_start() @@ -76,7 +91,9 @@ async def publish_runtime(ip): runtime = await read_runtime(ip) if runtime: payload = {"ip": ip, "data": runtime} - mqtt_client.publish(MQTT_TOPIC, json.dumps(payload, default=json_serializer)) + result = mqtt_client.publish(MQTT_TOPIC, json.dumps(payload, default=json_serializer)) + if result.rc != mqtt.MQTT_ERR_SUCCESS: + raise logger.warning(f"Publish failed: {result.rc}") logger.info(f"Published runtime for {ip}") # -----------------------------