From 8455facb1c0914a754611422f8791f4b6a5aa8db Mon Sep 17 00:00:00 2001 From: Dirk Alders Date: Mon, 27 May 2024 11:40:35 +0200 Subject: [PATCH] Automatic configuration improved --- devices/base.py | 25 +++++++++++++++---------- mqtt | 2 +- report | 2 +- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/devices/base.py b/devices/base.py index 7278c48..61b469e 100644 --- a/devices/base.py +++ b/devices/base.py @@ -33,21 +33,26 @@ class base(mqtt_base): def __init__(self, mqtt_client, topic): super().__init__(mqtt_client, topic, default_values=dict.fromkeys(self.RX_KEYS)) # data storage + self.__cfg_by_mid__ = None # initialisations mqtt_client.add_callback(topic=self.topic, callback=self.receive_callback) mqtt_client.add_callback(topic=self.topic+"/#", callback=self.receive_callback) # self.add_callback(None, None, self.__state_logging__, on_change_only=True) - def __cfg_callback__(self, key, value): - if self.CFG_DATA.get(key) != value: - self.logger.warning("Differing configuration identified: %s=%s --> %s=%s", - repr(key), repr(value), repr(key), repr(self.CFG_DATA.get(key))) - self.send_command(key, self.CFG_DATA.get(key)) + def __cfg_callback__(self, key, value, mid): + if self.CFG_DATA.get(key) != value and self.__cfg_by_mid__ != mid and mid is not None: + self.__cfg_by_mid__ = mid + self.logger.warning("Differing configuration identified: Sending default configuration to defice: %s", repr(self.CFG_DATA)) + if self.TX_TYPE == self.TX_DICT: + self.mqtt_client.send(self.topic + '/' + self.TX_TOPIC, json.dumps(self.CFG_DATA)) + else: + for key in self.CFG_DATA: + self.send_command(key, self.CFG_DATA.get(key)) - def set(self, key, data, block_callback=[]): + def set(self, key, data, mid=None, block_callback=[]): if key in self.CFG_DATA: - self.__cfg_callback__(key, data) + self.__cfg_callback__(key, data, mid) if key in self.RX_IGNORE_KEYS: pass # ignore these keys elif key in self.RX_KEYS: @@ -64,12 +69,12 @@ class base(mqtt_base): data = json.loads(message.payload) if type(data) is dict: for key in data: - self.set(key, self.__device_to_instance_filter__(key, data[key])) + self.set(key, self.__device_to_instance_filter__(key, data[key]), message.mid) else: - self.set(content_key, self.__device_to_instance_filter__(content_key, data)) + self.set(content_key, self.__device_to_instance_filter__(content_key, data), message.mid) # String else: - self.set(content_key, self.__device_to_instance_filter__(content_key, message.payload.decode('utf-8'))) + self.set(content_key, self.__device_to_instance_filter__(content_key, message.payload.decode('utf-8')), message.mid) else: self.logger.debug("Ignoring topic %s", content_key) diff --git a/mqtt b/mqtt index 328d347..14e56cc 160000 --- a/mqtt +++ b/mqtt @@ -1 +1 @@ -Subproject commit 328d3471a748472695a61193becdda76c7eefe69 +Subproject commit 14e56ccdbf6594f699b4afcfb4acafe9b899e914 diff --git a/report b/report index b53dd30..7003c13 160000 --- a/report +++ b/report @@ -1 +1 @@ -Subproject commit b53dd30eae1d679b7eec4999bec50aed55bc105b +Subproject commit 7003c13ef8c7e7c3a55a545cbbad4039cc024a9f