From 22dd4b0c892960937600cec1210e7c484c2e8be7 Mon Sep 17 00:00:00 2001 From: Edward Firmo <94725493+edwardtfn@users.noreply.github.com> Date: Wed, 28 Feb 2024 19:19:22 +0100 Subject: [PATCH] Add page utilites Supports #168 --- components/nspanel_ha_blueprint/pages.h | 5 +- esphome/nspanel_esphome_core.yaml | 42 ++- hmi/dev/nspanel_eu_code/utilities.txt | 370 ++++++++++++++---------- hmi/dev/nspanel_us_code/utilities.txt | 296 +++++++++++-------- hmi/nspanel_eu.HMI | Bin 15263259 -> 15263259 bytes hmi/nspanel_us.HMI | Bin 15048136 -> 15048136 bytes nspanel_blueprint.yaml | 1 + 7 files changed, 415 insertions(+), 299 deletions(-) diff --git a/components/nspanel_ha_blueprint/pages.h b/components/nspanel_ha_blueprint/pages.h index 3309d91..69e2893 100644 --- a/components/nspanel_ha_blueprint/pages.h +++ b/components/nspanel_ha_blueprint/pages.h @@ -21,7 +21,7 @@ namespace nspanel_ha_blueprint { * These names correspond to various pages of the Nextion TFT file in use, * such as settings, home, weather information, and more. */ - constexpr std::array page_names = { + constexpr std::array page_names = { "home", "weather01", "weather02", @@ -48,7 +48,8 @@ namespace nspanel_ha_blueprint { "alarm", "keyb_num", "media_player", - "confirm" + "confirm", + "utilities" }; /** diff --git a/esphome/nspanel_esphome_core.yaml b/esphome/nspanel_esphome_core.yaml index f11469b..80d393e 100644 --- a/esphome/nspanel_esphome_core.yaml +++ b/esphome/nspanel_esphome_core.yaml @@ -843,22 +843,24 @@ display: lambda: |- if (not id(is_uploading_tft)) { timer_reset_all->execute(page_names[page_id]); - if (!touch_event) { // Release touch only - switch (page_id) { - case 10: // light - switch (component_id) { - case 34: // power_button + switch (page_id) { + case 10: // light + switch (component_id) { + case 34: // power_button + if (!touch_event) { // Release ha_call_service->execute("light.toggle", "", "", detailed_entity->state.c_str()); - break; - } - break; - case 22: // fan - switch (component_id) { - case 17: // bt_oscillate + } + break; + } + break; + case 22: // fan + switch (component_id) { + case 17: // bt_oscillate + if (!touch_event) { // Release ha_call_service->execute("fan.oscillate", "", "", detailed_entity->state.c_str()); - break; - } - } + } + break; + } } } @@ -1364,6 +1366,7 @@ select: - entitypage04 - home - qrcode + - utilities initial_option: home optimistic: true restore_value: true @@ -1654,6 +1657,7 @@ text_sensor: on_value: then: - lambda: |- + ESP_LOGE("text_sensor.nspanelevent", "Obsolete call"); DynamicJsonDocument doc(1024); deserializeJson(doc, x); std::string page = doc["page"]; @@ -1670,6 +1674,10 @@ text_sensor: {"value", value}, {"entity", entity} }); + ESP_LOGE("text_sensor.nspanelevent", " Page: %s", page.c_str()); + ESP_LOGE("text_sensor.nspanelevent", " Component: %s", component.c_str()); + ESP_LOGE("text_sensor.nspanelevent", " Value: %s", value.c_str()); + ESP_LOGE("text_sensor.nspanelevent", " Entity: %s", entity.c_str()); ##### NSPanel event - Execute actions from ESPHome - NO push to HA ##### - name: NSPanel local event @@ -2165,6 +2173,7 @@ script: else if (page == "qrcode") page_qrcode->execute(); else if (page == "screensaver") page_screensaver->execute(); else if (page == "settings") page_settings->execute(); + else if (page == "utilities") page_utilities->execute(); else if (page == "weather01") page_weather01->execute(); else if (page == "weather02") page_weather02->execute(); else if (page == "weather03") page_weather03->execute(); @@ -2284,6 +2293,10 @@ script: set_component_visibility->execute("page_settings.lbl_sleep", false); set_component_visibility->execute("page_settings.bt_sleep", false); + - id: page_utilities + mode: restart + then: # There's nothing here so far + - id: page_weather mode: restart parameters: @@ -2759,6 +2772,7 @@ script: page_qrcode->stop(); page_screensaver->stop(); page_settings->stop(); + page_utilities->stop(); page_weather01->stop(); page_weather02->stop(); page_weather03->stop(); diff --git a/hmi/dev/nspanel_eu_code/utilities.txt b/hmi/dev/nspanel_eu_code/utilities.txt index cf4600e..5987e6f 100644 --- a/hmi/dev/nspanel_eu_code/utilities.txt +++ b/hmi/dev/nspanel_eu_code/utilities.txt @@ -21,29 +21,9 @@ Page utilities Postinitialize Event sendme -Text title - Attributes - ID : 1 - Scope : local - Dragging : 0 - Send Component ID : on press and release - Associated Keyboard: none - Text : Power Dashboard - Max. Text Size : 100 - -Text title_icon - Attributes - ID : 2 - Scope : local - Dragging : 0 - Send Component ID : on press and release - Associated Keyboard: none - Text :  - Max. Text Size : 10 - Text unavailable Attributes - ID : 5 + ID : 3 Scope : local Dragging : 0 Send Component ID : disabled @@ -51,19 +31,29 @@ Text unavailable Text : Max. Text Size : 1 -Text t0 +Text title_icon Attributes - ID : 6 + ID : 4 Scope : local Dragging : 0 - Send Component ID : disabled + Send Component ID : on press and release Associated Keyboard: none - Text :  - Max. Text Size : 4 + Text :  + Max. Text Size : 10 -Text t1 +Text title Attributes - ID : 7 + ID : 5 + Scope : local + Dragging : 0 + Send Component ID : on press and release + Associated Keyboard: none + Text : Utilities Dashboard + Max. Text Size : 100 + +Text home_icon + Attributes + ID : 6 Scope : local Dragging : 0 Send Component ID : disabled @@ -71,49 +61,9 @@ Text t1 Text : 賈 Max. Text Size : 4 -Text t2 +Text home_label Attributes - ID : 9 - Scope : local - Dragging : 0 - Send Component ID : disabled - Associated Keyboard: none - Text :  - Max. Text Size : 4 - -Text t3 - Attributes - ID : 10 - Scope : local - Dragging : 0 - Send Component ID : disabled - Associated Keyboard: none - Text :  - Max. Text Size : 4 - -Text t4 - Attributes - ID : 11 - Scope : local - Dragging : 0 - Send Component ID : disabled - Associated Keyboard: none - Text : Green - Max. Text Size : 10 - -Text t5 - Attributes - ID : 12 - Scope : local - Dragging : 0 - Send Component ID : disabled - Associated Keyboard: none - Text : Fossil - Max. Text Size : 10 - -Text t6 - Attributes - ID : 15 + ID : 7 Scope : local Dragging : 0 Send Component ID : disabled @@ -121,199 +71,309 @@ Text t6 Text : Home Max. Text Size : 10 -Text t7 +Text home + Attributes + ID : 8 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 10 + +Text home_value2 + Attributes + ID : 9 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 10 + +Text grid_icon + Attributes + ID : 11 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text :  + Max. Text Size : 4 + +Text grid_label + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : Grid + Max. Text Size : 10 + +Text grid + Attributes + ID : 13 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 10 + +Text grid_value2 + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 10 + +Text group01_icon + Attributes + ID : 15 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text :  + Max. Text Size : 4 + +Text group01_label Attributes ID : 16 Scope : local Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : 全 - Max. Text Size : 4 + Text : Label + Max. Text Size : 10 -Text t8 +Text group01 Attributes ID : 17 Scope : local Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Solar + Text : Max. Text Size : 10 -Text t9 +Text group01_value2 Attributes - ID : 19 + ID : 18 Scope : local Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : 98% + Text : Max. Text Size : 10 -Text t10 +Text group02_icon Attributes ID : 20 Scope : local Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : 2% - Max. Text Size : 10 + Text :  + Max. Text Size : 4 -Text t11 +Text group02_label Attributes ID : 21 Scope : local Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : 豈 - Max. Text Size : 4 + Text : Label + Max. Text Size : 10 -Text t12 +Text group02 Attributes ID : 22 Scope : local Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Battery + Text : Max. Text Size : 10 -Text t13 +Text group02_value2 Attributes - ID : 24 + ID : 23 Scope : local Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : 暑 - Max. Text Size : 4 + Text : + Max. Text Size : 10 -Text t14 +Text group03_icon Attributes ID : 25 Scope : local Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Heating + Text :  + Max. Text Size : 4 + +Text group03_label + Attributes + ID : 26 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : Label Max. Text Size : 10 -Text t15 +Text group03 Attributes ID : 27 Scope : local Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : 1.7 kW + Text : Max. Text Size : 10 -Text t16 +Text group03_value2 Attributes ID : 28 Scope : local Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : 21.7°C + Text : Max. Text Size : 10 -Text t17 - Attributes - ID : 29 - Scope : local - Dragging : 0 - Send Component ID : disabled - Associated Keyboard: none - Text : 1.1 kW - Max. Text Size : 10 - -Text t18 +Text group04_icon Attributes ID : 30 Scope : local Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : -2.1 kW - Max. Text Size : 10 + Text :  + Max. Text Size : 4 -Text t19 +Text group04_label Attributes ID : 31 Scope : local Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : 0.8 kW + Text : Label Max. Text Size : 10 -Text t20 +Text group04 Attributes ID : 32 Scope : local Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : 慎 - Max. Text Size : 4 + Text : + Max. Text Size : 10 -Text t21 +Text group04_value2 Attributes ID : 33 Scope : local Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Wind + Text : Max. Text Size : 10 -Text t22 +Text group05_icon Attributes ID : 35 Scope : local Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : 1.1 kW - Max. Text Size : 10 + Text :  + Max. Text Size : 4 -Text t23 +Text group05_label Attributes ID : 36 Scope : local Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text :  - Max. Text Size : 4 + Text : Label + Max. Text Size : 10 -Text t24 +Text group05 Attributes ID : 37 Scope : local Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Car + Text : Max. Text Size : 10 -Text t25 +Text group05_value2 Attributes - ID : 39 + ID : 38 Scope : local Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : 1.1 kW + Text : Max. Text Size : 10 -Slider h0 +Text group06_icon Attributes - ID : 8 + ID : 40 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text :  + Max. Text Size : 4 + +Text group06_label + Attributes + ID : 41 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : Label + Max. Text Size : 10 + +Text group06 + Attributes + ID : 42 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 10 + +Text group06_value2 + Attributes + ID : 43 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 10 + +Slider line_main + Attributes + ID : 10 Scope : local Dragging : 0 Send Component ID: disabled @@ -321,9 +381,9 @@ Slider h0 Upper range limit: 100 Lower range limit: 0 -Slider h1 +Slider group01_line Attributes - ID : 13 + ID : 19 Scope : local Dragging : 0 Send Component ID: disabled @@ -331,9 +391,9 @@ Slider h1 Upper range limit: 100 Lower range limit: 0 -Slider h2 +Slider group02_line Attributes - ID : 14 + ID : 24 Scope : local Dragging : 0 Send Component ID: disabled @@ -341,9 +401,9 @@ Slider h2 Upper range limit: 100 Lower range limit: 0 -Slider h3 +Slider group03_line Attributes - ID : 18 + ID : 29 Scope : local Dragging : 0 Send Component ID: disabled @@ -351,27 +411,7 @@ Slider h3 Upper range limit: 100 Lower range limit: 0 -Slider h4 - Attributes - ID : 23 - Scope : local - Dragging : 0 - Send Component ID: disabled - Position : 50 - Upper range limit: 100 - Lower range limit: 0 - -Slider h5 - Attributes - ID : 26 - Scope : local - Dragging : 0 - Send Component ID: disabled - Position : 50 - Upper range limit: 100 - Lower range limit: 0 - -Slider h6 +Slider group04_line Attributes ID : 34 Scope : local @@ -381,9 +421,19 @@ Slider h6 Upper range limit: 100 Lower range limit: 0 -Slider h7 +Slider group05_line Attributes - ID : 38 + ID : 39 + Scope : local + Dragging : 0 + Send Component ID: disabled + Position : 50 + Upper range limit: 100 + Lower range limit: 0 + +Slider group06_line + Attributes + ID : 44 Scope : local Dragging : 0 Send Component ID: disabled @@ -393,7 +443,7 @@ Slider h7 Button button_back Attributes - ID : 3 + ID : 2 Scope : local Dragging : 0 Send Component ID: on press and release @@ -407,7 +457,7 @@ Button button_back Timer wakeup_timer Attributes - ID : 4 + ID : 1 Scope : local Period (ms): 100 Enabled : yes diff --git a/hmi/dev/nspanel_us_code/utilities.txt b/hmi/dev/nspanel_us_code/utilities.txt index c507044..1343f06 100644 --- a/hmi/dev/nspanel_us_code/utilities.txt +++ b/hmi/dev/nspanel_us_code/utilities.txt @@ -21,29 +21,9 @@ Page utilities Postinitialize Event sendme -Text title - Attributes - ID : 1 - Scope : local - Dragging : 0 - Send Component ID : on press and release - Associated Keyboard: none - Text : Power Dashboard - Max. Text Size : 100 - -Text title_icon - Attributes - ID : 2 - Scope : local - Dragging : 0 - Send Component ID : on press and release - Associated Keyboard: none - Text :  - Max. Text Size : 10 - Text unavailable Attributes - ID : 5 + ID : 3 Scope : local Dragging : 0 Send Component ID : disabled @@ -51,7 +31,27 @@ Text unavailable Text : Max. Text Size : 1 -Text t1 +Text title_icon + Attributes + ID : 4 + Scope : local + Dragging : 0 + Send Component ID : on press and release + Associated Keyboard: none + Text :  + Max. Text Size : 10 + +Text title + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID : on press and release + Associated Keyboard: none + Text : Utilities Dashboard + Max. Text Size : 100 + +Text home_icon Attributes ID : 6 Scope : local @@ -61,7 +61,7 @@ Text t1 Text : 賈 Max. Text Size : 4 -Text t6 +Text home_label Attributes ID : 7 Scope : local @@ -71,29 +71,29 @@ Text t6 Text : Home Max. Text Size : 10 -Text t15 +Text home Attributes ID : 8 Scope : local Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : 1.7 kW + Text : Max. Text Size : 10 -Text t16 +Text home_value2 Attributes ID : 9 Scope : local Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : 21.7°C + Text : Max. Text Size : 10 -Text t0 +Text grid_icon Attributes - ID : 10 + ID : 11 Scope : local Dragging : 0 Send Component ID : disabled @@ -101,219 +101,279 @@ Text t0 Text :  Max. Text Size : 4 -Text t2 +Text grid_label Attributes ID : 12 Scope : local Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text :  - Max. Text Size : 4 + Text : Grid + Max. Text Size : 10 -Text t4 +Text grid Attributes ID : 13 Scope : local Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Green + Text : Max. Text Size : 10 -Text t9 +Text grid_value2 + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 10 + +Text group01_icon Attributes ID : 15 Scope : local Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : 98% - Max. Text Size : 10 + Text :  + Max. Text Size : 4 -Text t3 +Text group01_label Attributes ID : 16 Scope : local Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text :  - Max. Text Size : 4 + Text : Label + Max. Text Size : 10 -Text t5 +Text group01 Attributes ID : 17 Scope : local Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Fossil + Text : Max. Text Size : 10 -Text t10 +Text group01_value2 Attributes - ID : 19 + ID : 18 Scope : local Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : 2% + Text : Max. Text Size : 10 -Text t7 +Text group02_icon Attributes ID : 20 Scope : local Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : 全 + Text :  Max. Text Size : 4 -Text t8 +Text group02_label Attributes ID : 21 Scope : local Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Solar + Text : Label Max. Text Size : 10 -Text t17 +Text group02 + Attributes + ID : 22 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 10 + +Text group02_value2 Attributes ID : 23 Scope : local Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : 1.1 kW + Text : Max. Text Size : 10 -Text t20 - Attributes - ID : 24 - Scope : local - Dragging : 0 - Send Component ID : disabled - Associated Keyboard: none - Text : 慎 - Max. Text Size : 4 - -Text t21 +Text group03_icon Attributes ID : 25 Scope : local Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Wind + Text :  + Max. Text Size : 4 + +Text group03_label + Attributes + ID : 26 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : Label Max. Text Size : 10 -Text t22 +Text group03 Attributes ID : 27 Scope : local Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : 1.1 kW + Text : Max. Text Size : 10 -Text t11 +Text group03_value2 Attributes ID : 28 Scope : local Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : 豈 - Max. Text Size : 4 + Text : + Max. Text Size : 10 -Text t12 +Text group04_icon Attributes - ID : 29 + ID : 30 Scope : local Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Battery - Max. Text Size : 10 + Text :  + Max. Text Size : 4 -Text t18 +Text group04_label Attributes ID : 31 Scope : local Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : -2.1 kW + Text : Label Max. Text Size : 10 -Text t23 +Text group04 Attributes ID : 32 Scope : local Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text :  - Max. Text Size : 4 + Text : + Max. Text Size : 10 -Text t24 +Text group04_value2 Attributes ID : 33 Scope : local Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Car + Text : Max. Text Size : 10 -Text t25 +Text group05_icon Attributes ID : 35 Scope : local Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : 1.1 kW - Max. Text Size : 10 + Text :  + Max. Text Size : 4 -Text t13 +Text group05_label Attributes ID : 36 Scope : local Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : 暑 - Max. Text Size : 4 + Text : Label + Max. Text Size : 10 -Text t14 +Text group05 Attributes ID : 37 Scope : local Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Heating + Text : Max. Text Size : 10 -Text t19 +Text group05_value2 Attributes - ID : 39 + ID : 38 Scope : local Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : 0.8 kW + Text : Max. Text Size : 10 -Slider h0 +Text group06_icon Attributes - ID : 11 + ID : 40 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text :  + Max. Text Size : 4 + +Text group06_label + Attributes + ID : 41 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : Label + Max. Text Size : 10 + +Text group06 + Attributes + ID : 42 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 10 + +Text group06_value2 + Attributes + ID : 43 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 10 + +Slider line_main + Attributes + ID : 10 Scope : local Dragging : 0 Send Component ID: disabled @@ -321,9 +381,9 @@ Slider h0 Upper range limit: 100 Lower range limit: 0 -Slider h1 +Slider group01_line Attributes - ID : 14 + ID : 19 Scope : local Dragging : 0 Send Component ID: disabled @@ -331,9 +391,9 @@ Slider h1 Upper range limit: 100 Lower range limit: 0 -Slider h2 +Slider group02_line Attributes - ID : 18 + ID : 24 Scope : local Dragging : 0 Send Component ID: disabled @@ -341,9 +401,9 @@ Slider h2 Upper range limit: 100 Lower range limit: 0 -Slider h3 +Slider group03_line Attributes - ID : 22 + ID : 29 Scope : local Dragging : 0 Send Component ID: disabled @@ -351,27 +411,7 @@ Slider h3 Upper range limit: 100 Lower range limit: 0 -Slider h6 - Attributes - ID : 26 - Scope : local - Dragging : 0 - Send Component ID: disabled - Position : 50 - Upper range limit: 100 - Lower range limit: 0 - -Slider h4 - Attributes - ID : 30 - Scope : local - Dragging : 0 - Send Component ID: disabled - Position : 50 - Upper range limit: 100 - Lower range limit: 0 - -Slider h7 +Slider group04_line Attributes ID : 34 Scope : local @@ -381,9 +421,19 @@ Slider h7 Upper range limit: 100 Lower range limit: 0 -Slider h5 +Slider group05_line Attributes - ID : 38 + ID : 39 + Scope : local + Dragging : 0 + Send Component ID: disabled + Position : 50 + Upper range limit: 100 + Lower range limit: 0 + +Slider group06_line + Attributes + ID : 44 Scope : local Dragging : 0 Send Component ID: disabled @@ -393,7 +443,7 @@ Slider h5 Button button_back Attributes - ID : 3 + ID : 2 Scope : local Dragging : 0 Send Component ID: on release @@ -407,7 +457,7 @@ Button button_back Timer wakeup_timer Attributes - ID : 4 + ID : 1 Scope : local Period (ms): 100 Enabled : yes diff --git a/hmi/nspanel_eu.HMI b/hmi/nspanel_eu.HMI index 5c95fd81ef996e8d045712a6189154a8c56199da..c3c480279f4180a011ced1f935731349d545caec 100644 GIT binary patch delta 9906 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