mirror of
https://github.com/joBr99/nspanel-lovelace-ui.git
synced 2025-12-20 22:47:01 +01:00
Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8b7d196721 | ||
|
|
aadebf801a | ||
|
|
ab74c80ab2 | ||
|
|
b9ddb24a6d | ||
|
|
0df505a0eb |
@@ -132,83 +132,83 @@ The following message can be used to update the content on the cardEntities Page
|
||||
|
||||
## Messages from Nextion Display
|
||||
|
||||
`event~buttonPress2~pageName~bNext`
|
||||
`event,buttonPress2,pageName,bNext`
|
||||
|
||||
`event~buttonPress2~pageName~bPrev`
|
||||
`event,buttonPress2,pageName,bPrev`
|
||||
|
||||
`event~buttonPress2~pageName~bExit~number_of_taps`
|
||||
`event,buttonPress2,pageName,bExit,number_of_taps`
|
||||
|
||||
`event~buttonPress2~pageName~sleepReached`
|
||||
`event,buttonPress2,pageName,sleepReached`
|
||||
|
||||
|
||||
### startup page
|
||||
|
||||
`event~startup~version~model`
|
||||
`event,startup,version,model`
|
||||
|
||||
### screensaver page
|
||||
|
||||
`event~buttonPress2~screensaver~exit` - Touch Event on Screensaver
|
||||
`event,buttonPress2,screensaver,exit` - Touch Event on Screensaver
|
||||
|
||||
`event~screensaverOpen` - Screensaver has opened
|
||||
`event,screensaverOpen` - Screensaver has opened
|
||||
|
||||
|
||||
### cardEntities Page
|
||||
|
||||
`event~*eventName*~*entityName*~*actionName*~*optionalValue*`
|
||||
`event,*eventName*,*entityName*,*actionName*,*optionalValue*`
|
||||
|
||||
`event~buttonPress2~internalNameEntity~up`
|
||||
`event,buttonPress2,internalNameEntity,up`
|
||||
|
||||
`event~buttonPress2~internalNameEntity~down`
|
||||
`event,buttonPress2,internalNameEntity,down`
|
||||
|
||||
`event~buttonPress2~internalNameEntity~stop`
|
||||
`event,buttonPress2,internalNameEntity,stop`
|
||||
|
||||
`event~buttonPress2~internalNameEntity~OnOff~1`
|
||||
`event,buttonPress2,internalNameEntity,OnOff,1`
|
||||
|
||||
`event~buttonPress2~internalNameEntity~button`
|
||||
`event,buttonPress2,internalNameEntity,button`
|
||||
|
||||
### popupLight Page
|
||||
|
||||
`event~pageOpenDetail~popupLight~internalNameEntity`
|
||||
`event,pageOpenDetail,popupLight,internalNameEntity`
|
||||
|
||||
`event~buttonPress2~internalNameEntity~OnOff~1`
|
||||
`event,buttonPress2,internalNameEntity,OnOff,1`
|
||||
|
||||
`event~buttonPress2~internalNameEntity~brightnessSlider~50`
|
||||
`event,buttonPress2,internalNameEntity,brightnessSlider,50`
|
||||
|
||||
`event~buttonPress2~internalNameEntity~colorTempSlider~50`
|
||||
`event,buttonPress2,internalNameEntity,colorTempSlider,50`
|
||||
|
||||
`event~buttonPress2~internalNameEntity~colorWheel~x|y`
|
||||
`event,buttonPress2,internalNameEntity,colorWheel,x|y`
|
||||
|
||||
### popupShutter Page
|
||||
|
||||
`event~pageOpenDetail~popupShutter~internalNameEntity`
|
||||
`event,pageOpenDetail,popupShutter,internalNameEntity`
|
||||
|
||||
`event~buttonPress2~internalNameEntity~positionSlider~50`
|
||||
`event,buttonPress2,internalNameEntity,positionSlider,50`
|
||||
|
||||
### popupNotify Page
|
||||
|
||||
`event~buttonPress2~*internalName*~notifyAction~yes`
|
||||
`event,buttonPress2,*internalName*,notifyAction,yes`
|
||||
|
||||
`event~buttonPress2~*internalName*~notifyAction~no`
|
||||
`event,buttonPress2,*internalName*,notifyAction,no`
|
||||
|
||||
### cardThermo Page
|
||||
|
||||
`event~buttonPress2~*entityName*~tempUpd~*temperature*`
|
||||
`event,buttonPress2,*entityName*,tempUpd,*temperature*`
|
||||
|
||||
`event~buttonPress2~*entityName*~hvac_action~*hvac_action*`
|
||||
`event,buttonPress2,*entityName*,hvac_action,*hvac_action*`
|
||||
|
||||
### cardMedia Page
|
||||
|
||||
`event~buttonPress2~internalNameEntity~media-back`
|
||||
`event,buttonPress2,internalNameEntity,media-back`
|
||||
|
||||
`event~buttonPress2~internalNameEntity~media-pause`
|
||||
`event,buttonPress2,internalNameEntity,media-pause`
|
||||
|
||||
`event~buttonPress2~internalNameEntity~media-next`
|
||||
`event,buttonPress2,internalNameEntity,media-next`
|
||||
|
||||
`event~buttonPress2~internalNameEntity~volumeSlider~75`
|
||||
`event,buttonPress2,internalNameEntity,volumeSlider,75`
|
||||
|
||||
### cardAlarm Page
|
||||
|
||||
`event~buttonPress2~internalNameEntity~actionName~code`
|
||||
`event,buttonPress2,internalNameEntity,actionName,code`
|
||||
|
||||
|
||||
# Icons IDs
|
||||
@@ -218,7 +218,7 @@ Please see Icon's int the [icons.md file](icons.md)
|
||||
# Design Guidelines for Nextion HMI Project
|
||||
|
||||
Background Color is
|
||||
- RGB565: 6371 [18e3] (HEX: #1C1C1C~ RGB: 28~28~28)
|
||||
- RGB565: 6371 [18e3] (HEX: #1C1C1C, RGB: 28,28,28)
|
||||
|
||||
Source for Icons is the Material Design Font~ used by HASPone
|
||||
Source for Icons is the Material Design Font, used by HASPone
|
||||
https://github.com/HASwitchPlate/HASPone
|
||||
|
||||
@@ -371,6 +371,7 @@ key | optional | type | default | description
|
||||
`weatherOverrideForecast4` | True | complex | `None` | sensor entity from home assistant here to override the forth weather forecast item on the screensaver
|
||||
`doubleTapToUnlock` | True | boolean | `False` | requires to tap screensaver two times
|
||||
`alternativeLayout` | True | boolean | `False` | alternative layout with humidity
|
||||
`defaultCard` | True | string | `None` | default page after exiting screensaver; only works with top level cards defined in cards
|
||||
`key` | True | string | `None` | Used by navigate items
|
||||
|
||||
Example for the weatherOverride config options:
|
||||
|
||||
@@ -84,7 +84,8 @@ class LuiBackendConfig(object):
|
||||
'weatherOverrideForecast3': None,
|
||||
'weatherOverrideForecast4': None,
|
||||
'doubleTapToUnlock': False,
|
||||
'alternativeLayout': False
|
||||
'alternativeLayout': False,
|
||||
'defaultCard': None
|
||||
},
|
||||
'hiddenCards': []
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ class LuiController(object):
|
||||
|
||||
# first card (default, after startup)
|
||||
self._current_card = self._config.getCard(0)
|
||||
self._previous_cards = []
|
||||
|
||||
self._pages_gen = LuiPagesGen(ha_api, config, send_mqtt_msg)
|
||||
|
||||
@@ -132,9 +133,16 @@ class LuiController(object):
|
||||
LOGGER.info(f"Button Press Event; entity_id: {entity_id}; button_type: {button_type}; value: {value} ")
|
||||
# internal buttons
|
||||
if entity_id == "screensaver" and button_type == "bExit":
|
||||
if self._config.get("doubleTapToUnlock") and int(value) >= 2:
|
||||
# get default card if there is one
|
||||
if self._config.get("screensaver.defaultCard") is not None:
|
||||
dstCard = self._config.searchCard(self._config.get("screensaver.defaultCard"))
|
||||
if dstCard is not None:
|
||||
self._previous_cards = []
|
||||
self._current_card = dstCard
|
||||
# check for duouble tap if configured and render current page
|
||||
if self._config.get("screensaver.doubleTapToUnlock") and int(value) >= 2:
|
||||
self._pages_gen.render_card(self._current_card)
|
||||
elif not self._config.get("doubleTapToUnlock"):
|
||||
elif not self._config.get("screensaver.doubleTapToUnlock"):
|
||||
self._pages_gen.render_card(self._current_card)
|
||||
return
|
||||
|
||||
@@ -145,8 +153,8 @@ class LuiController(object):
|
||||
if button_type == "bExit":
|
||||
self._pages_gen.render_card(self._current_card)
|
||||
if button_type == "bUp":
|
||||
self._current_card = self._previous_card
|
||||
self._pages_gen.render_card(self._previous_card)
|
||||
self._current_card = self._previous_cards.pop()
|
||||
self._pages_gen.render_card(self._current_card)
|
||||
|
||||
if button_type == "bNext":
|
||||
card = self._config.getCard(self._current_card.pos+1)
|
||||
@@ -184,7 +192,7 @@ class LuiController(object):
|
||||
if button_type == "button":
|
||||
if entity_id.startswith('navigate'):
|
||||
# internal for navigation to nested pages
|
||||
self._previous_card = self._current_card
|
||||
self._previous_cards.append(self._current_card)
|
||||
self._current_card = self._config.searchCard(entity_id)
|
||||
self._pages_gen.render_card(self._current_card)
|
||||
elif entity_id.startswith('scene'):
|
||||
|
||||
@@ -64,8 +64,6 @@ class LuiPagesGen(object):
|
||||
we_name = self._config._config_screensaver.entity.entityId
|
||||
unit = self._config._config_screensaver.raw_config.get("weatherUnit", "celsius")
|
||||
|
||||
LOGGER.info(f"test123 {we_name}")
|
||||
|
||||
if self._ha_api.entity_exists(we_name):
|
||||
we = self._ha_api.get_entity(we_name)
|
||||
else:
|
||||
@@ -167,6 +165,7 @@ class LuiPagesGen(object):
|
||||
min_v = entity.attributes.get("min", 0)
|
||||
max_v = entity.attributes.get("max", 100)
|
||||
return f"~number~{entityId}~{icon_id}~17299~{name}~{entity.state}|{min_v}|{max_v}"
|
||||
return f"~text~{entityId}~{get_icon_id('alert-circle-outline')}~17299~error~"
|
||||
|
||||
def generate_entities_page(self, navigation, heading, items):
|
||||
command = f"entityUpd~{heading}~{navigation}"
|
||||
@@ -266,7 +265,7 @@ class LuiPagesGen(object):
|
||||
onoffbutton = 1374
|
||||
else:
|
||||
onoffbutton = rgb_dec565([255,255,255])
|
||||
command = f"entityUpd~|{heading}|{navigation}|{item}|{icon}|{title}|{author}|{volume}|{iconplaypause}|{source}|{speakerlist[:200]}|{onoffbutton}"
|
||||
command = f"entityUpd~{heading}~{navigation}~{item}~{icon}~{title}~{author}~{volume}~{iconplaypause}~{source}~{speakerlist[:200]}~{onoffbutton}"
|
||||
self._send_mqtt_msg(command)
|
||||
|
||||
def generate_alarm_page(self, navigation, entity):
|
||||
|
||||
@@ -63,8 +63,8 @@ class NsPanelLovelaceUIManager(hass.Hass):
|
||||
|
||||
controller = LuiController(self, cfg, send_mqtt_msg)
|
||||
|
||||
desired_display_firmware_version = 27
|
||||
version = "v2.4.6"
|
||||
desired_display_firmware_version = 28
|
||||
version = "v2.5.0"
|
||||
|
||||
model = cfg.get("model")
|
||||
if model == "us-l":
|
||||
|
||||
Reference in New Issue
Block a user