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

2
mqtt

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

2
report

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