From d405478a13c9f5711f5547d032e83d72321d6c2b Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Fri, 28 Mar 2025 09:39:38 +0100 Subject: [PATCH 01/10] fix deviceName length (#2482), formatting --- src/core/emsesp.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/core/emsesp.cpp b/src/core/emsesp.cpp index 3ef9c2a07..16a40e0b9 100644 --- a/src/core/emsesp.cpp +++ b/src/core/emsesp.cpp @@ -974,8 +974,10 @@ void EMSESP::process_deviceName(std::shared_ptr telegram) { if (telegram->offset > 27 || (telegram->offset + telegram->message_length) < 29) { return; } - char name[16]; - uint8_t len = telegram->offset + telegram->message_length - 27; + char name[16]; + // len including zero terminator, if there is one, otherwise copy to end of telegram + // https://github.com/emsesp/EMS-ESP32/discussions/2482#discussioncomment-12649817 + uint8_t len = telegram->offset + telegram->message_length - 26; strlcpy(name, (const char *)&telegram->message_data[27 - telegram->offset], len < 16 ? len : 16); char * c = name; while (isprint(*c)) { @@ -1314,7 +1316,7 @@ bool EMSESP::add_device(const uint8_t device_id, const uint8_t product_id, const flags = DeviceFlags::EMS_DEVICE_FLAG_CR120; default_name = "CR120"; } - if (product_id == 158 && strncmp(version,"73",2) == 0) { + if (product_id == 158 && strncmp(version, "73", 2) == 0) { flags = DeviceFlags::EMS_DEVICE_FLAG_HMC310; default_name = "HMC310"; } From 1bcd453e3f096fc4dd17137d85eff530bfd2520a Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Fri, 28 Mar 2025 16:46:49 +0100 Subject: [PATCH 02/10] fix version links for dev #2497 --- interface/src/app/status/Version.tsx | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/interface/src/app/status/Version.tsx b/interface/src/app/status/Version.tsx index 607906365..e23280a6a 100644 --- a/interface/src/app/status/Version.tsx +++ b/interface/src/app/status/Version.tsx @@ -44,6 +44,7 @@ const Version = () => { const [restarting, setRestarting] = useState(false); const [openInstallDialog, setOpenInstallDialog] = useState(false); const [usingDevVersion, setUsingDevVersion] = useState(false); + const [fetchDevVersion, setFetchDevVersion] = useState(false); const [upgradeAvailable, setUpgradeAvailable] = useState(false); const [internetLive, setInternetLive] = useState(false); const [downloadOnly, setDownloadOnly] = useState(false); @@ -144,14 +145,14 @@ const Version = () => { } const filename = 'EMS-ESP-' + - (usingDevVersion ? latestDevVersion.name : latestVersion.name).replaceAll( + (fetchDevVersion ? latestDevVersion.name : latestVersion.name).replaceAll( '.', '_' ) + '-' + getPlatform() + '.bin'; - return usingDevVersion + return fetchDevVersion ? DEV_URL + filename : STABLE_URL + 'v' + latestVersion.name + '/' + filename; }; @@ -181,13 +182,13 @@ const Version = () => { {LL.INSTALL() + ' ' + - (usingDevVersion ? LL.DEVELOPMENT() : LL.STABLE()) + + (fetchDevVersion ? LL.DEVELOPMENT() : LL.STABLE()) + ' Firmware'} {LL.INSTALL_VERSION( - usingDevVersion ? latestDevVersion?.name : latestVersion?.name + fetchDevVersion ? latestDevVersion?.name : latestVersion?.name )} @@ -223,13 +224,12 @@ const Version = () => { ); const showFirmwareDialog = (useDevVersion?: boolean) => { - setUsingDevVersion(useDevVersion || usingDevVersion); + setFetchDevVersion(useDevVersion || usingDevVersion); setOpenInstallDialog(true); }; const closeInstallDialog = () => { setOpenInstallDialog(false); - setUsingDevVersion(data.emsesp_version.includes('dev')); }; const showButtons = (showDev?: boolean) => { @@ -260,7 +260,9 @@ const Version = () => { variant="outlined" color="warning" size="small" - onClick={() => showFirmwareDialog()} + onClick={() => + showFirmwareDialog(upgradeAvailable || (!usingDevVersion && showDev)) + } > {upgradeAvailable || (!usingDevVersion && showDev) ? LL.UPGRADE() From 006e5493e2473760345d677361207d5728a34817 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Sun, 30 Mar 2025 14:09:02 +0200 Subject: [PATCH 03/10] reactivate wifi all channel scan --- src/ESP32React/NetworkSettingsService.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ESP32React/NetworkSettingsService.cpp b/src/ESP32React/NetworkSettingsService.cpp index 4a7950662..e91ce401a 100644 --- a/src/ESP32React/NetworkSettingsService.cpp +++ b/src/ESP32React/NetworkSettingsService.cpp @@ -37,7 +37,7 @@ void NetworkSettingsService::begin() { WiFi.mode(WIFI_MODE_MAX); WiFi.mode(WIFI_MODE_NULL); - // WiFi.setScanMethod(WIFI_ALL_CHANNEL_SCAN); // default is FAST_SCAN, connect issues in 2.0.14 + WiFi.setScanMethod(WIFI_ALL_CHANNEL_SCAN); // default is FAST_SCAN, connect issues in 2.0.14 // WiFi.setSortMethod(WIFI_CONNECT_AP_BY_SIGNAL); // is default, no need to set _fsPersistence.readFromFS(); From 77465ebe81f60e6df43a91bf5378c5051742b434 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Sun, 30 Mar 2025 14:11:02 +0200 Subject: [PATCH 04/10] always show buttons for stable and dev --- interface/src/app/status/Version.tsx | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/interface/src/app/status/Version.tsx b/interface/src/app/status/Version.tsx index e23280a6a..8a89dcd09 100644 --- a/interface/src/app/status/Version.tsx +++ b/interface/src/app/status/Version.tsx @@ -223,8 +223,8 @@ const Version = () => { ); - const showFirmwareDialog = (useDevVersion?: boolean) => { - setFetchDevVersion(useDevVersion || usingDevVersion); + const showFirmwareDialog = (useDevVersion: boolean) => { + setFetchDevVersion(useDevVersion); setOpenInstallDialog(true); }; @@ -232,7 +232,7 @@ const Version = () => { setOpenInstallDialog(false); }; - const showButtons = (showDev?: boolean) => { + const showButtons = (showDev: boolean) => { if (!me.admin) { return; } @@ -260,13 +260,13 @@ const Version = () => { variant="outlined" color="warning" size="small" - onClick={() => - showFirmwareDialog(upgradeAvailable || (!usingDevVersion && showDev)) - } + onClick={() => showFirmwareDialog(showDev)} > {upgradeAvailable || (!usingDevVersion && showDev) ? LL.UPGRADE() - : LL.REINSTALL()} + : !showDev && usingDevVersion + ? LL.STABLE() + : LL.REINSTALL()} … ); @@ -397,7 +397,7 @@ const Version = () => { {formatTimeAgo(new Date(latestVersion.published_at))}) )} - {!usingDevVersion && showButtons(false)} + {showButtons(false)} From d32378ccd45082546d8c2d408f477e1bb437cb15 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Tue, 1 Apr 2025 12:33:04 +0200 Subject: [PATCH 05/10] do not scan methode for arduino 3 --- src/ESP32React/NetworkSettingsService.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/ESP32React/NetworkSettingsService.cpp b/src/ESP32React/NetworkSettingsService.cpp index e91ce401a..7d5d48bb2 100644 --- a/src/ESP32React/NetworkSettingsService.cpp +++ b/src/ESP32React/NetworkSettingsService.cpp @@ -37,9 +37,11 @@ void NetworkSettingsService::begin() { WiFi.mode(WIFI_MODE_MAX); WiFi.mode(WIFI_MODE_NULL); - WiFi.setScanMethod(WIFI_ALL_CHANNEL_SCAN); // default is FAST_SCAN, connect issues in 2.0.14 - // WiFi.setSortMethod(WIFI_CONNECT_AP_BY_SIGNAL); // is default, no need to set - +// scan settings give connect issues with arduino 2.0.14 and arduino 3.x.x +#if ESP_ARDUINO_VERSION_MAJOR < 3 + WiFi.setScanMethod(WIFI_ALL_CHANNEL_SCAN); // default is FAST_SCAN +// WiFi.setSortMethod(WIFI_CONNECT_AP_BY_SIGNAL); // is default, no need to set +#endif _fsPersistence.readFromFS(); } From 856f8efd250891b2d8e44e364ad6f550c753cd36 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Tue, 1 Apr 2025 12:34:02 +0200 Subject: [PATCH 06/10] update scheduler if there is pending change #2502 --- interface/src/app/main/Scheduler.tsx | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/interface/src/app/main/Scheduler.tsx b/interface/src/app/main/Scheduler.tsx index 0552923a4..0029a8eaa 100644 --- a/interface/src/app/main/Scheduler.tsx +++ b/interface/src/app/main/Scheduler.tsx @@ -27,6 +27,7 @@ import { useLayoutTitle } from 'components'; import { useI18nContext } from 'i18n/i18n-react'; +import { useInterval } from 'utils'; import { readSchedule, writeSchedule } from '../../api/app'; import SettingsSchedulerDialog from './SchedulerDialog'; @@ -73,6 +74,12 @@ const Scheduler = () => { ); } + useInterval(() => { + if (numChanges === 0) { + void fetchSchedule(); + } + }); + useEffect(() => { const formatter = new Intl.DateTimeFormat(locale, { weekday: 'short', From d91812ab8f0b7d157a185167d9894dd56732a0ae Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Tue, 1 Apr 2025 12:41:21 +0200 Subject: [PATCH 07/10] add thermostat C0 message #2501 --- src/devices/thermostat.cpp | 44 ++++++++++++++++++++++++++++++++++++++ src/devices/thermostat.h | 1 + 2 files changed, 45 insertions(+) diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index 52f07bd20..0b9b26781 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -194,6 +194,7 @@ Thermostat::Thermostat(uint8_t device_type, uint8_t device_id, uint8_t product_i register_telegram_type(0x269, "RC300Holiday", true, MAKE_PF_CB(process_RC300Holiday)); } register_telegram_type(0x16E, "Absent", true, MAKE_PF_CB(process_Absent)); + register_telegram_type(0xC0, "RCErrorMessage", false, MAKE_PF_CB(process_RCErrorMessage2)); // JUNKERS/HT3 } else if (model == EMSdevice::EMS_DEVICE_FLAG_JUNKERS) { @@ -1751,6 +1752,49 @@ void Thermostat::process_RCErrorMessage(std::shared_ptr telegram } } } +// 0xC0 error log for RC300 +void Thermostat::process_RCErrorMessage2(std::shared_ptr telegram) { + if (telegram->offset > 0 || telegram->message_length < 20) { + return; + } + uint8_t code[4] = {telegram->message_data[5], telegram->message_data[6], telegram->message_data[7], 0}; + uint16_t codeNo = telegram->message_data[8] * 256 + telegram->message_data[9]; + uint16_t year = (telegram->message_data[10] & 0x7F) + 2000; + uint8_t month = telegram->message_data[11]; + uint8_t day = telegram->message_data[13]; + uint8_t hour = telegram->message_data[12]; + uint8_t min = telegram->message_data[14]; + uint16_t year1 = (telegram->message_data[15] & 0x7F) + 2000; + uint8_t month1 = telegram->message_data[16]; + uint8_t day1 = telegram->message_data[18]; + uint8_t hour1 = telegram->message_data[17]; + uint8_t min1 = telegram->message_data[19]; + if (isprint(code[0]) && isprint(code[1]) && isprint(code[2])) { + if (year == 2000) { // no clock + uint32_t min2 = 65536 * telegram->message_data[11] + 256 * telegram->message_data[12] + telegram->message_data[13]; + snprintf(lastCode_, sizeof(lastCode_), "%s(%d) %d min", code, codeNo, min2); + } else if (year1 == 2000) { + snprintf(lastCode_, sizeof(lastCode_), "%s(%d) %02d.%02d.%d %02d:%02d", code, codeNo, day, month, year, hour, min); + } else { + snprintf(lastCode_, + sizeof(lastCode_), + "%s(%d) %02d.%02d.%d %02d:%02d-%02d.%02d.%d %02d:%02d", + code, + codeNo, + day, + month, + year, + hour, + min, + day1, + month1, + year1, + hour1, + min1); + } + has_update(lastCode_); + } +} /* * diff --git a/src/devices/thermostat.h b/src/devices/thermostat.h index 616e4759e..9f1b243f0 100644 --- a/src/devices/thermostat.h +++ b/src/devices/thermostat.h @@ -411,6 +411,7 @@ class Thermostat : public EMSdevice { void process_RCTime(std::shared_ptr telegram); void process_RCError(std::shared_ptr telegram); void process_RCErrorMessage(std::shared_ptr telegram); + void process_RCErrorMessage2(std::shared_ptr telegram); void process_RC35wwSettings(std::shared_ptr telegram); void process_RC35wwTimer(std::shared_ptr telegram); void process_RC35Monitor(std::shared_ptr telegram); From 3cb29220ab17b0811e0cf5329d0e3f3461bd4e19 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Tue, 1 Apr 2025 18:58:59 +0200 Subject: [PATCH 08/10] fetch first c0 telegram #2501 --- src/devices/thermostat.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index 0b9b26781..5cc84fde9 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -195,6 +195,7 @@ Thermostat::Thermostat(uint8_t device_type, uint8_t device_id, uint8_t product_i } register_telegram_type(0x16E, "Absent", true, MAKE_PF_CB(process_Absent)); register_telegram_type(0xC0, "RCErrorMessage", false, MAKE_PF_CB(process_RCErrorMessage2)); + EMSESP::send_read_request(0xC0, device_id); // read last errorcode on start (only published on errors) // JUNKERS/HT3 } else if (model == EMSdevice::EMS_DEVICE_FLAG_JUNKERS) { From d35574d4947b0d0d86da9fbaab66b07019cb3cef Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Wed, 2 Apr 2025 17:48:27 +0200 Subject: [PATCH 09/10] update pkg --- interface/package.json | 10 +-- interface/yarn.lock | 159 ++++++++++++++++++++++------------------- 2 files changed, 89 insertions(+), 80 deletions(-) diff --git a/interface/package.json b/interface/package.json index 90e5d9595..a5ab94fe9 100644 --- a/interface/package.json +++ b/interface/package.json @@ -47,9 +47,9 @@ "@preact/preset-vite": "^2.10.1", "@trivago/prettier-plugin-sort-imports": "^5.2.2", "@types/formidable": "^3", - "@types/node": "^22.13.14", - "@types/react": "^19.0.12", - "@types/react-dom": "^19.0.4", + "@types/node": "^22.13.17", + "@types/react": "^19.1.0", + "@types/react-dom": "^19.1.1", "concurrently": "^9.1.2", "eslint": "^9.23.0", "eslint-config-prettier": "^10.1.1", @@ -57,8 +57,8 @@ "prettier": "^3.5.3", "rollup-plugin-visualizer": "^5.14.0", "terser": "^5.39.0", - "typescript-eslint": "8.28.0", - "vite": "^6.2.3", + "typescript-eslint": "8.29.0", + "vite": "^6.2.4", "vite-plugin-imagemin": "^0.6.1", "vite-tsconfig-paths": "^5.1.4" }, diff --git a/interface/yarn.lock b/interface/yarn.lock index 19dcbdd7e..3c14c421e 100644 --- a/interface/yarn.lock +++ b/interface/yarn.lock @@ -1415,7 +1415,7 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:^22.13.14": +"@types/node@npm:*": version: 22.13.14 resolution: "@types/node@npm:22.13.14" dependencies: @@ -1424,6 +1424,15 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:^22.13.17": + version: 22.13.17 + resolution: "@types/node@npm:22.13.17" + dependencies: + undici-types: "npm:~6.20.0" + checksum: 10c0/77a052fec0fe02f60557e1c5f3f28eb09cd9bee426be88328a94689150a3c0df5b4b6b69fad28157fb34521693dad0b311ecd7f613845d681ff973991310c20e + languageName: node + linkType: hard + "@types/parse-json@npm:^4.0.0": version: 4.0.2 resolution: "@types/parse-json@npm:4.0.2" @@ -1438,12 +1447,12 @@ __metadata: languageName: node linkType: hard -"@types/react-dom@npm:^19.0.4": - version: 19.0.4 - resolution: "@types/react-dom@npm:19.0.4" +"@types/react-dom@npm:^19.1.1": + version: 19.1.1 + resolution: "@types/react-dom@npm:19.1.1" peerDependencies: "@types/react": ^19.0.0 - checksum: 10c0/4e71853919b94df9e746a4bd73f8180e9ae13016333ce9c543dcba9f4f4c8fe6e28b038ca6ee61c24e291af8e03ca3bc5ded17c46dee938fcb32d71186fda7a3 + checksum: 10c0/83833af502f501a372b370fdeb7cf933dfc8780903fe0e0d6e6a76b4ea3adbe5316159a62a0388d8afdd409afd76a40959e2ce82fbb788f57d32c786a63601ee languageName: node linkType: hard @@ -1456,12 +1465,12 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:^19.0.12": - version: 19.0.12 - resolution: "@types/react@npm:19.0.12" +"@types/react@npm:^19.1.0": + version: 19.1.0 + resolution: "@types/react@npm:19.1.0" dependencies: csstype: "npm:^3.0.2" - checksum: 10c0/c814b6af5c0fbcf5c65d031b1c9bf98c5b857e015254d95811f2851b27b869c3d31c6f35dab127dc6921a3dbda0b0622c6323d493a14b31b231a6a58c41c5e84 + checksum: 10c0/632fd20ee176e55801a61c5f854141b043571a3e363ef106b047b766a813a12735cbb37abb3d61d126346979f530f2ed269a60c8ef3cdee54e5e9fe4174e5dad languageName: node linkType: hard @@ -1483,15 +1492,15 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:8.28.0": - version: 8.28.0 - resolution: "@typescript-eslint/eslint-plugin@npm:8.28.0" +"@typescript-eslint/eslint-plugin@npm:8.29.0": + version: 8.29.0 + resolution: "@typescript-eslint/eslint-plugin@npm:8.29.0" dependencies: "@eslint-community/regexpp": "npm:^4.10.0" - "@typescript-eslint/scope-manager": "npm:8.28.0" - "@typescript-eslint/type-utils": "npm:8.28.0" - "@typescript-eslint/utils": "npm:8.28.0" - "@typescript-eslint/visitor-keys": "npm:8.28.0" + "@typescript-eslint/scope-manager": "npm:8.29.0" + "@typescript-eslint/type-utils": "npm:8.29.0" + "@typescript-eslint/utils": "npm:8.29.0" + "@typescript-eslint/visitor-keys": "npm:8.29.0" graphemer: "npm:^1.4.0" ignore: "npm:^5.3.1" natural-compare: "npm:^1.4.0" @@ -1500,64 +1509,64 @@ __metadata: "@typescript-eslint/parser": ^8.0.0 || ^8.0.0-alpha.0 eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/f01b7d231b01ec2c1cc7c40599ddceb329532f2876664a39dec9d25c0aed4cfdbef3ec07f26bac357df000d798f652af6fdb6a2481b6120e43bfa38f7c7a7c48 + checksum: 10c0/3b05a7376a0752484229369af6eb60d13cf06d2331e79c2d471cb0b963dcf5b25a31617cafdc71d74e98921091f479f3da10725b761878a89421191d23866b54 languageName: node linkType: hard -"@typescript-eslint/parser@npm:8.28.0": - version: 8.28.0 - resolution: "@typescript-eslint/parser@npm:8.28.0" +"@typescript-eslint/parser@npm:8.29.0": + version: 8.29.0 + resolution: "@typescript-eslint/parser@npm:8.29.0" dependencies: - "@typescript-eslint/scope-manager": "npm:8.28.0" - "@typescript-eslint/types": "npm:8.28.0" - "@typescript-eslint/typescript-estree": "npm:8.28.0" - "@typescript-eslint/visitor-keys": "npm:8.28.0" + "@typescript-eslint/scope-manager": "npm:8.29.0" + "@typescript-eslint/types": "npm:8.29.0" + "@typescript-eslint/typescript-estree": "npm:8.29.0" + "@typescript-eslint/visitor-keys": "npm:8.29.0" debug: "npm:^4.3.4" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/4bde6887bbf3fe031c01e46db90f9f384a8cac2e67c2972b113a62d607db75e01db943601279aac847b9187960a038981814042cb02fd5aa27ea4613028f9313 + checksum: 10c0/270b9b27e3edb54b2f98a97b7f026f95580214002a04167809b1b71233c36d1585041cdcf26f9e08f48b9eb92652f4f9c756a83dc230f48fd204a4e5e054831c languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:8.28.0": - version: 8.28.0 - resolution: "@typescript-eslint/scope-manager@npm:8.28.0" +"@typescript-eslint/scope-manager@npm:8.29.0": + version: 8.29.0 + resolution: "@typescript-eslint/scope-manager@npm:8.29.0" dependencies: - "@typescript-eslint/types": "npm:8.28.0" - "@typescript-eslint/visitor-keys": "npm:8.28.0" - checksum: 10c0/f3bd76b3f54e60f1efe108b233b2d818e44ecf0dc6422cc296542f784826caf3c66d51b8acc83d8c354980bd201e1d9aa1ea01011de96e0613d320c00e40ccfd + "@typescript-eslint/types": "npm:8.29.0" + "@typescript-eslint/visitor-keys": "npm:8.29.0" + checksum: 10c0/330d777043a99485b51197ad24927f1276d61e61adaf710f012b3fe7db2ab67c8925c0526f801715b498e7d8fa7cef390006b6f7ae40cee89abe22e8e438de9a languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:8.28.0": - version: 8.28.0 - resolution: "@typescript-eslint/type-utils@npm:8.28.0" +"@typescript-eslint/type-utils@npm:8.29.0": + version: 8.29.0 + resolution: "@typescript-eslint/type-utils@npm:8.29.0" dependencies: - "@typescript-eslint/typescript-estree": "npm:8.28.0" - "@typescript-eslint/utils": "npm:8.28.0" + "@typescript-eslint/typescript-estree": "npm:8.29.0" + "@typescript-eslint/utils": "npm:8.29.0" debug: "npm:^4.3.4" ts-api-utils: "npm:^2.0.1" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/b8936edc2153bf794efba39bfb06393a228217830051767360f4b691fed7c82f3831c4fc6deac6d78b90a58596e61f866c17eaee9dd793c3efda3ebdcf5a71d8 + checksum: 10c0/f254c8d22fc29ea088d16b06e4be1756cb5ad05ccf5989e163637b9c582e5fc8c27aa7003aad6e6a8158d56d7711ea1e4e9d361702c1a18945e0e6aaff1267c5 languageName: node linkType: hard -"@typescript-eslint/types@npm:8.28.0": - version: 8.28.0 - resolution: "@typescript-eslint/types@npm:8.28.0" - checksum: 10c0/1f95895e20dac1cf063dc93c99142fd1871e53be816bcbbee93f22a05e6b2a82ca83c20ce3a551f65555910aa0956443a23268edbb004369d0d5cb282d13c377 +"@typescript-eslint/types@npm:8.29.0": + version: 8.29.0 + resolution: "@typescript-eslint/types@npm:8.29.0" + checksum: 10c0/fc1e3f3071102973a9cfb8ae843c51398bd74b5583b7b0edad182ea605ef85e72ceac7987513581869958b3a65303af6b3471bfba5b7be1338e8add62019c858 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:8.28.0": - version: 8.28.0 - resolution: "@typescript-eslint/typescript-estree@npm:8.28.0" +"@typescript-eslint/typescript-estree@npm:8.29.0": + version: 8.29.0 + resolution: "@typescript-eslint/typescript-estree@npm:8.29.0" dependencies: - "@typescript-eslint/types": "npm:8.28.0" - "@typescript-eslint/visitor-keys": "npm:8.28.0" + "@typescript-eslint/types": "npm:8.29.0" + "@typescript-eslint/visitor-keys": "npm:8.29.0" debug: "npm:^4.3.4" fast-glob: "npm:^3.3.2" is-glob: "npm:^4.0.3" @@ -1566,32 +1575,32 @@ __metadata: ts-api-utils: "npm:^2.0.1" peerDependencies: typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/97a91c95b1295926098c12e2d2c2abaa68994dc879da132dcce1e75ec9d7dee8187695eaa5241d09cbc42b5e633917b6d35c624e78e3d3ee9bda42d1318080b6 + checksum: 10c0/61dd52229a0758e0bd29f732115c16e640a2418fb25488877c74ef03cdbeb43ddc592a37094abd794ef49812f33d6f814c5b662b95ea796ed0a6c6bfc849299b languageName: node linkType: hard -"@typescript-eslint/utils@npm:8.28.0": - version: 8.28.0 - resolution: "@typescript-eslint/utils@npm:8.28.0" +"@typescript-eslint/utils@npm:8.29.0": + version: 8.29.0 + resolution: "@typescript-eslint/utils@npm:8.29.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.4.0" - "@typescript-eslint/scope-manager": "npm:8.28.0" - "@typescript-eslint/types": "npm:8.28.0" - "@typescript-eslint/typescript-estree": "npm:8.28.0" + "@typescript-eslint/scope-manager": "npm:8.29.0" + "@typescript-eslint/types": "npm:8.29.0" + "@typescript-eslint/typescript-estree": "npm:8.29.0" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/d3425be7f86c1245a11f0ea39136af681027797417348d8e666d38c76646945eaed7b35eb8db66372b067dee8b02a855caf2c24c040ec9c31e59681ab223b59d + checksum: 10c0/e259d7edd12946b2dc8e1aa3bbea10f66c5277f27dda71368aa2b2923487f28cd1c123681aaae22518a31c8aeabd60a5365f8a832d0f6e6efadb03745a2d8a31 languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:8.28.0": - version: 8.28.0 - resolution: "@typescript-eslint/visitor-keys@npm:8.28.0" +"@typescript-eslint/visitor-keys@npm:8.29.0": + version: 8.29.0 + resolution: "@typescript-eslint/visitor-keys@npm:8.29.0" dependencies: - "@typescript-eslint/types": "npm:8.28.0" + "@typescript-eslint/types": "npm:8.29.0" eslint-visitor-keys: "npm:^4.2.0" - checksum: 10c0/245a78ed983fe95fbd1b0f2d4cb9e9d1d964bddc0aa3e3d6ab10c19c4273855bfb27d840bb1fd55deb7ae3078b52f26592472baf6fd2c7019a5aa3b1da974f35 + checksum: 10c0/7f5452b137c4edd258b2289cddf5d92687780375db33421bc4f5e2e9b0c94064c7c5ed3a7b5d96dc9c2d09ca7842b4415b3f3ed3e3f1ae3ac2e625ecb5e87efc languageName: node linkType: hard @@ -1611,9 +1620,9 @@ __metadata: "@table-library/react-table-library": "npm:4.1.12" "@trivago/prettier-plugin-sort-imports": "npm:^5.2.2" "@types/formidable": "npm:^3" - "@types/node": "npm:^22.13.14" - "@types/react": "npm:^19.0.12" - "@types/react-dom": "npm:^19.0.4" + "@types/node": "npm:^22.13.17" + "@types/react": "npm:^19.1.0" + "@types/react-dom": "npm:^19.1.1" alova: "npm:3.2.10" async-validator: "npm:^4.2.5" concurrently: "npm:^9.1.2" @@ -1633,8 +1642,8 @@ __metadata: terser: "npm:^5.39.0" typesafe-i18n: "npm:^5.26.2" typescript: "npm:^5.8.2" - typescript-eslint: "npm:8.28.0" - vite: "npm:^6.2.3" + typescript-eslint: "npm:8.29.0" + vite: "npm:^6.2.4" vite-plugin-imagemin: "npm:^0.6.1" vite-tsconfig-paths: "npm:^5.1.4" languageName: unknown @@ -6659,17 +6668,17 @@ __metadata: languageName: node linkType: hard -"typescript-eslint@npm:8.28.0": - version: 8.28.0 - resolution: "typescript-eslint@npm:8.28.0" +"typescript-eslint@npm:8.29.0": + version: 8.29.0 + resolution: "typescript-eslint@npm:8.29.0" dependencies: - "@typescript-eslint/eslint-plugin": "npm:8.28.0" - "@typescript-eslint/parser": "npm:8.28.0" - "@typescript-eslint/utils": "npm:8.28.0" + "@typescript-eslint/eslint-plugin": "npm:8.29.0" + "@typescript-eslint/parser": "npm:8.29.0" + "@typescript-eslint/utils": "npm:8.29.0" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/bf1c1e4b2f21a95930758d5b285c39a394a50e3b6983f373413b93b80a6cb5aabc1d741780e60c63cb42ad5d645ea9c1e6d441d98174c5a2884ab88f4ac46df6 + checksum: 10c0/1438b80fc875acc65acc842dc870070be31d6a30f756a6d9985fadd063f4f568e74a83bac7aaf94d2320e434df3c033a6e2ab7258b1429cae2aa7c4b16fb5088 languageName: node linkType: hard @@ -6872,9 +6881,9 @@ __metadata: languageName: node linkType: hard -"vite@npm:^6.2.3": - version: 6.2.3 - resolution: "vite@npm:6.2.3" +"vite@npm:^6.2.4": + version: 6.2.4 + resolution: "vite@npm:6.2.4" dependencies: esbuild: "npm:^0.25.0" fsevents: "npm:~2.3.3" @@ -6920,7 +6929,7 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 10c0/ba6ad7e83e5a63fb0b6f62d3a3963624b8784bdc1bfa2a83e16cf268fb58c76bd9f8e69f39ed34bf8711cdb8fd7702916f878781da53c232c34ef7a85e0600cf + checksum: 10c0/5a011ee5cce91de023a22564a314f04bf64d0d02b420d92c3d539d10257448d60e98e52b491404656426fba4a50dc25f107282540d7388fc5303dc441280155e languageName: node linkType: hard From 3eb20fa70053dba79964cf610cb1b95227b1e959 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Wed, 2 Apr 2025 17:49:22 +0200 Subject: [PATCH 10/10] add some HA config on mqtt reconnect --- CHANGELOG_LATEST.md | 4 ++++ src/core/emsesp.cpp | 3 +++ src/core/shower.h | 3 +++ src/emsesp_version.h | 2 +- 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index 183e01c9c..055a5a87c 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -9,11 +9,15 @@ For more details go to [docs.emsesp.org](https://docs.emsesp.org/). - 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) ## 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 ## Changed diff --git a/src/core/emsesp.cpp b/src/core/emsesp.cpp index 16a40e0b9..399dd52b1 100644 --- a/src/core/emsesp.cpp +++ b/src/core/emsesp.cpp @@ -634,6 +634,9 @@ void EMSESP::reset_mqtt_ha() { // force the re-creating of the temperature and analog sensor topics (for HA) temperaturesensor_.reload(); analogsensor_.reload(); + shower_.ha_reset(); + webSchedulerService.ha_reset(); + webCustomEntityService.ha_reset(); } // create json doc for the devices values and add to MQTT publish queue diff --git a/src/core/shower.h b/src/core/shower.h index 2876a80cb..f266e709c 100644 --- a/src/core/shower.h +++ b/src/core/shower.h @@ -40,6 +40,9 @@ class Shower { void shower_alert(bool enable) { shower_alert_ = enable; } + void ha_reset() { + ha_configdone_ = false; + } private: static uuid::log::Logger logger_; diff --git a/src/emsesp_version.h b/src/emsesp_version.h index 865b4ddb9..c2112bab9 100644 --- a/src/emsesp_version.h +++ b/src/emsesp_version.h @@ -1 +1 @@ -#define EMSESP_APP_VERSION "3.7.3-dev.4" +#define EMSESP_APP_VERSION "3.7.3-dev.5"