diff --git a/base.py b/base.py index 186887d..2448f0b 100644 --- a/base.py +++ b/base.py @@ -1,5 +1,6 @@ import json import logging +import task try: from config import APP_NAME as ROOT_LOGGER_NAME @@ -16,7 +17,7 @@ class common_base(dict): self.__callback_list__ = [] self.logger = logging.getLogger(ROOT_LOGGER_NAME).getChild("devices") - def add_callback(self, key, data, callback, on_change_only=False): + def add_callback(self, key, data, callback, on_change_only=False, init_now=False): """ key: key or None for all keys data: data or None for all data @@ -24,6 +25,8 @@ class common_base(dict): cb_tup = (key, data, callback, on_change_only) if cb_tup not in self.__callback_list__: self.__callback_list__.append(cb_tup) + if init_now and self.get(key) is not None: + callback(self, key, self[key]) def set(self, key, data, block_callback=[]): if key in self.keys(): @@ -58,6 +61,13 @@ class videv_base(mqtt_base): super().__init__(mqtt_client, topic, default_values=default_values) self.__display_dict__ = {} self.__control_dict__ = {} + self.__periodic__ = task.periodic(300, self.send_all) + self.__periodic__.run() + + def send_all(self, rt): + for key in self: + if self[key] is not None: + self.__tx__(key, self[key]) def add_display(self, my_key, ext_device, ext_key, on_change_only=True): """ @@ -69,12 +79,12 @@ class videv_base(mqtt_base): # store information to identify callback from ext_device self.__display_dict__[(id(ext_device[0]), ext_key)] = my_key # register a callback to listen for data from external device - ext_device[0].add_callback(ext_key, None, self.__rx_ext_device_data__, on_change_only) + ext_device[0].add_callback(ext_key, None, self.__rx_ext_device_data__, on_change_only, init_now=True) else: # store information to identify callback from ext_device self.__display_dict__[(id(ext_device), ext_key)] = my_key # register a callback to listen for data from external device - ext_device.add_callback(ext_key, None, self.__rx_ext_device_data__, on_change_only) + ext_device.add_callback(ext_key, None, self.__rx_ext_device_data__, on_change_only, init_now=True) # send initial display data to videv interface data = ext_device.get(ext_key) if data is not None: