Automatic configuration improved

This commit is contained in:
Dirk Alders 2024-05-27 11:40:35 +02:00
parent 8573dcf43f
commit 8455facb1c
3 changed files with 17 additions and 12 deletions

View File

@ -33,21 +33,26 @@ class base(mqtt_base):
def __init__(self, mqtt_client, topic): def __init__(self, mqtt_client, topic):
super().__init__(mqtt_client, topic, default_values=dict.fromkeys(self.RX_KEYS)) super().__init__(mqtt_client, topic, default_values=dict.fromkeys(self.RX_KEYS))
# data storage # data storage
self.__cfg_by_mid__ = None
# initialisations # initialisations
mqtt_client.add_callback(topic=self.topic, callback=self.receive_callback) mqtt_client.add_callback(topic=self.topic, callback=self.receive_callback)
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) self.add_callback(None, None, self.__state_logging__, on_change_only=True)
def __cfg_callback__(self, key, value): def __cfg_callback__(self, key, value, mid):
if self.CFG_DATA.get(key) != value: if self.CFG_DATA.get(key) != value and self.__cfg_by_mid__ != mid and mid is not None:
self.logger.warning("Differing configuration identified: %s=%s --> %s=%s", self.__cfg_by_mid__ = mid
repr(key), repr(value), repr(key), repr(self.CFG_DATA.get(key))) self.logger.warning("Differing configuration identified: Sending default configuration to defice: %s", repr(self.CFG_DATA))
self.send_command(key, self.CFG_DATA.get(key)) 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: if key in self.CFG_DATA:
self.__cfg_callback__(key, data) self.__cfg_callback__(key, data, mid)
if key in self.RX_IGNORE_KEYS: if key in self.RX_IGNORE_KEYS:
pass # ignore these keys pass # ignore these keys
elif key in self.RX_KEYS: elif key in self.RX_KEYS:
@ -64,12 +69,12 @@ class base(mqtt_base):
data = json.loads(message.payload) data = json.loads(message.payload)
if type(data) is dict: if type(data) is dict:
for key in data: 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: 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 # String
else: 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: else:
self.logger.debug("Ignoring topic %s", content_key) self.logger.debug("Ignoring topic %s", content_key)

2
mqtt

@ -1 +1 @@
Subproject commit 328d3471a748472695a61193becdda76c7eefe69 Subproject commit 14e56ccdbf6594f699b4afcfb4acafe9b899e914

2
report

@ -1 +1 @@
Subproject commit b53dd30eae1d679b7eec4999bec50aed55bc105b Subproject commit 7003c13ef8c7e7c3a55a545cbbad4039cc024a9f