mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2026-01-31 02:59:10 +03:00
Compare commits
67 Commits
3ea88a2be0
...
v3.8.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
28135c225b | ||
|
|
eaa277fef0 | ||
|
|
e418b7d8e7 | ||
|
|
a4e3be6a69 | ||
|
|
a1bc5bb055 | ||
|
|
f444ca31e0 | ||
|
|
1b70b55989 | ||
|
|
1487f30c43 | ||
|
|
e00eb8e64f | ||
|
|
f41bb3671c | ||
|
|
22c75e6df3 | ||
|
|
5ab10b7aa6 | ||
|
|
ee5fd4d0eb | ||
|
|
46f35bc67c | ||
|
|
ec85a7ec24 | ||
|
|
02f2389587 | ||
|
|
7f140021aa | ||
|
|
6796962c1e | ||
|
|
df6de21cf4 | ||
|
|
df9f75a5c9 | ||
|
|
7bd8710eb6 | ||
|
|
32f2c6d341 | ||
|
|
86919c1684 | ||
|
|
86e29515e7 | ||
|
|
46eb4185d7 | ||
|
|
8da6761a48 | ||
|
|
9233f0dfcc | ||
|
|
292f743b14 | ||
|
|
dd6dfffd57 | ||
|
|
ec705a5307 | ||
|
|
f45f071710 | ||
|
|
f3858546de | ||
|
|
d0ac0b7804 | ||
|
|
d8284ec09f | ||
|
|
6e982acde8 | ||
|
|
8c94ce99b2 | ||
|
|
fc057d18c9 | ||
|
|
18e9b99413 | ||
|
|
a47e0e8266 | ||
|
|
f412ddc716 | ||
|
|
29110e96e5 | ||
|
|
b65866217a | ||
|
|
611e3b1243 | ||
|
|
2ca0a0c634 | ||
|
|
7eb1f061b7 | ||
|
|
50459a23fe | ||
|
|
5bf53c3389 | ||
|
|
4b7aa95be3 | ||
|
|
70943f5758 | ||
|
|
3bc280b817 | ||
|
|
62b15a5319 | ||
|
|
8dd18802d6 | ||
|
|
57a516a83a | ||
|
|
a57fdaa4b3 | ||
|
|
4841e42286 | ||
|
|
8c2d2b06ed | ||
|
|
38c8b1b7f0 | ||
|
|
6fb5933a02 | ||
|
|
c0944433be | ||
|
|
478e6362c9 | ||
|
|
4d6354db78 | ||
|
|
beab0f0c77 | ||
|
|
c17749bd22 | ||
|
|
2bad769c5c | ||
|
|
8ad89ca64b | ||
|
|
9244d8daec | ||
|
|
02d01334b2 |
86
CHANGELOG.md
86
CHANGELOG.md
@@ -5,6 +5,92 @@ 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/),
|
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).
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
|
## [3.8.0]
|
||||||
|
|
||||||
|
## Added
|
||||||
|
|
||||||
|
- analogsensor types: NTC and RGB-Led
|
||||||
|
- Flag for HMC310 [#2465](https://github.com/emsesp/EMS-ESP32/issues/2465)
|
||||||
|
- boiler auxheatersource [#2489](https://github.com/emsesp/EMS-ESP32/discussions/2489)
|
||||||
|
- thermostat last error for RC100/300 [#2501](https://github.com/emsesp/EMS-ESP32/issues/2501)
|
||||||
|
- boiler 0xC6 telegram [#1963](https://github.com/emsesp/EMS-ESP32/issues/1963)
|
||||||
|
- CS6800i changes [#2448](https://github.com/emsesp/EMS-ESP32/issues/2448), [#2449](https://github.com/emsesp/EMS-ESP32/issues/2449)
|
||||||
|
- charging pump [#2544](https://github.com/emsesp/EMS-ESP32/issues/2544)
|
||||||
|
- hybrid CSH5800iG [#2569](https://github.com/emsesp/EMS-ESP32/issues/2569)
|
||||||
|
- added EMS Device details to Home Assistant MQTT Discovery
|
||||||
|
- disinfection command [#2601](https://github.com/emsesp/EMS-ESP32/issues/2601)
|
||||||
|
- added new board profile for upcoming BBQKees E32V2.2
|
||||||
|
- set differential pressure entity in Mixer device
|
||||||
|
- set set climate action cooling/heating in HA [#2583](https://github.com/emsesp/EMS-ESP32/issues/2583)
|
||||||
|
- Internal sensors of E32V2_2
|
||||||
|
- FW200 display options [#2610](https://github.com/emsesp/EMS-ESP32/discussions/2610)
|
||||||
|
- CR11 mode settings OFF/MANUAL depends on selTemp [#2437](https://github.com/emsesp/EMS-ESP32/issues/2437)
|
||||||
|
- implemented eFuse settings for BBQKees boards to store model type and ESP chipset
|
||||||
|
- Analogsensors for pulse output [#2624](https://github.com/emsesp/EMS-ESP32/discussions/2624)
|
||||||
|
- Analogsensors frequency input [#2631](https://github.com/emsesp/EMS-ESP32/discussions/2631)
|
||||||
|
- SRC plus thermostats [#2636](https://github.com/emsesp/EMS-ESP32/issues/2636)
|
||||||
|
- Greenstar 2000 [#2645](https://github.com/emsesp/EMS-ESP32/issues/2645)
|
||||||
|
- RC3xx `dhw modetype` [#2659](https://github.com/emsesp/EMS-ESP32/discussions/2659)
|
||||||
|
- new boiler entities VR0,VR1, compressor speed [#2669](https://github.com/emsesp/EMS-ESP32/issues/2669)
|
||||||
|
- solar temperature TS16 [#2690](https://github.com/emsesp/EMS-ESP32/issues/2690)
|
||||||
|
- pumpmode enum for HT3 boilers, add commands for manual defrost, chimneysweeper [#2727](https://github.com/emsesp/EMS-ESP32/issues/2727)
|
||||||
|
- pid settings [#2735](https://github.com/emsesp/EMS-ESP32/issues/2735)
|
||||||
|
- refresh MQTT button added to MQTT Settings page
|
||||||
|
- heating assistance, rounding custum settings [#2763](https://github.com/emsesp/EMS-ESP32/discussions/2763)
|
||||||
|
- added counter 0..2 for short pulses, high frequency [#2758](https://github.com/emsesp/EMS-ESP32/issues/2758)
|
||||||
|
- added LWT (Last Will and Testament) to MQTT entities in Home Assistant
|
||||||
|
- added api/metrics endpoint for prometheus integration by @gr3enk [#2774](https://github.com/emsesp/EMS-ESP32/pull/2774)
|
||||||
|
- added RTL8201 to eth phy list [#2800](https://github.com/emsesp/EMS-ESP32/issues/2800)
|
||||||
|
- added partitions to Web UI Version page, so previous firmware versions can be installed [#2837](https://github.com/emsesp/EMS-ESP32/issues/2837)
|
||||||
|
- button pressures show LED. On a long press (10 seconds) the LED flashes for 5 seconds to indicate a factory reset is about to happen. [#2848](https://github.com/emsesp/EMS-ESP32/issues/2848)
|
||||||
|
- added `txpause` command to pause the TX, by setting Txmode to 0 (disabled) [#2850](https://github.com/emsesp/EMS-ESP32/issues/2850)
|
||||||
|
|
||||||
|
## Fixed
|
||||||
|
|
||||||
|
- dhw/switchtime [#2490](https://github.com/emsesp/EMS-ESP32/issues/2490)
|
||||||
|
- switch to secure mqtt [#2492](https://github.com/emsesp/EMS-ESP32/issues/2492)
|
||||||
|
- update link buttons [#2497](https://github.com/emsesp/EMS-ESP32/issues/2497)
|
||||||
|
- refresh scheduler states [#2502](https://github.com/emsesp/EMS-ESP32/discussions/2502)
|
||||||
|
- also rebuild HA config on mqtt connect for scheduler, custom and shower
|
||||||
|
- FB100 controls the hc, not the master [#2510](https://github.com/emsesp/EMS-ESP32/issues/2510)
|
||||||
|
- IPM DHW module, [#2524](https://github.com/emsesp/EMS-ESP32/issues/2524)
|
||||||
|
- charge optimization [#2543](https://github.com/emsesp/EMS-ESP32/issues/2543)
|
||||||
|
- shower active state retained, shows correctly in HA
|
||||||
|
- MQTT Command Topic with slashes [#2571](https://github.com/emsesp/EMS-ESP32/issues/2571)
|
||||||
|
- Add pulsed water meter input to V1.3 gateway with Lilygo S3 [#2550](https://github.com/emsesp/EMS-ESP32/issues/2550)
|
||||||
|
- fix missing long 10-second press of Button to perform a factory reset
|
||||||
|
- fix wwMaxPower on Junkers ZBS14 [#2609](https://github.com/emsesp/EMS-ESP32/issues/2609)
|
||||||
|
- ventilation bypass state from telegram 0x55C [#1197](https://github.com/emsesp/EMS-ESP32/issues/1197)
|
||||||
|
- set selflowtemp for ems+ boilers [#2641](https://github.com/emsesp/EMS-ESP32/discussions/2641)
|
||||||
|
- syslog timestamp [#2704](https://github.com/emsesp/EMS-ESP32/issues/2704)
|
||||||
|
- fixed FS format command [#2720](https://github.com/emsesp/EMS-ESP32/discussions/2720)
|
||||||
|
- dhw priority setting to boiler and mixer, telegrams 0x2CC, 0x2CD, etc.
|
||||||
|
- check for valid GPIOs when board profile is changed [#2841](https://github.com/emsesp/EMS-ESP32/issues/2841)
|
||||||
|
|
||||||
|
## Changed
|
||||||
|
|
||||||
|
- show console log with ISO date/time [#2533](https://github.com/emsesp/EMS-ESP32/discussions/2533)
|
||||||
|
- removed ESP32 CPU temperature
|
||||||
|
- updated core libraries like AsyncTCP, AsyncWebServer and Modbus
|
||||||
|
- remove command `scan deep`
|
||||||
|
- ignore repeated `forceheatingoff` commands [#2641](https://github.com/emsesp/EMS-ESP32/discussions/2641)
|
||||||
|
- optimized web for better performance by adding lazy loading and caching
|
||||||
|
- internal system analog sensors (core_voltage, supply_voltage and gateway_temperature) cannot be accidentally removed
|
||||||
|
- double click button reconnects EMS-ESP to AP
|
||||||
|
- place system message command in side scheduler loop to reduce stack memory usage by 2KB
|
||||||
|
- syslog mark interval set to 1 hour
|
||||||
|
- handle process_telegram in oneloop
|
||||||
|
- improved GPIO validation for Analog Sensors and System GPIOs
|
||||||
|
- entities with no values are greyed out in the Web UI in the Customization page
|
||||||
|
- added System Status to Web Status page
|
||||||
|
- show number on entities and supported languages in log on boot
|
||||||
|
- on tx read fail delay the 3rd. retry 2 sec
|
||||||
|
- move vectors and lists to PSRAM
|
||||||
|
- removed unused last topic/payload echo-check
|
||||||
|
- added Home Assistant device details to MQTT Discovery for all devices
|
||||||
|
- device_class and state_class changes for HA MQTT Discovery [#2825](https://github.com/emsesp/EMS-ESP32/issues/2825)
|
||||||
|
|
||||||
|
|
||||||
## [3.7.2] 22 March 2025
|
## [3.7.2] 22 March 2025
|
||||||
|
|
||||||
## Added
|
## Added
|
||||||
|
|||||||
@@ -1,88 +1,3 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
For more details go to [emsesp.org](https://emsesp.org/).
|
For more details go to [emsesp.org](https://emsesp.org/).
|
||||||
|
|
||||||
## [3.8.0]
|
|
||||||
|
|
||||||
## Added
|
|
||||||
|
|
||||||
- analogsensor types: NTC and RGB-Led
|
|
||||||
- Flag for HMC310 [#2465](https://github.com/emsesp/EMS-ESP32/issues/2465)
|
|
||||||
- boiler auxheatersource [#2489](https://github.com/emsesp/EMS-ESP32/discussions/2489)
|
|
||||||
- thermostat last error for RC100/300 [#2501](https://github.com/emsesp/EMS-ESP32/issues/2501)
|
|
||||||
- boiler 0xC6 telegram [#1963](https://github.com/emsesp/EMS-ESP32/issues/1963)
|
|
||||||
- CS6800i changes [#2448](https://github.com/emsesp/EMS-ESP32/issues/2448), [#2449](https://github.com/emsesp/EMS-ESP32/issues/2449)
|
|
||||||
- charging pump [#2544](https://github.com/emsesp/EMS-ESP32/issues/2544)
|
|
||||||
- hybrid CSH5800iG [#2569](https://github.com/emsesp/EMS-ESP32/issues/2569)
|
|
||||||
- added EMS Device details to Home Assistant MQTT Discovery
|
|
||||||
- disinfection command [#2601](https://github.com/emsesp/EMS-ESP32/issues/2601)
|
|
||||||
- added new board profile for upcoming BBQKees E32V2.2
|
|
||||||
- set differential pressure entity in Mixer device
|
|
||||||
- set set climate action cooling/heating in HA [#2583](https://github.com/emsesp/EMS-ESP32/issues/2583)
|
|
||||||
- Internal sensors of E32V2_2
|
|
||||||
- FW200 display options [#2610](https://github.com/emsesp/EMS-ESP32/discussions/2610)
|
|
||||||
- CR11 mode settings OFF/MANUAL depends on selTemp [#2437](https://github.com/emsesp/EMS-ESP32/issues/2437)
|
|
||||||
- implemented eFuse settings for BBQKees boards to store model type and ESP chipset
|
|
||||||
- Analogsensors for pulse output [#2624](https://github.com/emsesp/EMS-ESP32/discussions/2624)
|
|
||||||
- Analogsensors frequency input [#2631](https://github.com/emsesp/EMS-ESP32/discussions/2631)
|
|
||||||
- SRC plus thermostats [#2636](https://github.com/emsesp/EMS-ESP32/issues/2636)
|
|
||||||
- Greenstar 2000 [#2645](https://github.com/emsesp/EMS-ESP32/issues/2645)
|
|
||||||
- RC3xx `dhw modetype` [#2659](https://github.com/emsesp/EMS-ESP32/discussions/2659)
|
|
||||||
- new boiler entities VR0,VR1, compressor speed [#2669](https://github.com/emsesp/EMS-ESP32/issues/2669)
|
|
||||||
- solar temperature TS16 [#2690](https://github.com/emsesp/EMS-ESP32/issues/2690)
|
|
||||||
- pumpmode enum for HT3 boilers, add commands for manual defrost, chimneysweeper [#2727](https://github.com/emsesp/EMS-ESP32/issues/2727)
|
|
||||||
- pid settings [#2735](https://github.com/emsesp/EMS-ESP32/issues/2735)
|
|
||||||
- refresh MQTT button added to MQTT Settings page
|
|
||||||
- heating assistance, rounding custum settings [#2763](https://github.com/emsesp/EMS-ESP32/discussions/2763)
|
|
||||||
- added counter 0..2 for short pulses, high frequency [#2758](https://github.com/emsesp/EMS-ESP32/issues/2758)
|
|
||||||
- added LWT (Last Will and Testament) to MQTT entities in Home Assistant
|
|
||||||
- added api/metrics endpoint for prometheus integration by @gr3enk [#2774](https://github.com/emsesp/EMS-ESP32/pull/2774)
|
|
||||||
- added RTL8201 to eth phy list [#2800](https://github.com/emsesp/EMS-ESP32/issues/2800)
|
|
||||||
- added partitions to Web UI Version page, so previous firmware versions can be installed [#2837](https://github.com/emsesp/EMS-ESP32/issues/2837)
|
|
||||||
- button pressures show LED. On a long press (10 seconds) the LED flashes for 5 seconds to indicate a factory reset is about to happen. [#2848](https://github.com/emsesp/EMS-ESP32/issues/2848)
|
|
||||||
- added `txpause` command to pause the TX, by setting Txmode to 0 (disabled) [#2850](https://github.com/emsesp/EMS-ESP32/issues/2850)
|
|
||||||
|
|
||||||
## Fixed
|
|
||||||
|
|
||||||
- dhw/switchtime [#2490](https://github.com/emsesp/EMS-ESP32/issues/2490)
|
|
||||||
- switch to secure mqtt [#2492](https://github.com/emsesp/EMS-ESP32/issues/2492)
|
|
||||||
- update link buttons [#2497](https://github.com/emsesp/EMS-ESP32/issues/2497)
|
|
||||||
- refresh scheduler states [#2502](https://github.com/emsesp/EMS-ESP32/discussions/2502)
|
|
||||||
- also rebuild HA config on mqtt connect for scheduler, custom and shower
|
|
||||||
- FB100 controls the hc, not the master [#2510](https://github.com/emsesp/EMS-ESP32/issues/2510)
|
|
||||||
- IPM DHW module, [#2524](https://github.com/emsesp/EMS-ESP32/issues/2524)
|
|
||||||
- charge optimization [#2543](https://github.com/emsesp/EMS-ESP32/issues/2543)
|
|
||||||
- shower active state retained, shows correctly in HA
|
|
||||||
- MQTT Command Topic with slashes [#2571](https://github.com/emsesp/EMS-ESP32/issues/2571)
|
|
||||||
- Add pulsed water meter input to V1.3 gateway with Lilygo S3 [#2550](https://github.com/emsesp/EMS-ESP32/issues/2550)
|
|
||||||
- fix missing long 10-second press of Button to perform a factory reset
|
|
||||||
- fix wwMaxPower on Junkers ZBS14 [#2609](https://github.com/emsesp/EMS-ESP32/issues/2609)
|
|
||||||
- ventilation bypass state from telegram 0x55C [#1197](https://github.com/emsesp/EMS-ESP32/issues/1197)
|
|
||||||
- set selflowtemp for ems+ boilers [#2641](https://github.com/emsesp/EMS-ESP32/discussions/2641)
|
|
||||||
- syslog timestamp [#2704](https://github.com/emsesp/EMS-ESP32/issues/2704)
|
|
||||||
- fixed FS format command [#2720](https://github.com/emsesp/EMS-ESP32/discussions/2720)
|
|
||||||
- dhw priority setting to boiler and mixer, telegrams 0x2CC, 0x2CD, etc.
|
|
||||||
- check for valid GPIOs when board profile is changed [#2841](https://github.com/emsesp/EMS-ESP32/issues/2841)
|
|
||||||
|
|
||||||
## Changed
|
|
||||||
|
|
||||||
- show console log with ISO date/time [#2533](https://github.com/emsesp/EMS-ESP32/discussions/2533)
|
|
||||||
- removed ESP32 CPU temperature
|
|
||||||
- updated core libraries like AsyncTCP, AsyncWebServer and Modbus
|
|
||||||
- remove command `scan deep`
|
|
||||||
- ignore repeated `forceheatingoff` commands [#2641](https://github.com/emsesp/EMS-ESP32/discussions/2641)
|
|
||||||
- optimized web for better performance by adding lazy loading and caching
|
|
||||||
- internal system analog sensors (core_voltage, supply_voltage and gateway_temperature) cannot be accidentally removed
|
|
||||||
- double click button reconnects EMS-ESP to AP
|
|
||||||
- place system message command in side scheduler loop to reduce stack memory usage by 2KB
|
|
||||||
- syslog mark interval set to 1 hour
|
|
||||||
- handle process_telegram in oneloop
|
|
||||||
- improved GPIO validation for Analog Sensors and System GPIOs
|
|
||||||
- entities with no values are greyed out in the Web UI in the Customization page
|
|
||||||
- added System Status to Web Status page
|
|
||||||
- show number on entities and supported languages in log on boot
|
|
||||||
- on tx read fail delay the 3rd. retry 2 sec
|
|
||||||
- move vectors and lists to PSRAM
|
|
||||||
- removed unused last topic/payload echo-check
|
|
||||||
- added Home Assistant device details to MQTT Discovery for all devices
|
|
||||||
- device_class and state_class changes for HA MQTT Discovery [#2825](https://github.com/emsesp/EMS-ESP32/issues/2825)
|
|
||||||
|
|||||||
6084
interface/pnpm-lock.yaml
generated
6084
interface/pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
316
mock-api/pnpm-lock.yaml
generated
316
mock-api/pnpm-lock.yaml
generated
@@ -1,316 +0,0 @@
|
|||||||
lockfileVersion: '9.0'
|
|
||||||
|
|
||||||
settings:
|
|
||||||
autoInstallPeers: true
|
|
||||||
excludeLinksFromLockfile: false
|
|
||||||
|
|
||||||
importers:
|
|
||||||
|
|
||||||
.:
|
|
||||||
dependencies:
|
|
||||||
'@msgpack/msgpack':
|
|
||||||
specifier: ^3.1.3
|
|
||||||
version: 3.1.3
|
|
||||||
'@trivago/prettier-plugin-sort-imports':
|
|
||||||
specifier: ^6.0.0
|
|
||||||
version: 6.0.0(prettier@3.7.4)
|
|
||||||
formidable:
|
|
||||||
specifier: ^3.5.4
|
|
||||||
version: 3.5.4
|
|
||||||
itty-router:
|
|
||||||
specifier: ^5.0.22
|
|
||||||
version: 5.0.22
|
|
||||||
prettier:
|
|
||||||
specifier: ^3.7.4
|
|
||||||
version: 3.7.4
|
|
||||||
|
|
||||||
packages:
|
|
||||||
|
|
||||||
'@babel/code-frame@7.27.1':
|
|
||||||
resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
|
|
||||||
engines: {node: '>=6.9.0'}
|
|
||||||
|
|
||||||
'@babel/generator@7.28.5':
|
|
||||||
resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==}
|
|
||||||
engines: {node: '>=6.9.0'}
|
|
||||||
|
|
||||||
'@babel/helper-globals@7.28.0':
|
|
||||||
resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==}
|
|
||||||
engines: {node: '>=6.9.0'}
|
|
||||||
|
|
||||||
'@babel/helper-string-parser@7.27.1':
|
|
||||||
resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
|
|
||||||
engines: {node: '>=6.9.0'}
|
|
||||||
|
|
||||||
'@babel/helper-validator-identifier@7.28.5':
|
|
||||||
resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
|
|
||||||
engines: {node: '>=6.9.0'}
|
|
||||||
|
|
||||||
'@babel/parser@7.28.5':
|
|
||||||
resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==}
|
|
||||||
engines: {node: '>=6.0.0'}
|
|
||||||
hasBin: true
|
|
||||||
|
|
||||||
'@babel/template@7.27.2':
|
|
||||||
resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
|
|
||||||
engines: {node: '>=6.9.0'}
|
|
||||||
|
|
||||||
'@babel/traverse@7.28.5':
|
|
||||||
resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==}
|
|
||||||
engines: {node: '>=6.9.0'}
|
|
||||||
|
|
||||||
'@babel/types@7.28.5':
|
|
||||||
resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==}
|
|
||||||
engines: {node: '>=6.9.0'}
|
|
||||||
|
|
||||||
'@jridgewell/gen-mapping@0.3.13':
|
|
||||||
resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
|
|
||||||
|
|
||||||
'@jridgewell/resolve-uri@3.1.2':
|
|
||||||
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
|
|
||||||
engines: {node: '>=6.0.0'}
|
|
||||||
|
|
||||||
'@jridgewell/sourcemap-codec@1.5.5':
|
|
||||||
resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
|
|
||||||
|
|
||||||
'@jridgewell/trace-mapping@0.3.31':
|
|
||||||
resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
|
|
||||||
|
|
||||||
'@msgpack/msgpack@3.1.3':
|
|
||||||
resolution: {integrity: sha512-47XIizs9XZXvuJgoaJUIE2lFoID8ugvc0jzSHP+Ptfk8nTbnR8g788wv48N03Kx0UkAv559HWRQ3yzOgzlRNUA==}
|
|
||||||
engines: {node: '>= 18'}
|
|
||||||
|
|
||||||
'@noble/hashes@1.8.0':
|
|
||||||
resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==}
|
|
||||||
engines: {node: ^14.21.3 || >=16}
|
|
||||||
|
|
||||||
'@paralleldrive/cuid2@2.3.1':
|
|
||||||
resolution: {integrity: sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw==}
|
|
||||||
|
|
||||||
'@trivago/prettier-plugin-sort-imports@6.0.0':
|
|
||||||
resolution: {integrity: sha512-Xarx55ow0R8oC7ViL5fPmDsg1EBa1dVhyZFVbFXNtPPJyW2w9bJADIla8YFSaNG9N06XfcklA9O9vmw4noNxkQ==}
|
|
||||||
engines: {node: '>= 20'}
|
|
||||||
peerDependencies:
|
|
||||||
'@vue/compiler-sfc': 3.x
|
|
||||||
prettier: 2.x - 3.x
|
|
||||||
prettier-plugin-ember-template-tag: '>= 2.0.0'
|
|
||||||
prettier-plugin-svelte: 3.x
|
|
||||||
svelte: 4.x || 5.x
|
|
||||||
peerDependenciesMeta:
|
|
||||||
'@vue/compiler-sfc':
|
|
||||||
optional: true
|
|
||||||
prettier-plugin-ember-template-tag:
|
|
||||||
optional: true
|
|
||||||
prettier-plugin-svelte:
|
|
||||||
optional: true
|
|
||||||
svelte:
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
asap@2.0.6:
|
|
||||||
resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==}
|
|
||||||
|
|
||||||
balanced-match@1.0.2:
|
|
||||||
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
|
|
||||||
|
|
||||||
brace-expansion@2.0.2:
|
|
||||||
resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
|
|
||||||
|
|
||||||
debug@4.4.3:
|
|
||||||
resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
|
|
||||||
engines: {node: '>=6.0'}
|
|
||||||
peerDependencies:
|
|
||||||
supports-color: '*'
|
|
||||||
peerDependenciesMeta:
|
|
||||||
supports-color:
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
dezalgo@1.0.4:
|
|
||||||
resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==}
|
|
||||||
|
|
||||||
formidable@3.5.4:
|
|
||||||
resolution: {integrity: sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==}
|
|
||||||
engines: {node: '>=14.0.0'}
|
|
||||||
|
|
||||||
itty-router@5.0.22:
|
|
||||||
resolution: {integrity: sha512-9hmdGErWdYDOurGYxSbqLhy4EFReIwk71hMZTJ5b+zfa2zjMNV1ftFno2b8VjAQvX615gNB8Qxbl9JMRqHnIVA==}
|
|
||||||
|
|
||||||
javascript-natural-sort@0.7.1:
|
|
||||||
resolution: {integrity: sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==}
|
|
||||||
|
|
||||||
js-tokens@4.0.0:
|
|
||||||
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
|
|
||||||
|
|
||||||
jsesc@3.1.0:
|
|
||||||
resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
|
|
||||||
engines: {node: '>=6'}
|
|
||||||
hasBin: true
|
|
||||||
|
|
||||||
lodash-es@4.17.22:
|
|
||||||
resolution: {integrity: sha512-XEawp1t0gxSi9x01glktRZ5HDy0HXqrM0x5pXQM98EaI0NxO6jVM7omDOxsuEo5UIASAnm2bRp1Jt/e0a2XU8Q==}
|
|
||||||
|
|
||||||
minimatch@9.0.5:
|
|
||||||
resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
|
|
||||||
engines: {node: '>=16 || 14 >=14.17'}
|
|
||||||
|
|
||||||
ms@2.1.3:
|
|
||||||
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
|
|
||||||
|
|
||||||
once@1.4.0:
|
|
||||||
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
|
|
||||||
|
|
||||||
parse-imports-exports@0.2.4:
|
|
||||||
resolution: {integrity: sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ==}
|
|
||||||
|
|
||||||
parse-statements@1.0.11:
|
|
||||||
resolution: {integrity: sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==}
|
|
||||||
|
|
||||||
picocolors@1.1.1:
|
|
||||||
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
|
|
||||||
|
|
||||||
prettier@3.7.4:
|
|
||||||
resolution: {integrity: sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==}
|
|
||||||
engines: {node: '>=14'}
|
|
||||||
hasBin: true
|
|
||||||
|
|
||||||
wrappy@1.0.2:
|
|
||||||
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
|
|
||||||
|
|
||||||
snapshots:
|
|
||||||
|
|
||||||
'@babel/code-frame@7.27.1':
|
|
||||||
dependencies:
|
|
||||||
'@babel/helper-validator-identifier': 7.28.5
|
|
||||||
js-tokens: 4.0.0
|
|
||||||
picocolors: 1.1.1
|
|
||||||
|
|
||||||
'@babel/generator@7.28.5':
|
|
||||||
dependencies:
|
|
||||||
'@babel/parser': 7.28.5
|
|
||||||
'@babel/types': 7.28.5
|
|
||||||
'@jridgewell/gen-mapping': 0.3.13
|
|
||||||
'@jridgewell/trace-mapping': 0.3.31
|
|
||||||
jsesc: 3.1.0
|
|
||||||
|
|
||||||
'@babel/helper-globals@7.28.0': {}
|
|
||||||
|
|
||||||
'@babel/helper-string-parser@7.27.1': {}
|
|
||||||
|
|
||||||
'@babel/helper-validator-identifier@7.28.5': {}
|
|
||||||
|
|
||||||
'@babel/parser@7.28.5':
|
|
||||||
dependencies:
|
|
||||||
'@babel/types': 7.28.5
|
|
||||||
|
|
||||||
'@babel/template@7.27.2':
|
|
||||||
dependencies:
|
|
||||||
'@babel/code-frame': 7.27.1
|
|
||||||
'@babel/parser': 7.28.5
|
|
||||||
'@babel/types': 7.28.5
|
|
||||||
|
|
||||||
'@babel/traverse@7.28.5':
|
|
||||||
dependencies:
|
|
||||||
'@babel/code-frame': 7.27.1
|
|
||||||
'@babel/generator': 7.28.5
|
|
||||||
'@babel/helper-globals': 7.28.0
|
|
||||||
'@babel/parser': 7.28.5
|
|
||||||
'@babel/template': 7.27.2
|
|
||||||
'@babel/types': 7.28.5
|
|
||||||
debug: 4.4.3
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- supports-color
|
|
||||||
|
|
||||||
'@babel/types@7.28.5':
|
|
||||||
dependencies:
|
|
||||||
'@babel/helper-string-parser': 7.27.1
|
|
||||||
'@babel/helper-validator-identifier': 7.28.5
|
|
||||||
|
|
||||||
'@jridgewell/gen-mapping@0.3.13':
|
|
||||||
dependencies:
|
|
||||||
'@jridgewell/sourcemap-codec': 1.5.5
|
|
||||||
'@jridgewell/trace-mapping': 0.3.31
|
|
||||||
|
|
||||||
'@jridgewell/resolve-uri@3.1.2': {}
|
|
||||||
|
|
||||||
'@jridgewell/sourcemap-codec@1.5.5': {}
|
|
||||||
|
|
||||||
'@jridgewell/trace-mapping@0.3.31':
|
|
||||||
dependencies:
|
|
||||||
'@jridgewell/resolve-uri': 3.1.2
|
|
||||||
'@jridgewell/sourcemap-codec': 1.5.5
|
|
||||||
|
|
||||||
'@msgpack/msgpack@3.1.3': {}
|
|
||||||
|
|
||||||
'@noble/hashes@1.8.0': {}
|
|
||||||
|
|
||||||
'@paralleldrive/cuid2@2.3.1':
|
|
||||||
dependencies:
|
|
||||||
'@noble/hashes': 1.8.0
|
|
||||||
|
|
||||||
'@trivago/prettier-plugin-sort-imports@6.0.0(prettier@3.7.4)':
|
|
||||||
dependencies:
|
|
||||||
'@babel/generator': 7.28.5
|
|
||||||
'@babel/parser': 7.28.5
|
|
||||||
'@babel/traverse': 7.28.5
|
|
||||||
'@babel/types': 7.28.5
|
|
||||||
javascript-natural-sort: 0.7.1
|
|
||||||
lodash-es: 4.17.22
|
|
||||||
minimatch: 9.0.5
|
|
||||||
parse-imports-exports: 0.2.4
|
|
||||||
prettier: 3.7.4
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- supports-color
|
|
||||||
|
|
||||||
asap@2.0.6: {}
|
|
||||||
|
|
||||||
balanced-match@1.0.2: {}
|
|
||||||
|
|
||||||
brace-expansion@2.0.2:
|
|
||||||
dependencies:
|
|
||||||
balanced-match: 1.0.2
|
|
||||||
|
|
||||||
debug@4.4.3:
|
|
||||||
dependencies:
|
|
||||||
ms: 2.1.3
|
|
||||||
|
|
||||||
dezalgo@1.0.4:
|
|
||||||
dependencies:
|
|
||||||
asap: 2.0.6
|
|
||||||
wrappy: 1.0.2
|
|
||||||
|
|
||||||
formidable@3.5.4:
|
|
||||||
dependencies:
|
|
||||||
'@paralleldrive/cuid2': 2.3.1
|
|
||||||
dezalgo: 1.0.4
|
|
||||||
once: 1.4.0
|
|
||||||
|
|
||||||
itty-router@5.0.22: {}
|
|
||||||
|
|
||||||
javascript-natural-sort@0.7.1: {}
|
|
||||||
|
|
||||||
js-tokens@4.0.0: {}
|
|
||||||
|
|
||||||
jsesc@3.1.0: {}
|
|
||||||
|
|
||||||
lodash-es@4.17.22: {}
|
|
||||||
|
|
||||||
minimatch@9.0.5:
|
|
||||||
dependencies:
|
|
||||||
brace-expansion: 2.0.2
|
|
||||||
|
|
||||||
ms@2.1.3: {}
|
|
||||||
|
|
||||||
once@1.4.0:
|
|
||||||
dependencies:
|
|
||||||
wrappy: 1.0.2
|
|
||||||
|
|
||||||
parse-imports-exports@0.2.4:
|
|
||||||
dependencies:
|
|
||||||
parse-statements: 1.0.11
|
|
||||||
|
|
||||||
parse-statements@1.0.11: {}
|
|
||||||
|
|
||||||
picocolors@1.1.1: {}
|
|
||||||
|
|
||||||
prettier@3.7.4: {}
|
|
||||||
|
|
||||||
wrappy@1.0.2: {}
|
|
||||||
@@ -30,6 +30,8 @@ def run_with_streaming_input(program_path, test_command, output_file=None):
|
|||||||
stdout=subprocess.PIPE,
|
stdout=subprocess.PIPE,
|
||||||
stderr=subprocess.PIPE,
|
stderr=subprocess.PIPE,
|
||||||
text=True,
|
text=True,
|
||||||
|
encoding='utf-8',
|
||||||
|
errors='replace', # Replace invalid UTF-8 bytes instead of crashing
|
||||||
bufsize=1 # Line buffered
|
bufsize=1 # Line buffered
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -70,7 +72,7 @@ def run_with_streaming_input(program_path, test_command, output_file=None):
|
|||||||
os.remove(output_file)
|
os.remove(output_file)
|
||||||
|
|
||||||
# Export CSV output to file
|
# Export CSV output to file
|
||||||
with open(output_file, 'w') as f:
|
with open(output_file, 'w', encoding='utf-8', errors='replace') as f:
|
||||||
f.writelines(csv_output)
|
f.writelines(csv_output)
|
||||||
print(f"CSV file created: {output_file} ({os.path.getsize(output_file)} bytes)")
|
print(f"CSV file created: {output_file} ({os.path.getsize(output_file)} bytes)")
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
#
|
#
|
||||||
# Update modbus parameters from entity definitions.
|
# Update modbus parameters from entity definitions.
|
||||||
# This script generates c++ code for the modbus parameter definitions.
|
# This script generates c++ code for the modbus parameter definitions.
|
||||||
# Called by /scripts/generate_csv_and_headers.sh
|
#
|
||||||
|
# Called by /scripts/generate_csv_and_headers.sh and pio build_modbus target.
|
||||||
|
# can be called manually with:
|
||||||
|
# cat ./docs/dump_entities.csv | python3 ./scripts/update_modbus_registers.py > ./src/core/modbus_entity_parameters.hpp
|
||||||
|
|
||||||
import fileinput
|
import fileinput
|
||||||
import csv
|
import csv
|
||||||
@@ -159,23 +162,22 @@ cpp_entry_template = Template(
|
|||||||
listNames = {}
|
listNames = {}
|
||||||
transre = re.compile(r'^MAKE_TRANSLATION\(([^,\s]+)\s*,\s*\"([^\"]+)\"')
|
transre = re.compile(r'^MAKE_TRANSLATION\(([^,\s]+)\s*,\s*\"([^\"]+)\"')
|
||||||
try:
|
try:
|
||||||
with open('./src/core/locale_translations.h', 'r') as transf:
|
with open('./src/core/locale_translations.h', 'r', encoding='utf-8', errors='replace') as transf:
|
||||||
for line in transf:
|
for line in transf:
|
||||||
m = transre.match(line)
|
m = transre.match(line)
|
||||||
if m is not None:
|
if m is not None:
|
||||||
listNames[m.group(2)] = m.group(1)
|
listNames[m.group(2)] = m.group(1)
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
# Handle case where file doesn't exist
|
# Handle case where file doesn't exist
|
||||||
pass
|
raise Exception('Error! locale_translations.h not found')
|
||||||
|
|
||||||
entities = []
|
entities = []
|
||||||
|
|
||||||
with fileinput.input() as f_input:
|
with fileinput.input(encoding='utf-8', errors='replace') as f_input:
|
||||||
entities_reader = csv.reader(f_input, delimiter=',', quotechar='"')
|
entities_reader = csv.reader(f_input, delimiter=',', quotechar='"')
|
||||||
headers = next(entities_reader)
|
headers = next(entities_reader)
|
||||||
|
|
||||||
for row in entities_reader:
|
for row in entities_reader:
|
||||||
# Use dict comprehension for better performance
|
|
||||||
entity = {headers[i]: val for i, val in enumerate(row)}
|
entity = {headers[i]: val for i, val in enumerate(row)}
|
||||||
entities.append(entity)
|
entities.append(entity)
|
||||||
|
|
||||||
@@ -208,7 +210,7 @@ for entity in entities:
|
|||||||
(-string_sizes[entity_dev_name] // 2) # divide and round up
|
(-string_sizes[entity_dev_name] // 2) # divide and round up
|
||||||
|
|
||||||
if int(entity["modbus count"]) <= 0:
|
if int(entity["modbus count"]) <= 0:
|
||||||
raise Exception('Entity "' + entity_dev_name + ' (' + entity_shortname + ')' +
|
raise Exception('Error! Entity "' + entity_dev_name + ' (' + entity_shortname + ')' +
|
||||||
'" does not have a size - string sizes need to be added manually to update_modbus_registers.py/string_sizes[]')
|
'" does not have a size - string sizes need to be added manually to update_modbus_registers.py/string_sizes[]')
|
||||||
|
|
||||||
# if entity["modbus count"] == "0":
|
# if entity["modbus count"] == "0":
|
||||||
@@ -267,10 +269,16 @@ for device_type_name in device_type_names:
|
|||||||
sorted_entities = sorted(
|
sorted_entities = sorted(
|
||||||
entities.items(), key=lambda x: int(x[1]["modbus offset"]))
|
entities.items(), key=lambda x: int(x[1]["modbus offset"]))
|
||||||
for entity_name, modbus_info in sorted_entities:
|
for entity_name, modbus_info in sorted_entities:
|
||||||
|
# Strip device type prefix (e.g., "dhw.nrg" -> "nrg") for translation lookup
|
||||||
|
lookup_name = entity_name.split('.')[-1] if '.' in entity_name else entity_name
|
||||||
|
|
||||||
|
if lookup_name not in listNames:
|
||||||
|
raise KeyError(f"Error! Translation not found for '{lookup_name}' (entity: '{entity_name}'). Please add it to locale_translations.h")
|
||||||
|
|
||||||
params = {
|
params = {
|
||||||
'devtype': "dt::" + device_type_name,
|
'devtype': "dt::" + device_type_name,
|
||||||
"tagtype": tag_to_tagtype[int(tag)],
|
"tagtype": tag_to_tagtype[int(tag)],
|
||||||
"shortname": 'FL_(' + listNames[entity_name] + ")",
|
"shortname": 'FL_(' + listNames[lookup_name] + ")",
|
||||||
"entity_name": entity_name,
|
"entity_name": entity_name,
|
||||||
'registeroffset': modbus_info["modbus offset"],
|
'registeroffset': modbus_info["modbus offset"],
|
||||||
'registercount': modbus_info["modbus count"]
|
'registercount': modbus_info["modbus count"]
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ void UploadFileService::handleUpload(AsyncWebServerRequest * request, const Stri
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
// it's firmware - initialize the ArduinoOTA updater
|
// it's firmware - initialize the ArduinoOTA updater
|
||||||
emsesp::EMSESP::logger().info("Uploading firmware file %s (size: %d bytes)", filename.c_str(), filesize);
|
emsesp::EMSESP::logger().info("Uploading firmware file %s (size: %d KB). Please wait...", filename.c_str(), filesize / 1024);
|
||||||
// turn off UART to prevent interference with the upload
|
// turn off UART to prevent interference with the upload
|
||||||
emsesp::EMSuart::stop();
|
emsesp::EMSuart::stop();
|
||||||
|
|
||||||
|
|||||||
@@ -1747,11 +1747,13 @@ void EMSESP::start() {
|
|||||||
|
|
||||||
webSettingsService.begin(); // load EMS-ESP Application settings
|
webSettingsService.begin(); // load EMS-ESP Application settings
|
||||||
|
|
||||||
// do any system upgrades
|
// perform any system upgrades
|
||||||
if (system_.check_upgrade(factory_settings)) {
|
if (!factory_settings) {
|
||||||
LOG_WARNING("System needs a restart to apply new settings. Please wait.");
|
if (system_.check_upgrade()) {
|
||||||
system_.system_restart();
|
LOG_WARNING("System needs a restart to apply new settings. Please wait.");
|
||||||
};
|
system_.system_restart();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
// Load our library of known devices into stack mem. Names are stored in Flash memory
|
// Load our library of known devices into stack mem. Names are stored in Flash memory
|
||||||
device_library_ = {
|
device_library_ = {
|
||||||
@@ -1831,7 +1833,7 @@ void EMSESP::loop() {
|
|||||||
|
|
||||||
// run the loop, unless we're in the middle of an OTA upload
|
// run the loop, unless we're in the middle of an OTA upload
|
||||||
if (EMSESP::system_.systemStatus() == SYSTEM_STATUS::SYSTEM_STATUS_NORMAL || EMSESP::system_.systemStatus() == SYSTEM_STATUS::SYSTEM_STATUS_INVALID_GPIO) {
|
if (EMSESP::system_.systemStatus() == SYSTEM_STATUS::SYSTEM_STATUS_NORMAL || EMSESP::system_.systemStatus() == SYSTEM_STATUS::SYSTEM_STATUS_INVALID_GPIO) {
|
||||||
// check for GPIO Errors
|
// check for GPIO Errors - this is called once when booting
|
||||||
if (EMSESP::system_.systemStatus() == SYSTEM_STATUS::SYSTEM_STATUS_INVALID_GPIO) {
|
if (EMSESP::system_.systemStatus() == SYSTEM_STATUS::SYSTEM_STATUS_INVALID_GPIO) {
|
||||||
static bool only_once = false;
|
static bool only_once = false;
|
||||||
if (!only_once) {
|
if (!only_once) {
|
||||||
|
|||||||
@@ -1412,58 +1412,49 @@ bool System::check_restore() {
|
|||||||
// handle upgrades from previous versions
|
// handle upgrades from previous versions
|
||||||
// this function will not be called on a clean install, with no settings files yet created
|
// this function will not be called on a clean install, with no settings files yet created
|
||||||
// returns true if we need a reboot
|
// returns true if we need a reboot
|
||||||
bool System::check_upgrade(bool factory_settings) {
|
bool System::check_upgrade() {
|
||||||
bool missing_version = true;
|
bool missing_version = true;
|
||||||
std::string settingsVersion;
|
std::string settingsVersion;
|
||||||
|
|
||||||
if (!factory_settings) {
|
// fetch current version from settings file
|
||||||
// fetch current version from settings file
|
EMSESP::webSettingsService.read([&](WebSettings const & settings) { settingsVersion = settings.version.c_str(); });
|
||||||
EMSESP::webSettingsService.read([&](WebSettings const & settings) { settingsVersion = settings.version.c_str(); });
|
|
||||||
|
|
||||||
// see if we're missing a version, will be < 3.5.0b13 from Dec 23 2022
|
// see if we're missing a version, will be < 3.5.0b13 from Dec 23 2022
|
||||||
missing_version = (settingsVersion.empty() || (settingsVersion.length() < 5));
|
missing_version = (settingsVersion.empty() || (settingsVersion.length() < 5));
|
||||||
if (missing_version) {
|
if (missing_version) {
|
||||||
LOG_WARNING("No version information found");
|
LOG_WARNING("No version information found");
|
||||||
settingsVersion = "3.5.0"; // this was the last stable version without version info
|
settingsVersion = "3.5.0"; // this was the last stable version without version info
|
||||||
}
|
|
||||||
} else {
|
|
||||||
settingsVersion = EMSESP_APP_VERSION; // use the current version
|
|
||||||
}
|
}
|
||||||
|
|
||||||
version::Semver200_version settings_version(settingsVersion);
|
version::Semver200_version settings_version(settingsVersion);
|
||||||
|
|
||||||
if (!missing_version) {
|
|
||||||
LOG_DEBUG("Checking for version upgrades (settings file is v%d.%d.%d-%s)",
|
|
||||||
settings_version.major(),
|
|
||||||
settings_version.minor(),
|
|
||||||
settings_version.patch(),
|
|
||||||
settings_version.prerelease().c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (factory_settings) {
|
|
||||||
return true; // fresh install, do nothing, no reboot required
|
|
||||||
}
|
|
||||||
|
|
||||||
version::Semver200_version this_version(EMSESP_APP_VERSION);
|
version::Semver200_version this_version(EMSESP_APP_VERSION);
|
||||||
|
|
||||||
bool save_version = true;
|
std::string settings_version_type = settings_version.prerelease().empty() ? "" : ("-" + settings_version.prerelease());
|
||||||
bool reboot_required = false;
|
std::string this_version_type = this_version.prerelease().empty() ? "" : ("-" + this_version.prerelease());
|
||||||
|
bool save_version = true;
|
||||||
|
bool reboot_required = false;
|
||||||
|
|
||||||
|
LOG_DEBUG("Checking for version upgrades (settings file is v%d.%d.%d%s)",
|
||||||
|
settings_version.major(),
|
||||||
|
settings_version.minor(),
|
||||||
|
settings_version.patch(),
|
||||||
|
settings_version_type.c_str());
|
||||||
|
|
||||||
// compare versions
|
// compare versions
|
||||||
if (this_version > settings_version) {
|
if (this_version > settings_version) {
|
||||||
// we need to do an upgrade
|
// we need to do an upgrade
|
||||||
if (missing_version) {
|
if (missing_version) {
|
||||||
LOG_NOTICE("Upgrading to version %d.%d.%d-%s", this_version.major(), this_version.minor(), this_version.patch(), this_version.prerelease().c_str());
|
LOG_NOTICE("Upgrading to version %d.%d.%d%s", this_version.major(), this_version.minor(), this_version.patch(), this_version_type);
|
||||||
} else {
|
} else {
|
||||||
LOG_NOTICE("Upgrading from version %d.%d.%d-%s to %d.%d.%d-%s",
|
LOG_NOTICE("Upgrading from version %d.%d.%d%s to %d.%d.%d%s",
|
||||||
settings_version.major(),
|
settings_version.major(),
|
||||||
settings_version.minor(),
|
settings_version.minor(),
|
||||||
settings_version.patch(),
|
settings_version.patch(),
|
||||||
settings_version.prerelease().c_str(),
|
settings_version_type.c_str(),
|
||||||
this_version.major(),
|
this_version.major(),
|
||||||
this_version.minor(),
|
this_version.minor(),
|
||||||
this_version.patch(),
|
this_version.patch(),
|
||||||
this_version.prerelease().c_str());
|
this_version_type.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
// if we're coming from 3.4.4 or 3.5.0b14 which had no version stored then we need to apply new settings
|
// if we're coming from 3.4.4 or 3.5.0b14 which had no version stored then we need to apply new settings
|
||||||
@@ -1518,11 +1509,9 @@ bool System::check_upgrade(bool factory_settings) {
|
|||||||
}
|
}
|
||||||
return StateUpdateResult::UNCHANGED;
|
return StateUpdateResult::UNCHANGED;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
} else if (this_version < settings_version) {
|
} else if (this_version < settings_version) {
|
||||||
// downgrading
|
// downgrading
|
||||||
LOG_NOTICE("Downgrading to version %d.%d.%d-%s", this_version.major(), this_version.minor(), this_version.patch(), this_version.prerelease().c_str());
|
LOG_NOTICE("Downgrading to version %d.%d.%d%s", this_version.major(), this_version.minor(), this_version.patch(), this_version_type.c_str());
|
||||||
} else {
|
} else {
|
||||||
save_version = false; // same version, do nothing
|
save_version = false; // same version, do nothing
|
||||||
}
|
}
|
||||||
@@ -2686,23 +2675,29 @@ bool System::uploadFirmwareURL(const char * url) {
|
|||||||
return false; // error
|
return false; // error
|
||||||
}
|
}
|
||||||
|
|
||||||
// check we have enough space for the upload in the ota partition
|
|
||||||
int firmware_size = http.getSize();
|
int firmware_size = http.getSize();
|
||||||
LOG_INFO("Firmware uploading (size: %d bytes). Please wait...", firmware_size);
|
|
||||||
|
// check we have a valid size
|
||||||
|
if (firmware_size < 2097152) { // 2MB or greater is required
|
||||||
|
LOG_ERROR("Firmware upload failed - invalid size");
|
||||||
|
http.end();
|
||||||
|
return false; // error
|
||||||
|
}
|
||||||
|
|
||||||
|
// check we have enough space for the upload in the ota partition
|
||||||
if (!Update.begin(firmware_size)) {
|
if (!Update.begin(firmware_size)) {
|
||||||
LOG_ERROR("Firmware upload failed - no space");
|
LOG_ERROR("Firmware upload failed - no space");
|
||||||
http.end();
|
http.end();
|
||||||
return false; // error
|
return false; // error
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LOG_INFO("Firmware uploading (size: %d KB). Please wait...", firmware_size / 1024);
|
||||||
|
|
||||||
Shell::loop_all(); // flush log buffers so latest messages are shown in console
|
Shell::loop_all(); // flush log buffers so latest messages are shown in console
|
||||||
|
|
||||||
// we're about to start the upload, set the status so the Web System Monitor spots it
|
// we're about to start the upload, set the status so the Web System Monitor spots it
|
||||||
EMSESP::system_.systemStatus(SYSTEM_STATUS::SYSTEM_STATUS_UPLOADING);
|
EMSESP::system_.systemStatus(SYSTEM_STATUS::SYSTEM_STATUS_UPLOADING);
|
||||||
|
|
||||||
// set a callback so we can monitor progress in the WebUI
|
|
||||||
Update.onProgress([](size_t progress, size_t total) { EMSESP::system_.systemStatus(SYSTEM_STATUS::SYSTEM_STATUS_UPLOADING + (progress * 100 / total)); });
|
|
||||||
|
|
||||||
// get tcp stream and send it to Updater
|
// get tcp stream and send it to Updater
|
||||||
WiFiClient * stream = http.getStreamPtr();
|
WiFiClient * stream = http.getStreamPtr();
|
||||||
if (Update.writeStream(*stream) != firmware_size) {
|
if (Update.writeStream(*stream) != firmware_size) {
|
||||||
@@ -2792,8 +2787,10 @@ bool System::command_read(const char * value, const int8_t id) {
|
|||||||
|
|
||||||
// set the system status code - SYSTEM_STATUS in system.h
|
// set the system status code - SYSTEM_STATUS in system.h
|
||||||
void System::systemStatus(uint8_t status_code) {
|
void System::systemStatus(uint8_t status_code) {
|
||||||
systemStatus_ = status_code;
|
if (systemStatus_ != status_code) {
|
||||||
LOG_DEBUG("Setting System status code %d", status_code);
|
systemStatus_ = status_code;
|
||||||
|
LOG_DEBUG("Setting System status code %d", status_code);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t System::systemStatus() {
|
uint8_t System::systemStatus() {
|
||||||
|
|||||||
@@ -122,7 +122,7 @@ class System {
|
|||||||
void show_mem(const char * note);
|
void show_mem(const char * note);
|
||||||
void store_settings(class WebSettings & settings);
|
void store_settings(class WebSettings & settings);
|
||||||
void syslog_init();
|
void syslog_init();
|
||||||
bool check_upgrade(bool factory_settings);
|
bool check_upgrade();
|
||||||
bool check_restore();
|
bool check_restore();
|
||||||
void heartbeat_json(JsonObject output);
|
void heartbeat_json(JsonObject output);
|
||||||
|
|
||||||
|
|||||||
@@ -1226,13 +1226,14 @@ void Thermostat::process_RC300Summer(std::shared_ptr<const Telegram> telegram) {
|
|||||||
has_update(telegram, hc->summersetmode, 7);
|
has_update(telegram, hc->summersetmode, 7);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hc->heatingtype < 3) {
|
if (hc->heatingtype != 3) {
|
||||||
has_update(telegram, hc->designtemp, 4);
|
has_update(telegram, hc->designtemp, 4);
|
||||||
|
has_update(telegram, hc->minflowtemp, 13);
|
||||||
} else {
|
} else {
|
||||||
has_update(telegram, hc->designtemp, 5);
|
has_update(telegram, hc->designtemp, 5);
|
||||||
|
has_update(telegram, hc->minflowtemp, 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
has_update(telegram, hc->minflowtemp, 8);
|
|
||||||
has_update(telegram, hc->fastHeatup, 10);
|
has_update(telegram, hc->fastHeatup, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4019,18 +4020,14 @@ bool Thermostat::set_temperature(const float temperature, const uint8_t mode, co
|
|||||||
case HeatingCircuit::Mode::MINFLOW:
|
case HeatingCircuit::Mode::MINFLOW:
|
||||||
set_typeid = summer_typeids[hc->hc()];
|
set_typeid = summer_typeids[hc->hc()];
|
||||||
validate_typeid = set_typeid;
|
validate_typeid = set_typeid;
|
||||||
offset = 8;
|
offset = hc->heatingtype == 3 ? 8 : 13;
|
||||||
factor = 1;
|
factor = 1;
|
||||||
break;
|
break;
|
||||||
case HeatingCircuit::Mode::MAXFLOW:
|
case HeatingCircuit::Mode::MAXFLOW:
|
||||||
set_typeid = curve_typeids[hc->hc()];
|
set_typeid = curve_typeids[hc->hc()];
|
||||||
validate_typeid = set_typeid;
|
validate_typeid = set_typeid;
|
||||||
if (hc->heatingtype == 3) {
|
offset = hc->heatingtype == 3 ? 7 : 8;
|
||||||
offset = 7;
|
factor = 1;
|
||||||
} else {
|
|
||||||
offset = 8;
|
|
||||||
}
|
|
||||||
factor = 1;
|
|
||||||
break;
|
break;
|
||||||
case HeatingCircuit::Mode::NOFROST:
|
case HeatingCircuit::Mode::NOFROST:
|
||||||
set_typeid = curve_typeids[hc->hc()];
|
set_typeid = curve_typeids[hc->hc()];
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
#define EMSESP_APP_VERSION "3.8.0-dev.1"
|
#define EMSESP_APP_VERSION "3.8.0"
|
||||||
|
|||||||
Reference in New Issue
Block a user