diff --git a/advanced/esphome/nspanel_esphome_core.yaml b/advanced/esphome/nspanel_esphome_core.yaml index 36c6bcf..b298fc6 100644 --- a/advanced/esphome/nspanel_esphome_core.yaml +++ b/advanced/esphome/nspanel_esphome_core.yaml @@ -294,10 +294,9 @@ api: } } - ##### Service for transferring global settings from the blueprint to ESPHome ##### - - service: global_settings + ##### Service for transferring relay's settings from the blueprint to ESPHome ##### + - service: relay_settings variables: - blueprint_version: string relay1_local_control: bool relay1_icon: string relay1_icon_color: int @@ -306,6 +305,22 @@ api: relay2_icon: string relay2_icon_color: int relay2_fallback: bool + then: + - script.execute: + id: relay_settings + relay1_local_control: !lambda "return relay1_local_control;" + relay1_icon: !lambda "return relay1_icon;" + relay1_icon_color: !lambda "return relay1_icon_color;" + relay1_fallback: !lambda "return relay1_fallback;" + relay2_local_control: !lambda "return relay2_local_control;" + relay2_icon: !lambda "return relay2_icon;" + relay2_icon_color: !lambda "return relay2_icon_color;" + relay2_fallback: !lambda "return relay2_fallback;" + + ##### Service for transferring global settings from the blueprint to ESPHome ##### + - service: global_settings + variables: + blueprint_version: string embedded_climate: bool embedded_climate_friendly_name: string embedded_indoor_temperature: bool @@ -317,14 +332,6 @@ api: - script.execute: id: global_settings blueprint_version: !lambda "return blueprint_version;" - relay1_local_control: !lambda "return relay1_local_control;" - relay1_icon: !lambda "return relay1_icon;" - relay1_icon_color: !lambda "return relay1_icon_color;" - relay1_fallback: !lambda "return relay1_fallback;" - relay2_local_control: !lambda "return relay2_local_control;" - relay2_icon: !lambda "return relay2_icon;" - relay2_icon_color: !lambda "return relay2_icon_color;" - relay2_fallback: !lambda "return relay2_fallback;" embedded_climate: !lambda "return embedded_climate;" embedded_climate_friendly_name: !lambda "return embedded_climate_friendly_name;" embedded_indoor_temperature: !lambda "return embedded_indoor_temperature;" @@ -1782,14 +1789,6 @@ script: mode: restart parameters: blueprint_version: string - relay1_local_control: bool - relay1_icon: string - relay1_icon_color: int - relay1_fallback: bool - relay2_local_control: bool - relay2_icon: string - relay2_icon_color: int - relay2_fallback: bool embedded_climate: bool embedded_climate_friendly_name: string embedded_indoor_temperature: bool @@ -1805,21 +1804,6 @@ script: id(version_blueprint) = blueprint_version; check_versions->execute(); - // Relays - ESP_LOGV(TAG, "Setup relays"); - relay1_local->publish_state(relay1_local_control); - relay2_local->publish_state(relay2_local_control); - id(relay_1_fallback) = relay1_fallback; - id(relay_2_fallback) = relay2_fallback; - disp1->set_component_font_color("home.icon_top_01", relay1_icon_color); - disp1->set_component_font_color("home.icon_top_02", relay2_icon_color); - disp1->set_component_text_printf("home.icon_top_01", "%s", relay1_icon.c_str()); - disp1->set_component_text_printf("home.icon_top_02", "%s", relay2_icon.c_str()); - id(home_relay1_icon) = relay1_icon.c_str(); - id(home_relay2_icon) = relay2_icon.c_str(); - id(home_relay1_icon_color) = relay1_icon_color; - id(home_relay2_icon_color) = relay2_icon_color; - // Embedded thermostat ESP_LOGV(TAG, "Load embedded thermostat"); id(is_embedded_thermostat) = embedded_climate; @@ -2334,6 +2318,36 @@ script: "\uE5A9"); // mdi:wifi-off } + - id: relay_settings + mode: restart + parameters: + relay1_local_control: bool + relay1_icon: string + relay1_icon_color: int + relay1_fallback: bool + relay2_local_control: bool + relay2_icon: string + relay2_icon_color: int + relay2_fallback: bool + then: + - lambda: |- + static const char *const TAG = "script.relay_settings"; + // Relays + ESP_LOGV(TAG, "Setup relays"); + relay1_local->publish_state(relay1_local_control); + relay2_local->publish_state(relay2_local_control); + id(relay_1_fallback) = relay1_fallback; + id(relay_2_fallback) = relay2_fallback; + disp1->set_component_font_color("home.icon_top_01", relay1_icon_color); + disp1->set_component_font_color("home.icon_top_02", relay2_icon_color); + disp1->set_component_text_printf("home.icon_top_01", "%s", relay1_icon.c_str()); + disp1->set_component_text_printf("home.icon_top_02", "%s", relay2_icon.c_str()); + id(home_relay1_icon) = relay1_icon.c_str(); + id(home_relay2_icon) = relay2_icon.c_str(); + id(home_relay1_icon_color) = relay1_icon_color; + id(home_relay2_icon_color) = relay2_icon_color; + ESP_LOGV(TAG, "Finished"); + - id: service_call_alarm_control_panel mode: restart parameters: @@ -2524,6 +2538,7 @@ script: refresh_datetime->stop(); refresh_relays->stop(); refresh_wifi_icon->stop(); + relay_settings->stop(); service_call_alarm_control_panel->stop(); set_brightness->stop(); set_climate->stop(); diff --git a/nspanel_blueprint.yaml b/nspanel_blueprint.yaml index 34c5d8d..16341b3 100644 --- a/nspanel_blueprint.yaml +++ b/nspanel_blueprint.yaml @@ -3963,6 +3963,7 @@ variables: page_settings: 'esphome.{{ nspanel_name }}_page_settings' printf: 'esphome.{{ nspanel_name }}_send_command_printf' qrcode: 'esphome.{{ nspanel_name }}_qrcode' + relay_settings: 'esphome.{{ nspanel_name }}_relay_settings' set_button: 'esphome.{{ nspanel_name }}_set_button' set_climate: 'esphome.{{ nspanel_name }}_set_climate' set_component_color: 'esphome.{{ nspanel_name }}_set_component_color' @@ -7063,7 +7064,7 @@ action: {{ entity_state if entity_domain != "alarm_control_panel" - else ( mui.alarm[entity_state | replace("armed_", "") | replace("disarmed", "disarm")] | default(entity_state) if entity_state else None ) + else ( mui[language].alarm[entity_state | replace("armed_", "") | replace("disarmed", "disarm")] | default(entity_state) if entity_state else None ) }} state_is_number: '{{ entity_state_is_number }}' domain: '{{ entity_domain }}' @@ -7081,7 +7082,7 @@ action: }} supported_features: '{{ state_attr(entity_id, "supported_features") | default(None) if entity_id_is_valid else None }}' icon: > - {% set icon_domain = nextion.icon.domain[entity_domain] | default(all_icons.blank) %} + {% set icon_domain = nextion.icon.domain[entity_domain] | default(all_icons.blank) if entity_domain else all_icons.blank %} {% if overlap is defined and overlap.icon is defined and overlap.icon is string and overlap.icon.split(":") | count == 2 %} {{ all_icons[overlap.icon[1]] | default(icon_domain) }} {% elif entity_domain == "climate" %} @@ -7331,9 +7332,8 @@ action: continue_on_error: true - *delay-default - - service: '{{ nextion.command.global_settings }}' + - service: '{{ nextion.command.relay_settings }}' data: - blueprint_version: '{{ blueprint_version }}' relay1_local_control: '{{ hardware.buttons.left.entity == relay01_entity }}' relay1_icon: > {{ @@ -7378,13 +7378,19 @@ action: ((hardware.relays.relay2.icon_color_rgb[2] //(2**3))) }} relay2_fallback: '{{ hardware.relays.relay2.fallback }}' + continue_on_error: true + - *delay-default + + - service: '{{ nextion.command.global_settings }}' + data: + blueprint_version: '{{ blueprint_version }}' embedded_climate: '{{ climate == thermostat_embedded }}' embedded_climate_friendly_name: '{{ (state_attr(climate, "friendly_name") | default("")) if embedded_climate and state_attr(climate, "friendly_name") != None else "" }}' embedded_indoor_temperature: '{{ embedded_indoor_temperature }}' temperature_unit_is_fahrenheit: '{{ state_attr((nspaneltemp if embedded_indoor_temperature else indoor_temperature_sensor), "unit_of_measurement") | default("") in ["°F", "F"]}}' mui_please_confirm: '{{ mui[language].please_confirm }}' - screensaver_time: '{{ screensaver_display_time if screensaver_display_time is bool else false }}' - screensaver_time_color: '{{ screensaver_display_time_font_color if screensaver_display_time_font_color is sequence other [64, 64, 64] }}' + screensaver_time: '{{ screensaver_display_time if screensaver_display_time is boolean else false }}' + screensaver_time_color: '{{ screensaver_display_time_font_color if screensaver_display_time_font_color is sequence else [64, 64, 64] }}' continue_on_error: true - *delay-default