From 4c6f9cdfd60f29560119f6643c2e35eed1f31ff3 Mon Sep 17 00:00:00 2001 From: Johannes Date: Sat, 2 Apr 2022 17:34:34 +0200 Subject: [PATCH] implement subpages --- README.md | 6 ++--- appdaemon/apps.yaml | 6 ++--- apps/nspanel-lovelace-ui/luibackend/config.py | 3 ++- .../luibackend/controller.py | 5 ++-- apps/nspanel-lovelace-ui/luibackend/pages.py | 24 ++++++++++--------- 5 files changed, 23 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 47d88be5..58911783 100644 --- a/README.md +++ b/README.md @@ -261,9 +261,9 @@ nspanel-1: panelRecvTopic: "tele/tasmota_your_mqtt_topic/RESULT" panelSendTopic: "cmnd/tasmota_your_mqtt_topic/CustomSend" updateMode: "auto-notify" - timeoutScreensaver: 20 - #brightnessScreensaver: 10 - brightnessScreensaver: + sleepTimeout: 20 + #sleepBrightness: 10 + sleepBrightness: - time: "7:00:00" value: 10 - time: "23:00:00" diff --git a/appdaemon/apps.yaml b/appdaemon/apps.yaml index 5dbec26f..312ce1d3 100644 --- a/appdaemon/apps.yaml +++ b/appdaemon/apps.yaml @@ -6,9 +6,9 @@ nspanel-1: panelRecvTopic: "tele/tasmota_your_mqtt_topic/RESULT" panelSendTopic: "cmnd/tasmota_your_mqtt_topic/CustomSend" updateMode: "auto-notify" - timeoutScreensaver: 20 - #brightnessScreensaver: 10 - brightnessScreensaver: + sleepTimeout: 20 + #sleepBrightness: 10 + sleepBrightness: - time: "7:00:00" value: 10 - time: "23:00:00" diff --git a/apps/nspanel-lovelace-ui/luibackend/config.py b/apps/nspanel-lovelace-ui/luibackend/config.py index f65dd48a..f60ff83a 100644 --- a/apps/nspanel-lovelace-ui/luibackend/config.py +++ b/apps/nspanel-lovelace-ui/luibackend/config.py @@ -94,6 +94,7 @@ class LuiBackendConfig(object): self._config = {} self._config_cards = [] self._config_screensaver = None + self._config_hidden_cards = [] self.load(config_in) @@ -109,7 +110,7 @@ class LuiBackendConfig(object): self._config_cards.append(Card(card, pos)) pos = pos + 1 # parse screensaver - screensaver = Card(self.get("screensaver")) + self._config_screensaver = Card(self.get("screensaver")) # parsed hidden pages that can be accessed through navigate for card in self.get("hiddenCards"): diff --git a/apps/nspanel-lovelace-ui/luibackend/controller.py b/apps/nspanel-lovelace-ui/luibackend/controller.py index f5a7c65d..2c262fba 100644 --- a/apps/nspanel-lovelace-ui/luibackend/controller.py +++ b/apps/nspanel-lovelace-ui/luibackend/controller.py @@ -142,7 +142,7 @@ class LuiController(object): self._pages_gen.generate_screensaver_page() return - if button_type == "bExit": + if button_type in ["bExit", "bUp"]: self._pages_gen.render_card(self._current_card) if button_type == "bNext": @@ -181,8 +181,7 @@ class LuiController(object): if button_type == "button": if entity_id.startswith('navigate'): # internal for navigation to nested pages - self._current_card = self._config.searchCard(entity_id) - self._pages_gen.render_card(self._current_card) + self._pages_gen.render_card(self._config.searchCard(entity_id)) elif entity_id.startswith('scene'): self._ha_api.get_entity(entity_id).call_service("turn_on") elif entity_id.startswith('script'): diff --git a/apps/nspanel-lovelace-ui/luibackend/pages.py b/apps/nspanel-lovelace-ui/luibackend/pages.py index 31da3b53..62e2d19d 100644 --- a/apps/nspanel-lovelace-ui/luibackend/pages.py +++ b/apps/nspanel-lovelace-ui/luibackend/pages.py @@ -110,11 +110,11 @@ class LuiPagesGen(object): if entityType == "delete": return f"~{entityType}~~~~~" if entityType == "navigate": - page_search_res = self._config.searchPage(entityId) + page_search_res = self._config.searchCard(entityId) if page_search_res is not None: name = page_search_res.title text = get_translation(self._locale,"PRESS") - icon_id = get_icon_id(icon) if icon is not None else get_icon_id(page_data.get("icon", "gesture-tap-button")) + icon_id = get_icon_id(icon) if icon is not None else get_icon_id("gesture-tap-button") return f"~button~{entityId}~{icon_id}~17299~{name}~{text}" else: return f"~text~{entityId}~{get_icon_id('alert-circle-outline')}~17299~page not found~" @@ -162,8 +162,7 @@ class LuiPagesGen(object): max_v = entity.attributes.get("max", 100) return f"~number~{entityId}~{icon_id}~17299~{name}~{entity.state}|{min_v}|{max_v}" - def generate_entities_page(self, heading, items): - navigation = "" + def generate_entities_page(self, navigation, heading, items): command = f"entityUpd~{heading}~{navigation}" # Get items and construct cmd string for item in items: @@ -172,7 +171,7 @@ class LuiPagesGen(object): - def generate_thermo_page(self, entity): + def generate_thermo_page(self, navigation, entity): item = entity.entityId if not self._ha_api.entity_exists(item): command = f"entityUpd~{item}~Not found~220~220~Not found~150~300~5" @@ -230,7 +229,7 @@ class LuiPagesGen(object): command = f"entityUpd~{heading}~~{item}~{current_temp}~{dest_temp}~{status}~{min_temp}~{max_temp}~{step_temp}{icon_res}" self._send_mqtt_msg(command) - def generate_media_page(self, entity): + def generate_media_page(self, navigation, entity): item = entity.entityId if not self._ha_api.entity_exists(item): command = f"entityUpd~|{item}|Not found|{get_icon_id('alert-circle-outline')}|Please check your|apps.yaml in AppDaemon|50|{get_icon_id('alert-circle-outline')}" @@ -264,7 +263,7 @@ class LuiPagesGen(object): command = f"entityUpd~|{heading}||{item}|{icon}|{title}|{author}|{volume}|{iconplaypause}|{source}|{speakerlist[:200]}|{onoffbutton}" self._send_mqtt_msg(command) - def generate_alarm_page(self, entity): + def generate_alarm_page(self, navigation, entity): item = entity.entityId if not self._ha_api.entity_exists(item): command = f"entityUpd~{item}~Not found~Not found~Check your~Check your~apps.~apps.~yaml~yaml~0~~0" @@ -327,18 +326,21 @@ class LuiPagesGen(object): def render_card(self, card, send_page_type=True): LOGGER.info(f"Started rendering of page {card.pos} with type {card.cardType}") + navigation = "1|1" + if card.pos is None: + navigation = "2|0" # Switch to page if send_page_type: self.page_type(card.cardType) if card.cardType in ["cardEntities", "cardGrid"]: - self.generate_entities_page(card.title, card.entities) + self.generate_entities_page(navigation, card.title, card.entities) return if card.cardType == "cardThermo": - self.generate_thermo_page(card.entity) + self.generate_thermo_page(navigation, card.entity) if card.cardType == "cardMedia": - self.generate_media_page(card.entity) + self.generate_media_page(navigation, card.entity) if card.cardType == "cardAlarm": - self.generate_alarm_page(card.entity) + self.generate_alarm_page(navigation, card.entity) if card.cardType == "screensaver": self.generate_screensaver_page(card)