mirror of
https://github.com/joBr99/nspanel-lovelace-ui.git
synced 2025-12-21 15:04:24 +01:00
implement subpages
This commit is contained in:
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"):
|
||||||
|
|||||||
@@ -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'):
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user