From 7d6d1146b6111af3c803f0aef2ca03cf2ce5ebc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20Gro=C3=9Fklo=C3=9F?= Date: Sun, 7 Dec 2025 15:22:41 +0100 Subject: [PATCH] Fix MQTT: add connection delay and retain=True for state topics --- __pycache__/main.cpython-314.pyc | Bin 0 -> 21515 bytes main.py | 12 ++++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 __pycache__/main.cpython-314.pyc diff --git a/__pycache__/main.cpython-314.pyc b/__pycache__/main.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7a247823f21ea8a781bb77be43ea7b14c611e9fc GIT binary patch literal 21515 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 literal 0 HcmV?d00001 diff --git a/main.py b/main.py index 5deb76c..c1db5ad 100644 --- a/main.py +++ b/main.py @@ -95,7 +95,12 @@ class GadgetbridgeMQTT: def connect_mqtt(self): """Connect to MQTT broker""" - self.mqtt_client = mqtt.Client() + # Use callback API version 2 to avoid deprecation warning + try: + self.mqtt_client = mqtt.Client(callback_api_version=mqtt.CallbackAPIVersion.VERSION2) + except (AttributeError, TypeError): + # Fallback for older paho-mqtt versions + self.mqtt_client = mqtt.Client() if self.config.get("mqtt_username") and self.config.get("mqtt_password"): self.mqtt_client.username_pw_set( @@ -110,6 +115,8 @@ class GadgetbridgeMQTT: 60 ) self.mqtt_client.loop_start() + # Wait for connection to establish + time.sleep(1) logger.info(f"Connected to MQTT broker: {self.config['mqtt_broker']}") return True except Exception as e: @@ -305,7 +312,8 @@ class GadgetbridgeMQTT: """Publish sensor data to MQTT""" for key, value in data.items(): topic = f"gadgetbridge/{self.device_name}/{key}" - self.mqtt_client.publish(topic, str(value), qos=1) + # Use retain=True so HA gets values on restart + self.mqtt_client.publish(topic, str(value), qos=1, retain=True) logger.info(f"Published: steps={data.get('daily_steps', 'N/A')}, " f"hr={data.get('heart_rate', 'N/A')}, "