mirror of
https://github.com/joBr99/nspanel-lovelace-ui.git
synced 2025-12-21 23:14:25 +01:00
some cleanup
This commit is contained in:
@@ -14,7 +14,7 @@ class NsPanelLovelaceUIManager(hass.Hass):
|
|||||||
def initialize(self):
|
def initialize(self):
|
||||||
|
|
||||||
data = self.args["config"]
|
data = self.args["config"]
|
||||||
NsPanelLovelaceUI(self, data)
|
LovelaceUIPanel(self, data)
|
||||||
|
|
||||||
class Updater:
|
class Updater:
|
||||||
def __init__(self, nsplui, mode):
|
def __init__(self, nsplui, mode):
|
||||||
@@ -78,7 +78,7 @@ class Updater:
|
|||||||
def update_panel_driver(self):
|
def update_panel_driver(self):
|
||||||
self.nsplui.mqtt.mqtt_publish(self.nsplui.config["panelSendTopic"].replace("CustomSend", "FlashNextion"), self.desired_display_firmware_url)
|
self.nsplui.mqtt.mqtt_publish(self.nsplui.config["panelSendTopic"].replace("CustomSend", "FlashNextion"), self.desired_display_firmware_url)
|
||||||
|
|
||||||
class NsPanelLovelaceUI:
|
class LovelaceUIPanel:
|
||||||
def __init__(self, api, config):
|
def __init__(self, api, config):
|
||||||
self.api = api
|
self.api = api
|
||||||
self.config = config
|
self.config = config
|
||||||
@@ -139,6 +139,72 @@ class NsPanelLovelaceUI:
|
|||||||
# register callbacks
|
# register callbacks
|
||||||
self.register_callbacks()
|
self.register_callbacks()
|
||||||
|
|
||||||
|
def filter_dict_from_item_list(self, items):
|
||||||
|
# remove all dicts from list
|
||||||
|
cleaned_list = []
|
||||||
|
for item in items:
|
||||||
|
# in case item is a dict, grab the item name
|
||||||
|
if type(item) is dict:
|
||||||
|
self.api.log(item)
|
||||||
|
cleaned_list.append(item["item"])
|
||||||
|
else:
|
||||||
|
cleaned_list.append(item)
|
||||||
|
return cleaned_list
|
||||||
|
|
||||||
|
def get_all_configured_items(self):
|
||||||
|
items = []
|
||||||
|
for page in self.config["pages"]:
|
||||||
|
if "item" in page:
|
||||||
|
items.append(page["item"])
|
||||||
|
if "items" in page:
|
||||||
|
items.extend(page["items"])
|
||||||
|
return self.filter_dict_from_item_list(items)
|
||||||
|
|
||||||
|
def check_items(self):
|
||||||
|
items = self.get_all_configured_items()
|
||||||
|
for item in items:
|
||||||
|
if self.api.entity_exists(item) or item == "delete":
|
||||||
|
self.api.log("Found configured item in Home Assistant %s", item, level="DEBUG")
|
||||||
|
else:
|
||||||
|
self.api.error("The following item does not exist in Home Assistant, configuration error: %s", item)
|
||||||
|
|
||||||
|
def register_callbacks(self):
|
||||||
|
items = self.get_all_configured_items()
|
||||||
|
for item in items:
|
||||||
|
self.api.log("Enable state callback for %s", item, level="DEBUG")
|
||||||
|
self.api.handle = self.api.listen_state(self.state_change_callback, entity_id=item, attribute="all")
|
||||||
|
|
||||||
|
def state_change_callback(self, entity, attribute, old, new, kwargs):
|
||||||
|
current_page_config = self.config["pages"][self.current_page_nr]
|
||||||
|
page_type = current_page_config["type"]
|
||||||
|
self.api.log(f"Got state_callback from {entity}", level="DEBUG")
|
||||||
|
|
||||||
|
if page_type in ["cardEntities", "cardGrid"]:
|
||||||
|
items = current_page_config["items"]
|
||||||
|
items_filtered = self.filter_dict_from_item_list(items)
|
||||||
|
if entity in items_filtered:
|
||||||
|
self.api.log(f"State change on current page for {entity}", level="DEBUG")
|
||||||
|
# send update of the page
|
||||||
|
self.generate_entities_page(items)
|
||||||
|
# send detail pages in case they are open
|
||||||
|
if(entity.startswith("cover")):
|
||||||
|
self.generate_detail_page("popupShutter", entity)
|
||||||
|
if(entity.startswith("light")):
|
||||||
|
self.generate_detail_page("popupLight", entity)
|
||||||
|
return
|
||||||
|
|
||||||
|
if page_type in ["cardThermo", "cardMedia"]:
|
||||||
|
if entity == current_page_config["item"]:
|
||||||
|
self.api.log(f"State change on current page for {entity}", level="DEBUG")
|
||||||
|
# send update of the whole page
|
||||||
|
if page_type == "cardThermo":
|
||||||
|
self.generate_thermo_page(entity)
|
||||||
|
return
|
||||||
|
if page_type == "cardMedia":
|
||||||
|
self.generate_media_page(entity)
|
||||||
|
return
|
||||||
|
return
|
||||||
|
|
||||||
def send_mqtt_msg(self,msg):
|
def send_mqtt_msg(self,msg):
|
||||||
self.api.log("Send Message to Tasmota: %s", msg) #, level="DEBUG"
|
self.api.log("Send Message to Tasmota: %s", msg) #, level="DEBUG"
|
||||||
self.mqtt.mqtt_publish(self.config["panelSendTopic"], msg)
|
self.mqtt.mqtt_publish(self.config["panelSendTopic"], msg)
|
||||||
@@ -273,7 +339,6 @@ class NsPanelLovelaceUI:
|
|||||||
'windy-variant': 'weather-windy-variant'
|
'windy-variant': 'weather-windy-variant'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
i1 = get_icon_id(weathericons[we.attributes.forecast[0]['condition']])
|
i1 = get_icon_id(weathericons[we.attributes.forecast[0]['condition']])
|
||||||
u1 = we.attributes.forecast[0]['temperature']
|
u1 = we.attributes.forecast[0]['temperature']
|
||||||
i2 = get_icon_id(weathericons[we.attributes.forecast[1]['condition']])
|
i2 = get_icon_id(weathericons[we.attributes.forecast[1]['condition']])
|
||||||
@@ -323,7 +388,7 @@ class NsPanelLovelaceUI:
|
|||||||
if btype == "button":
|
if btype == "button":
|
||||||
if entity_id.startswith('scene'):
|
if entity_id.startswith('scene'):
|
||||||
self.api.get_entity(entity_id).call_service("turn_on")
|
self.api.get_entity(entity_id).call_service("turn_on")
|
||||||
if entity_id.startswith('light') or entity_id.startswith('switch'):
|
elif entity_id.startswith('light') or entity_id.startswith('switch'):
|
||||||
self.api.get_entity(entity_id).call_service("toggle")
|
self.api.get_entity(entity_id).call_service("toggle")
|
||||||
else:
|
else:
|
||||||
self.api.get_entity(entity_id).call_service("press")
|
self.api.get_entity(entity_id).call_service("press")
|
||||||
@@ -367,121 +432,29 @@ class NsPanelLovelaceUI:
|
|||||||
pos = pos/100
|
pos = pos/100
|
||||||
self.api.get_entity(entity_id).call_service("volume_set", volume_level=pos)
|
self.api.get_entity(entity_id).call_service("volume_set", volume_level=pos)
|
||||||
|
|
||||||
def filter_dict_from_item_list(self, items):
|
|
||||||
# remove all dicts from list
|
|
||||||
cleaned_list = []
|
|
||||||
for item in items:
|
|
||||||
# in case item is a dict, grab the key and replace it
|
|
||||||
if type(item) is dict:
|
|
||||||
cleaned_list.append(next(iter(item)))
|
|
||||||
else:
|
|
||||||
cleaned_list.append(item)
|
|
||||||
return cleaned_list
|
|
||||||
|
|
||||||
def get_all_configured_items(self, pages):
|
|
||||||
items = []
|
|
||||||
for page in pages:
|
|
||||||
if "item" in page:
|
|
||||||
items.append(page["item"])
|
|
||||||
if "items" in page:
|
|
||||||
items.extend(page["items"])
|
|
||||||
return self.filter_dict_from_item_list(items)
|
|
||||||
|
|
||||||
def check_items(self):
|
|
||||||
items = self.get_all_configured_items(self.config["pages"])
|
|
||||||
|
|
||||||
for item in items:
|
|
||||||
# in case item is a dict, grab the key and use it as item name
|
|
||||||
if type(item) is dict:
|
|
||||||
item = next(iter(item))
|
|
||||||
|
|
||||||
if self.api.entity_exists(item) or item == "delete":
|
|
||||||
self.api.log("Found configured item in Home Assistant %s", item, level="DEBUG")
|
|
||||||
else:
|
|
||||||
self.api.error("The following item does not exist in Home Assistant, configuration error: %s", item)
|
|
||||||
|
|
||||||
def register_callbacks(self):
|
|
||||||
items = self.get_all_configured_items(self.config["pages"])
|
|
||||||
for item in items:
|
|
||||||
self.api.log("Enable state callback for %s", item, level="DEBUG")
|
|
||||||
self.api.handle = self.api.listen_state(self.state_change_callback, entity_id=item, attribute="all")
|
|
||||||
|
|
||||||
def state_change_callback(self, entity, attribute, old, new, kwargs):
|
|
||||||
current_page_config = self.config["pages"][self.current_page_nr]
|
|
||||||
|
|
||||||
page_type = current_page_config["type"]
|
|
||||||
|
|
||||||
self.api.log(f"Got state_callback from {entity}", level="DEBUG")
|
|
||||||
|
|
||||||
if page_type in ["cardEntities", "cardGrid"]:
|
|
||||||
items = current_page_config["items"]
|
|
||||||
items_filtered = self.filter_dict_from_item_list(items)
|
|
||||||
if entity in items_filtered:
|
|
||||||
self.api.log(f"State change on current page for {entity}", level="DEBUG")
|
|
||||||
# send update of the page
|
|
||||||
command = self.generate_entities_page(items)
|
|
||||||
self.send_mqtt_msg(command)
|
|
||||||
# send detail pages in case they are open
|
|
||||||
if(entity.startswith("cover")):
|
|
||||||
self.generate_detail_page("popupShutter", entity)
|
|
||||||
if(entity.startswith("light")):
|
|
||||||
self.generate_detail_page("popupLight", entity)
|
|
||||||
|
|
||||||
return
|
|
||||||
|
|
||||||
if page_type == "cardThermo" or page_type == "cardMedia":
|
|
||||||
if entity == current_page_config["item"]:
|
|
||||||
self.api.log(f"State change on current page for {entity}", level="DEBUG")
|
|
||||||
# send update of the whole page
|
|
||||||
if page_type == "cardThermo":
|
|
||||||
self.send_mqtt_msg(self.generate_thermo_page(entity))
|
|
||||||
return
|
|
||||||
if page_type == "cardMedia":
|
|
||||||
self.send_mqtt_msg(self.generate_media_page(entity))
|
|
||||||
return
|
|
||||||
return
|
|
||||||
|
|
||||||
def generate_page(self, page_number):
|
def generate_page(self, page_number):
|
||||||
# get type of current page
|
# get type of page
|
||||||
page_type = self.config["pages"][self.current_page_nr]["type"]
|
page_type = self.config["pages"][self.current_page_nr]["type"]
|
||||||
self.api.log("Generating page commands for page %i with type %s", self.current_page_nr, page_type, level="DEBUG")
|
self.api.log("Generating page commands for page %i with type %s", self.current_page_nr, page_type, level="DEBUG")
|
||||||
if page_type == "cardEntities":
|
|
||||||
# Send page type
|
|
||||||
self.send_mqtt_msg(f"pageType,{page_type}")
|
|
||||||
# Set Heading of Page
|
|
||||||
self.send_mqtt_msg(f"entityUpdHeading,{self.config['pages'][self.current_page_nr]['heading']}")
|
|
||||||
|
|
||||||
command = self.generate_entities_page(self.config["pages"][self.current_page_nr]["items"])
|
# Send page type
|
||||||
self.send_mqtt_msg(command)
|
self.send_mqtt_msg(f"pageType,{page_type}")
|
||||||
|
|
||||||
if page_type == "cardGrid":
|
if page_type in ["cardEntities", "cardGrid"]:
|
||||||
# Send page type
|
self.generate_entities_page(self.config["pages"][self.current_page_nr]["items"])
|
||||||
self.send_mqtt_msg(f"pageType,{page_type}")
|
|
||||||
# Set Heading of Page
|
|
||||||
self.send_mqtt_msg(f"entityUpdHeading,{self.config['pages'][self.current_page_nr]['heading']}")
|
|
||||||
|
|
||||||
command = self.generate_entities_page(self.config["pages"][self.current_page_nr]["items"])
|
|
||||||
self.send_mqtt_msg(command)
|
|
||||||
|
|
||||||
if page_type == "cardThermo":
|
if page_type == "cardThermo":
|
||||||
# Send page type
|
self.generate_thermo_page(self.config["pages"][self.current_page_nr]["item"])
|
||||||
self.send_mqtt_msg(f"pageType,{page_type}")
|
|
||||||
command = self.generate_thermo_page(self.config["pages"][self.current_page_nr]["item"])
|
|
||||||
self.send_mqtt_msg(command)
|
|
||||||
|
|
||||||
if page_type == "cardMedia":
|
if page_type == "cardMedia":
|
||||||
# Send page type
|
self.generate_media_page(self.config["pages"][self.current_page_nr]["item"])
|
||||||
self.send_mqtt_msg("pageType,{0}".format(page_type))
|
|
||||||
command = self.generate_media_page(self.config["pages"][self.current_page_nr]["item"])
|
|
||||||
self.send_mqtt_msg(command)
|
|
||||||
|
|
||||||
def generate_entities_item(self, item):
|
def generate_entities_item(self, item):
|
||||||
|
|
||||||
icon = None
|
icon = None
|
||||||
if type(item) is dict:
|
if type(item) is dict:
|
||||||
item = next(iter(item.items()))
|
icon = item["icon"]
|
||||||
icon = item[1]
|
item = item["item"]
|
||||||
item = item[0]
|
|
||||||
|
|
||||||
# type of the item is the string before the "." in the item name
|
# type of the item is the string before the "." in the item name
|
||||||
item_type = item.split(".")[0]
|
item_type = item.split(".")[0]
|
||||||
@@ -490,7 +463,9 @@ class NsPanelLovelaceUI:
|
|||||||
|
|
||||||
if item_type == "delete":
|
if item_type == "delete":
|
||||||
return f",{item_type},,,,,"
|
return f",{item_type},,,,,"
|
||||||
|
|
||||||
|
icon_id = get_icon_id('alert-circle-outline')
|
||||||
|
|
||||||
if not self.api.entity_exists(item):
|
if not self.api.entity_exists(item):
|
||||||
return f",text,{item},{get_icon_id('alert-circle-outline')},17299,Not found check, apps.yaml"
|
return f",text,{item},{get_icon_id('alert-circle-outline')},17299,Not found check, apps.yaml"
|
||||||
|
|
||||||
@@ -547,103 +522,99 @@ class NsPanelLovelaceUI:
|
|||||||
return f",button,{item},{icon_id},17299,{name},ACTIVATE"
|
return f",button,{item},{icon_id},17299,{name},ACTIVATE"
|
||||||
|
|
||||||
def generate_entities_page(self, items):
|
def generate_entities_page(self, items):
|
||||||
|
# Set Heading of Page
|
||||||
|
self.send_mqtt_msg(f"entityUpdHeading,{self.config['pages'][self.current_page_nr]['heading']}")
|
||||||
# Get items and construct cmd string
|
# Get items and construct cmd string
|
||||||
command = "entityUpd"
|
command = "entityUpd"
|
||||||
for item in items:
|
for item in items:
|
||||||
command += self.generate_entities_item(item)
|
command += self.generate_entities_item(item)
|
||||||
return command
|
self.send_mqtt_msg(command)
|
||||||
|
|
||||||
def get_safe_ha_attribute(self, eattr, attr, default):
|
def get_safe_ha_attribute(self, eattr, attr, default):
|
||||||
return eattr[attr] if attr in eattr else default
|
return eattr[attr] if attr in eattr else default
|
||||||
|
|
||||||
def generate_thermo_page(self, item):
|
def generate_thermo_page(self, item):
|
||||||
|
|
||||||
if not self.api.entity_exists(item):
|
if not self.api.entity_exists(item):
|
||||||
return 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"
|
||||||
|
|
||||||
entity = self.api.get_entity(item)
|
|
||||||
heading = entity.attributes.friendly_name
|
|
||||||
current_temp = int(self.get_safe_ha_attribute(entity.attributes, "current_temperature", 0)*10)
|
|
||||||
dest_temp = int(self.get_safe_ha_attribute(entity.attributes, "temperature", 0)*10)
|
|
||||||
status = self.get_safe_ha_attribute(entity.attributes, "hvac_action", "")
|
|
||||||
min_temp = int(self.get_safe_ha_attribute(entity.attributes, "min_temp", 0)*10)
|
|
||||||
max_temp = int(self.get_safe_ha_attribute(entity.attributes, "max_temp", 0)*10)
|
|
||||||
step_temp = int(self.get_safe_ha_attribute(entity.attributes, "target_temp_step", 0.5)*10)
|
|
||||||
|
|
||||||
icon_res = ""
|
|
||||||
hvac_modes = self.get_safe_ha_attribute(entity.attributes, "hvac_modes", [])
|
|
||||||
for mode in hvac_modes:
|
|
||||||
icon_id = get_icon_id('alert-circle-outline')
|
|
||||||
color_on = 64512
|
|
||||||
if mode == "auto":
|
|
||||||
icon_id = get_icon_id("calendar-sync")
|
|
||||||
color_on = 1024
|
|
||||||
if mode == "heat":
|
|
||||||
icon_id = get_icon_id("fire")
|
|
||||||
color_on = 64512
|
|
||||||
if mode == "off":
|
|
||||||
icon_id = get_icon_id("power")
|
|
||||||
color_on = 35921
|
|
||||||
|
|
||||||
if mode == "cool":
|
|
||||||
icon_id = get_icon_id("snowflake")
|
|
||||||
color_on = 11487
|
|
||||||
if mode == "dry":
|
|
||||||
icon_id = get_icon_id("water-percent")
|
|
||||||
color_on = 60897
|
|
||||||
if mode == "fan_only":
|
|
||||||
icon_id = get_icon_id("fan")
|
|
||||||
color_on = 35921
|
|
||||||
|
|
||||||
state = 0
|
|
||||||
if(mode == entity.state):
|
|
||||||
state = 1
|
|
||||||
|
|
||||||
icon_res += f",{icon_id},{color_on},{state},{mode}"
|
|
||||||
|
|
||||||
len_hvac_modes = len(hvac_modes)
|
|
||||||
if len_hvac_modes%2 == 0:
|
|
||||||
# even
|
|
||||||
padding_len = int((4-len_hvac_modes)/2)
|
|
||||||
icon_res = ","*4*padding_len + icon_res + ","*4*padding_len
|
|
||||||
# use last 4 icons
|
|
||||||
icon_res = ","*4*5 + icon_res
|
|
||||||
else:
|
else:
|
||||||
# uneven
|
entity = self.api.get_entity(item)
|
||||||
padding_len = int((5-len_hvac_modes)/2)
|
heading = entity.attributes.friendly_name
|
||||||
icon_res = ","*4*padding_len + icon_res + ","*4*padding_len
|
current_temp = int(self.get_safe_ha_attribute(entity.attributes, "current_temperature", 0)*10)
|
||||||
# use first 5 icons
|
dest_temp = int(self.get_safe_ha_attribute(entity.attributes, "temperature", 0)*10)
|
||||||
icon_res = icon_res + ","*4*4
|
status = self.get_safe_ha_attribute(entity.attributes, "hvac_action", "")
|
||||||
|
min_temp = int(self.get_safe_ha_attribute(entity.attributes, "min_temp", 0)*10)
|
||||||
return f"entityUpd,{item},{heading},{current_temp},{dest_temp},{status},{min_temp},{max_temp},{step_temp}{icon_res}"
|
max_temp = int(self.get_safe_ha_attribute(entity.attributes, "max_temp", 0)*10)
|
||||||
|
step_temp = int(self.get_safe_ha_attribute(entity.attributes, "target_temp_step", 0.5)*10)
|
||||||
|
|
||||||
|
icon_res = ""
|
||||||
|
hvac_modes = self.get_safe_ha_attribute(entity.attributes, "hvac_modes", [])
|
||||||
|
for mode in hvac_modes:
|
||||||
|
icon_id = get_icon_id('alert-circle-outline')
|
||||||
|
color_on = 64512
|
||||||
|
if mode == "auto":
|
||||||
|
icon_id = get_icon_id("calendar-sync")
|
||||||
|
color_on = 1024
|
||||||
|
if mode == "heat":
|
||||||
|
icon_id = get_icon_id("fire")
|
||||||
|
color_on = 64512
|
||||||
|
if mode == "off":
|
||||||
|
icon_id = get_icon_id("power")
|
||||||
|
color_on = 35921
|
||||||
|
if mode == "cool":
|
||||||
|
icon_id = get_icon_id("snowflake")
|
||||||
|
color_on = 11487
|
||||||
|
if mode == "dry":
|
||||||
|
icon_id = get_icon_id("water-percent")
|
||||||
|
color_on = 60897
|
||||||
|
if mode == "fan_only":
|
||||||
|
icon_id = get_icon_id("fan")
|
||||||
|
color_on = 35921
|
||||||
|
state = 0
|
||||||
|
if(mode == entity.state):
|
||||||
|
state = 1
|
||||||
|
icon_res += f",{icon_id},{color_on},{state},{mode}"
|
||||||
|
|
||||||
|
len_hvac_modes = len(hvac_modes)
|
||||||
|
if len_hvac_modes%2 == 0:
|
||||||
|
# even
|
||||||
|
padding_len = int((4-len_hvac_modes)/2)
|
||||||
|
icon_res = ","*4*padding_len + icon_res + ","*4*padding_len
|
||||||
|
# use last 4 icons
|
||||||
|
icon_res = ","*4*5 + icon_res
|
||||||
|
else:
|
||||||
|
# uneven
|
||||||
|
padding_len = int((5-len_hvac_modes)/2)
|
||||||
|
icon_res = ","*4*padding_len + icon_res + ","*4*padding_len
|
||||||
|
# use first 5 icons
|
||||||
|
icon_res = icon_res + ","*4*4
|
||||||
|
command = f"entityUpd,{item},{heading},{current_temp},{dest_temp},{status},{min_temp},{max_temp},{step_temp}{icon_res}"
|
||||||
|
self.send_mqtt_msg(command)
|
||||||
|
|
||||||
def generate_media_page(self, item):
|
def generate_media_page(self, item):
|
||||||
|
|
||||||
if not self.api.entity_exists(item):
|
if not self.api.entity_exists(item):
|
||||||
return f"entityUpd,|{item}|Not found|{get_icon_id('alert-circle-outline')}|Please check your|apps.yaml in AppDaemon|50|11"
|
command = f"entityUpd,|{item}|Not found|{get_icon_id('alert-circle-outline')}|Please check your|apps.yaml in AppDaemon|50|11"
|
||||||
|
|
||||||
entity = self.api.get_entity(item)
|
|
||||||
heading = entity.attributes.friendly_name
|
|
||||||
icon = 0
|
|
||||||
title = ""
|
|
||||||
author = ""
|
|
||||||
volume = 0
|
|
||||||
if "media_content_type" in entity.attributes:
|
|
||||||
if entity.attributes.media_content_type == "music":
|
|
||||||
icon = get_icon_id("music")
|
|
||||||
if "media_title" in entity.attributes:
|
|
||||||
title = entity.attributes.media_title
|
|
||||||
if "media_artist" in entity.attributes:
|
|
||||||
author = entity.attributes.media_artist
|
|
||||||
if "volume_level" in entity.attributes:
|
|
||||||
volume = int(entity.attributes.volume_level*100)
|
|
||||||
|
|
||||||
if entity.state == "playing":
|
|
||||||
iconplaypause = get_icon_id("pause")
|
|
||||||
else:
|
else:
|
||||||
iconplaypause = get_icon_id("play")
|
entity = self.api.get_entity(item)
|
||||||
|
heading = entity.attributes.friendly_name
|
||||||
|
icon = 0
|
||||||
|
title = ""
|
||||||
|
author = ""
|
||||||
|
volume = 0
|
||||||
|
if "media_content_type" in entity.attributes:
|
||||||
|
if entity.attributes.media_content_type == "music":
|
||||||
|
icon = get_icon_id("music")
|
||||||
|
if "media_title" in entity.attributes:
|
||||||
|
title = entity.attributes.media_title
|
||||||
|
if "media_artist" in entity.attributes:
|
||||||
|
author = entity.attributes.media_artist
|
||||||
|
if "volume_level" in entity.attributes:
|
||||||
|
volume = int(entity.attributes.volume_level*100)
|
||||||
|
iconplaypause = get_icon_id("pause") if entity.state == "playing" else get_icon_id("play")
|
||||||
|
|
||||||
return f"entityUpd,|{item}|{heading}|{icon}|{title}|{author}|{volume}|{iconplaypause}"
|
command = f"entityUpd,|{item}|{heading}|{icon}|{title}|{author}|{volume}|{iconplaypause}"
|
||||||
|
|
||||||
|
self.send_mqtt_msg(command)
|
||||||
|
|
||||||
def getEntityColor(self, entity):
|
def getEntityColor(self, entity):
|
||||||
attr = entity.attributes
|
attr = entity.attributes
|
||||||
|
|||||||
Reference in New Issue
Block a user