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()