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/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/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', 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 diff --git a/src/ESP32React/NetworkSettingsService.cpp b/src/ESP32React/NetworkSettingsService.cpp index 4a7950662..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(); } diff --git a/src/core/emsesp.cpp b/src/core/emsesp.cpp index 3ef9c2a07..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 @@ -974,8 +977,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 +1319,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"; } 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/devices/thermostat.cpp b/src/devices/thermostat.cpp index 52f07bd20..5cc84fde9 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -194,6 +194,8 @@ 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)); + 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) { @@ -1751,6 +1753,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); 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"