From e6274174b109b922ff7730f44d986734bd1c49da Mon Sep 17 00:00:00 2001 From: proddy Date: Wed, 20 May 2026 18:32:12 +0200 Subject: [PATCH] sync with dev --- CHANGELOG.md | 40 +++++++++++++++++++++++++++- CHANGELOG_LATEST.md | 35 +++--------------------- docs/Modbus-Entity-Registers.md | 30 ++++++++++----------- docs/dump_entities.csv | 20 +++++++------- src/ESP32React/UploadFileService.cpp | 2 +- src/core/device_library.h | 7 ++--- src/core/locale_translations.h | 6 ++--- src/core/telegram.cpp | 11 ++++---- src/devices/thermostat.cpp | 4 +-- 9 files changed, 82 insertions(+), 73 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 156bffd65..db70eecda 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,44 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [3.8.2] 12 May 2026 + +## Added + +- comfortpoint for BC400 [#2935](https://github.com/emsesp/EMS-ESP32/issues/2935) +- customize device brand [#2784](https://github.com/emsesp/EMS-ESP32/issues/2784) +- set model for ems-esp devices temperature, analog, etc. [#2958](https://github.com/emsesp/EMS-ESP32/discussions/2958) +- prometheus metrics for temperature/analog/scheduler/custom [#2962](https://github.com/emsesp/EMS-ESP32/issues/2962) +- boiler pumpkick [#2965](https://github.com/emsesp/EMS-ESP32/discussions/2965) +- heatpump reset [#2933](https://github.com/emsesp/EMS-ESP32/issues/2933) +- 2.nd freshwater module (dhw4, dhw5) [#2991](https://github.com/emsesp/EMS-ESP32/issues/2991) +- full system backup and restore +- auto-logic to set ht3/ems+ tx-mode +- polariity for digital_in sensors [#3070](https://github.com/emsesp/EMS-ESP32/discussions/3070) + +## Fixed + +- SRC climate creation [#2936](https://github.com/emsesp/EMS-ESP32/issues/2936) and [#2960](https://github.com/emsesp/EMS-ESP32/issues/2960) +- missing translations [#3015](https://github.com/emsesp/EMS-ESP32/issues/3015) +- custom entities check fetch length +- modbus initialization [#3064](https://github.com/emsesp/EMS-ESP32/issues/3064) + +## Changed + +- weblogbuffer up to 1000 messages with PSRAM, mentioned in [#2933](https://github.com/emsesp/EMS-ESP32/issues/2933) +- validate custom entity writes, [#2931](https://github.com/emsesp/EMS-ESP32/issues/2931) +- remove wrong burnMinPower [#2918](https://github.com/emsesp/EMS-ESP32/issues/2918) +- store scheduler active state to nvs [#2946](https://github.com/emsesp/EMS-ESP32/discussions/2946) +- translated modes `heat` and `eco` for HA-climate mode-str-tpl +- support `minflowtemp` and `baseflowtemp` [#2969](https://github.com/emsesp/EMS-ESP32/discussions/2969) +- update version if it is 00.00 in first read [#2981](https://github.com/emsesp/EMS-ESP32/issues/2981) +- device class for % values [#2980](https://github.com/emsesp/EMS-ESP32/issues/2980) +- fetch telegrams: set length to fetch [#3017](https://github.com/emsesp/EMS-ESP32/issues/3017) +- move http client from stack to heap +- heap optimizations [#3021](https://github.com/emsesp/EMS-ESP32/discussions/3021) +- check and read 0x470 as summer2_typeids[0] only if received [#2686](https://github.com/emsesp/EMS-ESP32/issues/2686), [#3055](https://github.com/emsesp/EMS-ESP32/issues/3055) +- default bus-id: gateway1(0x49), tx-mode: auto + ## [3.8.1] 11 January 2026 ## Added @@ -907,4 +945,4 @@ There are breaking changes between 3.5.x and earlier versions of 3.6.0. Please r - some names of mqtt-tags like in v2.2.1 - new ESP32 partition side to allow for smoother OTA and fallback - Network Gateway IP is optional (#682)emsesp/EMS-ESP -- moved to a new GitHub repo +- moved to a new GitHub repo \ No newline at end of file diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index 07a443148..c206537b9 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -6,42 +6,13 @@ For more details go to [emsesp.org](https://emsesp.org/). ## Added -- comfortpoint for BC400 [#2935](https://github.com/emsesp/EMS-ESP32/issues/2935) -- customize device brand [#2784](https://github.com/emsesp/EMS-ESP32/issues/2784) -- set model for ems-esp devices temperature, analog, etc. [#2958](https://github.com/emsesp/EMS-ESP32/discussions/2958) -- prometheus metrics for temperature/analog/scheduler/custom [#2962](https://github.com/emsesp/EMS-ESP32/issues/2962) -- boiler pumpkick [#2965](https://github.com/emsesp/EMS-ESP32/discussions/2965) -- heatpump reset [#2933](https://github.com/emsesp/EMS-ESP32/issues/2933) -- e-mail notification using ReadyMail Client -- 2.nd freshwater module (dhw4, dhw5) [#2991](https://github.com/emsesp/EMS-ESP32/issues/2991) -- full system backup and restore -- updated version check [#3047](https://github.com/emsesp/EMS-ESP32/issues/3047) -- auto-logic to set ht3/ems+ tx-mode -- polarity for digital_in sensors [#3070](https://github.com/emsesp/EMS-ESP32/discussions/3070) - user-requested LED blink [#3063](https://github.com/emsesp/EMS-ESP32/issues/3063) +- KM300 at address 0x4A [#3084](https://github.com/emsesp/EMS-ESP32/issues/3084) ## Fixed -- SRC climate creation [#2936](https://github.com/emsesp/EMS-ESP32/issues/2936) and [#2960](https://github.com/emsesp/EMS-ESP32/issues/2960) -- missing translations [#3015](https://github.com/emsesp/EMS-ESP32/issues/3015) -- custom entities check fetch length -- modbus initialization [#3064](https://github.com/emsesp/EMS-ESP32/issues/3064) +- signed value for solarInfuence [#3077](https://github.com/emsesp/EMS-ESP32/issues/3077) ## Changed -- weblogbuffer up to 1000 messages with PSRAM, mentioned in [#2933](https://github.com/emsesp/EMS-ESP32/issues/2933) -- validate custom entity writes, [#2931](https://github.com/emsesp/EMS-ESP32/issues/2931) -- remove wrong burnMinPower [#2918](https://github.com/emsesp/EMS-ESP32/issues/2918) -- store scheduler active state to nvs [#2946](https://github.com/emsesp/EMS-ESP32/discussions/2946) -- translated modes `heat` and `eco` for HA-climate mode-str-tpl -- support `minflowtemp` and `baseflowtemp` [#2969](https://github.com/emsesp/EMS-ESP32/discussions/2969) -- update version if it is 00.00 in first read [#2981](https://github.com/emsesp/EMS-ESP32/issues/2981) -- device class for % values [#2980](https://github.com/emsesp/EMS-ESP32/issues/2980) -- use tasmota core 2026.03.30 -- secure mqtt uses ESP_SSLClient -- fetch telegrams: set length to fetch [#3017](https://github.com/emsesp/EMS-ESP32/issues/3017) -- move http client from stack to heap -- heap optimizations [#3021](https://github.com/emsesp/EMS-ESP32/discussions/3021) -- refactored network code into a single class [#3052](https://github.com/emsesp/EMS-ESP32/pull/3052) -- check and read 0x470 as summer2_typeids[0] only if received [#2686](https://github.com/emsesp/EMS-ESP32/issues/2686), [#3055](https://github.com/emsesp/EMS-ESP32/issues/3055) -- default bus-id: gateway1(0x49), tx-mode: auto +- various memory optimizations [#3083](https://github.com/emsesp/EMS-ESP32/issues/3083) \ No newline at end of file diff --git a/docs/Modbus-Entity-Registers.md b/docs/Modbus-Entity-Registers.md index 739350265..bdb04eb14 100644 --- a/docs/Modbus-Entity-Registers.md +++ b/docs/Modbus-Entity-Registers.md @@ -5376,9 +5376,9 @@ uint8 | hc1.switchprogmode | switch program mode | enum | | true | HC | 55 | 1 | 1 | int8 | hc1.redthreshold | reduction threshold | int8 (>=12<=22) | C | true | HC | 56 | 1 | 1/2 | -uint8 -| hc1.solarinfl | solar influence | uint8 (>=-5<=4294967295) | C | true | HC | 57 | 1 | 1 | -| hc1.currsolarinfl | current solar influence | uint8 | C | false | HC | 58 | 1 | 1/10 | +int8 +| hc1.solarinfl | solar influence | int8 (>=-5<=0) | C | true | HC | 57 | 1 | 1 | +| hc1.currsolarinfl | current solar influence | int8 | C | false | HC | 58 | 1 | 1/10 | | hc1.heatingpid | heating PID | enum | | true | HC | 59 | 1 | 1 | | hc1.pumpopt | pump optimization | boolean | | true | HC | 60 | 1 | 1 | uint8 @@ -5985,9 +5985,9 @@ uint8 | hc1.switchprogmode | switch program mode | enum | | true | HC | 55 | 1 | 1 | int8 | hc1.redthreshold | reduction threshold | int8 (>=12<=22) | C | true | HC | 56 | 1 | 1/2 | -uint8 -| hc1.solarinfl | solar influence | uint8 (>=-5<=4294967295) | C | true | HC | 57 | 1 | 1 | -| hc1.currsolarinfl | current solar influence | uint8 | C | false | HC | 58 | 1 | 1/10 | +int8 +| hc1.solarinfl | solar influence | int8 (>=-5<=0) | C | true | HC | 57 | 1 | 1 | +| hc1.currsolarinfl | current solar influence | int8 | C | false | HC | 58 | 1 | 1/10 | | hc1.heatingpid | heating PID | enum | | true | HC | 59 | 1 | 1 | | hc1.pumpopt | pump optimization | boolean | | true | HC | 60 | 1 | 1 | uint8 @@ -6137,9 +6137,9 @@ uint8 | hc1.switchprogmode | switch program mode | enum | | true | HC | 55 | 1 | 1 | int8 | hc1.redthreshold | reduction threshold | int8 (>=12<=22) | C | true | HC | 56 | 1 | 1/2 | -uint8 -| hc1.solarinfl | solar influence | uint8 (>=-5<=4294967295) | C | true | HC | 57 | 1 | 1 | -| hc1.currsolarinfl | current solar influence | uint8 | C | false | HC | 58 | 1 | 1/10 | +int8 +| hc1.solarinfl | solar influence | int8 (>=-5<=0) | C | true | HC | 57 | 1 | 1 | +| hc1.currsolarinfl | current solar influence | int8 | C | false | HC | 58 | 1 | 1/10 | | hc1.heatingpid | heating PID | enum | | true | HC | 59 | 1 | 1 | | hc1.pumpopt | pump optimization | boolean | | true | HC | 60 | 1 | 1 | uint8 @@ -6304,9 +6304,9 @@ uint8 | hc1.switchprogmode | switch program mode | enum | | true | HC | 55 | 1 | 1 | int8 | hc1.redthreshold | reduction threshold | int8 (>=12<=22) | C | true | HC | 56 | 1 | 1/2 | -uint8 -| hc1.solarinfl | solar influence | uint8 (>=-5<=4294967295) | C | true | HC | 57 | 1 | 1 | -| hc1.currsolarinfl | current solar influence | uint8 | C | false | HC | 58 | 1 | 1/10 | +int8 +| hc1.solarinfl | solar influence | int8 (>=-5<=0) | C | true | HC | 57 | 1 | 1 | +| hc1.currsolarinfl | current solar influence | int8 | C | false | HC | 58 | 1 | 1/10 | | hc1.heatingpid | heating PID | enum | | true | HC | 59 | 1 | 1 | | hc1.pumpopt | pump optimization | boolean | | true | HC | 60 | 1 | 1 | uint8 @@ -6498,9 +6498,9 @@ uint8 | hc1.switchprogmode | switch program mode | enum | | true | HC | 55 | 1 | 1 | int8 | hc1.redthreshold | reduction threshold | int8 (>=12<=22) | C | true | HC | 56 | 1 | 1/2 | -uint8 -| hc1.solarinfl | solar influence | uint8 (>=-5<=4294967295) | C | true | HC | 57 | 1 | 1 | -| hc1.currsolarinfl | current solar influence | uint8 | C | false | HC | 58 | 1 | 1/10 | +int8 +| hc1.solarinfl | solar influence | int8 (>=-5<=0) | C | true | HC | 57 | 1 | 1 | +| hc1.currsolarinfl | current solar influence | int8 | C | false | HC | 58 | 1 | 1/10 | | hc1.heatingpid | heating PID | enum | | true | HC | 59 | 1 | 1 | | hc1.pumpopt | pump optimization | boolean | | true | HC | 60 | 1 | 1 | uint8 diff --git a/docs/dump_entities.csv b/docs/dump_entities.csv index 0bd4e604b..7760b34d5 100644 --- a/docs/dump_entities.csv +++ b/docs/dump_entities.csv @@ -4057,8 +4057,8 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "UI800, BC400",thermostat,4,hc1.cooloffdelay,cooling off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_cooling_off_delay,number.thermostat_hc1_cooloffdelay,6,1,1,54,1 "UI800, BC400",thermostat,4,hc1.switchprogmode,switch program mode,enum [level\|absolute] (>=0<=0), ,true,select.thermostat_hc1_switch_program_mode,select.thermostat_hc1_switchprogmode,6,1,1,55,1 "UI800, BC400",thermostat,4,hc1.redthreshold,reduction threshold,int8 (>=12<=22),C,true,number.thermostat_hc1_reduction_threshold,number.thermostat_hc1_redthreshold,6,1,1/2,56,1 -"UI800, BC400",thermostat,4,hc1.solarinfl,solar influence,uint8 (>=-5<=4294967295),C,true,number.thermostat_hc1_solar_influence,number.thermostat_hc1_solarinfl,6,1,1,57,1 -"UI800, BC400",thermostat,4,hc1.currsolarinfl,current solar influence,uint8,C,false,sensor.thermostat_hc1_current_solar_influence,sensor.thermostat_hc1_currsolarinfl,6,1,1/10,58,1 +"UI800, BC400",thermostat,4,hc1.solarinfl,solar influence,int8 (>=-5<=0),C,true,number.thermostat_hc1_solar_influence,number.thermostat_hc1_solarinfl,6,1,1,57,1 +"UI800, BC400",thermostat,4,hc1.currsolarinfl,current solar influence,int8,C,false,sensor.thermostat_hc1_current_solar_influence,sensor.thermostat_hc1_currsolarinfl,6,1,1/10,58,1 "UI800, BC400",thermostat,4,hc1.heatingpid,heating PID,enum [fast\|medium\|slow] (>=0<=0), ,true,select.thermostat_hc1_heating_PID,select.thermostat_hc1_heatingpid,6,1,1,59,1 "UI800, BC400",thermostat,4,hc1.pumpopt,pump optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_pump_optimization,switch.thermostat_hc1_pumpopt,6,1,1,60,1 "UI800, BC400",thermostat,4,hc1.inttimefloor,integral time floor,uint8 (>=160<=320),minutes,true,number.thermostat_hc1_integral_time_floor,number.thermostat_hc1_inttimefloor,6,1,10,61,1 @@ -4447,8 +4447,8 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "RC200, CW100, CR120, CR50",thermostat,157,hc1.cooloffdelay,cooling off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_cooling_off_delay,number.thermostat_hc1_cooloffdelay,6,1,1,54,1 "RC200, CW100, CR120, CR50",thermostat,157,hc1.switchprogmode,switch program mode,enum [level\|absolute] (>=0<=0), ,true,select.thermostat_hc1_switch_program_mode,select.thermostat_hc1_switchprogmode,6,1,1,55,1 "RC200, CW100, CR120, CR50",thermostat,157,hc1.redthreshold,reduction threshold,int8 (>=12<=22),C,true,number.thermostat_hc1_reduction_threshold,number.thermostat_hc1_redthreshold,6,1,1/2,56,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.solarinfl,solar influence,uint8 (>=-5<=4294967295),C,true,number.thermostat_hc1_solar_influence,number.thermostat_hc1_solarinfl,6,1,1,57,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.currsolarinfl,current solar influence,uint8,C,false,sensor.thermostat_hc1_current_solar_influence,sensor.thermostat_hc1_currsolarinfl,6,1,1/10,58,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.solarinfl,solar influence,int8 (>=-5<=0),C,true,number.thermostat_hc1_solar_influence,number.thermostat_hc1_solarinfl,6,1,1,57,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.currsolarinfl,current solar influence,int8,C,false,sensor.thermostat_hc1_current_solar_influence,sensor.thermostat_hc1_currsolarinfl,6,1,1/10,58,1 "RC200, CW100, CR120, CR50",thermostat,157,hc1.heatingpid,heating PID,enum [fast\|medium\|slow] (>=0<=0), ,true,select.thermostat_hc1_heating_PID,select.thermostat_hc1_heatingpid,6,1,1,59,1 "RC200, CW100, CR120, CR50",thermostat,157,hc1.pumpopt,pump optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_pump_optimization,switch.thermostat_hc1_pumpopt,6,1,1,60,1 "RC200, CW100, CR120, CR50",thermostat,157,hc1.inttimefloor,integral time floor,uint8 (>=160<=320),minutes,true,number.thermostat_hc1_integral_time_floor,number.thermostat_hc1_inttimefloor,6,1,10,61,1 @@ -4545,8 +4545,8 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.cooloffdelay,cooling off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_cooling_off_delay,number.thermostat_hc1_cooloffdelay,6,1,1,54,1 "RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.switchprogmode,switch program mode,enum [level\|absolute] (>=0<=0), ,true,select.thermostat_hc1_switch_program_mode,select.thermostat_hc1_switchprogmode,6,1,1,55,1 "RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.redthreshold,reduction threshold,int8 (>=12<=22),C,true,number.thermostat_hc1_reduction_threshold,number.thermostat_hc1_redthreshold,6,1,1/2,56,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.solarinfl,solar influence,uint8 (>=-5<=4294967295),C,true,number.thermostat_hc1_solar_influence,number.thermostat_hc1_solarinfl,6,1,1,57,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.currsolarinfl,current solar influence,uint8,C,false,sensor.thermostat_hc1_current_solar_influence,sensor.thermostat_hc1_currsolarinfl,6,1,1/10,58,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.solarinfl,solar influence,int8 (>=-5<=0),C,true,number.thermostat_hc1_solar_influence,number.thermostat_hc1_solarinfl,6,1,1,57,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.currsolarinfl,current solar influence,int8,C,false,sensor.thermostat_hc1_current_solar_influence,sensor.thermostat_hc1_currsolarinfl,6,1,1/10,58,1 "RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.heatingpid,heating PID,enum [fast\|medium\|slow] (>=0<=0), ,true,select.thermostat_hc1_heating_PID,select.thermostat_hc1_heatingpid,6,1,1,59,1 "RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.pumpopt,pump optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_pump_optimization,switch.thermostat_hc1_pumpopt,6,1,1,60,1 "RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.inttimefloor,integral time floor,uint8 (>=160<=320),minutes,true,number.thermostat_hc1_integral_time_floor,number.thermostat_hc1_inttimefloor,6,1,10,61,1 @@ -4652,8 +4652,8 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Rego 2000/3000",thermostat,172,hc1.cooloffdelay,cooling off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_cooling_off_delay,number.thermostat_hc1_cooloffdelay,6,1,1,54,1 "Rego 2000/3000",thermostat,172,hc1.switchprogmode,switch program mode,enum [level\|absolute] (>=0<=0), ,true,select.thermostat_hc1_switch_program_mode,select.thermostat_hc1_switchprogmode,6,1,1,55,1 "Rego 2000/3000",thermostat,172,hc1.redthreshold,reduction threshold,int8 (>=12<=22),C,true,number.thermostat_hc1_reduction_threshold,number.thermostat_hc1_redthreshold,6,1,1/2,56,1 -"Rego 2000/3000",thermostat,172,hc1.solarinfl,solar influence,uint8 (>=-5<=4294967295),C,true,number.thermostat_hc1_solar_influence,number.thermostat_hc1_solarinfl,6,1,1,57,1 -"Rego 2000/3000",thermostat,172,hc1.currsolarinfl,current solar influence,uint8,C,false,sensor.thermostat_hc1_current_solar_influence,sensor.thermostat_hc1_currsolarinfl,6,1,1/10,58,1 +"Rego 2000/3000",thermostat,172,hc1.solarinfl,solar influence,int8 (>=-5<=0),C,true,number.thermostat_hc1_solar_influence,number.thermostat_hc1_solarinfl,6,1,1,57,1 +"Rego 2000/3000",thermostat,172,hc1.currsolarinfl,current solar influence,int8,C,false,sensor.thermostat_hc1_current_solar_influence,sensor.thermostat_hc1_currsolarinfl,6,1,1/10,58,1 "Rego 2000/3000",thermostat,172,hc1.heatingpid,heating PID,enum [fast\|medium\|slow] (>=0<=0), ,true,select.thermostat_hc1_heating_PID,select.thermostat_hc1_heatingpid,6,1,1,59,1 "Rego 2000/3000",thermostat,172,hc1.pumpopt,pump optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_pump_optimization,switch.thermostat_hc1_pumpopt,6,1,1,60,1 "Rego 2000/3000",thermostat,172,hc1.inttimefloor,integral time floor,uint8 (>=160<=320),minutes,true,number.thermostat_hc1_integral_time_floor,number.thermostat_hc1_inttimefloor,6,1,10,61,1 @@ -4777,8 +4777,8 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.cooloffdelay,cooling off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_cooling_off_delay,number.thermostat_hc1_cooloffdelay,6,1,1,54,1 "Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.switchprogmode,switch program mode,enum [level\|absolute] (>=0<=0), ,true,select.thermostat_hc1_switch_program_mode,select.thermostat_hc1_switchprogmode,6,1,1,55,1 "Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.redthreshold,reduction threshold,int8 (>=12<=22),C,true,number.thermostat_hc1_reduction_threshold,number.thermostat_hc1_redthreshold,6,1,1/2,56,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.solarinfl,solar influence,uint8 (>=-5<=4294967295),C,true,number.thermostat_hc1_solar_influence,number.thermostat_hc1_solarinfl,6,1,1,57,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.currsolarinfl,current solar influence,uint8,C,false,sensor.thermostat_hc1_current_solar_influence,sensor.thermostat_hc1_currsolarinfl,6,1,1/10,58,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.solarinfl,solar influence,int8 (>=-5<=0),C,true,number.thermostat_hc1_solar_influence,number.thermostat_hc1_solarinfl,6,1,1,57,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.currsolarinfl,current solar influence,int8,C,false,sensor.thermostat_hc1_current_solar_influence,sensor.thermostat_hc1_currsolarinfl,6,1,1/10,58,1 "Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.heatingpid,heating PID,enum [fast\|medium\|slow] (>=0<=0), ,true,select.thermostat_hc1_heating_PID,select.thermostat_hc1_heatingpid,6,1,1,59,1 "Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.pumpopt,pump optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_pump_optimization,switch.thermostat_hc1_pumpopt,6,1,1,60,1 "Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.inttimefloor,integral time floor,uint8 (>=160<=320),minutes,true,number.thermostat_hc1_integral_time_floor,number.thermostat_hc1_inttimefloor,6,1,10,61,1 diff --git a/src/ESP32React/UploadFileService.cpp b/src/ESP32React/UploadFileService.cpp index 4e58b0d8b..766d45946 100644 --- a/src/ESP32React/UploadFileService.cpp +++ b/src/ESP32React/UploadFileService.cpp @@ -48,7 +48,7 @@ void UploadFileService::handleUpload(AsyncWebServerRequest * request, const Stri // LittleFS filesystem image _is_filesystem = true; _md5[0] = '\0'; // clear any stale md5 so Update.end() doesn't compare against it - } else if ((extension == "bin") && (filesize > 1900000)) { + } else if ((extension == "bin") && (filesize > 1000000)) { _is_firmware = true; } else if (extension == "json") { _md5[0] = '\0'; // clear md5 diff --git a/src/core/device_library.h b/src/core/device_library.h index 2c291488c..00dceb6fd 100644 --- a/src/core/device_library.h +++ b/src/core/device_library.h @@ -187,8 +187,9 @@ { 74, DeviceType::ALERT, "EM10", DeviceFlags::EMS_DEVICE_FLAG_NONE}, // Gateways - 0x48 -{17, DeviceType::GATEWAY, "MX400", DeviceFlags::EMS_DEVICE_FLAG_NONE}, // 0x48 and 0x4B -{189, DeviceType::GATEWAY, "KM200, MB LAN 2", DeviceFlags::EMS_DEVICE_FLAG_NONE}, +{17, DeviceType::GATEWAY, "MX400", DeviceFlags::EMS_DEVICE_FLAG_NONE}, // 0x48, 0x4B, or 0x50 as wireless base +{189, DeviceType::GATEWAY, "KM200, MB LAN 2", DeviceFlags::EMS_DEVICE_FLAG_NONE}, // 0x48 +{222, DeviceType::GATEWAY, "KM300,", DeviceFlags::EMS_DEVICE_FLAG_NONE}, // 0x4A {252, DeviceType::GATEWAY, "K30RF, MX300", DeviceFlags::EMS_DEVICE_FLAG_NONE}, // Generic - 0x40 or other with no product-id and no version @@ -207,4 +208,4 @@ // {157, DeviceType::THERMOSTAT, "RC120", DeviceFlags::EMS_DEVICE_FLAG_CR120} #endif -// clang-format on +// clang-format on \ No newline at end of file diff --git a/src/core/locale_translations.h b/src/core/locale_translations.h index 13db7ea5f..06e397e7a 100644 --- a/src/core/locale_translations.h +++ b/src/core/locale_translations.h @@ -293,7 +293,7 @@ MAKE_WORD_TRANSLATION(curve, "heatingcurve", "Heizkurve", "stookkromme", "värme MAKE_WORD_TRANSLATION(radiator, "radiator", "Heizkörper", "radiator", "Radiator", "grzejniki", "radiator", "radiateur", "radyatör", "radiatore", "radiátor", "radiátor") MAKE_WORD_TRANSLATION(convector, "convector", "Konvektor", "convector", "Konvektor", "konwektory", "konvektor", "convecteur", "convector", "convettore", "konvektor", "konvektor") MAKE_WORD_TRANSLATION(floor, "floor", "Fussboden", "vloer", "Golv", "podłoga", "gulv", "sol", "yer", "pavimento", "podlaha", "podlaha") -MAKE_WORD_TRANSLATION(roomflow, "roomflow", "Raum Fluß", "kamer doorstroming", "Rumsflöde", "przepływ w pomieszczeniu", "romstrøm", "flux de la pièce", "oda akışı", "flusso della stanza", "prúdenie miestnosti", "průtok mistnosti") +MAKE_WORD_TRANSLATION(roomflow, "roomflow", "Raum Fluss", "kamer doorstroming", "Rumsflöde", "przepływ w pomieszczeniu", "romstrøm", "flux de la pièce", "oda akışı", "flusso della stanza", "prúdenie miestnosti", "průtok mistnosti") MAKE_WORD_TRANSLATION(roomload, "roomload", "Raum Bedarf", "kamer behoefte", "Rumsbehov", "zapotrzebowanie pomieszczenia", "rombelastning", "charge de la pièce", "oda yükü", "carico della stanza", "izbová zaťaž", "zatížení místnosti") MAKE_WORD_TRANSLATION(summer, "summer", "Sommer", "zomer", "Sommar", "lato", "sommer", "été", "yaz", "estate", "leto", "léto") MAKE_WORD_TRANSLATION(winter, "winter", "Winter", "winter", "Vinter", "zima", "vinter", "hiver", "kış", "inverno", "zima", "zima") @@ -827,8 +827,8 @@ MAKE_TRANSLATION(vacations7, "vacations7", "vacation dates 7", "Urlaubstage 7", MAKE_TRANSLATION(vacations8, "vacations8", "vacation dates 8", "Urlaubstage 8", "Vakantiedagen 8", "Semesterdatum 8", "urlop 8", "feriedager 8", "dates vacances 8", "izin günleri 8", "date vacanze 8", "termíny dovolenky 8", "data prázdnin 8") MAKE_TRANSLATION(absent, "absent", "absent", "Abwesend", "", "Frånvarande", "", "", "", "", "", "chýbajúci", "chybějící") MAKE_TRANSLATION(redthreshold, "redthreshold", "reduction threshold", "Absenkschwelle", "", "Tröskel för sänkning", "", "", "", "", "", "zníženie tresholdu", "práh snížení") -MAKE_TRANSLATION(solarinfl, "solarinfl", "solar influence", "Solareinfluß", "", "", "", "", "", "", "", "slnečný vplyv", "sluneční vliv") -MAKE_TRANSLATION(currsolarinfl, "currsolarinfl", "current solar influence", "akt. Solareinfluß", "", "", "", "", "", "", "", "aktuálny slnečný vplyv", "aktuální sluneční vliv") +MAKE_TRANSLATION(solarinfl, "solarinfl", "solar influence", "Solareinfluss", "", "", "", "", "", "", "", "slnečný vplyv", "sluneční vliv") +MAKE_TRANSLATION(currsolarinfl, "currsolarinfl", "current solar influence", "akt. Solareinfluss", "", "", "", "", "", "", "", "aktuálny slnečný vplyv", "aktuální sluneční vliv") MAKE_TRANSLATION(hpmode, "hpmode", "HP Mode", "WP-Modus", "Modus warmtepomp", "Värmepumpsläge", "tryb pracy pompy ciepła", "", "", "yüksek güç modu", "Modalità Termopompa", "Režim TČ", "režim tepelného čerpadla") MAKE_TRANSLATION(dewoffset, "dewoffset", "dew point offset", "Taupunktdifferenz", "Offset dauwpunt", "Daggpunktsförskjutning", "przesunięcie punktu rosy", "", "", "çiğ noktası göreli", "differenza del punto di rugiada", "posun rosného bodu", "offset rosného bodu") MAKE_TRANSLATION(roomtempdiff, "roomtempdiff", "room temp difference", "Raumtemperaturdifferenz", "Verschiltemperatuur kamertemp", "Rumstemperaturskillnad", "różnica temp. pomieszczenia", "", "", "oda sıcaklığı farkı", "differenza temperatura ambiente", "rozdiel izbovej teploty", "rozdíl teploty místnosti") diff --git a/src/core/telegram.cpp b/src/core/telegram.cpp index 46f0cdd30..010b3ae49 100644 --- a/src/core/telegram.cpp +++ b/src/core/telegram.cpp @@ -572,12 +572,11 @@ bool TxService::send_raw(const char * telegram_data) { return false; } - // since the telegram data is a const, make a copy. add 1 to grab the \0 EOS - char telegram[strlen(telegram_data) + 1]; - strlcpy(telegram, telegram_data, sizeof(telegram)); + // since the telegram data is a const, make a copy + char * telegram = strdup(telegram_data); uint8_t count = 0; - uint8_t data[2 + strlen(telegram) / 3]; + uint8_t data[256]; // max raw telegram length // get values char * p = strtok(telegram, " ,"); // delimiter @@ -585,7 +584,7 @@ bool TxService::send_raw(const char * telegram_data) { data[count++] = (uint8_t)strtol(p, 0, 16); p = strtok(nullptr, " ,"); } - + free(telegram); // check valid length if (count < 4) { return false; @@ -701,4 +700,4 @@ uint16_t TxService::post_send_query() { return post_typeid; } -} // namespace emsesp +} // namespace emsesp \ No newline at end of file diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index e5d1752b9..0c0edb03b 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -5043,8 +5043,8 @@ void Thermostat::register_device_values_hc(std::shared_ptrsolarInfl, DeviceValueType::UINT8, FL_(solarinfl), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_solarinfl), -5, -1); - register_device_value(tag, &hc->currSolarInfl, DeviceValueType::UINT8, DeviceValueNumOp::DV_NUMOP_DIV10, FL_(currsolarinfl), DeviceValueUOM::DEGREES); + register_device_value(tag, &hc->solarInfl, DeviceValueType::INT8, FL_(solarinfl), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_solarinfl), -5, 0); + register_device_value(tag, &hc->currSolarInfl, DeviceValueType::INT8, DeviceValueNumOp::DV_NUMOP_DIV10, FL_(currsolarinfl), DeviceValueUOM::DEGREES); register_device_value(tag, &hc->heatingpid, DeviceValueType::ENUM, FL_(enum_PID), FL_(heatingPID), DeviceValueUOM::NONE, MAKE_CF_CB(set_heatingpid)); register_device_value(tag, &hc->pumpopt, DeviceValueType::BOOL, FL_(pumpopt), DeviceValueUOM::NONE, MAKE_CF_CB(set_pumpopt)); register_device_value(tag,