some changes to screensaver navigation #123

This commit is contained in:
joBr99
2022-04-10 21:53:55 +02:00
parent 02ddec8e76
commit c3e32cc0e3
3 changed files with 32 additions and 19 deletions

View File

@@ -1,3 +1,4 @@
from helper import dict_recursive_update
import logging import logging
LOGGER = logging.getLogger(__name__) LOGGER = logging.getLogger(__name__)
@@ -41,6 +42,12 @@ class Card(object):
else: else:
for e in self.entities: for e in self.entities:
entityIds.append(e.entityId) 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 return entityIds
class LuiBackendConfig(object): class LuiBackendConfig(object):
@@ -91,7 +98,8 @@ class LuiBackendConfig(object):
'weatherOverrideForecast4': None, 'weatherOverrideForecast4': None,
'doubleTapToUnlock': False, 'doubleTapToUnlock': False,
'alternativeLayout': False, 'alternativeLayout': False,
'defaultCard': None 'defaultCard': None,
'key': 'screensaver'
}, },
'hiddenCards': [] 'hiddenCards': []
} }
@@ -106,10 +114,8 @@ class LuiBackendConfig(object):
self.load(config_in) self.load(config_in)
def load(self, args): def load(self, inconfig):
for k, v in args.items(): self._config = dict_recursive_update(inconfig, self._DEFAULT_CONFIG)
if k in self._DEFAULT_CONFIG:
self._config[k] = v
LOGGER.info(f"Loaded config: {self._config}") LOGGER.info(f"Loaded config: {self._config}")
# parse cards displayed on panel # parse cards displayed on panel
@@ -145,6 +151,7 @@ class LuiBackendConfig(object):
entities.extend(card.get_entity_list()) entities.extend(card.get_entity_list())
for card in self._config_hidden_cards: for card in self._config_hidden_cards:
entities.extend(card.get_entity_list()) entities.extend(card.get_entity_list())
entities.extend(self._config_screensaver.get_entity_list())
return entities return entities
def getCard(self, pos): def getCard(self, pos):

View File

@@ -13,9 +13,10 @@ class LuiController(object):
self._config = config self._config = config
self._send_mqtt_msg = send_mqtt_msg self._send_mqtt_msg = send_mqtt_msg
# first card (default, after startup) self._current_card = self._config._config_screensaver
self._current_card = self._config.getCard(0)
self._previous_cards = [] 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) self._pages_gen = LuiPagesGen(ha_api, config, send_mqtt_msg)
@@ -29,10 +30,6 @@ class LuiController(object):
# Setup date callback # Setup date callback
ha_api.run_daily(self._pages_gen.update_date, time) 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 # register callbacks
self.register_callbacks() self.register_callbacks()
@@ -62,8 +59,8 @@ class LuiController(object):
self.update_screensaver_brightness(kwargs={"value": self.current_screensaver_brightness}) self.update_screensaver_brightness(kwargs={"value": self.current_screensaver_brightness})
# send panel to screensaver # send panel to screensaver
self._pages_gen.page_type("screensaver") self._pages_gen.render_card(self._current_card)
self.weather_update("")
def update_screensaver_brightness_state_callback(self, entity, attribute, old, new, kwargs): def update_screensaver_brightness_state_callback(self, entity, attribute, old, new, kwargs):
self.update_screensaver_brightness(kwargs={"value": self.current_screensaver_brightness}) self.update_screensaver_brightness(kwargs={"value": self.current_screensaver_brightness})
@@ -78,9 +75,6 @@ class LuiController(object):
brightness = kwargs['value'] brightness = kwargs['value']
self._send_mqtt_msg(f"dimmode~{brightness}") self._send_mqtt_msg(f"dimmode~{brightness}")
def weather_update(self, kwargs):
self._pages_gen.update_screensaver_weather()
def calc_current_screensaver_brightness(self): def calc_current_screensaver_brightness(self):
current_screensaver_brightness = 20 current_screensaver_brightness = 20
# set brightness of screensaver # set brightness of screensaver
@@ -104,7 +98,7 @@ class LuiController(object):
def register_callbacks(self): def register_callbacks(self):
items = self._config.get_all_entity_names() 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: for item in items:
if self._ha_api.entity_exists(item): if self._ha_api.entity_exists(item):
self._ha_api.listen_state(self.state_change_callback, entity_id=item, attribute="all") 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")) dstCard = self._config.searchCard(self._config.get("screensaver.defaultCard"))
if dstCard is not None: if dstCard is not None:
self._previous_cards = [] self._previous_cards = []
self._current_card = dstCard self._previous_cards.append(dstCard)
# check for double tap if configured and render current page # check for double tap if configured and render current page
if self._config.get("screensaver.doubleTapToUnlock") and int(value) >= 2: 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) self._pages_gen.render_card(self._current_card)
elif not self._config.get("screensaver.doubleTapToUnlock"): elif not self._config.get("screensaver.doubleTapToUnlock"):
self._current_card = self._previous_cards.pop()
self._pages_gen.render_card(self._current_card) self._pages_gen.render_card(self._current_card)
return return
if button_type == "sleepReached": 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 return
if button_type == "bExit": if button_type == "bExit":

View File

@@ -55,3 +55,11 @@ def get_attr_safe(entity, attr, default):
if res is None: if res is None:
res = default res = default
return res 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