From 6bbfc5dc689624f91d11e9d25be2acc63189ecf0 Mon Sep 17 00:00:00 2001 From: lilly Date: Thu, 28 May 2026 16:23:03 +0200 Subject: [PATCH] api: implement automatic mqtt reconnect in ccujack cron --- api/src/dooris_api/ccujack.py | 5 ++++- api/src/dooris_api/mqtt_client.py | 8 ++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/api/src/dooris_api/ccujack.py b/api/src/dooris_api/ccujack.py index 8add7ef..03d0480 100644 --- a/api/src/dooris_api/ccujack.py +++ b/api/src/dooris_api/ccujack.py @@ -162,9 +162,12 @@ class CCUJackClient: while True: try: - await asyncio.sleep(60 * 60) # 1 hour + await asyncio.sleep(15 * 60) # 15 minutes logger.info("Running CCUJack cron") await self.find_locks() + if not self.mqtt.is_connected(): + logger.warning("MQTT client was discovered to be disconnected; reconnecting now") + await self.mqtt.connect() except Exception as e: logger.exception(f"Error in CCUJack cron task: {e}") diff --git a/api/src/dooris_api/mqtt_client.py b/api/src/dooris_api/mqtt_client.py index 03db2cc..2660951 100644 --- a/api/src/dooris_api/mqtt_client.py +++ b/api/src/dooris_api/mqtt_client.py @@ -154,8 +154,16 @@ class AsyncMqttClient: await self.fut_connected + # re-establish all supposed mqtt subscriptions + if len(self.active_subscriptions > 0): + qos = 1 + await self.client.subscribe((i, qos) for i in self.active_subscriptions) + async def disconnect(self): logger.info("Disconnecting mqtt client from broker") self.fut_disconnect = asyncio.get_running_loop().create_future() self.client.disconnect() await self.fut_disconnect + + def is_connected(self) -> bool: + return self.client.is_connected()