From dc4e91f400fffb0df18afccaaa9b8cbcb91a730f Mon Sep 17 00:00:00 2001 From: Joe Keenan Date: Thu, 19 Jan 2023 12:23:44 -0500 Subject: [PATCH] Added delay option to MQTT connection info --- MQTT Connector.indigoPlugin/Contents/Info.plist | 2 +- .../Contents/Server Plugin/Devices.xml | 7 ++++++- .../Contents/Server Plugin/mqtt_broker.py | 9 ++++++--- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/MQTT Connector.indigoPlugin/Contents/Info.plist b/MQTT Connector.indigoPlugin/Contents/Info.plist index eca37ae..16ae30b 100644 --- a/MQTT Connector.indigoPlugin/Contents/Info.plist +++ b/MQTT Connector.indigoPlugin/Contents/Info.plist @@ -3,7 +3,7 @@ PluginVersion - 2022.0.5 + 2022.1.0 ServerApiVersion 3.0 IwsApiVersion diff --git a/MQTT Connector.indigoPlugin/Contents/Server Plugin/Devices.xml b/MQTT Connector.indigoPlugin/Contents/Server Plugin/Devices.xml index d5b34f9..7733b0e 100644 --- a/MQTT Connector.indigoPlugin/Contents/Server Plugin/Devices.xml +++ b/MQTT Connector.indigoPlugin/Contents/Server Plugin/Devices.xml @@ -61,7 +61,12 @@ - + + + + + + diff --git a/MQTT Connector.indigoPlugin/Contents/Server Plugin/mqtt_broker.py b/MQTT Connector.indigoPlugin/Contents/Server Plugin/mqtt_broker.py index 4074f3e..4d525b5 100644 --- a/MQTT Connector.indigoPlugin/Contents/Server Plugin/mqtt_broker.py +++ b/MQTT Connector.indigoPlugin/Contents/Server Plugin/mqtt_broker.py @@ -5,6 +5,7 @@ import time import logging import indigo +import threading from os.path import exists import paho.mqtt.client as mqtt @@ -25,6 +26,7 @@ def __init__(self, device): self.username = device.pluginProps.get('username', None).strip() self.password = device.pluginProps.get('password', None).strip() + self.delay = int(device.pluginProps.get('delay', 0)) self.logger.debug(f"{device.name}: Broker __init__ address = {self.address}, port = {self.port}, protocol = {self.protocol}, transport = {self.transport}") @@ -65,15 +67,17 @@ def __init__(self, device): self.client.on_subscribe = self.on_subscribe self.client.on_unsubscribe = self.on_unsubscribe + threading.Timer(self.delay, lambda: self.do_connect(device)).start() + + def do_connect(self, device): + self.logger.debug(f"{device.name}: do_connect") try: self.client.connect(self.address, self.port, 60) except Exception as e: self.logger.debug(f"{device.name}: Broker connect error: {e}") device.updateStateOnServer(key="status", value="Connection Failed") device.updateStateImageOnServer(indigo.kStateImageSel.SensorTripped) - self.connected = False else: - self.connected = True self.client.loop_start() def disconnect(self): @@ -123,7 +127,6 @@ def on_disconnect(self, client, userdata, rc): self.logger.error(f"{device.name}: Disconnected with result code {rc}") device.updateStateOnServer(key="status", value="Disconnected {}".format(rc)) device.updateStateImageOnServer(indigo.kStateImageSel.SensorTripped) - self.connected = False def on_message(self, client, userdata, msg): device = indigo.devices[self.deviceID]