implement subpages

This commit is contained in:
joBr99
2022-04-02 17:34:34 +02:00
parent 38ee48627c
commit ddc4592571
5 changed files with 23 additions and 21 deletions

View File

@@ -261,9 +261,9 @@ nspanel-1:
panelRecvTopic: "tele/tasmota_your_mqtt_topic/RESULT" panelRecvTopic: "tele/tasmota_your_mqtt_topic/RESULT"
panelSendTopic: "cmnd/tasmota_your_mqtt_topic/CustomSend" panelSendTopic: "cmnd/tasmota_your_mqtt_topic/CustomSend"
updateMode: "auto-notify" updateMode: "auto-notify"
timeoutScreensaver: 20 sleepTimeout: 20
#brightnessScreensaver: 10 #sleepBrightness: 10
brightnessScreensaver: sleepBrightness:
- time: "7:00:00" - time: "7:00:00"
value: 10 value: 10
- time: "23:00:00" - time: "23:00:00"

View File

@@ -6,9 +6,9 @@ nspanel-1:
panelRecvTopic: "tele/tasmota_your_mqtt_topic/RESULT" panelRecvTopic: "tele/tasmota_your_mqtt_topic/RESULT"
panelSendTopic: "cmnd/tasmota_your_mqtt_topic/CustomSend" panelSendTopic: "cmnd/tasmota_your_mqtt_topic/CustomSend"
updateMode: "auto-notify" updateMode: "auto-notify"
timeoutScreensaver: 20 sleepTimeout: 20
#brightnessScreensaver: 10 #sleepBrightness: 10
brightnessScreensaver: sleepBrightness:
- time: "7:00:00" - time: "7:00:00"
value: 10 value: 10
- time: "23:00:00" - time: "23:00:00"

View File

@@ -94,6 +94,7 @@ class LuiBackendConfig(object):
self._config = {} self._config = {}
self._config_cards = [] self._config_cards = []
self._config_screensaver = None self._config_screensaver = None
self._config_hidden_cards = []
self.load(config_in) self.load(config_in)
@@ -109,7 +110,7 @@ class LuiBackendConfig(object):
self._config_cards.append(Card(card, pos)) self._config_cards.append(Card(card, pos))
pos = pos + 1 pos = pos + 1
# parse screensaver # parse screensaver
screensaver = Card(self.get("screensaver")) self._config_screensaver = Card(self.get("screensaver"))
# parsed hidden pages that can be accessed through navigate # parsed hidden pages that can be accessed through navigate
for card in self.get("hiddenCards"): for card in self.get("hiddenCards"):

View File

@@ -142,7 +142,7 @@ class LuiController(object):
self._pages_gen.generate_screensaver_page() self._pages_gen.generate_screensaver_page()
return return
if button_type == "bExit": if button_type in ["bExit", "bUp"]:
self._pages_gen.render_card(self._current_card) self._pages_gen.render_card(self._current_card)
if button_type == "bNext": if button_type == "bNext":
@@ -181,8 +181,7 @@ class LuiController(object):
if button_type == "button": if button_type == "button":
if entity_id.startswith('navigate'): if entity_id.startswith('navigate'):
# internal for navigation to nested pages # internal for navigation to nested pages
self._current_card = self._config.searchCard(entity_id) self._pages_gen.render_card(self._config.searchCard(entity_id))
self._pages_gen.render_card(self._current_card)
elif entity_id.startswith('scene'): elif entity_id.startswith('scene'):
self._ha_api.get_entity(entity_id).call_service("turn_on") self._ha_api.get_entity(entity_id).call_service("turn_on")
elif entity_id.startswith('script'): elif entity_id.startswith('script'):

View File

@@ -110,11 +110,11 @@ class LuiPagesGen(object):
if entityType == "delete": if entityType == "delete":
return f"~{entityType}~~~~~" return f"~{entityType}~~~~~"
if entityType == "navigate": if entityType == "navigate":
page_search_res = self._config.searchPage(entityId) page_search_res = self._config.searchCard(entityId)
if page_search_res is not None: if page_search_res is not None:
name = page_search_res.title name = page_search_res.title
text = get_translation(self._locale,"PRESS") 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}" return f"~button~{entityId}~{icon_id}~17299~{name}~{text}"
else: else:
return f"~text~{entityId}~{get_icon_id('alert-circle-outline')}~17299~page not found~" 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) max_v = entity.attributes.get("max", 100)
return f"~number~{entityId}~{icon_id}~17299~{name}~{entity.state}|{min_v}|{max_v}" return f"~number~{entityId}~{icon_id}~17299~{name}~{entity.state}|{min_v}|{max_v}"
def generate_entities_page(self, heading, items): def generate_entities_page(self, navigation, heading, items):
navigation = ""
command = f"entityUpd~{heading}~{navigation}" command = f"entityUpd~{heading}~{navigation}"
# Get items and construct cmd string # Get items and construct cmd string
for item in items: 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 item = entity.entityId
if not self._ha_api.entity_exists(item): if not self._ha_api.entity_exists(item):
command = f"entityUpd~{item}~Not found~220~220~Not found~150~300~5" 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}" command = f"entityUpd~{heading}~~{item}~{current_temp}~{dest_temp}~{status}~{min_temp}~{max_temp}~{step_temp}{icon_res}"
self._send_mqtt_msg(command) self._send_mqtt_msg(command)
def generate_media_page(self, entity): def generate_media_page(self, navigation, entity):
item = entity.entityId item = entity.entityId
if not self._ha_api.entity_exists(item): 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')}" 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}" command = f"entityUpd~|{heading}||{item}|{icon}|{title}|{author}|{volume}|{iconplaypause}|{source}|{speakerlist[:200]}|{onoffbutton}"
self._send_mqtt_msg(command) self._send_mqtt_msg(command)
def generate_alarm_page(self, entity): def generate_alarm_page(self, navigation, entity):
item = entity.entityId item = entity.entityId
if not self._ha_api.entity_exists(item): 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" 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): def render_card(self, card, send_page_type=True):
LOGGER.info(f"Started rendering of page {card.pos} with type {card.cardType}") 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 # Switch to page
if send_page_type: if send_page_type:
self.page_type(card.cardType) self.page_type(card.cardType)
if card.cardType in ["cardEntities", "cardGrid"]: if card.cardType in ["cardEntities", "cardGrid"]:
self.generate_entities_page(card.title, card.entities) self.generate_entities_page(navigation, card.title, card.entities)
return return
if card.cardType == "cardThermo": if card.cardType == "cardThermo":
self.generate_thermo_page(card.entity) self.generate_thermo_page(navigation, card.entity)
if card.cardType == "cardMedia": if card.cardType == "cardMedia":
self.generate_media_page(card.entity) self.generate_media_page(navigation, card.entity)
if card.cardType == "cardAlarm": if card.cardType == "cardAlarm":
self.generate_alarm_page(card.entity) self.generate_alarm_page(navigation, card.entity)
if card.cardType == "screensaver": if card.cardType == "screensaver":
self.generate_screensaver_page(card) self.generate_screensaver_page(card)