implement ha: alias for icons #464 (#492)

implements a new icon type that can be used to display home assistant templates
This commit is contained in:
joBr99
2022-10-01 00:10:01 +02:00
committed by GitHub
parent 32e58e5fe3
commit f70ffa168c
5 changed files with 42 additions and 24 deletions

View File

@@ -6897,9 +6897,13 @@ icons = {
'zodiac-virgo': '',
}
import apis
def get_icon_id(ma_name):
if "text:" in ma_name:
return ma_name.replace("text:","")
if "ha:" in ma_name:
return apis.ha_api.render_template(ma_name.replace("ha:",""))
ma_name = ma_name.replace("mdi:","")
if ma_name in icons:
return icons[ma_name]

View File

@@ -195,7 +195,7 @@ def map_to_mdi_name(ha_type, state=None, device_class="_", cardType=None):
else:
return "alert-circle-outline"
def get_icon_id_ha(ha_type, state=None, device_class=None, overwrite=None):
def get_icon(ha_type, state=None, device_class=None, overwrite=None):
if overwrite is not None:
if type(overwrite) is str:
return get_icon_id(overwrite)
@@ -203,10 +203,9 @@ def get_icon_id_ha(ha_type, state=None, device_class=None, overwrite=None):
for overwrite_state, overwrite_icon in overwrite.items():
if overwrite_state == state:
return get_icon_id(overwrite_icon)
return get_icon_id(map_to_mdi_name(ha_type, state, device_class))
def get_action_id_ha(ha_type, action, device_class=None, overwrite=None):
def get_action_icon(ha_type, action, device_class=None, overwrite=None):
if overwrite is not None:
return get_icon_id(overwrite)
if ha_type == "cover":

View File

@@ -5,8 +5,8 @@ import apis
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
from icons import get_icon
from icons import get_action_icon
from helper import scale, rgb_dec565, rgb_brightness, get_attr_safe, convert_temperature
from localization import get_translation
@@ -94,7 +94,7 @@ class LuiPagesGen(object):
apis.ha_api.error(f"Skipping Weather Update, entity {we_name} not found")
return
icon_cur = get_icon_id_ha("weather", state=we.state)
icon_cur = get_icon("weather", state=we.state)
state["tMainIcon"] = we.state
text_cur = convert_temperature(we.attributes.temperature, unit)
@@ -121,7 +121,7 @@ class LuiPagesGen(object):
up = up.strftime('%H:%M')
else:
up = up.strftime('%a')
icon = get_icon_id_ha("weather", state=we.attributes.forecast[fid]['condition'])
icon = get_icon("weather", state=we.attributes.forecast[fid]['condition'])
if i == 1:
state["tF1Icon"] = we.attributes.forecast[fid]['condition']
elif i == 2:
@@ -141,7 +141,7 @@ class LuiPagesGen(object):
name = wOF.get("name")
entity = apis.ha_api.get_entity(wOF.get("entity"))
up = name if name is not None else entity.attributes.friendly_name
icon = get_icon_id_ha("sensor", state=entity.state, device_class=entity.attributes.get("device_class", ""), overwrite=icon)
icon = get_icon("sensor", state=entity.state, device_class=entity.attributes.get("device_class", ""), overwrite=icon)
if "color" in wOF:
if theme is None:
theme = {}
@@ -175,7 +175,7 @@ class LuiPagesGen(object):
icon = statusIcon.get("icon")
entity = apis.ha_api.get_entity(statusIcon.get("entity"))
entityType = statusIcon.get("entity").split(".")[0]
icon = get_icon_id_ha(entityType, state=entity.state, device_class=entity.attributes.get("device_class", ""), overwrite=icon)
icon = get_icon(entityType, state=entity.state, device_class=entity.attributes.get("device_class", ""), overwrite=icon)
color = self.get_entity_color(entity, overwrite=statusIcon.get("color", None))
status_res += f"~{icon}~{color}"
@@ -203,13 +203,13 @@ class LuiPagesGen(object):
if entityType == "navigate":
page_search_res = self._config.searchCard(entityId)
if page_search_res is not None:
icon_res = get_icon_id_ha("navigate", overwrite=icon)
icon_res = get_icon("navigate", overwrite=icon)
status_entity = None
name = name if name is not None else page_search_res.title
text = get_translation(self._locale, "frontend.ui.card.button.press")
if item.status is not None and apis.ha_api.entity_exists(item.status):
status_entity = apis.ha_api.get_entity(item.status)
icon_res = get_icon_id_ha(item.status.split(".")[0], state=status_entity.state, device_class=status_entity.attributes.get("device_class", "_"), overwrite=icon)
icon_res = get_icon(item.status.split(".")[0], state=status_entity.state, device_class=status_entity.attributes.get("device_class", "_"), overwrite=icon)
icon_color = self.get_entity_color(status_entity, ha_type=item.status.split(".")[0], overwrite=colorOverride)
if item.status.startswith("sensor") and cardType == "cardGrid":
icon_res = status_entity.state[:4]
@@ -226,12 +226,12 @@ class LuiPagesGen(object):
icon_res = get_icon_id(icon) if icon is not None else get_icon_id("alert-circle-outline")
return f"~text~{entityId}~{icon_res}~17299~{name}~{value}"
if entityType == "service":
icon_id = get_icon_id_ha("script", overwrite=icon)
icon_id = get_icon("script", overwrite=icon)
text = get_translation(self._locale, "frontend.ui.card.script.run")
icon_color = 17299
if item.status is not None and apis.ha_api.entity_exists(item.status):
status_entity = apis.ha_api.get_entity(item.status)
icon_id = get_icon_id_ha(item.status.split(".")[0], state=status_entity.state, device_class=status_entity.attributes.get("device_class", "_"), overwrite=icon)
icon_id = get_icon(item.status.split(".")[0], state=status_entity.state, device_class=status_entity.attributes.get("device_class", "_"), overwrite=icon)
icon_color = self.get_entity_color(status_entity, ha_type=item.status.split(".")[0], overwrite=colorOverride)
if item.status.startswith("sensor") and cardType == "cardGrid":
icon_id = status_entity.state[:4]
@@ -251,7 +251,7 @@ class LuiPagesGen(object):
# common res vars
entityTypePanel = "text"
icon_id = get_icon_id_ha(entityType, state=entity.state, overwrite=icon)
icon_id = get_icon(entityType, state=entity.state, overwrite=icon)
color = self.get_entity_color(entity, overwrite=colorOverride)
value = ""
name = name if name is not None else entity.attributes.get("friendly_name","unknown")
@@ -259,7 +259,7 @@ class LuiPagesGen(object):
if entityType == "cover":
entityTypePanel = "shutter"
device_class = entity.attributes.get("device_class", "window")
icon_id = get_icon_id_ha(ha_type=entityType, state=entity.state, device_class=device_class, overwrite=icon)
icon_id = get_icon(ha_type=entityType, state=entity.state, device_class=device_class, overwrite=icon)
icon_up = ""
icon_stop = ""
icon_down = ""
@@ -276,13 +276,13 @@ class LuiPagesGen(object):
if bits & 0b00000001: # SUPPORT_OPEN
if ( pos != 100 and not (entity.state == "open" and pos == "disable") ) or item.assumedState:
icon_up_status = "enable"
icon_up = get_action_id_ha(ha_type=entityType, action="open", device_class=device_class)
icon_up = get_action_icon(ha_type=entityType, action="open", device_class=device_class)
if bits & 0b00000010: # SUPPORT_CLOSE
if ( pos != 0 and not (entity.state == "closed" and pos == "disable") ) or item.assumedState:
icon_down_status = "enable"
icon_down = get_action_id_ha(ha_type=entityType, action="close", device_class=device_class)
icon_down = get_action_icon(ha_type=entityType, action="close", device_class=device_class)
if bits & 0b00001000: # SUPPORT_STOP
icon_stop = get_action_id_ha(ha_type=entityType, action="stop", device_class=device_class)
icon_stop = get_action_icon(ha_type=entityType, action="stop", device_class=device_class)
icon_stop_status = "enable"
value = f"{icon_up}|{icon_stop}|{icon_down}|{icon_up_status}|{icon_stop_status}|{icon_down_status}"
elif entityType in "light":
@@ -306,7 +306,7 @@ class LuiPagesGen(object):
if icon_id[-1] == ".":
icon_id = icon_id[:-1]
else:
icon_id = get_icon_id_ha(entityType, state=entity.state, device_class=device_class, overwrite=icon)
icon_id = get_icon(entityType, state=entity.state, device_class=device_class, overwrite=icon)
elif entityType in ["button", "input_button"]:
entityTypePanel = "button"
value = get_translation(self._locale, "frontend.ui.card.button.press")
@@ -537,7 +537,7 @@ class LuiPagesGen(object):
add_btn=f"{get_icon_id('progress-alert')}~{rgb_dec565([243,179,0])}~"
if alarmBtn is not None and type(alarmBtn) is dict:
entity = alarmBtn.get("entity")
iconnav = get_icon_id_ha("alarm-arm-fail", overwrite=alarmBtn.get("icon"))
iconnav = get_icon("alarm-arm-fail", overwrite=alarmBtn.get("icon"))
status = alarmBtn.get("status")
if status is not None and apis.ha_api.entity_exists(status):
icon_color = self.get_entity_color(apis.ha_api.get_entity(status))
@@ -653,7 +653,7 @@ class LuiPagesGen(object):
entity = apis.ha_api.get_entity(entity_id)
entityType="cover"
device_class = entity.attributes.get("device_class", "window")
icon_id = get_icon_id_ha(entityType, state=entity.state, device_class=device_class)
icon_id = get_icon(entityType, state=entity.state, device_class=device_class)
pos = entity.attributes.get("current_position")
if pos is None:
@@ -686,14 +686,14 @@ class LuiPagesGen(object):
if bits & 0b00000001: # SUPPORT_OPEN
if ( pos != 100 and not (entity.state == "open" and pos == "disable") ):
icon_up_status = "enable"
icon_up = get_action_id_ha(ha_type=entityType, action="open", device_class=device_class)
icon_up = get_action_icon(ha_type=entityType, action="open", device_class=device_class)
if bits & 0b00000010: # SUPPORT_CLOSE
if ( pos != 0 and not (entity.state == "closed" and pos == "disable") ):
icon_down_status = "enable"
icon_down = get_action_id_ha(ha_type=entityType, action="close", device_class=device_class)
icon_down = get_action_icon(ha_type=entityType, action="close", device_class=device_class)
#if bits & 0b00000100: # SUPPORT_SET_POSITION
if bits & 0b00001000: # SUPPORT_STOP
icon_stop = get_action_id_ha(ha_type=entityType, action="stop", device_class=device_class)
icon_stop = get_action_icon(ha_type=entityType, action="stop", device_class=device_class)
icon_stop_status = "enable"
# tilt supported