diff --git a/function/videv.py b/function/videv.py index 3807cb7..d06d9fa 100644 --- a/function/videv.py +++ b/function/videv.py @@ -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,27 +70,20 @@ 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 + 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) 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) + self.logger.info("Ignoring rx message with topic %s", message.topic) def add_routing(self, my_key, ext_device, ext_key, on_change_only_disp=True, on_change_only_videv=True): """ diff --git a/smart_brain.py b/smart_brain.py index fb8a2c7..32e33cb 100644 --- a/smart_brain.py +++ b/smart_brain.py @@ -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 = {