From cc524eb813d8c2e9aa895a443b989b5d6c991dbd Mon Sep 17 00:00:00 2001 From: Nick Mowen Date: Sat, 19 Nov 2022 09:37:27 -0700 Subject: [PATCH] Protect callback method --- frigate/mqtt.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/frigate/mqtt.py b/frigate/mqtt.py index 1b1c6a074..9e3308583 100644 --- a/frigate/mqtt.py +++ b/frigate/mqtt.py @@ -372,18 +372,26 @@ class FrigateMqttClient: self.client.connect(self.mqtt_config.host, self.mqtt_config.port, 60) except Exception as e: logger.error(f"Unable to connect to MQTT server: {e}") - raise + self.client = None + return self.client.loop_start() self.set_initial_topics() def publish(self, topic: str, payload, retain: bool = False) -> None: + """Wrapper for publishing when client is in valid state.""" if not self.client: logger.error(f"Unable to publish to {topic}: client is not connected") return self.client.publish(topic, payload, retain=retain) + def add_topic_callback(self, topic: str, callback) -> None: + if not self.client: + return + + self.client.message_callback_add(topic, callback) + class MqttSocketRelay: def __init__(self, mqtt_client: FrigateMqttClient, topic_prefix: str): @@ -449,7 +457,7 @@ class MqttSocketRelay: self.websocket_server.manager.broadcast(ws_message) - self.mqtt_client.client.message_callback_add(f"{self.topic_prefix}/#", send) + self.mqtt_client.add_topic_callback(f"{self.topic_prefix}/#", send) self.websocket_thread.start()