mirror of
https://github.com/joBr99/nspanel-lovelace-ui.git
synced 2025-12-21 15:04:24 +01:00
some changes to screensaver navigation #123
This commit is contained in:
@@ -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):
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
@@ -28,10 +29,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})
|
||||||
@@ -77,9 +74,6 @@ class LuiController(object):
|
|||||||
self.current_screensaver_brightness = kwargs['value']
|
self.current_screensaver_brightness = kwargs['value']
|
||||||
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
|
||||||
@@ -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":
|
||||||
|
|||||||
@@ -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
|
||||||
Reference in New Issue
Block a user