Fix for empty detail page after change on previous page (#662)

* Update mqtt.py

Allow force sending duplicate messages

* Update pages.py

Allow forcing sending MQTT message when the detail page is initially generated

* Update controller.py

Set is_open_detail to True when generate_xx_detail_page is called from detail_open
This commit is contained in:
kayvenm
2023-01-03 08:14:06 -05:00
committed by GitHub
parent 9f8c83dfad
commit cfd74ce87f
3 changed files with 24 additions and 22 deletions

View File

@@ -180,17 +180,18 @@ class LuiController(object):
def detail_open(self, detail_type, entity_id):
if detail_type == "popupShutter":
self._pages_gen.generate_shutter_detail_page(entity_id)
self._pages_gen.generate_shutter_detail_page(entity_id, True)
if detail_type == "popupLight":
self._pages_gen.generate_light_detail_page(entity_id)
self._pages_gen.generate_light_detail_page(entity_id, True)
if detail_type == "popupFan":
self._pages_gen.generate_fan_detail_page(entity_id)
self._pages_gen.generate_fan_detail_page(entity_id, True)
if detail_type == "popupThermo":
self._pages_gen.generate_thermo_detail_page(entity_id)
self._pages_gen.generate_thermo_detail_page(entity_id, True)
if detail_type == "popupInSel":
self._pages_gen.generate_input_select_detail_page(entity_id)
self._pages_gen.generate_input_select_detail_page(entity_id, True)
if detail_type == "popupTimer":
self._pages_gen.generate_timer_detail_page(entity_id)
self._pages_gen.generate_timer_detail_page(entity_id, True)
def button_press(self, entity_id, button_type, value):
apis.ha_api.log(f"Button Press Event; entity_id: {entity_id}; button_type: {button_type}; value: {value} ")
# internal buttons
@@ -425,4 +426,4 @@ class LuiController(object):
if button_type == "timer-pause":
apis.ha_api.get_entity(entity_id).call_service("pause")
if button_type == "timer-finish":
apis.ha_api.get_entity(entity_id).call_service("finish")
apis.ha_api.get_entity(entity_id).call_service("finish")

View File

@@ -64,11 +64,12 @@ class LuiMqttSender(object):
self._topic_send = topic_send
self._prev_msg = ""
def send_mqtt_msg(self, msg, topic=None):
if self._prev_msg == msg:
def send_mqtt_msg(self, msg, topic=None, force=False):
if not force and self._prev_msg == msg:
self._ha_api.log(f"Dropping identical consecutive message: {msg}")
return
self._prev_msg = msg
if topic is None:
topic = self._topic_send
self._ha_api.log(f"Sending MQTT Message: {msg}")
apis.mqtt_api.mqtt_publish(topic, msg)
apis.mqtt_api.mqtt_publish(topic, msg)

View File

@@ -709,7 +709,7 @@ class LuiPagesGen(object):
self.generate_power_page(navigation, card.title, card.entities)
return
def generate_light_detail_page(self, entity_id):
def generate_light_detail_page(self, entity_id, is_open_detail=False):
entity = apis.ha_api.get_entity(entity_id)
switch_val = 1 if entity.state == "on" else 0
icon_color = self.get_entity_color(entity)
@@ -744,9 +744,9 @@ class LuiPagesGen(object):
color_translation = "Color"
brightness_translation = get_translation(self._locale, "frontend.ui.card.light.brightness")
color_temp_translation = get_translation(self._locale, "frontend.ui.card.light.color_temperature")
self._send_mqtt_msg(f"entityUpdateDetail~{entity_id}~~{icon_color}~{switch_val}~{brightness}~{color_temp}~{color}~{color_translation}~{color_temp_translation}~{brightness_translation}~{effect_supported}")
self._send_mqtt_msg(f"entityUpdateDetail~{entity_id}~~{icon_color}~{switch_val}~{brightness}~{color_temp}~{color}~{color_translation}~{color_temp_translation}~{brightness_translation}~{effect_supported}", force=is_open_detail)
def generate_shutter_detail_page(self, entity_id):
def generate_shutter_detail_page(self, entity_id, is_open_detail=False):
entity = apis.ha_api.get_entity(entity_id)
entityType = "cover"
device_class = entity.attributes.get("device_class", "window")
@@ -812,9 +812,9 @@ class LuiPagesGen(object):
if(tilt_pos == 100):
iconTiltLeftStatus = "disable"
self._send_mqtt_msg(f"entityUpdateDetail~{entity_id}~{pos}~{pos_translation}: {pos_status}~{pos_translation}~{icon_id}~{icon_up}~{icon_stop}~{icon_down}~{icon_up_status}~{icon_stop_status}~{icon_down_status}~{textTilt}~{iconTiltLeft}~{iconTiltStop}~{iconTiltRight}~{iconTiltLeftStatus}~{iconTiltStopStatus}~{iconTiltRightStatus}~{tilt_pos}")
self._send_mqtt_msg(f"entityUpdateDetail~{entity_id}~{pos}~{pos_translation}: {pos_status}~{pos_translation}~{icon_id}~{icon_up}~{icon_stop}~{icon_down}~{icon_up_status}~{icon_stop_status}~{icon_down_status}~{textTilt}~{iconTiltLeft}~{iconTiltStop}~{iconTiltRight}~{iconTiltLeftStatus}~{iconTiltStopStatus}~{iconTiltRightStatus}~{tilt_pos}", force=is_open_detail)
def generate_fan_detail_page(self, entity_id):
def generate_fan_detail_page(self, entity_id, is_open_detail=False):
entity = apis.ha_api.get_entity(entity_id)
switch_val = 1 if entity.state == "on" else 0
icon_color = self.get_entity_color(entity)
@@ -838,9 +838,9 @@ class LuiPagesGen(object):
else:
preset_modes = ""
self._send_mqtt_msg(f"entityUpdateDetail~{entity_id}~~{icon_color}~{switch_val}~{speed}~{speedMax}~{speed_translation}~{preset_mode}~{preset_modes}")
self._send_mqtt_msg(f"entityUpdateDetail~{entity_id}~~{icon_color}~{switch_val}~{speed}~{speedMax}~{speed_translation}~{preset_mode}~{preset_modes}", force=is_open_detail)
def generate_thermo_detail_page(self, entity_id):
def generate_thermo_detail_page(self, entity_id, is_open_detail=False):
icon_id = get_icon_ha(entity_id)
entity = apis.ha_api.get_entity(entity_id)
icon_color = self.get_entity_color(entity, ha_type="climate")
@@ -862,9 +862,9 @@ class LuiPagesGen(object):
if modes:
modes_out += f"{heading}~{mode}~{cur_mode}~{modes_res}~"
self._send_mqtt_msg(f"entityUpdateDetail~{entity_id}~{icon_id}~{icon_color}~{modes_out}")
self._send_mqtt_msg(f"entityUpdateDetail~{entity_id}~{icon_id}~{icon_color}~{modes_out}", force=is_open_detail)
def generate_input_select_detail_page(self, entity_id):
def generate_input_select_detail_page(self, entity_id, is_open_detail=False):
entity = apis.ha_api.get_entity(entity_id)
options = []
icon_color = 0
@@ -879,9 +879,9 @@ class LuiPagesGen(object):
state = entity.attributes.get("source", "")
options = entity.attributes.get("source_list", [])
options = "?".join(options)
self._send_mqtt_msg(f"entityUpdateDetail2~{entity_id}~~{icon_color}~{ha_type}~{state}~{options}~")
self._send_mqtt_msg(f"entityUpdateDetail2~{entity_id}~~{icon_color}~{ha_type}~{state}~{options}~", force=is_open_detail)
def generate_timer_detail_page(self, entity_id):
def generate_timer_detail_page(self, entity_id, is_open_detail=False):
if isinstance(entity_id, dict):
entity_id = entity_id["entity_id"]
entity = apis.ha_api.get_entity(entity_id)
@@ -915,7 +915,7 @@ class LuiPagesGen(object):
label1 = get_translation(self._locale, "frontend.ui.card.timer.actions.pause")
label2 = get_translation(self._locale, "frontend.ui.card.timer.actions.cancel")
label3 = get_translation(self._locale, "frontend.ui.card.timer.actions.finish")
self._send_mqtt_msg(f"entityUpdateDetail~{entity_id}~~{icon_color}~{entity_id}~{min_remaining}~{sec_remaining}~{editable}~{action1}~{action2}~{action3}~{label1}~{label2}~{label3}")
self._send_mqtt_msg(f"entityUpdateDetail~{entity_id}~~{icon_color}~{entity_id}~{min_remaining}~{sec_remaining}~{editable}~{action1}~{action2}~{action3}~{label1}~{label2}~{label3}", force=is_open_detail)
def send_message_page(self, ident, heading, msg, b1, b2):
self._send_mqtt_msg(f"pageType~popupNotify")