Merge pull request #219 from illuzn/illuzn-patch-themes

Screensaver Themes Patch
This commit is contained in:
joBr99
2022-05-23 15:43:42 +02:00
committed by GitHub
3 changed files with 126 additions and 10 deletions

View File

@@ -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)

View 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