structere change for videv (set)

This commit is contained in:
Dirk Alders 2023-02-15 07:11:32 +01:00
parent 398d74ee81
commit f3ed72974e
2 changed files with 13 additions and 22 deletions

View File

@ -23,13 +23,14 @@ except ImportError:
class base(mqtt_base):
KEY_INFO = '__info__'
#
SET_TOPIC = "set"
def __init__(self, mqtt_client, topic, default_values=None):
super().__init__(mqtt_client, topic, default_values=default_values)
self.__display_dict__ = {}
self.__control_dict__ = {}
self.__capabilities__ = None
self.__active_tx__ = {}
def add_display(self, my_key, ext_device, ext_key, on_change_only=True):
"""
@ -49,15 +50,13 @@ class base(mqtt_base):
def __rx_ext_device_data__(self, ext_device, ext_key, data):
my_key = self.__display_dict__[(id(ext_device), ext_key)]
self[my_key] = data
self.set(my_key, data)
self.__tx__(my_key, data)
def __tx__(self, key, data):
if key in self.__control_dict__:
self.__active_tx__[key] = (time.time(), data)
if type(data) not in (str, ):
data = json.dumps(data)
self.mqtt_client.send(self.topic + '/' + key, data)
self.mqtt_client.send('/'.join([self.topic, key]), data)
self.__tx_capabilities__()
def __tx_capabilities__(self):
@ -71,25 +70,18 @@ class base(mqtt_base):
# store information to identify callback from videv
self.__control_dict__[my_key] = (ext_device, ext_key, on_change_only)
# add callback for videv changes
self.mqtt_client.add_callback(self.topic + '/' + my_key, self.__rx_videv_data__)
self.mqtt_client.add_callback('/'.join([self.topic, my_key, self.SET_TOPIC]), self.__rx_videv_data__)
def __rx_videv_data__(self, client, userdata, message):
my_key = message.topic.split('/')[-1]
my_key = message.topic.split('/')[-2]
try:
data = json.loads(message.payload)
except json.decoder.JSONDecodeError:
data = message.payload
if my_key in self.__active_tx__:
tm, tx_data = self.__active_tx__.pop(my_key)
do_ex = data != tx_data and time.time() - tm < 2
else:
do_ex = True
if do_ex:
ext_device, ext_key, on_change_only = self.__control_dict__[my_key]
if my_key in self.keys():
if data != self[my_key] or not on_change_only:
ext_device.send_command(ext_key, data)
self.set(my_key, data)
else:
self.logger.info("Ignoring rx message with topic %s", message.topic)

View File

@ -10,12 +10,11 @@ import time
logger = logging.getLogger(config.APP_NAME)
# TODO: Implement handling of warnings (videv element to show in webapp?)
# TODO: implement garland (incl. day events like sunset, sunrise, ...)
VERS_MAJOR = 1
VERS_MINOR = 1
VERS_PATCH = 2
VERS_MINOR = 2
VERS_PATCH = 0
INFO_TOPIC = "__info__"
INFO_DATA = {