diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index 891f62694..442112259 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -10,7 +10,8 @@ For more details go to [www.emsesp.org](https://www.emsesp.org/). - include HA "unit_of_meas", "stat_cla" and "dev_cla" attributes for Number sensors [#2149](https://github.com/emsesp/EMS-ESP32/issues/2149) - Bosch CS6800i AW - Silent Mode + Electrical Power Reduction (HP) [#2147](https://github.com/emsesp/EMS-ESP32/issues/2147) -- /api/system/showeralert and /api/system/showertimer [#2182](https://github.com/emsesp/EMS-ESP32/issues/2182) +- `/api/system/showeralert` and `/api/system/showertimer` [#2182](https://github.com/emsesp/EMS-ESP32/issues/2182) +- MX400 [#2198](https://github.com/emsesp/EMS-ESP32/issues/2198) ## Fixed @@ -18,5 +19,9 @@ For more details go to [www.emsesp.org](https://www.emsesp.org/). - fix changing TZ in NTPsettings without clearing enable+server, added DST support [#2142](https://github.com/emsesp/EMS-ESP32/issues/2142) - Support MQTT Discovery (AD) with Domoticz [#2177](https://github.com/emsesp/EMS-ESP32/issues/2177) - wwExtra (dhw extra) changed from temperature reading to number +- auxheaterstatus [#2192](https://github.com/emsesp/EMS-ESP32/issues/2192) +- lastCode character check [#2189](https://github.com/emsesp/EMS-ESP32/issues/2189) +- reading too many telegram parts +- heatpump cost UOMs [#2188](https://github.com/emsesp/EMS-ESP32/issues/2188) ## Changed diff --git a/interface/package.json b/interface/package.json index a75874e78..d98fc8fc5 100644 --- a/interface/package.json +++ b/interface/package.json @@ -24,10 +24,10 @@ "@alova/adapter-xhr": "2.0.10", "@emotion/react": "^11.13.3", "@emotion/styled": "^11.13.0", - "@mui/icons-material": "^6.1.6", - "@mui/material": "^6.1.6", + "@mui/icons-material": "^6.1.7", + "@mui/material": "^6.1.7", "@table-library/react-table-library": "4.1.7", - "alova": "3.2.2", + "alova": "3.2.3", "async-validator": "^4.2.5", "jwt-decode": "^4.0.0", "mime-types": "^2.1.35", @@ -58,10 +58,10 @@ "prettier": "^3.3.3", "rollup-plugin-visualizer": "^5.12.0", "terser": "^5.36.0", - "typescript-eslint": "8.13.0", - "vite": "^5.4.10", + "typescript-eslint": "8.14.0", + "vite": "^5.4.11", "vite-plugin-imagemin": "^0.6.1", - "vite-tsconfig-paths": "^5.1.1" + "vite-tsconfig-paths": "^5.1.2" }, "packageManager": "yarn@4.5.1" } diff --git a/interface/src/app/main/types.ts b/interface/src/app/main/types.ts index d037d338e..4c20fd57f 100644 --- a/interface/src/app/main/types.ts +++ b/interface/src/app/main/types.ts @@ -181,7 +181,8 @@ export enum DeviceValueUOM { K, VOLTS, MBAR, - LH + LH, + CTKWH } export const DeviceValueUOM_s = [ @@ -210,7 +211,8 @@ export const DeviceValueUOM_s = [ 'K', 'V', 'mbar', - 'l/h' + 'l/h', + 'ct/kWh' ]; export enum AnalogType { diff --git a/interface/yarn.lock b/interface/yarn.lock index 9c955c8b0..fe0f8b238 100644 --- a/interface/yarn.lock +++ b/interface/yarn.lock @@ -840,38 +840,38 @@ __metadata: languageName: node linkType: hard -"@mui/core-downloads-tracker@npm:^6.1.6": - version: 6.1.6 - resolution: "@mui/core-downloads-tracker@npm:6.1.6" - checksum: 10c0/538c561dc46e040ebc5ea884428dccc427fdddbd3747890d96ae52648eed5f7dec4dc8294927b58ff4b7481c0a813dcb16b9d7b9b08cc43871d2d55ebd1a8002 +"@mui/core-downloads-tracker@npm:^6.1.7": + version: 6.1.7 + resolution: "@mui/core-downloads-tracker@npm:6.1.7" + checksum: 10c0/4568379b1df8a17ca2292b7caa729f42c3b4b359841c81981a7d25641380121f3a042e53094cabd16d5c838372edadb8c23c24d9bff0fcc794c615b62f0ceb3e languageName: node linkType: hard -"@mui/icons-material@npm:^6.1.6": - version: 6.1.6 - resolution: "@mui/icons-material@npm:6.1.6" +"@mui/icons-material@npm:^6.1.7": + version: 6.1.7 + resolution: "@mui/icons-material@npm:6.1.7" dependencies: "@babel/runtime": "npm:^7.26.0" peerDependencies: - "@mui/material": ^6.1.6 + "@mui/material": ^6.1.7 "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: "@types/react": optional: true - checksum: 10c0/a6eb10be3cc356fd404febf29a3b26fa63b6b09d3148736fb05279954905186e9804869ff18220840ae92dbdeddfd407c2d0c72b9e165e01fd6bbc620b6b39d7 + checksum: 10c0/89f6d69dce35aa0b2fd2586f0de3a01171ba85b6c2b848dd0d1cfca0840778eafc90465efeb822451f4066df9791099ff8a683df4cacea98bc3affbc9b80c891 languageName: node linkType: hard -"@mui/material@npm:^6.1.6": - version: 6.1.6 - resolution: "@mui/material@npm:6.1.6" +"@mui/material@npm:^6.1.7": + version: 6.1.7 + resolution: "@mui/material@npm:6.1.7" dependencies: "@babel/runtime": "npm:^7.26.0" - "@mui/core-downloads-tracker": "npm:^6.1.6" - "@mui/system": "npm:^6.1.6" + "@mui/core-downloads-tracker": "npm:^6.1.7" + "@mui/system": "npm:^6.1.7" "@mui/types": "npm:^7.2.19" - "@mui/utils": "npm:^6.1.6" + "@mui/utils": "npm:^6.1.7" "@popperjs/core": "npm:^2.11.8" "@types/react-transition-group": "npm:^4.4.11" clsx: "npm:^2.1.1" @@ -882,7 +882,7 @@ __metadata: peerDependencies: "@emotion/react": ^11.5.0 "@emotion/styled": ^11.3.0 - "@mui/material-pigment-css": ^6.1.6 + "@mui/material-pigment-css": ^6.1.7 "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -895,16 +895,16 @@ __metadata: optional: true "@types/react": optional: true - checksum: 10c0/b54c0b01f33f63a700ec7b13d615dd3a109497ee48a1af0f750f780112a7034fbecfcecf29ad67aa62ec12047d465fbcb243052d8680ce681240096fef1f8d63 + checksum: 10c0/2c049da6b8f4bc79a0777692138ff77a0cb64b96c384d7070097c006391798554923806fed1ef8c6db8730f11c058edfb94bd243d2abeff14e45fd51d1f29819 languageName: node linkType: hard -"@mui/private-theming@npm:^6.1.6": - version: 6.1.6 - resolution: "@mui/private-theming@npm:6.1.6" +"@mui/private-theming@npm:^6.1.7": + version: 6.1.7 + resolution: "@mui/private-theming@npm:6.1.7" dependencies: "@babel/runtime": "npm:^7.26.0" - "@mui/utils": "npm:^6.1.6" + "@mui/utils": "npm:^6.1.7" prop-types: "npm:^15.8.1" peerDependencies: "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -912,13 +912,13 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 10c0/d9138bd3ae8b318b0f14e3d9a9aa414f31698ce3934b94f0a1e78d9c2c37fd3d2b24a6bd45ded321ffc41658e70fc055226b9c1b9767695a93c927adf54302a0 + checksum: 10c0/2735c0e7155fd595c5f6fd87a20a74a222f1ef3120722d1964fa231c075b909b77612ac3e3a8bb5604a388205f4495690bc0602ceabe925294ed6a5fbe8144da languageName: node linkType: hard -"@mui/styled-engine@npm:^6.1.6": - version: 6.1.6 - resolution: "@mui/styled-engine@npm:6.1.6" +"@mui/styled-engine@npm:^6.1.7": + version: 6.1.7 + resolution: "@mui/styled-engine@npm:6.1.7" dependencies: "@babel/runtime": "npm:^7.26.0" "@emotion/cache": "npm:^11.13.1" @@ -935,19 +935,19 @@ __metadata: optional: true "@emotion/styled": optional: true - checksum: 10c0/2554248f83db98b404b299494c4f039fe5a1f1b9166fc95268958ea00aa3be04915ffbabe0ea418cb2d600e11b6d08f765ddd23240a63e6d06161d07eaac6aa8 + checksum: 10c0/0289121553ab95f6ddd1be0eeb27e975a01391266ff3076430ab67d925c231b586fc2899f8340648b4587c651bd3f7fd24094f43386f6de9052db92a98e13c15 languageName: node linkType: hard -"@mui/system@npm:^6.1.6": - version: 6.1.6 - resolution: "@mui/system@npm:6.1.6" +"@mui/system@npm:^6.1.7": + version: 6.1.7 + resolution: "@mui/system@npm:6.1.7" dependencies: "@babel/runtime": "npm:^7.26.0" - "@mui/private-theming": "npm:^6.1.6" - "@mui/styled-engine": "npm:^6.1.6" + "@mui/private-theming": "npm:^6.1.7" + "@mui/styled-engine": "npm:^6.1.7" "@mui/types": "npm:^7.2.19" - "@mui/utils": "npm:^6.1.6" + "@mui/utils": "npm:^6.1.7" clsx: "npm:^2.1.1" csstype: "npm:^3.1.3" prop-types: "npm:^15.8.1" @@ -963,7 +963,7 @@ __metadata: optional: true "@types/react": optional: true - checksum: 10c0/125d38ad5b0d610cfedace8253e43b4be47b46ad2d96eeac019c6c37b4f09286512e2280924753f8bb0314c4d7cc5e8f03fc7f97cf9830c4f6d1869b721eb8c2 + checksum: 10c0/309db6f87bc7e489486f683961d032faad4804e7a3263f584b0a82e3286831a596f416be69066967a76253938e604cbb87bdfe4f9b8feed683b40ca7c4b8d8f2 languageName: node linkType: hard @@ -979,9 +979,9 @@ __metadata: languageName: node linkType: hard -"@mui/utils@npm:^6.1.6": - version: 6.1.6 - resolution: "@mui/utils@npm:6.1.6" +"@mui/utils@npm:^6.1.7": + version: 6.1.7 + resolution: "@mui/utils@npm:6.1.7" dependencies: "@babel/runtime": "npm:^7.26.0" "@mui/types": "npm:^7.2.19" @@ -995,7 +995,7 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 10c0/8752b3ca3fa1cee7f1a8477b6babcd80fef01724f7d8106c8665a252ec960ca38ef5f4fe21cfb60ee11176a9a8034400420d5b0719953ecc2c4f25980682614c + checksum: 10c0/8dc05bf8f48d6d6d24cb9950b705e8b48eedac8dba159514c5c61ec2da54c9de3f40ff33e8a662eb661af6fbbf9c80b83277eefba6e54a1b5fa26a377ec0d694 languageName: node linkType: hard @@ -1539,15 +1539,15 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:8.13.0": - version: 8.13.0 - resolution: "@typescript-eslint/eslint-plugin@npm:8.13.0" +"@typescript-eslint/eslint-plugin@npm:8.14.0": + version: 8.14.0 + resolution: "@typescript-eslint/eslint-plugin@npm:8.14.0" dependencies: "@eslint-community/regexpp": "npm:^4.10.0" - "@typescript-eslint/scope-manager": "npm:8.13.0" - "@typescript-eslint/type-utils": "npm:8.13.0" - "@typescript-eslint/utils": "npm:8.13.0" - "@typescript-eslint/visitor-keys": "npm:8.13.0" + "@typescript-eslint/scope-manager": "npm:8.14.0" + "@typescript-eslint/type-utils": "npm:8.14.0" + "@typescript-eslint/utils": "npm:8.14.0" + "@typescript-eslint/visitor-keys": "npm:8.14.0" graphemer: "npm:^1.4.0" ignore: "npm:^5.3.1" natural-compare: "npm:^1.4.0" @@ -1558,66 +1558,66 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/ee96515e9def17b0d1b8d568d4afcd21c5a8a1bc01bf2f30c4d1f396b41a2f49de3508f79c6231a137ca06943dd6933ac00032652190ab99a4e935ffef44df0b + checksum: 10c0/46c82eb45be82ffec0ab04728a5180691b1d17002c669864861a3044b6d2105a75ca23cc80d18721b40b5e7dff1eff4ed68a43d726e25d55f3e466a9fbeeb873 languageName: node linkType: hard -"@typescript-eslint/parser@npm:8.13.0": - version: 8.13.0 - resolution: "@typescript-eslint/parser@npm:8.13.0" +"@typescript-eslint/parser@npm:8.14.0": + version: 8.14.0 + resolution: "@typescript-eslint/parser@npm:8.14.0" dependencies: - "@typescript-eslint/scope-manager": "npm:8.13.0" - "@typescript-eslint/types": "npm:8.13.0" - "@typescript-eslint/typescript-estree": "npm:8.13.0" - "@typescript-eslint/visitor-keys": "npm:8.13.0" + "@typescript-eslint/scope-manager": "npm:8.14.0" + "@typescript-eslint/types": "npm:8.14.0" + "@typescript-eslint/typescript-estree": "npm:8.14.0" + "@typescript-eslint/visitor-keys": "npm:8.14.0" debug: "npm:^4.3.4" peerDependencies: eslint: ^8.57.0 || ^9.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 10c0/fa04f6c417c0f72104e148f1d7ff53e04108d383550365a556fbfae5d2283484696235db522189e17bc49039946977078e324100cef991ca01f78704182624ad + checksum: 10c0/522b7afd25cd302c0510cc71985ba55ff92ecc5dbe3fc74a76fefea0169252fdd4b8cad6291fef05f63dfc173951af450dca20859c7f23e387b2e7410e8b97b1 languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:8.13.0": - version: 8.13.0 - resolution: "@typescript-eslint/scope-manager@npm:8.13.0" +"@typescript-eslint/scope-manager@npm:8.14.0": + version: 8.14.0 + resolution: "@typescript-eslint/scope-manager@npm:8.14.0" dependencies: - "@typescript-eslint/types": "npm:8.13.0" - "@typescript-eslint/visitor-keys": "npm:8.13.0" - checksum: 10c0/1924b3e740e244d98f8a99740b4196d23ae3263303b387c66db94e140455a3132e603a130f3f70fc71e37f4bda5d0c0c67224ae3911908b097ef3f972c136be4 + "@typescript-eslint/types": "npm:8.14.0" + "@typescript-eslint/visitor-keys": "npm:8.14.0" + checksum: 10c0/1e1295c6f9febadf63559aad328b23d960510ce6b4c9f74e10d881c3858fa7f1db767cd1af5272d2fe7c9c5c7daebee71854e6f841e413e5d70af282f6616e26 languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:8.13.0": - version: 8.13.0 - resolution: "@typescript-eslint/type-utils@npm:8.13.0" +"@typescript-eslint/type-utils@npm:8.14.0": + version: 8.14.0 + resolution: "@typescript-eslint/type-utils@npm:8.14.0" dependencies: - "@typescript-eslint/typescript-estree": "npm:8.13.0" - "@typescript-eslint/utils": "npm:8.13.0" + "@typescript-eslint/typescript-estree": "npm:8.14.0" + "@typescript-eslint/utils": "npm:8.14.0" debug: "npm:^4.3.4" ts-api-utils: "npm:^1.3.0" peerDependenciesMeta: typescript: optional: true - checksum: 10c0/65319084616f3aea3d9f8dfab30c9b0a70de7314b445805016fdf0d0e39fe073eef2813c3e16c3e1c6a40462ba8eecfdbb12ab1e8570c3407a1cccdb69d4bc8b + checksum: 10c0/42616a664b38ca418e13504247e5e1bad6ae85c045b48e5735ffab977d4bd58cc86fb9d2292bbb314fa408d78d4b0454c3a27dbf9f881f9921917a942825c806 languageName: node linkType: hard -"@typescript-eslint/types@npm:8.13.0": - version: 8.13.0 - resolution: "@typescript-eslint/types@npm:8.13.0" - checksum: 10c0/bd3f88b738a92b2222f388bcf831357ef8940a763c2c2eb1947767e1051dd2f8bee387020e8cf4c2309e4142353961b659abc2885e30679109a0488b0bfefc23 +"@typescript-eslint/types@npm:8.14.0": + version: 8.14.0 + resolution: "@typescript-eslint/types@npm:8.14.0" + checksum: 10c0/7707f900e24e60e6780c5705f69627b7c0ef912cb3b095dfc8f4a0c84e866c66b1c4c10278cf99724560dc66985ec640750c4192786a09b853f9bb4c3ca5a7ce languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:8.13.0": - version: 8.13.0 - resolution: "@typescript-eslint/typescript-estree@npm:8.13.0" +"@typescript-eslint/typescript-estree@npm:8.14.0": + version: 8.14.0 + resolution: "@typescript-eslint/typescript-estree@npm:8.14.0" dependencies: - "@typescript-eslint/types": "npm:8.13.0" - "@typescript-eslint/visitor-keys": "npm:8.13.0" + "@typescript-eslint/types": "npm:8.14.0" + "@typescript-eslint/visitor-keys": "npm:8.14.0" debug: "npm:^4.3.4" fast-glob: "npm:^3.3.2" is-glob: "npm:^4.0.3" @@ -1627,31 +1627,31 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/2d45bc5ed4ac352bea927167ac28ef23bd13b6ae352ff50e85cddfdc4b06518f1dd4ae5f2495e30d6f62d247987677a4e807065d55829ba28963908a821dc96d + checksum: 10c0/5e890d22bd067095f871cf144907a8c302db5b5f014c58906ad58d7f23569951cba805042eac6844744e5abb0d3648c9cc221a91b0703da0a8d6345dc1f83e74 languageName: node linkType: hard -"@typescript-eslint/utils@npm:8.13.0": - version: 8.13.0 - resolution: "@typescript-eslint/utils@npm:8.13.0" +"@typescript-eslint/utils@npm:8.14.0": + version: 8.14.0 + resolution: "@typescript-eslint/utils@npm:8.14.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.4.0" - "@typescript-eslint/scope-manager": "npm:8.13.0" - "@typescript-eslint/types": "npm:8.13.0" - "@typescript-eslint/typescript-estree": "npm:8.13.0" + "@typescript-eslint/scope-manager": "npm:8.14.0" + "@typescript-eslint/types": "npm:8.14.0" + "@typescript-eslint/typescript-estree": "npm:8.14.0" peerDependencies: eslint: ^8.57.0 || ^9.0.0 - checksum: 10c0/3fc5a7184a949df5f5b64f6af039a1d21ef7fe15f3d88a5d485ccbb535746d18514751143993a5aee287228151be3e326baf8f899a0a0a93368f6f20857ffa6d + checksum: 10c0/1fcc2651d870832a799a5d1c85fc9421853508a006d6a6073c8316b012489dda77e123d13aea8f53eb9030a2da2c0eb273a6946a9941caa2519b99b33e89b720 languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:8.13.0": - version: 8.13.0 - resolution: "@typescript-eslint/visitor-keys@npm:8.13.0" +"@typescript-eslint/visitor-keys@npm:8.14.0": + version: 8.14.0 + resolution: "@typescript-eslint/visitor-keys@npm:8.14.0" dependencies: - "@typescript-eslint/types": "npm:8.13.0" + "@typescript-eslint/types": "npm:8.14.0" eslint-visitor-keys: "npm:^3.4.3" - checksum: 10c0/50b35f3cf673aaed940613f0007f7c4558a89ebef15c49824e65b6f084b700fbf01b01a4e701e24bbe651297a39678645e739acd255255f1603867a84bef0383 + checksum: 10c0/d0faf70ed9ecff5e36694bbb161a90bea6db59e0e79a7d4f264d67d565c12b13733d664b736b2730935f013c87ce3155cea954a533d28e99987681bc5f6259c3 languageName: node linkType: hard @@ -1664,8 +1664,8 @@ __metadata: "@emotion/react": "npm:^11.13.3" "@emotion/styled": "npm:^11.13.0" "@eslint/js": "npm:^9.14.0" - "@mui/icons-material": "npm:^6.1.6" - "@mui/material": "npm:^6.1.6" + "@mui/icons-material": "npm:^6.1.7" + "@mui/material": "npm:^6.1.7" "@preact/compat": "npm:^18.3.1" "@preact/preset-vite": "npm:^2.9.1" "@table-library/react-table-library": "npm:4.1.7" @@ -1675,7 +1675,7 @@ __metadata: "@types/react": "npm:^18.3.12" "@types/react-dom": "npm:^18.3.1" "@types/react-router-dom": "npm:^5.3.3" - alova: "npm:3.2.2" + alova: "npm:3.2.3" async-validator: "npm:^4.2.5" concurrently: "npm:^9.1.0" eslint: "npm:^9.14.0" @@ -1694,10 +1694,10 @@ __metadata: terser: "npm:^5.36.0" typesafe-i18n: "npm:^5.26.2" typescript: "npm:^5.6.3" - typescript-eslint: "npm:8.13.0" - vite: "npm:^5.4.10" + typescript-eslint: "npm:8.14.0" + vite: "npm:^5.4.11" vite-plugin-imagemin: "npm:^0.6.1" - vite-tsconfig-paths: "npm:^5.1.1" + vite-tsconfig-paths: "npm:^5.1.2" languageName: unknown linkType: soft @@ -1766,13 +1766,13 @@ __metadata: languageName: node linkType: hard -"alova@npm:3.2.2": - version: 3.2.2 - resolution: "alova@npm:3.2.2" +"alova@npm:3.2.3": + version: 3.2.3 + resolution: "alova@npm:3.2.3" dependencies: "@alova/shared": "npm:1.1.0" rate-limiter-flexible: "npm:^5.0.3" - checksum: 10c0/e01f827fd07e4e532b6d82fcd9e2ce6fe2866704f5e895085c7de63b00a9caaa2cf1dbf8537292d840a5f1903974f2e7296c16b0beda0bd375d1bdd68c17297e + checksum: 10c0/58027f57d5f32d472a5c35110105fdff1a6b772684794a8b00b73289ecde0fa1117160b7904f0a1f8ddc14068d9aecf66fcec76eb868ff20964d81a842a313ea languageName: node linkType: hard @@ -6771,17 +6771,17 @@ __metadata: languageName: node linkType: hard -"typescript-eslint@npm:8.13.0": - version: 8.13.0 - resolution: "typescript-eslint@npm:8.13.0" +"typescript-eslint@npm:8.14.0": + version: 8.14.0 + resolution: "typescript-eslint@npm:8.14.0" dependencies: - "@typescript-eslint/eslint-plugin": "npm:8.13.0" - "@typescript-eslint/parser": "npm:8.13.0" - "@typescript-eslint/utils": "npm:8.13.0" + "@typescript-eslint/eslint-plugin": "npm:8.14.0" + "@typescript-eslint/parser": "npm:8.14.0" + "@typescript-eslint/utils": "npm:8.14.0" peerDependenciesMeta: typescript: optional: true - checksum: 10c0/a84958e7602360c4cb2e6227fd9aae19dd18cdf1a2cfd9ece2a81d54098f80454b5707e861e98547d0b2e5dae552b136aa6733b74f0dd743ca7bfe178083c441 + checksum: 10c0/b9c2f32139d3df52057bfb80d4663fd5e440ccd0da75d92fe91582fe5216213e7012ef691e7d91c75e402e373b9aded6b128b005aaeeae32d7b9d7b39732bcc7 languageName: node linkType: hard @@ -6954,9 +6954,9 @@ __metadata: languageName: node linkType: hard -"vite-tsconfig-paths@npm:^5.1.1": - version: 5.1.1 - resolution: "vite-tsconfig-paths@npm:5.1.1" +"vite-tsconfig-paths@npm:^5.1.2": + version: 5.1.2 + resolution: "vite-tsconfig-paths@npm:5.1.2" dependencies: debug: "npm:^4.1.1" globrex: "npm:^0.1.2" @@ -6966,13 +6966,13 @@ __metadata: peerDependenciesMeta: vite: optional: true - checksum: 10c0/7d18e2f6daa057e21885bffd3dc751f2a8fe1f249a70e4ca35b944c505d1b59d6e7c3f2278afef5139aa4cabdcb307567d3d26f2009dcccff4281c485c89a231 + checksum: 10c0/7db445b6b1f48e7b89f39f5eb8cf4ea645994f581fcc7c9fac721e0c36f8203c0770007ec27825caa6e2566e3127b2b1bfe8be28ca05cd0e9fb67a2943dcdec5 languageName: node linkType: hard -"vite@npm:^5.4.10": - version: 5.4.10 - resolution: "vite@npm:5.4.10" +"vite@npm:^5.4.11": + version: 5.4.11 + resolution: "vite@npm:5.4.11" dependencies: esbuild: "npm:^0.21.3" fsevents: "npm:~2.3.3" @@ -7009,7 +7009,7 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 10c0/4ef4807d2fd166a920de244dbcec791ba8a903b017a7d8e9f9b4ac40d23f8152c1100610583d08f542b47ca617a0505cfc5f8407377d610599d58296996691ed + checksum: 10c0/d536bb7af57dd0eca2a808f95f5ff1d7b7ffb8d86e17c6893087680a0448bd0d15e07475270c8a6de65cb5115592d037130a1dd979dc76bcef8c1dda202a1874 languageName: node linkType: hard diff --git a/src/device_library.h b/src/device_library.h index 62b82a9cd..d8e80475f 100644 --- a/src/device_library.h +++ b/src/device_library.h @@ -180,6 +180,7 @@ { 74, DeviceType::ALERT, "EM10", DeviceFlags::EMS_DEVICE_FLAG_NONE}, // Gateways - 0x48 +{17, DeviceType::GATEWAY, "MX400", DeviceFlags::EMS_DEVICE_FLAG_NONE}, // 0x48 and 0x4B {189, DeviceType::GATEWAY, "KM200, MB LAN 2", DeviceFlags::EMS_DEVICE_FLAG_NONE}, {252, DeviceType::GATEWAY, "K30RF, MX300", DeviceFlags::EMS_DEVICE_FLAG_NONE}, diff --git a/src/devices/boiler.cpp b/src/devices/boiler.cpp index c25b32e05..3beccfd44 100644 --- a/src/devices/boiler.cpp +++ b/src/devices/boiler.cpp @@ -684,7 +684,8 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const FL_(auxHeaterOff), DeviceValueUOM::NONE, MAKE_CF_CB(set_additionalHeater)); - register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &auxHeaterStatus_, DeviceValueType::UINT8, FL_(auxHeaterStatus), DeviceValueUOM::PERCENT); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &auxHeaterStatus_, DeviceValueType::BOOL, FL_(auxHeaterStatus), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &auxHeaterLevel_, DeviceValueType::UINT8, FL_(auxHeaterLevel), DeviceValueUOM::PERCENT); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &auxHeaterDelay_, DeviceValueType::UINT16, @@ -1434,7 +1435,7 @@ void Boiler::process_UBAMonitorFastPlus(std::shared_ptr telegram // at this point do a quick check to see if the hot water or heating is active uint8_t state = EMS_VALUE_UINT8_NOTSET; - if (telegram->read_value(state, 11) && model() != EMSdevice::EMS_DEVICE_FLAG_HIU) { + if (telegram->read_value(state, 11) && model() != EMSdevice::EMS_DEVICE_FLAG_HIU && model() != EMSdevice::EMS_DEVICE_FLAG_HEATPUMP) { boilerState_ = state & 0x01 ? 0x08 : 0; // burnGas boilerState_ |= state & 0x02 ? 0x01 : 0; // heatingPump boilerState_ |= state & 0x04 ? 0x02 : 0; // 3-way-valve @@ -1473,7 +1474,7 @@ void Boiler::process_UBAMonitorSlow(std::shared_ptr telegram) { */ void Boiler::process_UBAMonitorSlowPlus2(std::shared_ptr telegram) { has_update(telegram, absBurnPow_, 13); // current burner absolute power (percent of rating plate power) - if (model() == EMSdevice::EMS_DEVICE_FLAG_HIU) { + if (model() == EMSdevice::EMS_DEVICE_FLAG_HIU || model() == EMSdevice::EMS_DEVICE_FLAG_HEATPUMP) { uint8_t state = EMS_VALUE_UINT8_NOTSET; boilerState_ = 0; if (telegram->read_value(state, 2)) { @@ -1661,7 +1662,7 @@ void Boiler::process_HpPower(std::shared_ptr telegram) { has_bitupdate(telegram, hpEA0_, 3, 6); has_update(telegram, hpCircSpd_, 4); has_update(telegram, hpBrinePumpSpd_, 5); - has_update(telegram, auxHeaterStatus_, 6); + has_update(telegram, auxHeaterLevel_, 6); has_update(telegram, hpActivity_, 7); has_update(telegram, hpPower_, 11); has_update(telegram, hpCompSpd_, 17); @@ -1828,6 +1829,10 @@ void Boiler::process_UBAErrorMessage(std::shared_ptr telegram) { uint8_t min = telegram->message_data[8]; uint16_t duration = telegram->message_data[9] * 256 + telegram->message_data[10]; uint32_t date = (year - 2000) * 535680UL + month * 44640UL + day * 1440UL + hour * 60 + min + duration; + // check valid https://github.com/emsesp/EMS-ESP32/issues/2189 + if (day == 0 || day > 31 || month == 0 || month > 12 || !std::isprint(code[0]) || !std::isprint(code[1])) { + return; + } // store only the newest code from telegrams 10 and 11 if (date > lastCodeDate_ && lastCodeDate_) { lastCodeDate_ = date; @@ -1855,6 +1860,9 @@ void Boiler::process_UBAErrorMessage2(std::shared_ptr telegram) code[2] = telegram->message_data[7]; code[3] = 0; telegram->read_value(codeNo, 8); + if (!std::isprint(code[0]) || !std::isprint(code[1]) || !std::isprint(code[2])) { + return; + } // check for valid date, https://github.com/emsesp/EMS-ESP32/issues/204 if (telegram->message_data[10] & 0x80) { @@ -1955,7 +1963,7 @@ void Boiler::process_HpSilentMode(std::shared_ptr telegram) { // Boiler(0x08) -B-> All(0x00), ?(0x0488), data: 8E 00 00 00 00 00 01 03 void Boiler::process_HpValve(std::shared_ptr telegram) { - // has_bitupdate(telegram, auxHeaterStatus_, 0, 2); + has_bitupdate(telegram, auxHeaterStatus_, 0, 2); has_update(telegram, auxHeatMixValve_, 7); has_update(telegram, pc1Rate_, 13); // percent } @@ -2970,19 +2978,19 @@ bool Boiler::set_silentMode(const char * value, const int8_t id) { } bool Boiler::set_silentFrom(const char * value, const int8_t id) { - int v; - if (!Helpers::value2number(value, v)) { + if (value == nullptr || value[0] < '0' || value[0] > '9') { return false; } + auto v = Helpers::string2minutes(value); write_command(0x484, 52, v / 15, 0x484); return true; } bool Boiler::set_silentTo(const char * value, const int8_t id) { - int v; - if (!Helpers::value2number(value, v)) { + if (value == nullptr || value[0] < '0' || value[0] > '9') { return false; } + auto v = Helpers::string2minutes(value); write_command(0x484, 53, v / 15, 0x484); return true; } diff --git a/src/devices/boiler.h b/src/devices/boiler.h index 7c4df0b1a..2879e90d9 100644 --- a/src/devices/boiler.h +++ b/src/devices/boiler.h @@ -266,6 +266,7 @@ class Boiler : public EMSdevice { uint8_t auxHeaterOnly_; uint8_t auxHeaterOff_; uint8_t auxHeaterStatus_; + uint8_t auxHeaterLevel_; uint16_t auxHeaterDelay_; uint8_t silentMode_; int8_t minTempSilent_; diff --git a/src/devices/heatpump.cpp b/src/devices/heatpump.cpp index de56e342a..f4549edfe 100644 --- a/src/devices/heatpump.cpp +++ b/src/devices/heatpump.cpp @@ -82,10 +82,10 @@ Heatpump::Heatpump(uint8_t device_type, uint8_t device_id, uint8_t product_id, c DeviceValueUOM::NONE, MAKE_CF_CB(set_lowNoiseMode)); register_device_value( - DeviceValueTAG::TAG_DEVICE_DATA, &lowNoiseStart_, DeviceValueType::UINT8, FL_(lowNoiseStart), DeviceValueUOM::NONE, MAKE_CF_CB(set_lowNoiseStart), 0, 23); + DeviceValueTAG::TAG_DEVICE_DATA, &lowNoiseStart_, DeviceValueType::UINT8, FL_(lowNoiseStart), DeviceValueUOM::HOURS, MAKE_CF_CB(set_lowNoiseStart), 0, 23); register_device_value( - DeviceValueTAG::TAG_DEVICE_DATA, &lowNoiseStop_, DeviceValueType::UINT8, FL_(lowNoiseStop), DeviceValueUOM::NONE, MAKE_CF_CB(set_lowNoiseStop), 0, 23); - register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, + DeviceValueTAG::TAG_DEVICE_DATA, &lowNoiseStop_, DeviceValueType::UINT8, FL_(lowNoiseStop), DeviceValueUOM::HOURS, MAKE_CF_CB(set_lowNoiseStop), 0, 23); + register_device_value(DeviceValueTAG::TAG_DHW1, &hybridDHW_, DeviceValueType::ENUM, FL_(enum_comfort2), @@ -96,25 +96,25 @@ Heatpump::Heatpump(uint8_t device_type, uint8_t device_id, uint8_t product_id, c &energyPriceGas_, DeviceValueType::UINT8, FL_(energyPriceGas), - DeviceValueUOM::NONE, + DeviceValueUOM::CTKWH, MAKE_CF_CB(set_energyPriceGas)); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &energyPriceEl_, DeviceValueType::UINT8, FL_(energyPriceEl), - DeviceValueUOM::NONE, + DeviceValueUOM::CTKWH, MAKE_CF_CB(set_energyPriceEl)); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &energyPricePV_, DeviceValueType::UINT8, FL_(energyPricePV), - DeviceValueUOM::NONE, + DeviceValueUOM::CTKWH, MAKE_CF_CB(set_energyPricePV)); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &switchOverTemp_, DeviceValueType::INT8, FL_(switchOverTemp), - DeviceValueUOM::NONE, + DeviceValueUOM::DEGREES, MAKE_CF_CB(set_switchOverTemp)); // Function test register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, diff --git a/src/emsdevicevalue.cpp b/src/emsdevicevalue.cpp index fb4be3152..9a5c4f6ec 100644 --- a/src/emsdevicevalue.cpp +++ b/src/emsdevicevalue.cpp @@ -110,7 +110,7 @@ const char * DeviceValue::DeviceValueUOM_s[] = { F_(uom_blank), // 0 F_(uom_degrees), F_(uom_degrees), F_(uom_percent), F_(uom_lmin), F_(uom_kwh), F_(uom_wh), FL_(hours)[0], FL_(minutes)[0], F_(uom_ua), F_(uom_bar), F_(uom_kw), F_(uom_w), F_(uom_kb), FL_(seconds)[0], F_(uom_dbm), F_(uom_fahrenheit), F_(uom_mv), F_(uom_sqm), - F_(uom_m3), F_(uom_l), F_(uom_kmin), F_(uom_k), F_(uom_volts), F_(uom_mbar), F_(uom_lh), F_(uom_blank) + F_(uom_m3), F_(uom_l), F_(uom_kmin), F_(uom_k), F_(uom_volts), F_(uom_mbar), F_(uom_lh), F_(uom_ctkwh), F_(uom_blank) }; diff --git a/src/emsdevicevalue.h b/src/emsdevicevalue.h index 2780e19a0..d193aa924 100644 --- a/src/emsdevicevalue.h +++ b/src/emsdevicevalue.h @@ -74,7 +74,8 @@ class DeviceValue { VOLTS, // 23 - V MBAR, // 24 - mbar LH, // 25 - l/h - CONNECTIVITY // 26 - used in HA + CTKWH, // 26 - ct/kWh + CONNECTIVITY // 27 - used in HA }; // TAG mapping - maps to DeviceValueTAG_s in emsdevice.cpp diff --git a/src/emsesp.cpp b/src/emsesp.cpp index bae7a1b67..8b54bc4fe 100644 --- a/src/emsesp.cpp +++ b/src/emsesp.cpp @@ -971,7 +971,12 @@ void EMSESP::process_deviceName(std::shared_ptr telegram) { char name[16]; uint8_t len = telegram->offset + telegram->message_length - 27; strlcpy(name, (const char *)&telegram->message_data[27 - telegram->offset], len < 16 ? len : 16); - if (strlen(name)) { + char * c = name; + while (isprint(*c)) { + c++; + }; + *c = '\0'; + if (strlen(name) > 2) { // https://github.com/emsesp/EMS-ESP32/issues/2166#issuecomment-2454488657 LOG_DEBUG("Model name received for device 0x%02X: %s", telegram->src, name); for (const auto & emsdevice : emsdevices) { if (emsdevice->is_device_id(telegram->src)) { @@ -1462,6 +1467,11 @@ void EMSESP::incoming_telegram(uint8_t * data, const uint8_t length) { } else if (first_value == TxService::TX_WRITE_FAIL) { LOG_ERROR("Last Tx write rejected by host"); txservice_.send_poll(); // close the bus + txservice_.reset_retry_count(); + tx_successful = true; // no retries + } else { + txservice_.send_poll(); // close the bus + LOG_ERROR("Last Tx write host reply: 0x%02X", first_value); } } else if (tx_state == Telegram::Operation::TX_READ && length == 1) { EMSbus::tx_state(Telegram::Operation::TX_READ); // reset Tx wait state @@ -1478,7 +1488,7 @@ void EMSESP::incoming_telegram(uint8_t * data, const uint8_t length) { // if telegram is longer read next part with offset +25 for ems+ or +27 for ems1.0 // not for response to raw send commands without read_id set - if ((response_id_ == 0 || read_id_ > 0) && (txservice_.read_next_tx(data[3], length) == read_id_)) { + if ((response_id_ == 0 || read_id_ > 0) && (txservice_.read_next_tx(data[3], length) > 0)) { read_next_ = true; txservice_.send(); // read next part withing same poll or: // txservice_.send_poll(); // close the bus, next request in new poll @@ -1528,9 +1538,11 @@ void EMSESP::incoming_telegram(uint8_t * data, const uint8_t length) { // check for poll to us, if so send top message from Tx queue immediately and quit if (poll_id == txservice_.get_send_id()) { txservice_.send(); + } else { + // send remote room temperature if active + Roomctrl::send(poll_id); } - // send remote room temperature if active - Roomctrl::send(poll_id); + return; } else { #ifdef EMSESP_UART_DEBUG diff --git a/src/locale_common.h b/src/locale_common.h index 09ccde737..61e7de0b1 100644 --- a/src/locale_common.h +++ b/src/locale_common.h @@ -262,6 +262,7 @@ MAKE_WORD_CUSTOM(uom_k, "K") MAKE_WORD_CUSTOM(uom_volts, "V") MAKE_WORD_CUSTOM(uom_mbar, "mbar") MAKE_WORD_CUSTOM(uom_lh, "l/h") +MAKE_WORD_CUSTOM(uom_ctkwh, "ct/kWh") // MQTT topics and prefixes MAKE_WORD_CUSTOM(heating_active, "heating_active") diff --git a/src/locale_translations.h b/src/locale_translations.h index 89fb40148..fc16b9611 100644 --- a/src/locale_translations.h +++ b/src/locale_translations.h @@ -445,6 +445,7 @@ MAKE_TRANSLATION(maxHeatDhw, "maxheat", "heat limit", "Heizstab Limit für WW", MAKE_TRANSLATION(auxHeaterOff, "auxheateroff", "disable aux heater", "Zusatzheizer deaktivieren", "Bijverwarming uitsc", "Blockera eltillskott", "wyłącz dogrzewacz", "deaktiver tilleggsvarme", "Désactiver chauff. d'app", "ilave ısıtıcıyı kapat", "disattivare i riscaldatori addizionali", "vypnúť pomocný ohrievač", "zakázat pomocné topení") MAKE_TRANSLATION(auxHeaterStatus, "auxheaterstatus", "aux heater status", "Zusatzheizerstatus", "Bijverwarming", "Eltillskott Status", "status dogrzewacza", "status el. tillegsvarme", "Chauffage auxiliaire", "ilave ısıtıcı durumu", "stato riscaldatori addizionali", "stav pomocného ohrievača", "stav pomocného topení") +MAKE_TRANSLATION(auxHeaterLevel, "auxheaterlevel", "aux heater level", "Zusatzheizer", "Bijverwarming", "Eltillskott", "dogrzewacza", "el. tillegsvarme", "Chauffage auxiliaire", "ilave ısıtıcı durumu", "riscaldatori addizionali", "pomocného ohrievača", "pomocného topení") MAKE_TRANSLATION(auxHeaterOnly, "auxheateronly", "aux heater only", "nur Zusatzheizer", "Alleen bijverwarming", "Eltillskott Enbart", "tylko dogrzewacz", "kun el tilleggsvarme", "Que chauffage auxiliaire", "sadece ilave ısıtıvcı", "solo riscaldatori addizionali", "iba pomocný ohrievač", "pouze pomocné topení") MAKE_TRANSLATION(auxHeaterDelay, "auxheaterdelay", "aux heater on delay", "Zusatzheizer verzögert ein", "Bijverw. vertraagd aan", "Eltillskottfördröjning på", "opóźnienie włączenia dogrzewacza", "Tilleggsvarmer forsinket på", "Chauff app tempo marche", "ilave ısıtıcı beklemede", "ritardo riscaldatori addizionali", "oneskorenie prídavného ohrievača", "zpoždění zapnutí pomocného topení") MAKE_TRANSLATION(silentMode, "silentmode", "silent mode", "Silentmodus", "Stiller gebruik", "Tyst läge", "tryb cichy", "stille modus", "Fct silencieux", "sessiz mod", "modalità silenziosa", "tichý režim", "tichý režim") diff --git a/src/version.h b/src/version.h index 4386509df..9e1b03802 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define EMSESP_APP_VERSION "3.7.1-dev.5" \ No newline at end of file +#define EMSESP_APP_VERSION "3.7.1-dev.6" \ No newline at end of file