From 083936b1a5230b8e1d4d38181de9be016401049f Mon Sep 17 00:00:00 2001 From: Edward Firmo <94725493+edwardtfn@users.noreply.github.com> Date: Thu, 1 Feb 2024 14:06:13 +0100 Subject: [PATCH] Deprecate "Show while loading" --- ReleaseNotes.md | 4 +- advanced/esphome/nspanel_esphome_core.yaml | 488 +++++++++--------- advanced/hmi/nspanel_eu.HMI | Bin 15033415 -> 15035221 bytes advanced/hmi/nspanel_eu_code/buttonpage01.txt | 1 - advanced/hmi/nspanel_eu_code/buttonpage02.txt | 1 - advanced/hmi/nspanel_eu_code/buttonpage03.txt | 1 - advanced/hmi/nspanel_eu_code/buttonpage04.txt | 1 - advanced/hmi/nspanel_eu_code/home.txt | 8 +- advanced/hmi/nspanel_us.HMI | Bin 14820802 -> 14820802 bytes advanced/hmi/nspanel_us_code/buttonpage01.txt | 1 - advanced/hmi/nspanel_us_code/buttonpage02.txt | 1 - advanced/hmi/nspanel_us_code/buttonpage03.txt | 1 - advanced/hmi/nspanel_us_code/buttonpage04.txt | 1 - advanced/hmi/nspanel_us_code/home.txt | 8 +- advanced/hmi/nspanel_us_land.HMI | Bin 14681892 -> 14681804 bytes .../hmi/nspanel_us_land_code/buttonpage01.txt | 1 - .../hmi/nspanel_us_land_code/buttonpage02.txt | 1 - .../hmi/nspanel_us_land_code/buttonpage03.txt | 1 - .../hmi/nspanel_us_land_code/buttonpage04.txt | 1 - advanced/hmi/nspanel_us_land_code/home.txt | 8 +- dev/ui/eu/pics/NSPanel - EU.pptx | Bin 139632 -> 141380 bytes nspanel_blueprint.yaml | 38 -- nspanel_eu.tft | Bin 7351708 -> 7351628 bytes nspanel_us.tft | Bin 7421540 -> 7421460 bytes nspanel_us_land.tft | Bin 7351884 -> 7351804 bytes 25 files changed, 272 insertions(+), 294 deletions(-) diff --git a/ReleaseNotes.md b/ReleaseNotes.md index a1fd719..7f6ac2c 100644 --- a/ReleaseNotes.md +++ b/ReleaseNotes.md @@ -433,9 +433,11 @@ In this release, we've focused on enhancing the user interface and providing cru Key updates include refined control mechanisms for climate and cover entities, improved functionality for hardware buttons, and the introduction of support for ESPHome's `friendly_name`. -**Breaking Changes:** This update brings a change in handling custom entities. +**Breaking Changes:** +1. **Custom entities naming changed**. If your setup includes custom entities using `${device_name}` in their names, please modify these entities to omit `${device_name}`. ESPHome will now automatically append the `friendly_name` or `device_name` from your substitutions, simplifying the naming process. +2. **Show while loading** input is deprecated and all pages will show components while loading as default. Additionally, we have updated our documentation to include comprehensive guidelines on memory requirements for ESPHome, ensuring users are well-informed for successful system setup and operation. diff --git a/advanced/esphome/nspanel_esphome_core.yaml b/advanced/esphome/nspanel_esphome_core.yaml index 852063a..80698d2 100644 --- a/advanced/esphome/nspanel_esphome_core.yaml +++ b/advanced/esphome/nspanel_esphome_core.yaml @@ -150,7 +150,9 @@ api: variables: cmd: string then: - - lambda: 'disp1->send_command_printf("%s", cmd.c_str());' + - lambda: |- + if (!id(is_uploading_tft)) + disp1->send_command_printf("%s", cmd.c_str()); ##### Service to send a command "text_printf" directly to the display ##### - service: send_command_text_printf @@ -158,7 +160,9 @@ api: component: string message: string then: - - lambda: 'disp1->set_component_text_printf(component.c_str(), "%s", message.c_str());' + - lambda: |- + if (!id(is_uploading_tft)) + disp1->set_component_text_printf(component.c_str(), "%s", message.c_str()); ##### Service to send a command "component_value (Dualstate Button)" directly to the display ##### - service: send_command_value @@ -167,21 +171,26 @@ api: val: int then: - lambda: |- - disp1->set_component_value(component.c_str(), val); + if (!id(is_uploading_tft)) + disp1->set_component_value(component.c_str(), val); ##### Service to send a command "hide componente" directly to the display ##### - service: send_command_hide variables: component: string then: - - lambda: 'disp1->hide_component(component.c_str());' + - lambda: |- + if (!id(is_uploading_tft)) + disp1->hide_component(component.c_str()); ##### Service to send a command "show componente" directly to the display ##### - service: send_command_show variables: component: string then: - - lambda: 'disp1->show_component(component.c_str());' + - lambda: |- + if (!id(is_uploading_tft)) + disp1->show_component(component.c_str()); ##### Service to send a command "font color" directly to the display ##### - service: set_component_color @@ -189,7 +198,9 @@ api: component: string foreground: int[] then: - - lambda: set_component_color->execute(component, foreground); + - lambda: |- + if (!id(is_uploading_tft)) + set_component_color->execute(component, foreground); ##### Service to play a rtttl tones ##### # Example tones : https://codebender.cc/sketch:109888#RTTTL%20Songs.ino @@ -213,7 +224,7 @@ api: then: - lambda: |- // Is page Alarm visible? - if (current_page->state == "alarm") // To do: This page constructor should be moved to Blueprint + if (current_page->state == "alarm" and not id(is_uploading_tft)) // To do: This page constructor should be moved to Blueprint { // Update alarm page detailed_entity->publish_state(entity); @@ -347,19 +358,21 @@ api: message: string then: - lambda: |- - ESP_LOGV("service.notification_show", "Starting"); + if (!id(is_uploading_tft)) { + ESP_LOGV("service.notification_show", "Starting"); - disp1->goto_page("notification"); - disp1->set_component_text_printf("notification.notifi_label", "%s", label.c_str()); + disp1->goto_page("notification"); + disp1->set_component_text_printf("notification.notifi_label", "%s", label.c_str()); - display_wrapped_text->execute("notification.notifi_text01", message.c_str(), display_mode->state == 2 ? 23 : 32); + display_wrapped_text->execute("notification.notifi_text01", message.c_str(), display_mode->state == 2 ? 23 : 32); - notification_label->publish_state(label.c_str()); - notification_text->publish_state(message.c_str()); - timer_reset_all->execute(current_page->state.c_str()); - refresh_notification->execute(); - notification_unread->turn_on(); - if (notification_sound->state) buzzer->play("two short:d=4,o=5,b=100:16e6,16e6"); + notification_label->publish_state(label.c_str()); + notification_text->publish_state(message.c_str()); + timer_reset_all->execute(current_page->state.c_str()); + refresh_notification->execute(); + notification_unread->turn_on(); + if (notification_sound->state) buzzer->play("two short:d=4,o=5,b=100:16e6,16e6"); + } ##### Service to clear the notification ##### - service: notification_clear @@ -393,9 +406,11 @@ api: show: bool then: - lambda: |- - disp1->set_component_text_printf("qrcode.qrcode_label", "%s", title.c_str()); - disp1->set_component_text_printf("qrcode.qrcode_value", "%s", qrcode.c_str()); - if (show) disp1->goto_page("qrcode"); + if (!id(is_uploading_tft)) { + disp1->set_component_text_printf("qrcode.qrcode_label", "%s", title.c_str()); + disp1->set_component_text_printf("qrcode.qrcode_value", "%s", qrcode.c_str()); + if (show) disp1->goto_page("qrcode"); + } #### Service to set climate state #### - service: set_climate @@ -412,20 +427,24 @@ api: embedded_climate: bool entity: string then: - - lambda: |- - if (current_page->state == "climate") detailed_entity->publish_state(entity); - - script.execute: - id: set_climate - current_temp: !lambda "return current_temp;" - supported_features: !lambda "return supported_features;" - target_temp: !lambda "return target_temp;" - target_temp_high: !lambda "return target_temp_high;" - target_temp_low: !lambda "return target_temp_low;" - temp_step: !lambda "return temp_step;" - total_steps: !lambda "return total_steps;" - temp_offset: !lambda "return temp_offset;" - climate_icon: !lambda "return climate_icon;" - embedded_climate: !lambda "return embedded_climate;" + - if: + condition: + lambda: 'return not id(is_uploading_tft);' + then: + - lambda: |- + if (current_page->state == "climate") detailed_entity->publish_state(entity); + - script.execute: + id: set_climate + current_temp: !lambda "return current_temp;" + supported_features: !lambda "return supported_features;" + target_temp: !lambda "return target_temp;" + target_temp_high: !lambda "return target_temp_high;" + target_temp_low: !lambda "return target_temp_low;" + temp_step: !lambda "return temp_step;" + total_steps: !lambda "return total_steps;" + temp_offset: !lambda "return temp_offset;" + climate_icon: !lambda "return climate_icon;" + embedded_climate: !lambda "return embedded_climate;" #### Service to set the buttons #### - service: set_button @@ -440,11 +459,11 @@ api: label: string then: - lambda: |- - static const char *const TAG = "service.set_button"; - if (page == current_page->state) { + if (page == current_page->state and not id(is_uploading_tft)) { std::string btnicon = id.c_str() + std::string("icon"); std::string btntext = id.c_str() + std::string("text"); std::string btnbri = id.c_str() + std::string("bri"); + std::string btnpic = id.c_str() + std::string("pic"); uint8_t bg_pic = state ? 47 : 46; uint16_t txt_color = state ? 10597 : 65535; disp1->send_command_printf("%spic.picc=%u", id.c_str(), bg_pic); @@ -461,8 +480,13 @@ api: disp1->set_component_text_printf(btnbri.c_str(), "%s", bri.c_str()); else disp1->set_component_text_printf(btnbri.c_str(), " "); + disp1->show_component(btnpic.c_str()); + disp1->show_component(btnicon.c_str()); + disp1->show_component(btntext.c_str()); + disp1->show_component(btnbri.c_str()); + disp1->show_component(id.c_str()); } else { - ESP_LOGW(TAG, "Skipping button `%s.%s` as page has changed to %s.", page.c_str(), id.c_str(), current_page->state.c_str()); + ESP_LOGW("service.set_button", "Skipping button `%s.%s` update.", page.c_str(), id.c_str()); } ##### SERVICE TO WAKE UP THE DISPLAY ##### @@ -471,12 +495,14 @@ api: reset_timer: bool then: - lambda: |- - if (current_page->state == "screensaver") disp1->goto_page(wakeup_page_name->state.c_str()); - if (reset_timer) - timer_reset_all->execute(wakeup_page_name->state.c_str()); - else { - timer_sleep->execute(wakeup_page_name->state.c_str(), int(timeout_sleep->state)); - timer_dim->execute(wakeup_page_name->state.c_str(), int(timeout_dim->state)); + if (not id(is_uploading_tft)) { + if (current_page->state == "screensaver") disp1->goto_page(wakeup_page_name->state.c_str()); + if (reset_timer) + timer_reset_all->execute(wakeup_page_name->state.c_str()); + else { + timer_sleep->execute(wakeup_page_name->state.c_str(), int(timeout_sleep->state)); + timer_dim->execute(wakeup_page_name->state.c_str(), int(timeout_dim->state)); + } } #### Service to set the entities #### @@ -489,14 +515,16 @@ api: ent_value_xcen: string then: - lambda: |- - std::string enticon = ent_id.c_str() + std::string("_pic"); - std::string entlabel = ent_id.c_str() + std::string("_label"); - std::string entxcen = ent_id.c_str() + std::string(".xcen=") + ent_value_xcen.c_str(); - disp1->set_component_text_printf(enticon.c_str(), "%s", ent_icon.c_str()); - if (strcmp(ent_icon.c_str(), "0") != 0) disp1->set_component_text_printf(enticon.c_str(), "%s", ent_icon.c_str()); - disp1->set_component_text_printf(entlabel.c_str(), "%s", ent_label.c_str()); - disp1->set_component_text_printf(ent_id.c_str(), "%s", ent_value.c_str()); - if (strcmp(ent_value_xcen.c_str(), "0") != 0) disp1->send_command_printf("%s", entxcen.c_str()); + if (not id(is_uploading_tft)) { + std::string enticon = ent_id.c_str() + std::string("_pic"); + std::string entlabel = ent_id.c_str() + std::string("_label"); + std::string entxcen = ent_id.c_str() + std::string(".xcen=") + ent_value_xcen.c_str(); + disp1->set_component_text_printf(enticon.c_str(), "%s", ent_icon.c_str()); + if (strcmp(ent_icon.c_str(), "0") != 0) disp1->set_component_text_printf(enticon.c_str(), "%s", ent_icon.c_str()); + disp1->set_component_text_printf(entlabel.c_str(), "%s", ent_label.c_str()); + disp1->set_component_text_printf(ent_id.c_str(), "%s", ent_value.c_str()); + if (strcmp(ent_value_xcen.c_str(), "0") != 0) disp1->send_command_printf("%s", entxcen.c_str()); + } #### Service to populate the page Home ##### - service: page_home @@ -518,73 +546,75 @@ api: entities_pages_icon_color: int[] then: - lambda: |- - static const char *const TAG = "service.page_home"; - ESP_LOGV(TAG, "date_color: %" PRIi32, date_color); - ESP_LOGV(TAG, "time_format: %s", time_format.c_str()); - ESP_LOGV(TAG, "time_color: %" PRIi32, time_color); - ESP_LOGV(TAG, "meridiem: %i", meridiem.size()); - ESP_LOGV(TAG, "chip_font_size: %" PRIi32, chip_font_size); - ESP_LOGV(TAG, "custom_buttons_font_size: %" PRIi32, custom_buttons_font_size); - ESP_LOGV(TAG, "notification_icon: %s", notification_icon.c_str()); - ESP_LOGV(TAG, "notification_icon_color_normal: %i", notification_icon_color_normal.size()); - ESP_LOGV(TAG, "notification_icon_color_unread: %i", notification_icon_color_unread.size()); - ESP_LOGV(TAG, "qrcode: %s", qrcode ? "True" : "False"); - ESP_LOGV(TAG, "qrcode_icon: %s", qrcode_icon.c_str()); - ESP_LOGV(TAG, "qrcode_icon_color: %i", qrcode_icon_color.size()); - ESP_LOGV(TAG, "entities_pages: %s", entities_pages ? "True" : "False"); - ESP_LOGV(TAG, "entities_pages_icon: %s", entities_pages_icon.c_str()); - ESP_LOGV(TAG, "entities_pages_icon_color: %i", entities_pages_icon_color.size()); + if (not id(is_uploading_tft)) { + static const char *const TAG = "service.page_home"; + ESP_LOGV(TAG, "date_color: %" PRIi32, date_color); + ESP_LOGV(TAG, "time_format: %s", time_format.c_str()); + ESP_LOGV(TAG, "time_color: %" PRIi32, time_color); + ESP_LOGV(TAG, "meridiem: %i", meridiem.size()); + ESP_LOGV(TAG, "chip_font_size: %" PRIi32, chip_font_size); + ESP_LOGV(TAG, "custom_buttons_font_size: %" PRIi32, custom_buttons_font_size); + ESP_LOGV(TAG, "notification_icon: %s", notification_icon.c_str()); + ESP_LOGV(TAG, "notification_icon_color_normal: %i", notification_icon_color_normal.size()); + ESP_LOGV(TAG, "notification_icon_color_unread: %i", notification_icon_color_unread.size()); + ESP_LOGV(TAG, "qrcode: %s", qrcode ? "True" : "False"); + ESP_LOGV(TAG, "qrcode_icon: %s", qrcode_icon.c_str()); + ESP_LOGV(TAG, "qrcode_icon_color: %i", qrcode_icon_color.size()); + ESP_LOGV(TAG, "entities_pages: %s", entities_pages ? "True" : "False"); + ESP_LOGV(TAG, "entities_pages_icon: %s", entities_pages_icon.c_str()); + ESP_LOGV(TAG, "entities_pages_icon_color: %i", entities_pages_icon_color.size()); - // Localization - ESP_LOGV(TAG, "Load localization"); - id(mui_time_format) = time_format; - id(mui_meridiem) = meridiem; + // Localization + ESP_LOGV(TAG, "Load localization"); + id(mui_time_format) = time_format; + id(mui_meridiem) = meridiem; - // Date/Time colors - ESP_LOGV(TAG, "Load date/time colors"); - disp1->set_component_font_color("home.date", date_color); - disp1->set_component_font_color("home.time", time_color); - id(home_date_color) = date_color; - id(home_time_color) = time_color; + // Date/Time colors + ESP_LOGV(TAG, "Load date/time colors"); + disp1->set_component_font_color("home.date", date_color); + disp1->set_component_font_color("home.time", time_color); + id(home_date_color) = date_color; + id(home_time_color) = time_color; - // Chips icon size - ESP_LOGV(TAG, "Chips size"); - for (int i = 1; i <= 10; ++i) { - disp1->send_command_printf("home.icon_top_%02d.font=%" PRIu32, i, chip_font_size); + // Chips icon size + ESP_LOGV(TAG, "Chips size"); + for (int i = 1; i <= 10; ++i) { + disp1->send_command_printf("home.icon_top_%02d.font=%" PRIu32, i, chip_font_size); + } + disp1->send_command_printf("home.wifi_icon.font=%" PRIu32, chip_font_size); + id(home_chip_font_size) = chip_font_size; + + // Custom buttons icon size + ESP_LOGV(TAG, "Custom buttons sizes"); + id(home_custom_buttons_font_size) = custom_buttons_font_size; + for (int i = 1; i <= 7; ++i) { + disp1->send_command_printf("home.button%02d.font=%i", i, id(home_custom_buttons_font_size)); + } + disp1->send_command_printf("home.bt_notific.font=%i", id(home_custom_buttons_font_size)); + disp1->send_command_printf("home.bt_qrcode.font=%i", id(home_custom_buttons_font_size)); + disp1->send_command_printf("home.bt_entities.font=%i", id(home_custom_buttons_font_size)); + + // Notification button + ESP_LOGV(TAG, "Set Notification button"); + disp1->send_command_printf("is_notification=%i", (notification_text->state.empty() and notification_label->state.empty()) ? 0 : 1); + disp1->set_component_text_printf("home.bt_notific", "%s", notification_icon.c_str()); + set_component_color->execute("home.bt_notific", notification_unread->state ? notification_icon_color_unread : notification_icon_color_normal); + id(home_notify_icon_color_normal) = notification_icon_color_normal; + id(home_notify_icon_color_unread) = notification_icon_color_unread; + + // QRCode button + ESP_LOGV(TAG, "Set QRCode button"); + disp1->send_command_printf("is_qrcode=%i", qrcode ? 1 : 0); + disp1->set_component_text_printf("home.bt_qrcode", "%s", qrcode_icon.c_str()); + set_component_color->execute("home.bt_qrcode", qrcode_icon_color); + + // Entities pages button + ESP_LOGV(TAG, "Set Entities button"); + disp1->send_command_printf("is_entities=%i", entities_pages ? 1 : 0); + disp1->set_component_text_printf("home.bt_entities", "%s", entities_pages_icon.c_str()); + //set_component_color->execute("home.bt_entities", entities_pages_icon_color); + set_component_color->execute("home.bt_entities", entities_pages_icon_color); } - disp1->send_command_printf("home.wifi_icon.font=%" PRIu32, chip_font_size); - id(home_chip_font_size) = chip_font_size; - - // Custom buttons icon size - ESP_LOGV(TAG, "Custom buttons sizes"); - id(home_custom_buttons_font_size) = custom_buttons_font_size; - for (int i = 1; i <= 7; ++i) { - disp1->send_command_printf("home.button%02d.font=%i", i, id(home_custom_buttons_font_size)); - } - disp1->send_command_printf("home.bt_notific.font=%i", id(home_custom_buttons_font_size)); - disp1->send_command_printf("home.bt_qrcode.font=%i", id(home_custom_buttons_font_size)); - disp1->send_command_printf("home.bt_entities.font=%i", id(home_custom_buttons_font_size)); - - // Notification button - ESP_LOGV(TAG, "Set Notification button"); - disp1->send_command_printf("is_notification=%i", (notification_text->state.empty() and notification_label->state.empty()) ? 0 : 1); - disp1->set_component_text_printf("home.bt_notific", "%s", notification_icon.c_str()); - set_component_color->execute("home.bt_notific", notification_unread->state ? notification_icon_color_unread : notification_icon_color_normal); - id(home_notify_icon_color_normal) = notification_icon_color_normal; - id(home_notify_icon_color_unread) = notification_icon_color_unread; - - // QRCode button - ESP_LOGV(TAG, "Set QRCode button"); - disp1->send_command_printf("is_qrcode=%i", qrcode ? 1 : 0); - disp1->set_component_text_printf("home.bt_qrcode", "%s", qrcode_icon.c_str()); - set_component_color->execute("home.bt_qrcode", qrcode_icon_color); - - // Entities pages button - ESP_LOGV(TAG, "Set Entities button"); - disp1->send_command_printf("is_entities=%i", entities_pages ? 1 : 0); - disp1->set_component_text_printf("home.bt_entities", "%s", entities_pages_icon.c_str()); - //set_component_color->execute("home.bt_entities", entities_pages_icon_color); - set_component_color->execute("home.bt_entities", entities_pages_icon_color); #### Service to populate the page Settings ##### - service: page_settings @@ -595,10 +625,12 @@ api: dim: string then: - lambda: |- - if (not reboot.empty()) disp1->set_component_text_printf("settings.lbl_reboot", " %s", reboot.c_str()); - disp1->set_component_text_printf("settings.lbl_brightness", " %s", brightness.c_str()); - display_wrapped_text->execute("settings.lbl_bright", bright.c_str(), display_mode->state == 2 ? 25 : 10); - display_wrapped_text->execute("settings.lbl_dim", dim.c_str(), display_mode->state == 2 ? 25 : 10); + if (not id(is_uploading_tft)) { + if (not reboot.empty()) disp1->set_component_text_printf("settings.lbl_reboot", " %s", reboot.c_str()); + disp1->set_component_text_printf("settings.lbl_brightness", " %s", brightness.c_str()); + display_wrapped_text->execute("settings.lbl_bright", bright.c_str(), display_mode->state == 2 ? 25 : 10); + display_wrapped_text->execute("settings.lbl_dim", dim.c_str(), display_mode->state == 2 ? 25 : 10); + } #### Service to populate the media player page ##### - service: media_player @@ -616,106 +648,85 @@ api: supported_features: int then: - lambda: |- - if (current_page->state == "media_player") - { - detailed_entity->publish_state(entity); - disp1->set_component_text_printf("page_label", "%s", friendly_name.c_str()); - display_wrapped_text->execute("track", media_title.c_str(), display_mode->state == 2 ? 16 : 27); - display_wrapped_text->execute("artist", media_artist.c_str(), display_mode->state == 2 ? 26 : 40); + if (current_page->state == "media_player" and not id(is_uploading_tft)) { + detailed_entity->publish_state(entity); + disp1->set_component_text_printf("page_label", "%s", friendly_name.c_str()); + display_wrapped_text->execute("track", media_title.c_str(), display_mode->state == 2 ? 16 : 27); + display_wrapped_text->execute("artist", media_artist.c_str(), display_mode->state == 2 ? 26 : 40); - // on/off button - if (supported_features & 128 and state == "off") //TURN_ON - { - disp1->set_component_foreground_color("bt_on_off", 65535); - disp1->show_component("bt_on_off"); - } - else if (supported_features & 256 and state != "off") //TURN_OFF - { - disp1->set_component_foreground_color("bt_on_off", 10597); - disp1->show_component("bt_on_off"); - } - else disp1->hide_component("bt_on_off"); + // on/off button + if (supported_features & 128 and state == "off") { //TURN_ON + disp1->set_component_foreground_color("bt_on_off", 65535); + disp1->show_component("bt_on_off"); + } else if (supported_features & 256 and state != "off") { //TURN_OFF + disp1->set_component_foreground_color("bt_on_off", 10597); + disp1->show_component("bt_on_off"); + } else disp1->hide_component("bt_on_off"); - // play/pause button - if ((supported_features & 512 or supported_features & 16384) and state != "playing" and state != "off") //PLAY_MEDIA+PLAY - { - disp1->set_component_text_printf("bt_play_pause", "%s", "\uE409"); // mdi:play - disp1->show_component("bt_play_pause"); - } - else if (supported_features & 1 and state == "playing" ) //PAUSE - { - disp1->set_component_text_printf("bt_play_pause", "%s", "\uE3E3"); // mdi:pause - disp1->show_component("bt_play_pause"); - } - else disp1->hide_component("bt_play_pause"); + // play/pause button + if ((supported_features & 512 or supported_features & 16384) and state != "playing" and state != "off") { //PLAY_MEDIA+PLAY + disp1->set_component_text_printf("bt_play_pause", "%s", "\uE409"); // mdi:play + disp1->show_component("bt_play_pause"); + } else if (supported_features & 1 and state == "playing" ) { //PAUSE + disp1->set_component_text_printf("bt_play_pause", "%s", "\uE3E3"); // mdi:pause + disp1->show_component("bt_play_pause"); + } else disp1->hide_component("bt_play_pause"); - // bt_prev button - PREVIOUS_TRACK - if (supported_features & 16 and state != "off") disp1->show_component("bt_prev"); else disp1->hide_component("bt_prev"); - // bt_next button - NEXT_TRACK - if (supported_features & 32 and state != "off") disp1->show_component("bt_next"); else disp1->hide_component("bt_next"); + // bt_prev button - PREVIOUS_TRACK + if (supported_features & 16 and state != "off") disp1->show_component("bt_prev"); else disp1->hide_component("bt_prev"); + // bt_next button - NEXT_TRACK + if (supported_features & 32 and state != "off") disp1->show_component("bt_next"); else disp1->hide_component("bt_next"); - // Stop button - STOP - //if (supported_features & 4096 and (state == "playing" or state == "paused")) disp1->show_component("bt_stop"); else disp1->hide_component("bt_stop"); + // Stop button - STOP + //if (supported_features & 4096 and (state == "playing" or state == "paused")) disp1->show_component("bt_stop"); else disp1->hide_component("bt_stop"); - // mute/unmute button - VOLUME_MUTE - disp1->set_component_value("is_muted", is_volume_muted ? 1 : 0); - if (supported_features & 8 and is_volume_muted) // unmute - { - disp1->set_component_text_printf("bt_mute", "%s", "\uEE07"); // mdi:volume-variant-off - disp1->show_component("bt_mute"); - } - else if (supported_features & 8) // mute - { - disp1->set_component_text_printf("bt_mute", "%s", "\uE57E"); // mdi:volume-low - disp1->show_component("bt_mute"); - } - else disp1->hide_component("bt_mute"); + // mute/unmute button - VOLUME_MUTE + disp1->set_component_value("is_muted", is_volume_muted ? 1 : 0); + if (supported_features & 8 and is_volume_muted) { // unmute + disp1->set_component_text_printf("bt_mute", "%s", "\uEE07"); // mdi:volume-variant-off + disp1->show_component("bt_mute"); + } else if (supported_features & 8) { // mute + disp1->set_component_text_printf("bt_mute", "%s", "\uE57E"); // mdi:volume-low + disp1->show_component("bt_mute"); + } else disp1->hide_component("bt_mute"); - // VOLUME_SET - if (supported_features & 4) - { - if (volume_level != id(last_volume_level)) - { - id(last_volume_level) = volume_level; - disp1->set_component_text_printf("vol_text", "%" PRIu32 "%%", volume_level); - disp1->set_component_value("vol_slider", volume_level); - } - disp1->show_component("vol_slider"); - disp1->show_component("bt_vol_down"); - disp1->show_component("bt_vol_up"); - disp1->show_component("vol_text"); - } - else - { - disp1->hide_component("vol_slider"); - disp1->hide_component("bt_vol_down"); - disp1->hide_component("bt_vol_up"); - disp1->hide_component("vol_text"); - } - - if (media_duration > 0) - { - if (media_duration != id(last_media_duration) or media_position != id(last_media_position)) - { - id(last_media_duration) = media_duration; - id(last_media_position) = media_position; - disp1->set_component_value("prg_current", int(round(min(media_position + media_position_delta, media_duration)))); - } - disp1->set_component_value("prg_total", int(round(media_duration))); - disp1->send_command_printf("prg_timer.en=%i", (state == "playing") ? 1 : 0); - disp1->show_component("time_current"); - disp1->show_component("time_total"); - disp1->show_component("time_progress"); - } - else - { - disp1->send_command_printf("prg_timer.en=0"); - disp1->hide_component("time_current"); - disp1->hide_component("time_total"); - disp1->hide_component("time_progress"); - } + // VOLUME_SET + if (supported_features & 4) { + if (volume_level != id(last_volume_level)) { + id(last_volume_level) = volume_level; + disp1->set_component_text_printf("vol_text", "%" PRIu32 "%%", volume_level); + disp1->set_component_value("vol_slider", volume_level); + } + disp1->show_component("vol_slider"); + disp1->show_component("bt_vol_down"); + disp1->show_component("bt_vol_up"); + disp1->show_component("vol_text"); + } else { + disp1->hide_component("vol_slider"); + disp1->hide_component("bt_vol_down"); + disp1->hide_component("bt_vol_up"); + disp1->hide_component("vol_text"); } + if (media_duration > 0) { + if (media_duration != id(last_media_duration) or media_position != id(last_media_position)) { + id(last_media_duration) = media_duration; + id(last_media_position) = media_position; + disp1->set_component_value("prg_current", int(round(min(media_position + media_position_delta, media_duration)))); + } + disp1->set_component_value("prg_total", int(round(media_duration))); + disp1->send_command_printf("prg_timer.en=%i", (state == "playing") ? 1 : 0); + disp1->show_component("time_current"); + disp1->show_component("time_total"); + disp1->show_component("time_progress"); + } else { + disp1->send_command_printf("prg_timer.en=0"); + disp1->hide_component("time_current"); + disp1->hide_component("time_total"); + disp1->hide_component("time_progress"); + } + } + ##### START - DISPLAY START CONFIGURATION ##### display: - id: disp1 @@ -1804,6 +1815,7 @@ script: value: string then: - lambda: |- + if (id(is_uploading_tft)) change_climate_state->stop(); if (!embedded) { if (key == "temperature" or key == "target_temp_high" or key == "target_temp_low") ha_call_service->execute("climate.set_temperature", key.c_str(), to_string(stof(value) / 10), detailed_entity->state.c_str()); @@ -1830,6 +1842,7 @@ script: return (compareVersions("${version}", version_tft->state.c_str()) and compareVersions("${version}", version_blueprint->state.c_str())); timeout: 60s - lambda: |- + if (id(is_uploading_tft)) check_versions->stop(); static const char *const TAG = "script.check_versions"; auto compareVersions = [](const char* version1, const char* version2) -> bool { @@ -1917,6 +1930,7 @@ script: screensaver_time_color: int32_t[] then: - lambda: |- + if (id(is_uploading_tft)) global_settings->stop(); static const char *const TAG = "script.global_settings"; // Blueprint version ESP_LOGV(TAG, "Check Blueprint version"); @@ -1999,6 +2013,7 @@ script: command: string then: - lambda: |- + if (id(is_uploading_tft)) ha_button->stop(); timer_reset_all->execute(page.c_str()); auto ha_event = new esphome::api::CustomAPIDevice(); ha_event->fire_homeassistant_event("esphome.nspanel_ha_blueprint", @@ -2018,6 +2033,7 @@ script: entity: string then: - lambda: |- + if (id(is_uploading_tft)) ha_call_service->stop(); static const char *const TAG = "script.ha_call_service"; ESP_LOGV(TAG, "Calling Home Assisant service"); ESP_LOGV(TAG, " Type: service_call"); @@ -2053,11 +2069,13 @@ script: mode: restart then: - lambda: |- - notification_label->publish_state(""); - notification_text->publish_state(""); - notification_unread->turn_off(); - refresh_notification->execute(); - if (current_page->state == "notification") disp1->goto_page("home"); + if (not id(is_uploading_tft)) { + notification_label->publish_state(""); + notification_text->publish_state(""); + notification_unread->turn_off(); + refresh_notification->execute(); + if (current_page->state == "notification") disp1->goto_page("home"); + } - id: open_entity_settings_page mode: restart @@ -2070,22 +2088,24 @@ script: back_page: string then: - lambda: |- - detailed_entity->publish_state(entity); - if (page == "alarm_control_panel") page = "alarm"; - std::string cmd_page = std::string("page ") + page.c_str(); - disp1->send_command_printf(cmd_page.c_str()); - if (page_label.find("\\r") != std::string::npos) - page_label = page_label.replace(page_label.find("\\r"), 2, " "); - disp1->set_component_text_printf("page_label", "%s", page_label.c_str()); - set_page_id->execute("back_page_id", back_page.c_str()); - if (page == "climate") - disp1->set_component_value("embedded", (entity == "embedded_climate") ? 1 : 0); - else - { - if ((page_icon != std::string()) and (page_icon != "")) - disp1->set_component_text_printf("icon_state", "%s", page_icon.c_str()); - set_component_color->execute("icon_state", page_icon_color); - } + if (not id(is_uploading_tft)) { + detailed_entity->publish_state(entity); + if (page == "alarm_control_panel") page = "alarm"; + std::string cmd_page = std::string("page ") + page.c_str(); + disp1->send_command_printf(cmd_page.c_str()); + if (page_label.find("\\r") != std::string::npos) + page_label = page_label.replace(page_label.find("\\r"), 2, " "); + disp1->set_component_text_printf("page_label", "%s", page_label.c_str()); + set_page_id->execute("back_page_id", back_page.c_str()); + if (page == "climate") + disp1->set_component_value("embedded", (entity == "embedded_climate") ? 1 : 0); + else + { + if ((page_icon != std::string()) and (page_icon != "")) + disp1->set_component_text_printf("icon_state", "%s", page_icon.c_str()); + set_component_color->execute("icon_state", page_icon_color); + } + } - id: page_alarm mode: restart @@ -2461,6 +2481,11 @@ script: relay2_icon_color: int relay2_fallback: bool then: + - if: + condition: + lambda: 'return id(is_uploading_tft);' + then: + - script.stop: relay_settings - lambda: |- static const char *const TAG = "script.relay_settings"; // Relays @@ -2684,6 +2709,7 @@ script: foreground: int32_t[] then: - lambda: |- + if (id(is_uploading_tft)) set_component_color->stop(); static const char *const TAG = "script.set_component_color"; ESP_LOGVV(TAG, "Starting:"); ESP_LOGVV(TAG, " Component: %s", component.c_str()); diff --git a/advanced/hmi/nspanel_eu.HMI b/advanced/hmi/nspanel_eu.HMI index 9a14ef4a1771de23f6603aa95023e6fbc31b4c0a..7e8b6fbc855abcf214e67d151c778ae89c8e6c4b 100644 GIT binary patch delta 4334 zcmeI#ZBSHI90u^SyX-DdGDxzsm_eyoHc8@3VyFY&kV}g)|g(62}4G9{qU`+V}7BbpwOTKHE6&Gw4jp<4f<7oJo(S&k7>cGCdXr*lERCbLXgs}56KEn$qRA9T@ic{|(lmO9 z-lYUer0JAI$@Cu0pqVs_QfM~Kp}CYwX*7@K)BCi5KA?rPh|*~>eMn1aDJ`Q6T23oy zC7EayWm485^XMS$;{3mM3N8cYYgYOpATDB0!9n6Jva|C%3T*~y`a&JsCTv^H&bc>BHD+WuU8J zJSXB6zMD#`EiujO8ffAB^&3i}x!V;eEY~y)S8Dpu+`L>-r`&aV3*v43za?a^} z{8~E3qT4)N83sc<7)Y6nVldpWQ_V$e3Qgyl6S3Y*qxk@9A z>z^MYjhSH?C|S0x3zesZoA#-tR9EKH1ue~H_y|6RY*-CBum*C$0&8I%nzJyZv3ciLi*bY138`ufuPyxH(Td0KH zPz8Iy2H(M6_#XDbeyD~6a1iWp2!4PcL59O{1b%`Vs09bq!BM%T`PlkcZG_L}u^rPt zRBGt$40*B!bUf}))_~5XxBJ$B%IBQo8Xzb4bzZYcF9aU#E!|A5&`D)w<^*Z2+f*V2 zuE`9R_SZJ~6+Cj(LjxR_A2}M^4r}|a?e|iar`|%Pf@F8FB}dJe*mFIV3OFP5oJ;7r zDMHUB3O&~<^jwwDbNhv!D;9cgm$&D<9TO+?T$0dp7sL317$@{xv(R&~LeDvbo{JQE z&Mx#^xX^R9C|tj@w+2M>TrTunsL*qzLeCk5o+}o5E^aZ;3S-a({KjP!Z|n(7vLgXf}g?e@X?N@eP#2AR87!+$(&Jd3i0b>Fn{Jg}Ze7q4!aHn{FXOE*p%&#dXV Z|8AN#tn1IialvL@4M}SGdWiY1?H|M+{#gJ3 delta 2792 zcmeIzYfw~W9LMozmtB@?AtM_oBhKhFQyD5S10^CMnU)lVNvP?fVSohW0&84aF8{y_ z2DH!v6`@iJRK&$Rkh-yg3t|`+5@e{fYd4#s#uvWmML*obJVU*2n#nWsnf>lL&pA8K zndh9nG+LwSAE?nN2HO?EN@+`g_UJ8c7FI2fHtm_) z7s_TIXOlT+nYj@^j>`pw%|6&L&pLCmslun()Ta$oox3q|-87&LQT>>pGEYZIxwfoa zs{kc9feO^%ER}0DSwHu!^Jwj2mnxg4ZT0@V~T3Sbs(-X9wV(3YFiel+$dWPa?13gO{DW0CA1lmNK zX$w71TWK5VD3P|)4tjx-XeYf$$&^B=w2RW{B}%6Z%A}WRH|Z&hvMJ}dVWqb^skyhR zoF}?j7I0;^-A}4;wx3r@-=DMxDEYDky(`bq6l-vE2y7087=$cF-W6^u{_MNkYSK=2xrLK*CZeXt)6Ksg+Q z*P#L`p$gsr6I4SDya^m?p$^`Hx8WVAhj*a?4#8nK0*&w`OA$$a_ z@G-POJ9I!N9EVTf1W3>Y-S8=#gi~-D%W4ZGFG*8By<^8+wVysl&e`^k77v#43Fs6~m3~3p&$=&A5n77<# z{1|JJJ9R!|ZjLsxEPuxGGWKG>9(96@9Bfw7y96uOvEUucLQP&)9y8g>Cr|4mc;qHqfE4Xx`1?~{tdy?$875lzgs#z**DorG3hPF?~?k%@Hf~!vLIvK{yYe!w_76 zFJKrh!k6$BjKC!rg|A@@#^D>d4Bx^8T!E`_4JP3`>E?*-hE2-eudh=`m3LdxZ$Gbz G$NmEP`&n=R diff --git a/advanced/hmi/nspanel_eu_code/buttonpage01.txt b/advanced/hmi/nspanel_eu_code/buttonpage01.txt index 8cca477..9446a71 100644 --- a/advanced/hmi/nspanel_eu_code/buttonpage01.txt +++ b/advanced/hmi/nspanel_eu_code/buttonpage01.txt @@ -21,7 +21,6 @@ Page buttonpage01 vis button_back,1 vis page_index,1 } - vis unavailable,0 Postinitialize Event sendme diff --git a/advanced/hmi/nspanel_eu_code/buttonpage02.txt b/advanced/hmi/nspanel_eu_code/buttonpage02.txt index 14c72c3..87af814 100644 --- a/advanced/hmi/nspanel_eu_code/buttonpage02.txt +++ b/advanced/hmi/nspanel_eu_code/buttonpage02.txt @@ -21,7 +21,6 @@ Page buttonpage02 vis button_back,1 vis page_index,1 } - vis unavailable,0 Postinitialize Event sendme diff --git a/advanced/hmi/nspanel_eu_code/buttonpage03.txt b/advanced/hmi/nspanel_eu_code/buttonpage03.txt index ce083cb..bb36625 100644 --- a/advanced/hmi/nspanel_eu_code/buttonpage03.txt +++ b/advanced/hmi/nspanel_eu_code/buttonpage03.txt @@ -21,7 +21,6 @@ Page buttonpage03 vis button_back,1 vis page_index,1 } - vis unavailable,0 Postinitialize Event sendme diff --git a/advanced/hmi/nspanel_eu_code/buttonpage04.txt b/advanced/hmi/nspanel_eu_code/buttonpage04.txt index 20e3e47..38c8cdd 100644 --- a/advanced/hmi/nspanel_eu_code/buttonpage04.txt +++ b/advanced/hmi/nspanel_eu_code/buttonpage04.txt @@ -21,7 +21,6 @@ Page buttonpage04 vis button_back,1 vis page_index,1 } - vis unavailable,0 Postinitialize Event sendme diff --git a/advanced/hmi/nspanel_eu_code/home.txt b/advanced/hmi/nspanel_eu_code/home.txt index 998e7a9..a6a5668 100644 --- a/advanced/hmi/nspanel_eu_code/home.txt +++ b/advanced/hmi/nspanel_eu_code/home.txt @@ -290,7 +290,7 @@ Text wifi_icon Dragging : 0 Send Component ID : on press and release Associated Keyboard: none - Text :  + Text : Max. Text Size : 5 Events @@ -326,7 +326,7 @@ Text bt_notific Dragging : 0 Send Component ID : on press and release Associated Keyboard: none - Text :  + Text : Max. Text Size : 3 Events @@ -343,7 +343,7 @@ Text bt_qrcode Dragging : 0 Send Component ID : on press and release Associated Keyboard: none - Text :  + Text : Max. Text Size : 3 Events @@ -357,7 +357,7 @@ Text bt_entities Dragging : 0 Send Component ID : on press and release Associated Keyboard: none - Text :  + Text : Max. Text Size : 3 Events diff --git a/advanced/hmi/nspanel_us.HMI b/advanced/hmi/nspanel_us.HMI index cf8a700e4064089af09deb840748a60e20d9c7ce..f0bb55d255b7d20974a71b3cd9fc74fd92aaeb69 100644 GIT binary patch delta 4009 zcmeH}Yfw~W7{{Mo*ae*lLFKZegAO5+j52Bkctxl*5ruR`%`23Nm+~3~2#fj;NHG=E zW26XpUvDc~CneZ**IV9DvlQGEw5eut8fS8x=|fBp?4kFisjtxo&&+S;|6a~}_MCa% z-@eYvMLteO*Kk~SC{RbGM*@SV>0HS)BqnNU8i{MO+fI4a+&=%JZb)p$v2Gh3e~r=O zWaEzTJg>I7Jbgp_84Bw`q~rTadk0OKG_>QrHzJ&rsjWMx;}DH)a8liFUc_Y~dR%MB z5C2Wy*5)olu8SV|@w#U%rTc>pmS%+X3~yhj{Wr9=d2V`kGsRSBzrhjQ+k1L+ufCIF4$Zz)5_LFQDQ}oWg0;;49Rk?xcOQ z+b}H8wkS{OTjhwc#Ch@V;H$Ma($=pY-kRAetyff>7_cUY95F`Zs&OKRP7t{)MdTo}$R$%n_M0K{ zy4fNdE$O1MW}e6`86syd7WwHC@ixm=i2Nv1*%9bnwAv!sXebYrRvq1gN`RwL)!24YFn*_Do-Mure_8FtYE3L3s&WV9VOSQ!nGQr z+>f{WDv>klrYpAS6+P5HqMR94C4OIJf5k80L6~yA))}p)WVtH4tH;b|!fqM{WcDl0 zY}Ih6Qq=Ib(hkrxbwzUVEy=|bB^R3|7dJ{SJ|MaHnB?LT$;EqQ7bi(BPL*7ILvnGF z4$R?D|(1FLpaSxY$$QaaM<~a=OKpq%LcA=3CXfnay>(m4E`r zWTpPL-BaL&wpiH68-#tYhZ>UOay(6UNTBp+}7<1N+p*GiqYrTF>nXPr*j zQmyab(urHj(teWcq%Ea17VUc3bF}&CQqz+|YDKvt$4lK>T@a&F95b^*l%|x!UA7Hy s`lv@n+Owu9`R0``D1Ae7lGTcB_NhL~ppAB@dFA$SFV%Lxx%-$u0dp%!PXGV_ delta 4613 zcmeH}dr(wW9LLWtETE|&!NMvdWsH-Gj40s)6MW<=AC#ylsX%Iqs3^VwaW%gIg((Vh zL4`$0MSS5SE^4yd3W^#SYAU+wMr!3aiRLtFO?6-|ogXvhpV~|^^JTt!&Y64XEFaGK zn9rm-nt4>0_p5ffsk&$EadQu2$Hy>MKSz`Aou@usz#4znS&Zxt7sgb4&abC$Y@}_t z@%P$$Mz;C@ucpJSN3Z5{?YEj(rZSh|sT~*4yZL-gC-dL)J^D1Cn_g>fdTz#X?M{2f z-n!y!{Z=Z+#S7t z{QvB9m9s9zS*PMr^Vsp&^JsV+WM`dY{q6t4f`iVwkR7|*N~W6lTshG$A;3lR`x|ZQR!jF! zT6^io+1dX0YBY?sReGHhV@@jD_?;GvB`D+5S~KRLj7PU&ELj<^Z_8M<(#zZ!b5zz; zXc_xn>4hGQxhVaJj=wV$%Ki^IC(SD+z z@)vz@Z^o7>&o>1&biHkt{er|q=|Iu_hlpN0Ty&pNq8EmU?j0(6{shrI!$r@YBD$+S zN_L=?qThzCH|{?&RZLjY7@KNu`&I(e zMce!c90HPjJjqB>y*Fl z9fI%!f^ZB$cmYB95kdF_LAZ(_Tucx)Q-q@l!V3w)_Xxt#1mRl*;Ru58Rf6z%f^ZE% zcqBo%k|I2qAZ#KC_ag|G5`_H;!o>t(AA)cpLD-uhoKFz;qzGpdgk1^3=>*|c1mP5d zuzHCgBZ(mVh#(wC5dN7WJc}TFlOQ~ZAiR|ztjZAxM-YTf1mRZ+!Yc^E-~9u^GDo=o zztStWziE6}B<~CTs^d9LZGKV{z86Bv-1N)TjL}p086(_y0QkXT}d^(X*+?n>rGENfjPq-(v1N|C#g$#*+i*0Anp}8rzF`yU2@K< zcg*@TNuSj|}0!kiT$|hCBF$i#%%=kq>t^Kjk0~_ch-wO1YnQoTr?pg69O!NuElc zQ#_}6&hUKAQ^ixwbC%~Do*JHWJm+~X@O;a2k>?W6Wu97|D?C?uEIikEuJhcG@26RR z3vB(9p?}Fee*bU_VE$5`#i*5DuC%)8WBDZ#q`1#MqVgu9<-l$kPq>o9mIn=5)aA?B$r6L zAaS8&5f5@99<+vdP)p)L$;5-y#DkU-4|+05Jb!VM2Q}>fL8O?NOFZb#Off!#cu?Iu z@vTfI9(0+g{8-{a)x?8_6Avoq9yGV<5(y$6bcA@2j(E^g;z5_Pg$D%?56U7Q^y@aE f^5YvlNSa@5==-;|Kink`tu>bw$T{umI=}Q6plY#i diff --git a/advanced/hmi/nspanel_us_code/buttonpage01.txt b/advanced/hmi/nspanel_us_code/buttonpage01.txt index 8cca477..9446a71 100644 --- a/advanced/hmi/nspanel_us_code/buttonpage01.txt +++ b/advanced/hmi/nspanel_us_code/buttonpage01.txt @@ -21,7 +21,6 @@ Page buttonpage01 vis button_back,1 vis page_index,1 } - vis unavailable,0 Postinitialize Event sendme diff --git a/advanced/hmi/nspanel_us_code/buttonpage02.txt b/advanced/hmi/nspanel_us_code/buttonpage02.txt index 14c72c3..87af814 100644 --- a/advanced/hmi/nspanel_us_code/buttonpage02.txt +++ b/advanced/hmi/nspanel_us_code/buttonpage02.txt @@ -21,7 +21,6 @@ Page buttonpage02 vis button_back,1 vis page_index,1 } - vis unavailable,0 Postinitialize Event sendme diff --git a/advanced/hmi/nspanel_us_code/buttonpage03.txt b/advanced/hmi/nspanel_us_code/buttonpage03.txt index ce083cb..bb36625 100644 --- a/advanced/hmi/nspanel_us_code/buttonpage03.txt +++ b/advanced/hmi/nspanel_us_code/buttonpage03.txt @@ -21,7 +21,6 @@ Page buttonpage03 vis button_back,1 vis page_index,1 } - vis unavailable,0 Postinitialize Event sendme diff --git a/advanced/hmi/nspanel_us_code/buttonpage04.txt b/advanced/hmi/nspanel_us_code/buttonpage04.txt index 20e3e47..38c8cdd 100644 --- a/advanced/hmi/nspanel_us_code/buttonpage04.txt +++ b/advanced/hmi/nspanel_us_code/buttonpage04.txt @@ -21,7 +21,6 @@ Page buttonpage04 vis button_back,1 vis page_index,1 } - vis unavailable,0 Postinitialize Event sendme diff --git a/advanced/hmi/nspanel_us_code/home.txt b/advanced/hmi/nspanel_us_code/home.txt index 998e7a9..a6a5668 100644 --- a/advanced/hmi/nspanel_us_code/home.txt +++ b/advanced/hmi/nspanel_us_code/home.txt @@ -290,7 +290,7 @@ Text wifi_icon Dragging : 0 Send Component ID : on press and release Associated Keyboard: none - Text :  + Text : Max. Text Size : 5 Events @@ -326,7 +326,7 @@ Text bt_notific Dragging : 0 Send Component ID : on press and release Associated Keyboard: none - Text :  + Text : Max. Text Size : 3 Events @@ -343,7 +343,7 @@ Text bt_qrcode Dragging : 0 Send Component ID : on press and release Associated Keyboard: none - Text :  + Text : Max. Text Size : 3 Events @@ -357,7 +357,7 @@ Text bt_entities Dragging : 0 Send Component ID : on press and release Associated Keyboard: none - Text :  + Text : Max. Text Size : 3 Events diff --git a/advanced/hmi/nspanel_us_land.HMI b/advanced/hmi/nspanel_us_land.HMI index 58d61c3c57db8c789d1212a8a44f723b8f39d6fd..69ff7b50b228bf2c3c743bac3fdf49fc840d3772 100644 GIT binary patch delta 7477 zcmeI0dsGzn702%^ERRJ%Q-#V3*peC_N0ePe(fB406%AH=;tLHbRKvmwDh77ZUxW}v z@u!YaqkvWc6;U*!5?~?qfg)l;jUu{@@#N%~)M$H}b3$6|-JQYTZ#ZrKY-YH19?7@5H*T}K?+6mE6a+^E-!lp@rtz)`e-kbR#6QQS*v|yN1OTCQuuH+( zlBvefL^E!_SYig5V7*q}G!9n>uZEhy-&Kx9j8w<$26|8k&}47)t9_{)2YVd^rT zmuMDNd82{u!z!j`6GU}hwYmtLZ83q>ORh2^TpbMm6MceJ#-5`(mw?gMYbkKLuW~I0 zb!OP36u79|ZCHdl_ASuGE&&?Rk7i(%9)nZC&|9f8N}V}wTq;BbD6vR&Y|}j2gjKGk z(8pNiUT!L+DNoSY<$N&*QepHU@>b&9&G2^(#tgFsh);Yc^v&s0o&$#xZo;rPCVa!JOrcKU{R9_zC(uq2~u$3;t^$fZJvrCs{ zK}(379nqy>Wzy4_x0c?}=`|g<>0@0$;467#^CTdd9bC3g$_48?JZLQp~0Vy;GgZfX_`9%KFQWYWV5AykQunK5v^;gUxiN zkH4^hCi>_@3XL{+=#4EKmo9G?HchO9hZlg_efntM{;3YqX`PS1rS)Vz{Iy;0JR;1f zu70EB0i>UChQNU172lXA$JybkBjo5`UB)u6g?6aNkfZMzu+Q?x-N0B&=W!!KEvkDh zTEq^FNljjv8owsA^Wf!+?QqEPuI?L!HC;NpX1U$juffsBKf~sOTvnP;{VF@?4&udN zEWfbUd2Yw~z?7@|7nKXZ1c^r;S^}YDbR*fpbe)$ob(Vk$>!@m;pzWELZ!|3(hM?+M3T{D40)A| zCF96=GJ#AalgMNeMP4JXlQ+nlWD1!|rjckeoy;I_kr*bd>h%6>c$WjtdmXYP;ZIVD%kdQ{`(n_`={=-{gG^5~((|vaHf;`mPatcNG|9hbdU1j_Y4cwWWr^QQH6tzKU1Y0K zg$AUrqFX!wJY<^&ZJq!b%Kkat0B*|uh3J#FDElAcCq;%Mz*maihacK6 zDf$F{JC?}W0J3E;j&id`Df3Sm|QjEe=aGyGfSbg{uY8 zRBZMXn={gVMXNQ%RW#*i>x4+Le|1fYbgMn{nIPsTn7u^r6=n~qthVNhGBJNkmS@h) zf$Na<$Oa?>*@(Q0WFlFJMVdL#T3(|)F|U4bjkILBJz20EQ`*CWMF0boi*&`eQmX7f ziEkxW(IfDCpiI$rd@Bt~en|?zQDy&(G}cLC@vS^py!@~Q8iSIG3%VYZUeAdHSw*%Z(I!{Fb%h|Ap=}G&U_9_&!muHO=n|)2LQb&TlYJu24 zs&L(&zgf-FwAZp9xrsf4vWfU)R(7y7yuq$@ac)bWG}_%1iJ|RY(w%$u=pi}PdD+M& zWHUmL_mC|}4w8$!kK`dAAX|}bNItS1*?|-wI}wWPLUtp25E0pne2DBr_9F+7kC21N zA*2u~LW+^Y$PwiC$Wi1NQi7BsWyo>l1acB7M@}IX$Z6yZQi+^J&LJNo5^^57fLuhX zkWY|msXDJ_=umB#>$b_x0W?TF{!?Aw?org)$h$|;&f)k!Jc>#WF!*vT1!BfKGq)-yvehcg7Xg4xUw9m4b#&JaxE3_&$#2u5*+ppr8Lp`0No z8{?Q}of9I?1moG9Tg(}PAkGl%;|zfxX9#w3hQNn21bLhxaEoL0H*tob!xGN|8Jr>b zfincDoFRC^83M;&S)DEL5oZXNaE73jGX%3aL(oj*W1aUujWYz7IYaOp&JYmJ5PZcM zf=QeqDCP`-hBE}qI79I1zc2)n--!poKii(g{ws0vzgh91u}sXOMeaEv<@Ly?$RChP z$YtaTausPnt|8ZvM&t(4gxo}$kz2@T$md84@<-%0@&$4Sxr?+S_mDOzr2PJO?b?IG z-H$3Ar!6hLyW_|{r@P~H_Q3y2$FZ$X|2G}yks!^_O#i-2oRDnxl#a#OE8XSqL+SK| Oj9!8?B+35cfqw#|V*C04 delta 7554 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 U7*_~HobVH%fSYhzp^Hjb!bA$P7*S* zM1)GRR`&H9^?d)nulqdr-t+$6-+Rt^?m5qU-rsE>pk8gI=CL%PfU!d05NZenA_x(< zD?-WxAdobA2!s`s;{rIai{Jcn*J<~;0f;t@=)%Hcqd7k&M#N?`FY zia&cp!c#=wQ0VRc;sWTUQA(K}C-KC!jM6_V=Oe2hzDz7t_@_)Mw(9w;l3QMReMwbJ z#i&Yr^UB8;1*sTree-yegx<*S+1rs#vR8gI|8%B&O*Dt)oACxY4*&R6esG(3ASW%Ao2K&qE(|UW7{0|$rt9yj>AMmtm&loZ_v$ALaw~}+lhPM0H zUWYD-m|i1jXzW_^Z(=dTIn6kZo!&z6v;?a&J!o9o$6NB zc;jIf{ssHbnesKMmTVR>NHyKY#{Z<6i~hKe@VVor6msd@68;RK>|v^suVy0SoMVS? zSuOejG7^oPK-52H4jP*d8&t_rV2tft7|21hk4IzGRcSHP#g8C|Z{{3c)etu1lX!eHW zdi8sU@4!gR5XZ;d#v0VePp8eFO`B<3;p;zURK9cW+;Rq_+0TT*(oFKrg2*dF+!wF~E z^C+Q;gdH9iDjKVnrY{Ll2t*d=Cd`G+Xfbb-r%PBl^;|boy_Uz)ppM}N(n$s77kG!c zlGYn1-e*93)MeKA)=NFmXL0JKX5)jC${`)fAFUj1R^Nv7aB+I!l`phta#Y%}^vP2f z>Rq5`jil`s@B}$*zyQU)$S?yq{EF4;8ERPz=1i#)N*70}gdmdzAEvMKul2&Q-*r1f z@V7~dCf@nx^W9!f|Wz#41t}TxV>+d%8+_wC(=|(oaps^LxjCf~tRBy3RSHjzVzNy=) zHZrch#?wpLfk7o#>em~F5|lD~moF8|M44`sz3_P~H3HjB&9~sSS0~OI-KM`zd#Tm+ zS<7fwcVVh;k~;N$Lo?wynhO)(jTSP7Rj%p`o;hyRu^CJm{5`1gaM7v3CKtL7R>1%^ zf(TlU3PCdWbUy`yKnxjhT1G+yth6=-MOthVp-qkh3d{8?h$c+RR{}5!%o-yhU4aFP zcpMRGd7T`vi~JQZpcqO);Ty3`FjC=$B2u!&y89_0kXOHZyQA6zz%<6MZW5eNutE{& znZAt`a%d*!uh9D%^As@UD&7dfEp0X^LOBvoD@Bg2r~c)Ats@Cgbl+(sZ0RvUVGO!y z!vuN*I6$#hphaLmg@VFhX`iGCYDO>^ELM7CjG$x2359)jpT!Vd%oizO26x?82$4vy?v7bXfPEl2LyIG;5-Ng-F!4@-%Z9 zCXTQE6uT45xu)wdH(ybj?6>9kHgTmgdT-kKAHSN$@r9jY8kGKr0PLV&7=~`?V$(9A zvA}ru42fMS=Yyg%o}p^dex5Ay3(d(kHSFMVJoBnhq)7(H~L%T;%;= z!Mh!g$!==gA7CUQupiO$Y48vSs4b{j?99Ja^Z1_pvz6p!wW$ONE5$p3nKilfeX5bH zej_I`w-45Iw=JDw`+PAK(L_^)>3HpGCI0X2#vXL3>CHD?J5@&Iv2hCu63|Pd37a94 zu(2r3Na;}RdvgL;!!4C&NiG|9%-o;al#8;0;%ExCSloDIv6#3giV6HtqY08~Y(GhI zhEGVq#>mguXiyV>;_gVQ{)=+Nya6)oi6Wa#{Ottod-U$cx8CJDl+1?Lb?u{grh1jq zbFM(AtJLF@B_iW~fLkv#JORbQfSU$t?5iE}3~#k*94)nm*>K6G8E1J(_OVFWOkD@A zcDqKx^uX-2h zF6RqYqr>2!y-$27LZVFK$IZ0v%Pr}dw$H?W#O#>N%Ep^q46L8A59_=x1%J~cuNQB7 zN~<`@YbHaaq1l-l?EBbRP3(bA=;5f1EKbzKSQgc0V3}CnU#gT1Kc#ZkTw86eZj zOzTnpmfF@8nW-?V_+7SPwAK1qu2ZT zc4sTOteB08PqfMoYN@0rsTtw2V$cyk?gTQv4A0fdO@YoKIg7 zw<|Mfe8aXskj|wR@31!Me8m;9KchEr_t7il*6m=1)038lFO1Rm5!>e_yH-olb6}%F zFOurqZmPKake;ZxsJ);J>@u_LjySUgU%2(LjLEj9!02>B&bZ{4do5MhpCr4tr`$># zE~E;y;G44#FPFvS$D;bhrG4sO7Ot}KuI{{0h?QScdA6s~o z*7j1;4*M$wQp!89DzJkemY{-IGw(KeWc+6Qr1m8_lbTuN?ImOfJ!^w0Bg#XS$(~!d z)ZAqL!{aZBmJRdXVG6yQlcr74MB#gNjBuye@J{(bbM1hM{FcgHzO!zu1;I_cE%R{f z*Xtuov$`7JGYCBk+hg?CnLFZ*mA5!&Pg`*hSvhhY&#E;cK%e7}8DaCVP2eLvqVO9o zM{B8+wvnjA+$c_XVKCLVH{Kj_$Vx*l66N%z;=scDEC+%Pg(qN~=Zl+N+=63p8!TB0 zcfd@7NySF=7n3B+Ljzn+`aI8Gy^O7Xy%gn`Z%3+h!%_xyi*k{N^I7WencOq9h4n3} z22rN*pJ`iFUX4BAcz6CR^74an&bHd}`2a%WUijr*dLsP_6vhY}j#<+N*$$v6tWT>v zYr+cEE+cwV$xKR3r@V@>Qj~SLy1FrqSLun7amLyGO%wI(9+`R6iWr@5>vT=F$y*HieF`%6eu}*V{Ji%#h#1uXaSXe$4|kPIOmd8ode1*x z@581nZ}UxEKkv^<&DV;rzO@}#i}jh1KX^5Kog|X&O8J213)gboWd+W++7erNzAt<~ z(89VbV}T_;QQ;ViCsdCo-rYEVTByA6wo0>Q<@FqRP*y$U zY{zSvPHWz@ro{TttL3hNw*a2qX*6rwGBlN{z`dUGONz_`z1L5Y*asy^!ddrq)(LUc-rr*`-@hWZT$ylX;j93K$ z-qApc{4Tt`dP?(E5wQ|4L`DAkO-TlAB0_mrgo`HS3Y?$vPUy9VS5Vp+vRtz z$OXHb(GQyh!qByjdJi|(Poz4#=yZHQzUG#S$5yj#a=wr9y`}RdFyIG>sJ+u=bUbam+!bTXY$qrp=zNcx8?YR29tkr&o(bo^%6gBh z|BR@VD-QP4S??u}6mOdo?N?`Ksq8CvCaddu%P$wNei}OO9v$<6vs5ExS1*`>*POfH z!WI&H_k~J;B= zVTe~K8qbkB^;X?B@bkc3BFq^Yu-uVglH41cD}dVUWER6tzsb`7l&yY=_naP;KYHY( zx0fHXs_Z_|*Q@rb$DG!{GZXme+(vayjS&ik-AWtvzTdZ2S!b9#z_5{SdW~|KMW%Sf zF%Gqrv^6;Ww8Q;|=W-=yGzoK}ci{bp)GLWQWtuLD))k)!c!77_u@m5dQ&iECxJ;tI<>zum@LJd_gQilZ=04TgF0J0=b3C+@+>5= zDw7`Gr|+g??DG$gu~nw!6}k|Lo~T!KrS%~uSet=_WIGo~O5r7Qv+>v>zJ6Ccy8X#< z@a3fPDo4QmIqT+f_5daE2%#8Z;x?%Yofiz#3O~gr8G5%y@c9NNMWnKuGG34i4GpXQqI+HmUUgO5@YVR6fX_qL zoTpRNi1`ES&}K>k*99xN@n(bQCMqfXLhjbnZ^BtAib6I4^lvqNvTQo9jTL+Yr$2+gHG4WA#4p8Cnzdqd%6 zWSWpeY>3n2xZW9wn_3UmX3I`>e^?rMrFt{RQ_@{W>QpzJx85n|dG?e)-81TUJ!p^l zrft1a6A+c1TnCL;sDGLfPUojhZ*o|J1-{M)Uo)^NKOwI9y(L!qORk`&)O4X7ql#1d z-Z9IxuVoILLFl;Gu9oHlwkcLi8S;}ARj3IC8U=&Z%pab;}$lA+HsZDzeu#v)j)MaayEMCN>25?bX=Omi1kEpi@l3>lsZbVsSG@ zoF<*`LRlJJbDCQOdc#jhzj57o??J!Pl;wTTO@%>FMMJHnv5@7tCPI6_$>JA@Uz7M|W@se_4E9JV~R7l&kO48Qg4fx0~9+RS#b7 z)kXIv4L1o$#PLhTK0#w-B1j#Y5b%H#V5j-_9}mdK1*q~IiRVjH5QymUU+RMV8|c5+ zAb6PzFo%YN&0K&uD8&tML$g5&ZgSiIsNDw|klVO19wgm=BOs7q4xBbS2Z-kakl-4b z1#t3#NFG3#_g~RX7BWnK_~h14e$avk&;UwMU@8xw1?-4|13Unl_m3F-dtxJEAQLa3 zzglK8&IVDHDTUAg7I(WoFeYBs_<{t zAK~~nYhC5ns6Kq;QU3_Yzgfa3f3X^lSVu~7nS8?fkQaa~?f&OV(f-Av;U}|>#N}tQ zR6Wo9H>*MK7t5Z^`Xx8P%lrU4FlqD)eRPB#2~M#22>oVGMg_plBlJjff=B@}O0xci z8VUe%z;|0POn|%siAb>F=-o&J_m1A@K7c1tfGF=@LiB%ToBIj8jv}wfuM(D=SRRva z*8lO7k*{Dsirm-Fd5}pEkoaB7ofIU`V0H_%6(sMFf2$2j2n6|mvDbD$ydZD_(X$7I zoC~_(dqoZ$5CYiv{yk>k5QxD4MQrRtL3$y;m?Gs63OWb@cEBP8gbD+k;AJ~KoQV|{Wj{z9&idxcH2{e`Dj4oD3K}xF7V$5IhP_p2~j{2 z@SysQFrmqAZ|dKM&yf*Gb7a^9p@`q0fG8P^r2TE|GX1xM7`opG>ByZ#|J#reBO9p< zzYTgefc9uGUa&$8V1VMmJT!m?XT$&=-apwK0%7^T&ya%zxx@iJhGURpkZcBWA;(PK HYmol{rvzkl diff --git a/nspanel_blueprint.yaml b/nspanel_blueprint.yaml index 70b916e..070b3d3 100644 --- a/nspanel_blueprint.yaml +++ b/nspanel_blueprint.yaml @@ -3211,19 +3211,6 @@ blueprint: default: [] selector: text: {} - ##### Show while loading ##### - show_while_loading: - name: Show pages while loading? - description: > - *SYSTEM settings* - - *When this is enable (default), the pages will be shown earlier, but some information might not be visible from the begining and will be shown when available.* - *When disabled, 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: true - selector: - boolean: ##### Media player update ##### media_player_update_interval: name: Media player - Update interval @@ -8029,16 +8016,6 @@ action: component: confirm val: '{{ confirm_value }}' 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.command.show }}' - data: - component: '255' # all components - continue_on_error: true ##### NSPanel build Button page ##### - repeat: @@ -8113,21 +8090,6 @@ action: bri: '{{ btn_bri_txt }}' label: '{{ entity.name }}' continue_on_error: true - ###### SHOW All component when page loading done ##### - - if: '{{ not show_while_loading }}' - then: - - *delay-default - - service: '{{ nextion.command.show }}' - data: - component: '255' # all components - continue_on_error: true - else: - ###### Show empty page ##### - - *delay-default - - service: '{{ nextion.command.show }}' - data: - component: '255' # all components - continue_on_error: true ## PAGE LIGHT ## - alias: Light settings page diff --git a/nspanel_eu.tft b/nspanel_eu.tft index 588f410d075acb27d91620bc3ef206aa94d49734..7eb87829e0d7192347b4749e257a098a002aadf3 100644 GIT binary patch delta 13200 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 delta 13247 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 m7lGZ6he)T_xA+hNI diff --git a/nspanel_us.tft b/nspanel_us.tft index 0ef99d31ffbcf9862e41d9e7377d35c4c5c55b9f..cba2ab6635291098315d684e31e6e764d4cb9385 100644 GIT binary patch delta 12830 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 Xy>eIgP~GunzpsaSz-H{=UtInl#jf0z delta 12868 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 P@kex2_uBQExI+6chLzg( diff --git a/nspanel_us_land.tft b/nspanel_us_land.tft index 95f89efd1a5a33d2c0c3d411ce10e1f670c1f658..5af5dae7e50ba9b1a818cfd73aafa2aeb4526bdf 100644 GIT binary patch delta 12385 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 delta 12391 zcmeHti(gJz`~F(%sfSV#m2$2edlWeg<0Wz&Au>)y=|D(5&y&L#<2?2-MySY5(v-nC zg`#qdNEA}eL?h=@$gxcHz4qST-`9Nqh2OlNxj*l-u63>ZUVH6pU3=}Fs^a6CbGMFb zqPvU1ZZRH9oP4Avb&P{1eoX7^)@#q&A({qxO|SpvGIOKbcPrS+D*M*kevf&$)#UQ_ z`?)beAu+}g|Ni&y3jDhQ|E|ElEAa0M{JR4GuE78ID_|>eNk|&WL^74MQVpr5WG0zQ zwImD4QnHe2OLZh`sjgH{vXN{hJE^{8FF8mJq=r%>sj<{VYAQ9893>~oS!yn|kXlNu zq}Ea!$wkshZ6#O9O=>5#m)xZeQb(zi)LHsQ>LPWOzLmO3|B<>&JtPmQr_@XGlzK~j zq`p!=slPNp`c4`sc}at$!O{@PTN)}2lYFG%()ZE`X{0nt8ZC{Hd?i0=tTayYmja~m zQsDj|U!i%ib{mZoL5-bXEKOnfUrjc8FAEM<`|JEB_wOhBEcEZCZ?l3O#gbJNvn)7BB@|}` zS9j#gsrWSrOR4HL2>v-=5fa}7ms{{vanT{o_+RO%AvRi`Lb=+IW+pvN1yhqWsu41< zp|CQeNlqcn#O{W4;bX`^s#7DxBD2IP#JOSf9nA%+hifr&uE}2xW~^<;_HFqK`A7R2 zfCo3zcy;+|&`%yA-!$aDl8tXa2Z zf-$>VtO66>A{<%!Ey&-m7CVl5xx#^cXr3=v`|Y*Z3;=(LhAizV3jU31`0t~zWQ{9P zVCi~8MCN*fzPOiW$Vg6$HbmG`)Ly;4(lW$H9IY8QlCvEMN>~xmOtTE6W5$S6B7YQl z|EzB!j*cSz&-x7052H8>A@_ZH9sfZ7`}B`Q{Alu!^cmX3(VSV1p^uW@g(s40x<1p= zYYb;yd^rn4tfTUDy|eHdLsm=l4|zI$%Fv${xxSRO6zLE8Qpr-l%jx_9zzKe|av9)N zezbcTU^m)$NS|riVJv4!XFw6;c?9$MOc6&wIzNuH?qr>%uSeaF z>g~n(apb)M^GopOtX2S-uf+Tks7Ds4Qv*1=NtId1H#LBotU|tSdJOrxk>zoa zECM;3OL@mZvIwLX(IAxo@}|^mkV@!wHb{GeIBP_UPNL|p6DYbjh_YhA{4tob2QseX zKT^s`F#CjXwwI>lAYGpjTDb-!s|lRVA)ix#tR~R>Q-E#&>Q9cRk#BG=^4*v~0c&v) znE@CqcIgNzVLOHubW@j*ZS}3`#!{}aAXhjDg8#&tZLj-CUv%T&%b z)9mv|*JUatZUjk$b7rKV0ze|1Ru%v%1mr>Pg~&JV0`e7xlm2&EDG{7m=*cBXQHp;d z5{BzJyG{;87#*%Bk7SJQWZ*2B_(fFhM6MS>ss<8HPk@MO16ln6Qoa!iqoPY7<we(uDWcvi^17jS;%g}42G|pR?n29&x^veqLfW9=0%ZPx<13I%?i%!R&q8FF>56~{YCF2+N@Bvy;!r7 zK4<82#g>)ozF)Ue+4mxB6%`x+K4+D>@%5{ejV~;tDe(|)jCC|;3n=IruE;uC-TAix z4JP+8d5c8hM&FJm{Sl~ZR}5zjW69+xrn@Uf-TQN5al2xby)Wj(l1CO&dadT{An}(- z>9tzf{91=KSdBGwa}|ax@*8P|zbYnA=49Zj6&5dE|o8AlWCJ_(xBI?h&6z!QV#lqvrKa22Avr6hhhcVdYd_0xS2jCV`#n2p=&YuNfJ+d2D$Xt{&@wn5t4w=0%l zHftwmd5G8KV`gv`(|3~o2IzfKIEzDMrI5=G(0it+o=|%aXF-VH$gvjawf2xlG3dp6 zp{-QTMy1lnouFUatGI&swlvPF5H0r6(_6qdr;*id@MrDk>@4E#e#%b)K7GGx4E-}W zi$|QKY%8Siok1lfxW>8%5BeE5Luw*A7Ekv`E@>7)C zVS4O@Y7bLSs`fDVq-qa_ld3&<=BV~CJV&*MemSZ=+|N<%;c*UDjC>kl7U736i^n;N zM`-t-;>S=7UwGdU^@IXXW8V~1hX7|TCoSM;~CDP&(Oy# z40SxC9u8gs3#9U>{0U&8XVn9O+d0lQP>eHDx}8(~p%PFi1+_rRxj9H#c}_72ZO(bl+zZGn4#RWK zs|K;E0J11h4PsS+Vi2Z&7dSgZ?yZp0?}FkF+SY}ftt}+;GZ@;sP(38P2R4Ct8_?bt zs{W8u#94bPazW+id8nLIq?$z3Mb0W^TqmL~D*m7yeF?^PiFTYt#?hD5bAr=l+1QfX zg64Et^@lP*eiZ43j8W&2vFx&9650b-uz{|UUm}JdxS|@wlB1$T+B2JucYY;!L8{&Y;=dQvKmRpy9Nr3o<5LMaKKL zRFg=%4K0_bCXseqF$puNgtNe1KGl+PmnzJ^CNQr~k{UA>Hadg~j; z7#q;SeulZ0=>X?{;4BsK7n$`pIO83{wZ9?LstQP61!wOO4wdw}zrhKoH`@W|x>L#7 zo{yZBAo$;Oa{#*T(5C^0)8?1|mWxzZUpJ$bkr8$^PAly?R350WA7gAyE&~nIOhc=% zpp-n&pyQ!*exM;!Gl&cI?J2maujw_MEy+lHX1q55W;rGRC(G}|PEQe+#gh>WPO zi4&mztlw9Yce#L`|7fW95G>FIiWp+RL0%)+7HZ>-V$*1(H>O_-WQU1hw-Dy0)LbHCidnomAwl?@3|94AZo^Kssva?l9#JSo&b@fi=F&{gw~r zF1M63;I0X!i&M-Xj3@C7)4{ zz}%4rd%R4<$wYyax$0+lfW#e^hqeZvA$py_B3rW z3U8#1lQDRpJw7*(?-UFkXirO~VDLLY6UZ|Rh2K#`m?6_L*+HWq&fo2WDbRXaB# zE4?8@!22n1od|11-eW+m*BUdU@*hBLg^ex1pPUz{a;B?O2Sj=_1$H-8)^wp4GL#CaF~$6Zl!{POT@<03j?@VpPk`&h zNF8PQgIWm)hlIJHMg^dHrH-}+pn6hUXv>v?$D>kGTSc$h0j>~;D|rP18{kSm1Y-OP zU}MRBK2pALrGOwnac%-{&U_(K%4!vHZqz>*c=vXKZI^MK=-!UpLIB+ZV^K&=V^ z^M2yI`B$>Ci+J@9a(wCt`Rhuwj(E7_?G%Rk15N2v#LS zs$#{84wNwo)Neb&SSj)sP`~X+iIV|605pO;mx3BT1;rn9RCKG2>4Yz3ovC*iD#dgn zeV8G`vPWmZwBJA#h{@#sE1rHmI@74BNV5dcJF;Ge%uBu@k8ne-dCxBY)NTi*{ZH*` zivW6brMnR*Q`AKjZm1;Z zY0*l|XHGBGS{*$F4pctTxKi0#g`=k;Tx~w^uDxmaC`=*WQ&FyVdT$84H+35gY!qsp8L%OUwXuU#)&6I&EO6jD@t?tpYEAD0 z`ks=LK$Wdl+#jqeH+l$eo{Z~6^bke4+V0+h?ewPKCZTwDZ&kIAfsLlfO`tvYR#m%Z zs9+lM+>DHhYS#=^-L}^-!S=|wPV^c^`pr=0b3kLM%@&yIa~in?2E5Kku%O|BtwEe5 zhpjN+b<|@k?Dho^*$V$_x1~z^pOQ6Q_`UorF8vcV7JjcPHp1^~#mX&3vFUzz{`skj z-40N(+fQS^C{{hiyc+vOu`c6awX|p_(z=XO6l<-;7s|1L918qFQa_c)@OuCv(|TBgdV+V0Fp;08%Q7-7-P7+QAbA zJ~RQ>iNO<9t9=6~koX}`6{~$SQ4y^+K2)$8la!Nzh{wlVc&*lR5(F}dp5nA1JSVA& zeF|(06&*&(r;}90uAVHrck)rBR1~{YG6}o{b^wMN$ouKskU6hy2zVl>nyeY zZTx>RtvG{Mk4=3wryG#bKMRNs9 zK@?Nvd2HtlYFvPgu9+`b0pcTK1eF$G9X0bwdjXHKc?$*eT7;U2KPm452F;_g3m8=R zvtSz*3w9bYlTr)OQ%F||4X1H3-B^SfC(_X(@HQ>Mk}MT05m7*kE`qm-wp;|Sk|HjF z_ncN-!j&!mRj>*gc-f${lz&!NU*varb@fB#-H6s*HmuPUMt!l5MkDn0sOEnK<7`$4 zwvhNWS=Co@f6%6;BXKX%(9xKRuA{@|8jhoBOF#_24PpiTavSje7=c%0z&iYGIidte!&v#P!}<=0-T%T) z!FT0Re_;n*1^z&P=8wV0Qq*^#}seSsrz8YuEmncuzW2k z4}c6J`2auVA;u0OTKf=Vwd(|%K|YTFY4IWX5vFkxko$V-_88MRNfRF%4x3Bs@hm}D z#*@nvyjU)zAx{j4%}h54)(^3Yte;{RaQv*U#*w(5e0;a3sHcVr=JOf&8BvLd;`-7wih6X%gi>$KaJz_8fy9 zk_8)w*h;Bo24@pn{G?ts`bIIvuGIF0AsTYdE{%44FgS^!d#T`q zA;YRq8WQcp^AlmdpJFS}*C&lKD$v(uKTIKAuo46|#!r>#>$0B`D`6OJ8G?CcVzChw z6!Z~Z;+8>6KBB9|0URI?;>d=0Ndx~zSBnFr{~KM64hh!oFuuql9+G<%x*8p#QB~-& zIU-oAqkh4ppeJ&d z$#Jr(Mpp%(S|?#hh!a#)jisufchy+LS3oqUASJ}1xPwM#{wnUaG1GEiE?yi@3)cCJ zV9}J!(Xo$CapNP{ZHh2vYSYlsERVu8Mi}d`}x|997{YnHqQT zJQ|`!*LkI@v*ug1%UHu0g+J_ms$p!3eUwd&ubd(;Wwsc03Q{60o%TT z+sQ5Eo0#(jdG~BLH|jL_sXmQd3kCiH9#hMx6Rw4nRm+%R=~0Ad{YAl&5rwqK!sskK zifF5a@sMRXAX&98m*i(ygeB%tMk_3Fd4B+@dzrkfaCv{wOe-V4aa|T{$Q5;f%~k4F z+bDnI@~@56I&>BP*5I1jRZfm|uv&+xUmXlue;tqd8){GY8)R;cLF>uY+L&poyD58K zQC%ZW$<{`DbGcnzJ(17k6g@z1Pv6uvuB~wrVEbZ0bA-Mzy{c=pfUA6}i_u}l@{97p zdPW@&qX+eX*xZu8z9ie=(rxf1)y9}%+U&OMcgt)6HM>n2wpfj>CD{51`LajRY&)z* z*Ahy!GiF%1-NA-J$X$a=DY(ATNx0piCG|1vN~vId?y7xnXrMi=@CrrP z9!2EtV01Q@q3Y^Hv0IQaOy7X~!t{0NHwR;yuzNrr4UDLN~PP4ji=2|C|&6Mk}X|r|G#YJ zO^uuQ3QB2;G%-))G`1QCS%S`VyqPgd8wX50rQwda*>N<_5wu@k$+Z7#Of^#h_bG>C z4o<;`k6zBWAE`9N8O!hs&>64s4vjcV*3Gd%zfkAq*cNZ8aSPm@3Uq|hjTX3J6=d2H z9owj^B}VRgBiQe6@u)()r_@#$xr?r}f_Top6D;e!V6PFjA1J;x#B-L8wnjFO5AtJh zb{pJTj}Nr9jqxFWNh@41^Ec?JuJ+{pzIgQ_QXOeJ2r2Y?=XozV5