diff --git a/apps/nspanel-lovelace-ui/luibackend/config.py b/apps/nspanel-lovelace-ui/luibackend/config.py index 72445363..030d5a44 100644 --- a/apps/nspanel-lovelace-ui/luibackend/config.py +++ b/apps/nspanel-lovelace-ui/luibackend/config.py @@ -1,3 +1,4 @@ +from helper import dict_recursive_update import logging LOGGER = logging.getLogger(__name__) @@ -41,6 +42,12 @@ class Card(object): else: for e in self.entities: entityIds.append(e.entityId) + # additional keys to check + add_ent_keys = ['weatherOverrideForecast1', 'weatherOverrideForecast2', 'weatherOverrideForecast3', 'weatherOverrideForecast4'] + for ent_key in add_ent_keys: + val = self.raw_config.get(ent_key) + if val is not None: + entityIds.append(val.get("entity")) return entityIds class LuiBackendConfig(object): @@ -91,7 +98,8 @@ class LuiBackendConfig(object): 'weatherOverrideForecast4': None, 'doubleTapToUnlock': False, 'alternativeLayout': False, - 'defaultCard': None + 'defaultCard': None, + 'key': 'screensaver' }, 'hiddenCards': [] } @@ -106,10 +114,8 @@ class LuiBackendConfig(object): self.load(config_in) - def load(self, args): - for k, v in args.items(): - if k in self._DEFAULT_CONFIG: - self._config[k] = v + def load(self, inconfig): + self._config = dict_recursive_update(inconfig, self._DEFAULT_CONFIG) LOGGER.info(f"Loaded config: {self._config}") # parse cards displayed on panel @@ -145,6 +151,7 @@ class LuiBackendConfig(object): entities.extend(card.get_entity_list()) for card in self._config_hidden_cards: entities.extend(card.get_entity_list()) + entities.extend(self._config_screensaver.get_entity_list()) return entities def getCard(self, pos): diff --git a/apps/nspanel-lovelace-ui/luibackend/controller.py b/apps/nspanel-lovelace-ui/luibackend/controller.py index e99f4cf8..76e4a897 100644 --- a/apps/nspanel-lovelace-ui/luibackend/controller.py +++ b/apps/nspanel-lovelace-ui/luibackend/controller.py @@ -13,9 +13,10 @@ class LuiController(object): self._config = config self._send_mqtt_msg = send_mqtt_msg - # first card (default, after startup) - self._current_card = self._config.getCard(0) + self._current_card = self._config._config_screensaver self._previous_cards = [] + # first card (default, after startup) + self._previous_cards.append(self._config.getCard(0)) self._pages_gen = LuiPagesGen(ha_api, config, send_mqtt_msg) @@ -28,10 +29,6 @@ class LuiController(object): # Setup date callback ha_api.run_daily(self._pages_gen.update_date, time) - - # weather callback - weather_interval = 15 * 60 # 15 minutes - ha_api.run_every(self.weather_update, "now", weather_interval) # register callbacks self.register_callbacks() @@ -62,8 +59,8 @@ class LuiController(object): self.update_screensaver_brightness(kwargs={"value": self.current_screensaver_brightness}) # send panel to screensaver - self._pages_gen.page_type("screensaver") - self.weather_update("") + self._pages_gen.render_card(self._current_card) + def update_screensaver_brightness_state_callback(self, entity, attribute, old, new, kwargs): self.update_screensaver_brightness(kwargs={"value": self.current_screensaver_brightness}) @@ -77,9 +74,6 @@ class LuiController(object): self.current_screensaver_brightness = kwargs['value'] brightness = kwargs['value'] self._send_mqtt_msg(f"dimmode~{brightness}") - - def weather_update(self, kwargs): - self._pages_gen.update_screensaver_weather() def calc_current_screensaver_brightness(self): current_screensaver_brightness = 20 @@ -104,7 +98,7 @@ class LuiController(object): def register_callbacks(self): items = self._config.get_all_entity_names() - LOGGER.debug(f"Registering callbacks for the following items: {items}") + LOGGER.info(f"Registering callbacks for the following items: {items}") for item in items: if self._ha_api.entity_exists(item): self._ha_api.listen_state(self.state_change_callback, entity_id=item, attribute="all") @@ -138,16 +132,20 @@ class LuiController(object): dstCard = self._config.searchCard(self._config.get("screensaver.defaultCard")) if dstCard is not None: self._previous_cards = [] - self._current_card = dstCard + self._previous_cards.append(dstCard) # check for double tap if configured and render current page if self._config.get("screensaver.doubleTapToUnlock") and int(value) >= 2: + self._current_card = self._previous_cards.pop() self._pages_gen.render_card(self._current_card) elif not self._config.get("screensaver.doubleTapToUnlock"): + self._current_card = self._previous_cards.pop() self._pages_gen.render_card(self._current_card) return if button_type == "sleepReached": - self._pages_gen.generate_screensaver_page() + self._previous_cards.append(self._current_card) + self._current_card = self._config._config_screensaver + self._pages_gen.render_card(self._current_card) return if button_type == "bExit": diff --git a/apps/nspanel-lovelace-ui/luibackend/helper.py b/apps/nspanel-lovelace-ui/luibackend/helper.py index 0957be99..22d7520d 100644 --- a/apps/nspanel-lovelace-ui/luibackend/helper.py +++ b/apps/nspanel-lovelace-ui/luibackend/helper.py @@ -55,3 +55,11 @@ def get_attr_safe(entity, attr, default): if res is None: res = default return res + +def dict_recursive_update(source: dict, target: dict) -> dict: + for sk, sv in source.items(): + if sk in target and isinstance(target[sk], dict): + target[sk] = dict_recursive_update(sv, target[sk]) + else: + target[sk] = sv + return target \ No newline at end of file