From a34f51e6b695f74f4107c21d50d60c101a2ff008 Mon Sep 17 00:00:00 2001 From: Edward Firmo <94725493+edwardtfn@users.noreply.github.com> Date: Wed, 26 Apr 2023 22:05:15 +0200 Subject: [PATCH] Introduces `show_while_loading` mode (#731) --- nspanel_blueprint.yaml | 132 +++++++++++++++++++---------------------- 1 file changed, 61 insertions(+), 71 deletions(-) diff --git a/nspanel_blueprint.yaml b/nspanel_blueprint.yaml index 6f1a825..9c96c15 100644 --- a/nspanel_blueprint.yaml +++ b/nspanel_blueprint.yaml @@ -3292,6 +3292,18 @@ blueprint: default: [] selector: text: {} + show_while_loading: + name: Show pages while loading? + description: > + *SYSTEM settings* + + *When this is enable, the pages will be shown earlier, but some information might not be visible from the begining and will be shown when available.* + *When disabled (default), the pages will be shown when all the data is loaded and ready to be displayed.* + + **This may be useful when your pages takes too long to load and can help you identifying the elements slowing down the page construction.** + default: false + selector: + boolean: #sync_value_ha: # name: Synchronization of all values (Optional) # description: > @@ -4779,6 +4791,8 @@ action: - alias: Home page conditions: '{{ nspanel_event.page == nextion.pages.home }}' sequence: &refresh_page_home + - variables: + show_while_loading: !input 'show_while_loading' - service: '{{ nextion.commands.set_settings_entity }}' data: entity: '{{ nspanel_event }}' @@ -4848,6 +4862,21 @@ action: message: '{{ meridiem }}' continue_on_error: true + ###### Display page while other elements are still loading ##### + - if: '{{ show_while_loading }}' + then: + - *delay-default + - service: '{{ nextion.commands.show_all }}' + continue_on_error: true + + ##### Weather Icon Home Page ##### + - *delay-default + - &refresh-page_home-weather_pic + service: '{{ nextion.commands.printf }}' + data: + cmd: home.weather.pic={{ nextion.pics.weather[states(weather_entity) | default("unavailable") if weather_entity is string else "unavailable"] | default(None) }} + continue_on_error: true + - &refresh-page_home-outdoor_temp if: '{{ true }}' then: @@ -4934,14 +4963,6 @@ action: message: '{{ (indoor_temp_state | round(1) ~ temperature_units) if is_number(indoor_temp_state) else (mui[language].unavailable if indoor_temp_state in ["unavailable", "unknown", "", None] else indoor_temp_state) }}' continue_on_error: true - ##### Weather Icon Home Page ##### - - *delay-default - - &refresh-page_home-weather_pic - service: '{{ nextion.commands.printf }}' - data: - cmd: home.weather.pic={{ nextion.pics.weather[states(weather_entity) | default("unavailable") if weather_entity is string else "unavailable"] | default(None) }} - continue_on_error: true - ##### NSPanel Buttons ##### - variables: left_button_state: '{{ states(page_home.hardware.buttons.left.entity) | default("unavailable") if page_home.hardware.buttons.left.entity is string else "unavailable" }}' @@ -5221,10 +5242,12 @@ action: continue_on_error: true ##### Set notify icon ##### - - variables: - notification_unread_state: '{{ states(notification_unread) | default("unavailable") if notification_unread is string else "unavailable" }}' - - if: '{{ notification_unread_state in ["on", "off"] }}' + - &refresh-page_home-notifications_icon + if: '{{ true }}' then: + - variables: + notification_unread_state: '{{ states(notification_unread) | default("unavailable") if notification_unread is string else "unavailable" }}' + - condition: '{{ notification_unread_state in ["on", "off"] }}' - variables: notification_text_state: '{{ states(notification_text) | default(None) if notification_text is string else None }}' set_button04_icon: > @@ -5336,10 +5359,12 @@ action: message: '{{ all_icons.blank }}' continue_on_error: true - ###### SHOW All component when page loading done ##### - - *delay-default - - service: '{{ nextion.commands.show_all }}' - continue_on_error: true + ##### Show page if not visible ##### + - if: '{{ not show_while_loading }}' + then: + - *delay-default + - service: '{{ nextion.commands.show_all }}' + continue_on_error: true ## BUTTON PAGES 01 - 04 ## - alias: Button pages @@ -5597,6 +5622,15 @@ action: message: '{{ button_pages_labels[button_page_index].label }}' continue_on_error: true + ###### Display page while other elements are still loading ##### + - variables: + show_while_loading: !input 'show_while_loading' + - if: '{{ show_while_loading }}' + then: + - *delay-default + - service: '{{ nextion.commands.show_all }}' + continue_on_error: true + ##### NSPanel build Button page ##### - repeat: for_each: '{{ button_pages_buttons[first_button:last_button] }}' @@ -5736,10 +5770,17 @@ action: btn_label: '{{ btn_label }}' btn_bri_txt: '{{ btn_bri_txt }}' continue_on_error: true - ###### SHOW All component when page loading done ##### - - *delay-default - - service: '{{ nextion.commands.show_all }}' - continue_on_error: true + ###### SHOW All component when page loading done ##### + - if: '{{ not show_while_loading }}' + then: + - *delay-default + - service: '{{ nextion.commands.show_all }}' + continue_on_error: true + else: + ###### Show empty page ##### + - *delay-default + - service: '{{ nextion.commands.show_all }}' + continue_on_error: true ## PAGE LIGHTSETTINGS ## - alias: Light settings page @@ -7088,58 +7129,7 @@ action: - '{{ nspanel_event.page == nextion.pages.home }}' - '{{ trigger.event.data.new_state.state not in ["unavailable", "unknown", "", None] }}' sequence: - - alias: 'Set notifiy pic' - variables: - notification_text_state: > - {{ - states(notification_text) | default("unavailable") - if notification_text is string - else "unavailable" - }} - notification_text_available: '{{ notification_text_state not in ["unavailable", "unknown", "", None] }}' - notification_unread_state: > - {{ - states(notification_unread) | default("unavailable") - if notification_unread is string - else "unavailable" - }} - set_button04_icon: > - {{ - ( - all_icons[page_home.buttons[3].icon.split(":")[1]] | default(all_icons.unknown) - if page_home.buttons[3].icon.split(":") | count > 0 - else page_home.buttons[3].icon - ) - if notification_unread_state in ["on", "off"] and notification_text_available - else all_icons.blank - }} - set_button04_icon_font: > - {{ - ( - page_home.buttons[3].color_rgb[notification_unread_state] - if is_number(page_home.buttons[3].color_rgb[notification_unread_state]) - else - ((page_home.buttons[3].color_rgb[notification_unread_state][0] //(2**3)) *(2**11))+ - ((page_home.buttons[3].color_rgb[notification_unread_state][1] //(2**2)) *(2**5))+ - (page_home.buttons[3].color_rgb[notification_unread_state][2] //(2**3))) - if notification_unread_state in ["on", "off"] and notification_text_available - else nextion.colors.grey_light - }} - ##### SET ICON Font - Notify ##### - - *delay-default - - service: '{{ nextion.commands.text_printf }}' - data: - component: home.button04_icon - message: '{{ set_button04_icon }}' - continue_on_error: true - - ##### SET ICON Font Color - Notify ##### - - *delay-default - - service: '{{ nextion.commands.font_color }}' - data: - component: home.button04_icon - message: '{{ set_button04_icon_font }}' - continue_on_error: true + - *refresh-page_home-notifications_icon ##### HW BUTTON - press ##### - alias: Hardware button - Press