From ccecd91f6fe3c0794aafcaba2768764f740299c6 Mon Sep 17 00:00:00 2001 From: Edward Firmo <94725493+edwardtfn@users.noreply.github.com> Date: Tue, 26 Mar 2024 18:58:58 +0100 Subject: [PATCH] Utilities page caching Helps with #1977 --- esphome/nspanel_esphome_core.yaml | 61 ++++-- hmi/dev/nspanel_eu_code/utilities.txt | 16 +- hmi/dev/nspanel_us_code/utilities.txt | 14 +- hmi/dev/nspanel_us_land_code/utilities.txt | 18 +- hmi/nspanel_eu.HMI | Bin 14940670 -> 14940670 bytes hmi/nspanel_eu.tft | Bin 7497272 -> 7497272 bytes hmi/nspanel_us.HMI | Bin 15048136 -> 15048136 bytes hmi/nspanel_us.tft | Bin 7501864 -> 7501864 bytes hmi/nspanel_us_land.HMI | Bin 14848047 -> 14756407 bytes hmi/nspanel_us_land.tft | Bin 7497612 -> 7497332 bytes nspanel_blueprint.yaml | 211 +++++++++------------ 11 files changed, 162 insertions(+), 158 deletions(-) diff --git a/esphome/nspanel_esphome_core.yaml b/esphome/nspanel_esphome_core.yaml index eddf264..fc951a2 100644 --- a/esphome/nspanel_esphome_core.yaml +++ b/esphome/nspanel_esphome_core.yaml @@ -54,6 +54,12 @@ esphome: platformio_options: build_flags: - -Wno-missing-field-initializers + # - -fdata-sections + # - -ffunction-sections + # - -Wl,--gc-sections + # - -Os + # - -flto + on_boot: - priority: 600.0 # This is where most sensors are set up. then: @@ -98,9 +104,12 @@ esp32: CONFIG_D0WD_PSRAM_CLK_IO: "5" CONFIG_D0WD_PSRAM_CS_IO: "18" CONFIG_ESP32_REV_MIN_3: "y" + CONFIG_SPIRAM_SUPPORT: "y" psram: id: ext_ram + mode: quad + speed: 80MHz ##### WIFI SETUP ##### wifi: @@ -790,7 +799,29 @@ api: value2: string direction: int then: - # Do nothing for now + - lambda: |- + if (!id(is_uploading_tft) and !group_id.empty()) { + uint8_t id = findUtilitiesGroupIndex(group_id.c_str()); + if (id != UINT8_MAX) { + // Update Value 1 + if (!value1.empty() and strcmp(value1.c_str(), UtilitiesGroups[id].value1) != 0) { + copyStringToCharArray(UtilitiesGroups[id].value1, value1); + disp1->set_component_text(group_id.c_str(), value1.c_str()); + } + + // Update Value 2 + if (!value2.empty() and strcmp(value2.c_str(), UtilitiesGroups[id].value2) != 0) { + copyStringToCharArray(UtilitiesGroups[id].value2, value2); + disp1->set_component_text((group_id + "b").c_str(), value2.c_str()); + } + + // Update direction + if (group_id != "grid" and !isnan(direction) and direction != UtilitiesGroups[id].direction) { + UtilitiesGroups[id].direction = direction; + disp1->set_component_value((group_id + "_line_d").c_str(), direction); + } + } + } # Updates an entity to display specific values with dynamic icons, names, and color codes. - service: value @@ -2016,19 +2047,17 @@ script: entity: string then: - lambda: |- - if (!id(is_uploading_tft)) { - if (service != "" and not service.empty()) { - esphome::api::CustomAPIDevice ha_event; - ha_event.fire_homeassistant_event("esphome.nspanel_ha_blueprint", - { - {"device_name", device_name->state.c_str()}, - {"type", "service_call"}, - {"service", service}, - {"key", key}, - {"value", value}, - {"entity", entity} - }); - } + if (!id(is_uploading_tft) and !service.empty()) { + esphome::api::CustomAPIDevice ha_event; + ha_event.fire_homeassistant_event("esphome.nspanel_ha_blueprint", + { + {"device_name", device_name->state.c_str()}, + {"type", "service_call"}, + {"service", service}, + {"key", key}, + {"value", value}, + {"entity", entity} + }); } - id: init_hardware_climate @@ -2561,7 +2590,7 @@ script: else if (key == "vacation") service = "alarm_control_panel.alarm_arm_vacation"; else if (key == "bypass") service = "alarm_control_panel.alarm_arm_custom_bypass"; else if (key == "disarm") service = "alarm_control_panel.alarm_disarm"; - if (service != "" and not service.empty()) + if (not service.empty()) { HomeassistantServiceResponse resp; HomeassistantServiceMap resp_kv; @@ -2569,7 +2598,7 @@ script: resp_kv.key = "entity_id"; resp_kv.value = entity.c_str(); resp.data.push_back(resp_kv); - if (pin != "" and not pin.empty()) + if (not pin.empty()) { resp_kv.key = "code"; resp_kv.value = pin.c_str(); diff --git a/hmi/dev/nspanel_eu_code/utilities.txt b/hmi/dev/nspanel_eu_code/utilities.txt index 34318f1..8ab0cd6 100644 --- a/hmi/dev/nspanel_eu_code/utilities.txt +++ b/hmi/dev/nspanel_eu_code/utilities.txt @@ -27,7 +27,7 @@ Page utilities printh 00 printh FF FF FF -Variable (int32) line_main_d +Variable (int32) home_line_d Attributes ID : 46 Scope: local @@ -419,7 +419,7 @@ Text group06b Text : Max. Text Size : 10 -Slider line_main +Slider home_line Attributes ID : 10 Scope : local @@ -535,14 +535,14 @@ Timer tm_movement Events Timer Event - //line_main - line_main.val+=line_main_d.val - if(line_main.val>=line_main.maxval) + //home_line + home_line.val+=home_line_d.val + if(home_line.val>=home_line.maxval) { - line_main.val=line_main.minval - }else if(line_main.val<=line_main.minval) + home_line.val=home_line.minval + }else if(home_line.val<=home_line.minval) { - line_main.val=line_main.maxval + home_line.val=home_line.maxval } //group01_line group01_line.val+=group01_line_d.val diff --git a/hmi/dev/nspanel_us_code/utilities.txt b/hmi/dev/nspanel_us_code/utilities.txt index 135e8a1..9f028a1 100644 --- a/hmi/dev/nspanel_us_code/utilities.txt +++ b/hmi/dev/nspanel_us_code/utilities.txt @@ -27,7 +27,7 @@ Page utilities printh 00 printh FF FF FF -Variable (int32) line_main_d +Variable (int32) home_line_d Attributes ID : 46 Scope: local @@ -419,7 +419,7 @@ Text group06b Text : Max. Text Size : 10 -Slider line_main +Slider home_line Attributes ID : 10 Scope : local @@ -536,13 +536,13 @@ Timer tm_movement Events Timer Event //line_main - line_main.val+=line_main_d.val - if(line_main.val>=line_main.maxval) + home_line.val+=home_line_d.val + if(home_line.val>=home_line.maxval) { - line_main.val=line_main.minval - }else if(line_main.val<=line_main.minval) + home_line.val=home_line.minval + }else if(home_line.val<=home_line.minval) { - line_main.val=line_main.maxval + home_line.val=home_line.maxval } //group01_line group01_line.val+=group01_line_d.val diff --git a/hmi/dev/nspanel_us_land_code/utilities.txt b/hmi/dev/nspanel_us_land_code/utilities.txt index dd54019..8ab0cd6 100644 --- a/hmi/dev/nspanel_us_land_code/utilities.txt +++ b/hmi/dev/nspanel_us_land_code/utilities.txt @@ -27,7 +27,7 @@ Page utilities printh 00 printh FF FF FF -Variable (int32) line_main_d +Variable (int32) home_line_d Attributes ID : 46 Scope: local @@ -419,7 +419,7 @@ Text group06b Text : Max. Text Size : 10 -Slider line_main +Slider home_line Attributes ID : 10 Scope : local @@ -530,19 +530,19 @@ Timer tm_movement Attributes ID : 45 Scope : local - Period (ms): 50 + Period (ms): 150 Enabled : yes Events Timer Event - //line_main - line_main.val+=line_main_d.val - if(line_main.val>=line_main.maxval) + //home_line + home_line.val+=home_line_d.val + if(home_line.val>=home_line.maxval) { - line_main.val=line_main.minval - }else if(line_main.val<=line_main.minval) + home_line.val=home_line.minval + }else if(home_line.val<=home_line.minval) { - line_main.val=line_main.maxval + home_line.val=home_line.maxval } //group01_line group01_line.val+=group01_line_d.val diff --git a/hmi/nspanel_eu.HMI b/hmi/nspanel_eu.HMI index dfd0bed78bbfbeec4bb2f91ad7139f8fda09b825..73373923302a325d07c11f3c87908a8c9368cbc4 100644 GIT binary patch delta 1104 zcmd7RS!_&E9LMn)o#|MDjz%P+GQvX}GKs{4rS`2wsiI2JmJWt#i&3gn(Jy0X46fF8 zYu~D+(_UM(M(z8)8_Rn`R3Z|Mf0L%R2Tu|=`P}6E^UFEEDZaUOdO<;N*c46%^aM}C7pT9CxZoKvXDh&v6yU@u#{!w0Lxi{ ziXy*vmflbAW>!;xI=z$}tK! zP9a5{;3UO(DWMdNQ=H}uXE{e1=P9Rx3tpeQjp0khs7kG%r9Y;FV(H{JD*bYN+mt24 zG6R+J`1wIvUSD6kOznZ!Kcksa7+Yad%0JIFDsK$w8QPkbZ<|KDN?TtPmEw}PEUt*F z;+nWFZit)WmbfkMh`ZvRxGx@vhvJcVES`v`;+c3ZUWk|Cl~&sN^{20fY}FF>x5kPz zwq{RHOR*(5?5Vc4^1$jB)_F;ejy>y_3CXpC_L8tq4XvNn&U*a_SyPfSWD=&A*g}i^ zES6uQKPT;}wMoge%d$C~Hp}nZhW`jF`6d3~7Ju%fRA~MX?Z!EuHL&hhuK225jm!Mv Pjd&~GX^qR?SBHNG<`c=h delta 890 zcmd7M+f&Q|6u|LTzb*05{vPn62Qwac@nnqKBG;k|xs^pN7OUD2MTw;^zZ9~TmLxy- zOGWImSV@~p?zeKMmiK0j@u+dk_yfF{ab`XbXXebDZ_oG2=pND7uEgb9?T%py$%zqv z#uA$!5jM*5oBNwGz+mvk7>D$Y40c4ghnvz2v2M-uQwdv}%1d3U=28u!mxvUKFp4O@ zOO4L!cI#@4ulGNGQmU((E)}{|=u)9eg)SAkROo7SR`>sK;MLWk>5OC)qZz|k%#33^ z6NqOblbFmDrZSBL5}D2nl1L_nRAw@ZG-fl0xy)le>140~3kzAqVlv6X$`Y2c3>(W? z!Ak6`BAXm?agfJq*07d**0G)f3faI$iYR6iC2VF3PPVd*QeZnf&?sXkr5ML%&|LcnV#^EK%6I>TvF_DCKW|_nk|JU ze|3CtP?0CqQqaGuw#%f20zuI#?ufhMp13dC!~^kAJQ9z^6Y*3$6VJs9@lw1J?V>}x v7H`B`@lL!KAH+xT$sY=QZp%=d*(nWwQ(94`nOi$Wmk5b3esk;BmJz=I*GrTr diff --git a/hmi/nspanel_eu.tft b/hmi/nspanel_eu.tft index e93436bfabce647d1ece2a0ca8c1797254d23ceb..550a5b6f43a255d420d3c9ddd6a25ad31f84b237 100644 GIT binary patch delta 303 zcmWN=*DgbG9Ki9=9;Iecdn-z*z0coX2etQJf3=k-koYDpT)H^deFus22qfalb9e;& zKFP=V{BSw)fdmq9;l>~d56Pt9C6zSN$sm&~d}NbDE`IXJr+`9=D5iu`$|$FTN~)+P zKn=Cj5u~05LNwAum}XjNrHytv=%kBodg!H(eoPbt3^K$pBaAY}I1@}Vg~c>8%o1Ua zc@|h?iDgz;WsP+<*kp@scGzW)eGWL}h+|G(^`B|@oakfN{x!8_N0bg2KbHU7YsZuh lJ;jxlr!p$f+5uK)a|p>)W2^8LJe&4|)2^ImC>argQ1 mYk!O>Ef3_OJd(%qM4rksc`h&HrM!~YA2D_F?6%t8ZlnJ%jdbk* diff --git a/hmi/nspanel_us.HMI b/hmi/nspanel_us.HMI index 7d106a584dcde5ab3abf3d529ed5832a39a761bf..ce4d7cdfd6daea3e6c282d38084208c1e73c5c30 100644 GIT binary patch delta 1073 zcmd6l*>B8I7>0k1ElsxT&G@MlCewo=_$&ctp>*01yR zdA3y^Wmyr1%)hdar9U&PXhYfTRrvEJmk$~G%hV0km*7Tc{x&g|6RB6BZ@4_n(0 z7?-z-{fe#5nP(lmv5vUBa(jNcJ;G4Q5NWU(q72c2a(m3w5C7jzvG4Qzj(oo(!cfT& zX|Nfh4AB9{lok%2!&UB$G-RMpa zdeV#D^r0{P=+6KKGKj$pA(^2JBZc9lGJ=t$;Ub+;WZ-5rWAKnk7Gud~9OIe5L?$tr zDNJP=IZS5;xy)o1vzfzO@_>0L`OIel3t7Zsmavopma&`_cv;CR3h}X;HLPVF>)F6Y zHnEv4Y-JnU*}+bBv70^YWgq)Fz(Ee-=P*YoqL`x`BfxP^aFSD;<_u>!$9YP)P<*jq zsqJ&2=SyHoe7JAz!tUWHU)z%K>cGt8@a&v~jIo)n6puU0<(!=Asb4Xsqk8@mdb6FJ1Tco?y1~Yd7$!8 o<&nx`l_x4sRi3FlS9ziGQstG(Yn3-Dr7B^Sw<_!>0wq+hHkL;VSL6&$!l zep>XW;ufLqjRQrfV&W5h@EJX$zW5h#$tQQ0yId|*Q)&(g)n(|N;Y`nrO-xSG{f(cE zZe7GA&2RtB+FJh1^ud6kDn|KXwJ539PDXuQoL+HR3v4}m#k!sU4oS{W2W!AP&P|HNZuLfNzKBgPqJ%*hg-Jwf5t}*dd&m39^3AK-eX3nAqJ%*hg-Jwfs@M`D_O;A*5F|+>&Rj~*=%4Vo7l`2 za@a~PULcQc_}ET9JJ?A9g%nZDE_SmAg}szeil2S#=Ku#eM1V5NIm{7`a*PU&bApqc z;xuPC%Q-4JPZcT`xJZy{E^!%+D_rFoHC*QgH@U@a?r^vIUU8AJJvZRd3KPP8%KbTI zp6>qUm~4x`tw(J)t-T=}*VPyAs1^4`ov0Tf@jyHjkHll~L_8JG#B=dNycDm*Yw<=j ih_~XMcrQMPM)6U65>4W>XcjFZEWU`ZTD+sR#Q6*J2y)B- diff --git a/hmi/nspanel_us.tft b/hmi/nspanel_us.tft index cf1b5e4dff5d0b57c9f752a0ca6d0e1654250a31..120816dcc65abac6492932970fd8811a20c07835 100644 GIT binary patch delta 310 zcmWN==`uob7{K949ZS}bvTw-}A(8%M%XaL_PPUw~X1M}0elx~5-_9*`0cN-b-(81s z1&#Nad9r`s)~tNSLLOFZXyj8sAw}3Jri4<;D5nAkl~hrUlNwyOsils38fc`6W?E>a zjdnbA;H8r;y6M43FMaswXMjNh3=w3Q5kia-Mlr@X5hj>qifLwuGRqwEEU<{q63eWx z${Oozut|(KTWqt#E_>{Az#&H@IOc>?&NwH@#fRZmn&T_|;x}E&(9M)GJle1B{IQ#F t%J5l&=6fO;ea$IDres=P$}4#-Z{)4KlNot0ALQd_PCa=ews0tr`3G?cd8_~c delta 310 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 n3rU1-TL&sngf3UpHMVZ5=~g8{wFj?6Cz 0) - (main_line_ref_state < 0)) * (-1 if main_line_inverted else 1)) | int(0) }}' - continue_on_error: true ## Groups - repeat: for_each: '{{ pages_utilities.groups | list }}' @@ -9833,60 +9811,6 @@ action: icon_color: '{{ repeat.item.color }}' visible: '{{ icon_code in all_icons }}' continue_on_error: true - - alias: Utilities - Display value 1 - if: '{{ value1_enabled }}' - then: - - variables: - entity_id: '{{ repeat.item.value1 }}' - unit_of_measurement: '{{ state_attr(entity_id, "unit_of_measurement") | default("") }}' - - *delay_default - - *variable_entity - - service: 'esphome.{{ nspanel_name }}_component_text' - data: - id: '{{ repeat.item.name }}' - txt: *value_with_unit_and_translations - continue_on_error: true - - if: '{{ utilities_constructor }}' - then: - - *delay_default - - service: 'esphome.{{ nspanel_name }}_component_color' - data: - id: '{{ repeat.item.name }}' - color: '{{ repeat.item.color }}' - continue_on_error: true - - *delay_default - - service: 'esphome.{{ nspanel_name }}_components_visibility' - data: - ids: '{{ [repeat.item.name] }}' - visible: true - continue_on_error: true - - alias: Utilities - Display value 2 - if: '{{ value2_enabled }}' - then: - - variables: - entity_id: '{{ repeat.item.value2 }}' - unit_of_measurement: '{{ state_attr(entity_id, "unit_of_measurement") | default("") }}' - - *delay_default - - *variable_entity - - service: 'esphome.{{ nspanel_name }}_component_text' - data: - id: '{{ repeat.item.name }}b' - txt: *value_with_unit_and_translations - continue_on_error: true - - if: '{{ utilities_constructor }}' - then: - - *delay_default - - service: 'esphome.{{ nspanel_name }}_component_color' - data: - id: '{{ repeat.item.name }}b' - color: '{{ repeat.item.color }}' - continue_on_error: true - - *delay_default - - service: 'esphome.{{ nspanel_name }}_components_visibility' - data: - ids: '{{ [repeat.item.name ~ "b"] }}' - visible: true - continue_on_error: true - alias: Utilities - Label if: '{{ label_enabled }}' then: @@ -9908,51 +9832,102 @@ action: ids: '{{ [repeat.item.name ~ "_label"] }}' visible: true continue_on_error: true - - alias: Utilities - Line - if: - - '{{ icon_enabled or value1_enabled or value2_enabled or label_enabled }}' - - '{{ repeat.item.name not in ["home", "grid"] }}' + + - variables: + value1: "" + value2: "" + line_ref_state: > + {{ + states(repeat.item.line_ref) | float(0) + if repeat.item.line_ref is defined and repeat.item.line_ref is string and repeat.item.line_ref.split(".") | count == 2 + else 0 + }} + direction: '{{ (((line_ref_state > 0) - (line_ref_state < 0)) * (-3 if repeat.item.line_inverted is defined and repeat.item.line_inverted else 3)) | int(0) }}' + + - alias: Utilities - Display value 1 + if: '{{ value1_enabled }}' then: - variables: - line_ref_state: > - {{ - states(repeat.item.line_ref) | float(0) - if repeat.item.line_ref is defined and repeat.item.line_ref is string and repeat.item.line_ref.split(".") | count == 2 - else 0 - }} - - *delay_default - - service: 'esphome.{{ nspanel_name }}_component_val' - data: - id: '{{ repeat.item.name }}_line_d' - val: '{{ (((line_ref_state > 0) - (line_ref_state < 0)) * (-3 if repeat.item.line_inverted else 3)) | int(0) }}' - continue_on_error: true + entity_id: '{{ repeat.item.value1 }}' + unit_of_measurement: '{{ state_attr(entity_id, "unit_of_measurement") | default("") }}' + - *variable_entity + - variables: + value1: *value_with_unit_and_translations - if: '{{ utilities_constructor }}' then: - - variables: - rgb565: '{{ int(((repeat.item.color[0] //(2**3)) *(2**11))+((repeat.item.color[1] //(2**2)) *(2**5))+(repeat.item.color[2] //(2**3))) }}' - *delay_default - - service: 'esphome.{{ nspanel_name }}_command' + - service: 'esphome.{{ nspanel_name }}_component_color' data: - cmd: '{{ repeat.item.name }}_line.bco={{ rgb565 }}' + id: '{{ repeat.item.name }}' + color: '{{ repeat.item.color }}' continue_on_error: true - *delay_default - - service: 'esphome.{{ nspanel_name }}_command' - data: - cmd: '{{ repeat.item.name }}_line.bco1={{ rgb565 }}' - continue_on_error: true - - if: '{{ pages_utilities.cursor.width != 255 }}' - then: - - *delay_default - - service: 'esphome.{{ nspanel_name }}_command' - data: - cmd: '{{ repeat.item.name }}_line.wid={{ pages_utilities.cursor.width }}' - continue_on_error: true - - *delay_default - service: 'esphome.{{ nspanel_name }}_components_visibility' data: - ids: '{{ [repeat.item.name ~ "_line"] }}' + ids: '{{ [repeat.item.name] }}' visible: true continue_on_error: true + - alias: Utilities - Display value 2 + if: '{{ value2_enabled }}' + then: + - variables: + entity_id: '{{ repeat.item.value2 }}' + unit_of_measurement: '{{ state_attr(entity_id, "unit_of_measurement") | default("") }}' + - *variable_entity + - variables: + value2: *value_with_unit_and_translations + - if: '{{ utilities_constructor }}' + then: + - *delay_default + - service: 'esphome.{{ nspanel_name }}_component_color' + data: + id: '{{ repeat.item.name }}b' + color: '{{ repeat.item.color }}' + continue_on_error: true + - *delay_default + - service: 'esphome.{{ nspanel_name }}_components_visibility' + data: + ids: '{{ [repeat.item.name ~ "b"] }}' + visible: true + continue_on_error: true + - service: 'esphome.{{ nspanel_name }}_utilities_group_refresh' + data: + group_id: '{{ repeat.item.name }}' + value1: *value_with_unit_and_translations + value2: "" + direction: '{{ direction }}' + continue_on_error: true + - alias: Utilities - Line + if: + - '{{ icon_enabled or value1_enabled or value2_enabled or label_enabled }}' + - '{{ repeat.item.name not in ["grid"] }}' + - '{{ utilities_constructor }}' + then: + - variables: + rgb565: '{{ int(((repeat.item.color[0] //(2**3)) *(2**11))+((repeat.item.color[1] //(2**2)) *(2**5))+(repeat.item.color[2] //(2**3))) }}' + - *delay_default + - service: 'esphome.{{ nspanel_name }}_command' + data: + cmd: '{{ repeat.item.name }}_line.bco={{ rgb565 }}' + continue_on_error: true + - *delay_default + - service: 'esphome.{{ nspanel_name }}_command' + data: + cmd: '{{ repeat.item.name }}_line.bco1={{ rgb565 }}' + continue_on_error: true + - if: '{{ pages_utilities.cursor.width != 255 }}' + then: + - *delay_default + - service: 'esphome.{{ nspanel_name }}_command' + data: + cmd: '{{ repeat.item.name }}_line.wid={{ pages_utilities.cursor.width }}' + continue_on_error: true + - *delay_default + - service: 'esphome.{{ nspanel_name }}_components_visibility' + data: + ids: '{{ [repeat.item.name ~ "_line"] }}' + visible: true + continue_on_error: true ##### Button click ##### - alias: Button click @@ -10574,7 +10549,7 @@ action: list1: '{{ pages_utilities.groups | selectattr("value1", "defined") | selectattr("value1", "eq", trigger.entity_id) | list }}' list2: '{{ pages_utilities.groups | selectattr("value2", "defined") | selectattr("value2", "eq", trigger.entity_id) | list }}' list3: '{{ pages_utilities.groups | selectattr("line_ref", "defined") | selectattr("line_ref", "eq", trigger.entity_id) | list }}' - full_list: '{{ list1 + list2 }}' + full_list: '{{ list1 + list2 + list3 }}' groups: '{{ full_list | map(attribute="name") | unique | list }}' - repeat: for_each: '{{ pages_utilities.groups | selectattr("name", "in", groups) | list }}'