mirror of
https://github.com/joBr99/nspanel-lovelace-ui.git
synced 2025-12-23 07:54:25 +01:00
Merge pull request #219 from illuzn/illuzn-patch-themes
Screensaver Themes Patch
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import datetime
|
||||
import dateutil.parser as dp
|
||||
|
||||
from theme import get_screensaver_color_output
|
||||
from icon_mapping import get_icon_id
|
||||
from icons import get_icon_id_ha
|
||||
from icons import get_action_id_ha
|
||||
@@ -61,6 +62,7 @@ class LuiPagesGen(object):
|
||||
global babel_spec
|
||||
we_name = self._config._config_screensaver.entity.entityId
|
||||
unit = self._config._config_screensaver.raw_config.get("weatherUnit", "celsius")
|
||||
state = {}
|
||||
|
||||
if self._ha_api.entity_exists(we_name):
|
||||
we = self._ha_api.get_entity(we_name)
|
||||
@@ -69,6 +71,7 @@ class LuiPagesGen(object):
|
||||
return
|
||||
|
||||
icon_cur = get_icon_id_ha("weather", state=we.state)
|
||||
state["tMainIcon"] = we.state
|
||||
text_cur = convert_temperature(we.attributes.temperature, unit)
|
||||
|
||||
forecastSkip = self._config._config_screensaver.raw_config.get(f"forecastSkip")+1
|
||||
@@ -95,6 +98,14 @@ class LuiPagesGen(object):
|
||||
else:
|
||||
up = up.strftime('%a')
|
||||
icon = get_icon_id_ha("weather", state=we.attributes.forecast[fid]['condition'])
|
||||
if i == 1:
|
||||
state["tF1Icon"] = we.attributes.forecast[fid]['condition']
|
||||
elif i == 2:
|
||||
state["tF2Icon"] = we.attributes.forecast[fid]['condition']
|
||||
elif i == 3:
|
||||
state["tF3Icon"] = we.attributes.forecast[fid]['condition']
|
||||
elif i == 4:
|
||||
state["tF4Icon"] = we.attributes.forecast[fid]['condition']
|
||||
down = convert_temperature(we.attributes.forecast[fid]['temperature'], unit)
|
||||
else:
|
||||
up = ""
|
||||
@@ -116,6 +127,13 @@ class LuiPagesGen(object):
|
||||
altLayout = f"~{get_icon_id('water-percent')}~{we.attributes.humidity} %"
|
||||
|
||||
self._send_mqtt_msg(f"weatherUpdate~{icon_cur}~{text_cur}{weather_res}{altLayout}")
|
||||
|
||||
# send color if configured in screensaver
|
||||
theme = self._config.get("theme")
|
||||
if theme is not None:
|
||||
if not ("AutoWeather" in theme and theme["AutoWeather"] == "auto"):
|
||||
state = None
|
||||
self._send_mqtt_msg(get_screensaver_color_output(theme=theme, state=state))
|
||||
|
||||
def generate_entities_item(self, entity, cardType):
|
||||
entityId = entity.entityId
|
||||
@@ -419,10 +437,10 @@ class LuiPagesGen(object):
|
||||
self.generate_alarm_page(navigation, card.entity)
|
||||
if card.cardType == "screensaver":
|
||||
self.update_screensaver_weather()
|
||||
# send color if configured in screensaver
|
||||
color = card.raw_config.get("color")
|
||||
if color is not None:
|
||||
self._send_mqtt_msg(f"color~{color}")
|
||||
# send color if configured in theme
|
||||
theme = self._config.get("theme")
|
||||
if theme is not None:
|
||||
self._send_mqtt_msg(get_screensaver_color_output(theme))
|
||||
if card.cardType == "cardQR":
|
||||
qrcode = card.raw_config.get("qrCode", "")
|
||||
self.generate_qr_page(navigation, card.title, card.entities, card.cardType, qrcode)
|
||||
|
||||
72
apps/nspanel-lovelace-ui/luibackend/theme.py
Normal file
72
apps/nspanel-lovelace-ui/luibackend/theme.py
Normal file
@@ -0,0 +1,72 @@
|
||||
|
||||
from helper import rgb_dec565
|
||||
|
||||
default_screensaver_color_mapping = {
|
||||
#"item": "color in decimal RGB565 (0-65535)"
|
||||
"background": "0",
|
||||
"time": "65535",
|
||||
"timeAMPM": "65535",
|
||||
"date": "65535",
|
||||
"tMainIcon": "65535",
|
||||
"tMainText": "65535",
|
||||
"tForecast1": "65535",
|
||||
"tForecast2": "65535",
|
||||
"tForecast3": "65535",
|
||||
"tForecast4": "65535",
|
||||
"tF1Icon": "65535",
|
||||
"tF2Icon": "65535",
|
||||
"tF3Icon": "65535",
|
||||
"tF4Icon": "65535",
|
||||
"tForecast1Val": "65535",
|
||||
"tForecast2Val": "65535",
|
||||
"tForecast3Val": "65535",
|
||||
"tForecast4Val": "65535",
|
||||
"bar": "65535",
|
||||
"tMainIconAlt": "65535",
|
||||
"tMainTextAlt": "65535",
|
||||
"tMRIcon": "65535",
|
||||
"tMR": "65535"
|
||||
}
|
||||
|
||||
default_weather_icon_color_mapping = {
|
||||
#"item-per HA" "color in decimal RGB 565 (0-65535)"
|
||||
"clear-night": "35957", #50% grey
|
||||
"cloudy": "31728", #grey-blue
|
||||
"exceptional": "63488", #red
|
||||
"fog": "21130", #75% grey
|
||||
"hail": "65535", #white
|
||||
"lightning": "65120", #golden-yellow
|
||||
"lightning-rainy": "50400", #dark-golden-yellow
|
||||
"partlycloudy": "35957", #50% grey
|
||||
"pouring": "249", #blue
|
||||
"rainy": "33759", #light-blue
|
||||
"snowy": "65535", #white
|
||||
"snowy-rainy": "44479", #light-blue-grey
|
||||
"sunny": "63469", #bright-yellow
|
||||
"windy": "35957", #50% grey
|
||||
"windy-variant": "35957" #50% grey
|
||||
}
|
||||
|
||||
def get_screensaver_color_output(theme, state=None):
|
||||
color_output = "color"
|
||||
for key in default_screensaver_color_mapping:
|
||||
color_output += f"~{map_color(key=key, theme=theme, state=state)}"
|
||||
return color_output
|
||||
|
||||
def map_color(key, theme, state=None):
|
||||
config_color = default_screensaver_color_mapping[key]
|
||||
# Use theme color if set
|
||||
if key in theme:
|
||||
config_color = rgb_dec565(theme[key])
|
||||
# Use Autocolouring for weather
|
||||
elif state is not None:
|
||||
if key in ["tMainIcon", "tF1Icon", "tF2Icon", "tF3Icon", "tF4Icon"]:
|
||||
config_color = map_weather_icon_color(key=key, state=state)
|
||||
return config_color
|
||||
|
||||
def map_weather_icon_color(key, state):
|
||||
if state[key] in default_weather_icon_color_mapping:
|
||||
config_color = default_weather_icon_color_mapping[state[key]]
|
||||
else:
|
||||
config_color = "65535"
|
||||
return config_color
|
||||
Reference in New Issue
Block a user