mirror of
https://github.com/joBr99/nspanel-lovelace-ui.git
synced 2025-12-21 06:54:24 +01:00
.
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
# https://developers.home-assistant.io/docs/add-ons/configuration#add-on-config
|
# https://developers.home-assistant.io/docs/add-ons/configuration#add-on-config
|
||||||
name: NSPanel Lovelace UI Addon
|
name: NSPanel Lovelace UI Addon
|
||||||
version: "4.7.55"
|
version: "4.7.56"
|
||||||
slug: nspanel-lovelace-ui
|
slug: nspanel-lovelace-ui
|
||||||
description: NSPanel Lovelace UI Addon
|
description: NSPanel Lovelace UI Addon
|
||||||
services:
|
services:
|
||||||
|
|||||||
@@ -625,7 +625,7 @@ def card_factory(locale, settings, panel):
|
|||||||
return "NotImplemented", None
|
return "NotImplemented", None
|
||||||
return card.iid, card
|
return card.iid, card
|
||||||
|
|
||||||
def detail_open(locale, detail_type, ha_entity_id, entity_id, sendTopic=None):
|
def detail_open(locale, detail_type, ha_entity_id, entity_id, sendTopic=None, options_list=None):
|
||||||
data = libs.home_assistant.get_entity_data(ha_entity_id)
|
data = libs.home_assistant.get_entity_data(ha_entity_id)
|
||||||
if data:
|
if data:
|
||||||
state = data.get("state")
|
state = data.get("state")
|
||||||
@@ -763,8 +763,25 @@ def detail_open(locale, detail_type, ha_entity_id, entity_id, sendTopic=None):
|
|||||||
return f'{entity_id}~~{icon_color}~{switch_val}~{speed}~{speedMax}~{speed_translation}~{preset_mode}~{preset_modes}'
|
return f'{entity_id}~~{icon_color}~{switch_val}~{speed}~{speedMax}~{speed_translation}~{preset_mode}~{preset_modes}'
|
||||||
case 'popupThermo' | 'climate':
|
case 'popupThermo' | 'climate':
|
||||||
print(f"not implemented {detail_type}")
|
print(f"not implemented {detail_type}")
|
||||||
case 'popupInSel' | 'input_select' | 'select':
|
case 'popupInSel' | 'input_select' | 'select' | 'media_player':
|
||||||
print(f"not implemented {detail_type}")
|
options = []
|
||||||
|
icon_color = 0
|
||||||
|
icon_color = ha_colors.get_entity_color(detail_type, state, attributes)
|
||||||
|
state = state
|
||||||
|
if detail_type in ["input_select", "select"]:
|
||||||
|
options = attributes.get("options", [])
|
||||||
|
elif detail_type == "light":
|
||||||
|
if options_list is not None:
|
||||||
|
options = options_list
|
||||||
|
else:
|
||||||
|
options = attributes.get("effect_list", [])[:15]
|
||||||
|
elif detail_type == "media_player":
|
||||||
|
state = attributes.get("source", "")
|
||||||
|
options = attributes.get("source_list", [])
|
||||||
|
options = "?".join(options)
|
||||||
|
return f"{entity_id}~~{icon_color}~{detail_type}~{state}~{options}~"
|
||||||
|
|
||||||
|
|
||||||
case 'popupTimer' | 'timer':
|
case 'popupTimer' | 'timer':
|
||||||
icon_color = ha_colors.get_entity_color("timer", state, attributes)
|
icon_color = ha_colors.get_entity_color("timer", state, attributes)
|
||||||
if state in ["idle", "paused"]:
|
if state in ["idle", "paused"]:
|
||||||
|
|||||||
@@ -42,5 +42,8 @@ def dimmode(topic, dimValue, dimValueNormal, backgroundColor, fontColor, featExp
|
|||||||
def entityUpdateDetail(topic, data):
|
def entityUpdateDetail(topic, data):
|
||||||
custom_send(topic, f"entityUpdateDetail~{data}")
|
custom_send(topic, f"entityUpdateDetail~{data}")
|
||||||
|
|
||||||
|
def entityUpdateDetail2(topic, data):
|
||||||
|
custom_send(topic, f"entityUpdateDetail2~{data}")
|
||||||
|
|
||||||
def statusUpdate(topic, data):
|
def statusUpdate(topic, data):
|
||||||
custom_send(topic, f"statusUpdate~{data}")
|
custom_send(topic, f"statusUpdate~{data}")
|
||||||
@@ -132,10 +132,17 @@ class LovelaceUIPanel:
|
|||||||
if etype in ['light', 'timer', 'cover', 'input_select', 'select', 'fan']:
|
if etype in ['light', 'timer', 'cover', 'input_select', 'select', 'fan']:
|
||||||
# figure out iid of entity
|
# figure out iid of entity
|
||||||
entity_id_iid = ""
|
entity_id_iid = ""
|
||||||
for e in self.current_card.get_iid_entities():
|
for e in self.current_card.entities:
|
||||||
if entity_id == e[1]:
|
if entity_id == e.entity_id:
|
||||||
entity_id_iid = f'iid.{e[0]}'
|
entity_id_iid = e.iid
|
||||||
libs.panel_cmd.entityUpdateDetail(self.sendTopic, detail_open(self.settings["locale"], etype, entity_id, entity_id_iid, sendTopic=self.sendTopic))
|
|
||||||
|
effectList = None
|
||||||
|
if etype=="light":
|
||||||
|
effectList = e.config.get("effectList")
|
||||||
|
if etype in ['input_select', 'media_player']:
|
||||||
|
libs.panel_cmd.entityUpdateDetail2(self.sendTopic, detail_open(self.settings["locale"], etype, entity_id, entity_id_iid, sendTopic=self.sendTopic, options_list=effectList))
|
||||||
|
else:
|
||||||
|
libs.panel_cmd.entityUpdateDetail(self.sendTopic, detail_open(self.settings["locale"], etype, entity_id, entity_id_iid, sendTopic=self.sendTopic, options_list=effectList))
|
||||||
|
|
||||||
involved_entities = ha_control.calculate_dim_values(
|
involved_entities = ha_control.calculate_dim_values(
|
||||||
self.settings.get("sleepTracking"),
|
self.settings.get("sleepTracking"),
|
||||||
@@ -150,6 +157,8 @@ class LovelaceUIPanel:
|
|||||||
|
|
||||||
|
|
||||||
def render_current_page(self, switchPages=False, requested=False):
|
def render_current_page(self, switchPages=False, requested=False):
|
||||||
|
if not self.current_card:
|
||||||
|
return
|
||||||
if switchPages:
|
if switchPages:
|
||||||
libs.panel_cmd.page_type(self.sendTopic, self.current_card.type)
|
libs.panel_cmd.page_type(self.sendTopic, self.current_card.type)
|
||||||
if requested:
|
if requested:
|
||||||
@@ -180,6 +189,13 @@ class LovelaceUIPanel:
|
|||||||
featExperimentalSliders = self.settings.get("featExperimentalSliders", 0)
|
featExperimentalSliders = self.settings.get("featExperimentalSliders", 0)
|
||||||
libs.panel_cmd.dimmode(self.sendTopic, dimValue, dimValueNormal, backgroundColor, fontColor, featExperimentalSliders)
|
libs.panel_cmd.dimmode(self.sendTopic, dimValue, dimValueNormal, backgroundColor, fontColor, featExperimentalSliders)
|
||||||
|
|
||||||
|
def get_default_card(self, card_iid):
|
||||||
|
defaultCard = self.settings.get("defaultCard")
|
||||||
|
if defaultCard:
|
||||||
|
card = self.searchCard(card_iid)
|
||||||
|
if card:
|
||||||
|
return card
|
||||||
|
return list(self.cards.values())[0]
|
||||||
|
|
||||||
def customrecv_event_callback(self, msg):
|
def customrecv_event_callback(self, msg):
|
||||||
logging.debug("Recv Message from NsPanel (%s): %s", self.name, msg)
|
logging.debug("Recv Message from NsPanel (%s): %s", self.name, msg)
|
||||||
@@ -217,8 +233,7 @@ class LovelaceUIPanel:
|
|||||||
|
|
||||||
# in case privious_cards is empty add a default card
|
# in case privious_cards is empty add a default card
|
||||||
if len(self.privious_cards) == 0:
|
if len(self.privious_cards) == 0:
|
||||||
self.privious_cards.append(
|
self.privious_cards.append(self.get_default_card)
|
||||||
list(self.cards.values())[0]) # TODO: Impelement default card config
|
|
||||||
self.current_card = self.privious_cards.pop()
|
self.current_card = self.privious_cards.pop()
|
||||||
self.render_current_page(switchPages=True)
|
self.render_current_page(switchPages=True)
|
||||||
return
|
return
|
||||||
@@ -236,8 +251,9 @@ class LovelaceUIPanel:
|
|||||||
case 'navigate':
|
case 'navigate':
|
||||||
card_iid = entity_id.split(".")[1]
|
card_iid = entity_id.split(".")[1]
|
||||||
if card_iid == "UP":
|
if card_iid == "UP":
|
||||||
|
if len(self.privious_cards) == 0:
|
||||||
|
self.privious_cards.append(self.get_default_card)
|
||||||
self.current_card = self.privious_cards.pop()
|
self.current_card = self.privious_cards.pop()
|
||||||
# TODO Handle privious_cards empty with default card
|
|
||||||
self.render_current_page(switchPages=True)
|
self.render_current_page(switchPages=True)
|
||||||
else:
|
else:
|
||||||
self.privious_cards.append(self.current_card)
|
self.privious_cards.append(self.current_card)
|
||||||
@@ -260,6 +276,15 @@ class LovelaceUIPanel:
|
|||||||
# replace iid with real entity id
|
# replace iid with real entity id
|
||||||
if entity_id.startswith("iid."):
|
if entity_id.startswith("iid."):
|
||||||
iid = entity_id.split(".")[1]
|
iid = entity_id.split(".")[1]
|
||||||
if iid in self.entity_iids:
|
for e in self.current_card.entities:
|
||||||
entity_id = self.entity_iids[iid]
|
if e.iid == iid:
|
||||||
|
entity_id = e.entity_id
|
||||||
|
effectList = None
|
||||||
|
if entity_id.startswith("light"):
|
||||||
|
effectList = e.config.get("effectList")
|
||||||
|
if entity_id.split(".")[0] in ['input_select', 'media_player']:
|
||||||
|
libs.panel_cmd.entityUpdateDetail2(self.sendTopic, detail_open(self.settings["locale"], msg[2], entity_id, msg[3], sendTopic=self.sendTopic, options_list=effectList))
|
||||||
|
else:
|
||||||
libs.panel_cmd.entityUpdateDetail(self.sendTopic, detail_open(self.settings["locale"], msg[2], entity_id, msg[3], sendTopic=self.sendTopic))
|
libs.panel_cmd.entityUpdateDetail(self.sendTopic, detail_open(self.settings["locale"], msg[2], entity_id, msg[3], sendTopic=self.sendTopic))
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user