From 1863e57f5b8c6f5763a677cd85b70f3e0770fe25 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Thu, 12 May 2022 18:21:30 +0200 Subject: [PATCH 1/8] fix #496, RC30 design temp --- src/devices/thermostat.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index f2dc222a4..b4567d49a 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -1246,7 +1246,8 @@ void Thermostat::process_RC35Set(std::shared_ptr telegram) { has_update(telegram, hc->vacreducemode, 41); // vacations reduce mode has_update(telegram, hc->minflowtemp, 16); - if (hc->heatingtype == 3) { // floor heating + // RC35 stores values for floorheating in different position + if (hc->heatingtype == 3 && model() == EMS_DEVICE_FLAG_RC35) { has_update(telegram, hc->designtemp, 36); // is * 1 has_update(telegram, hc->maxflowtemp, 35); // is * 1 } else { // radiator/convector From f3e99f909276fc84f377585bfa649ea62dd5b96a Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Sun, 15 May 2022 08:58:28 +0200 Subject: [PATCH 2/8] Add HM200 hybrid manager as heatpump --- src/device_library.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/device_library.h b/src/device_library.h index 726972c5f..21fd47917 100644 --- a/src/device_library.h +++ b/src/device_library.h @@ -130,6 +130,7 @@ // Heat Pumps - 0x38 {200, DeviceType::HEATPUMP, F("HP Module"), DeviceFlags::EMS_DEVICE_FLAG_NONE}, +{248, DeviceType::HEATPUMP, F("Hybrid Manager HM200"), DeviceFlags::EMS_DEVICE_FLAG_NONE}, {252, DeviceType::HEATPUMP, F("HP Module"), DeviceFlags::EMS_DEVICE_FLAG_NONE}, // Connect devices - 0x02 From ae9af3bf0b6963060f5884100c22101d040c2c81 Mon Sep 17 00:00:00 2001 From: Proddy Date: Mon, 16 May 2022 21:29:39 +0200 Subject: [PATCH 3/8] update packages --- interface/package-lock.json | 222 ++++++++++++++++++------------------ interface/package.json | 8 +- 2 files changed, 115 insertions(+), 115 deletions(-) diff --git a/interface/package-lock.json b/interface/package-lock.json index 77fea275b..b3f7cc0b5 100644 --- a/interface/package-lock.json +++ b/interface/package-lock.json @@ -12,10 +12,10 @@ "@emotion/styled": "^11.8.1", "@msgpack/msgpack": "^2.7.2", "@mui/icons-material": "^5.6.2", - "@mui/material": "^5.6.4", - "@table-library/react-table-library": "^3.1.0", + "@mui/material": "^5.7.0", + "@table-library/react-table-library": "^3.1.2", "@types/lodash": "^4.14.182", - "@types/node": "^17.0.31", + "@types/node": "^17.0.33", "@types/react": "^17.0.43", "@types/react-dom": "^17.0.14", "@types/react-router-dom": "^5.3.3", @@ -24,7 +24,7 @@ "http-proxy-middleware": "^2.0.6", "jwt-decode": "^3.1.2", "lodash": "^4.17.21", - "notistack": "^2.0.4", + "notistack": "^2.0.5", "parse-ms": "^3.0.0", "react": "^17.0.2", "react-app-rewired": "^2.2.1", @@ -2856,17 +2856,18 @@ } }, "node_modules/@mui/base": { - "version": "5.0.0-alpha.79", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.79.tgz", - "integrity": "sha512-/lZLF027BkiEjM8MIYoeS/FEhTKf+41ePU9SOijMGrCin1Y0Igucw+IHa1fF8HXD7wDbFKqHuso3J1jMG8wyNw==", + "version": "5.0.0-alpha.80", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.80.tgz", + "integrity": "sha512-sPSYwJzwNMaqpksdLuOhpQQLrhtpBH4sNnMSgkzJzo7Jo4HF9ivjNpq27Zh5+sdRe5MTt0gcBT0QSMO6zML1Aw==", "dependencies": { "@babel/runtime": "^7.17.2", "@emotion/is-prop-valid": "^1.1.2", + "@mui/private-classnames": "^5.7.0", "@mui/types": "^7.1.3", - "@mui/utils": "^5.6.1", + "@mui/utils": "^5.7.0", "@popperjs/core": "^2.11.5", "clsx": "^1.1.1", - "prop-types": "^15.7.2", + "prop-types": "^15.8.1", "react-is": "^17.0.2" }, "engines": { @@ -2913,20 +2914,21 @@ } }, "node_modules/@mui/material": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.6.4.tgz", - "integrity": "sha512-7TD+u/SExZK2a55w6reX56oPk37gKr/M/XGt156X+m0d9LhzOsW864nkErIX/H8oSkX/6kCimxu1FDsO+gjiVw==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.7.0.tgz", + "integrity": "sha512-s1TSuUK5upNzGY5ZFHfJyzEt9fijn4cE+kEdEq7jGF+vpZIYXsDooH07+dNJ9+cJjYo6f9Fq1q5fPkknRC2Trw==", "dependencies": { "@babel/runtime": "^7.17.2", - "@mui/base": "5.0.0-alpha.79", - "@mui/system": "^5.6.4", + "@mui/base": "5.0.0-alpha.80", + "@mui/private-classnames": "^5.7.0", + "@mui/system": "^5.7.0", "@mui/types": "^7.1.3", - "@mui/utils": "^5.6.1", + "@mui/utils": "^5.7.0", "@types/react-transition-group": "^4.4.4", "clsx": "^1.1.1", "csstype": "^3.0.11", "hoist-non-react-statics": "^3.3.2", - "prop-types": "^15.7.2", + "prop-types": "^15.8.1", "react-is": "^17.0.2", "react-transition-group": "^4.4.2" }, @@ -2956,14 +2958,26 @@ } } }, + "node_modules/@mui/private-classnames": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@mui/private-classnames/-/private-classnames-5.7.0.tgz", + "integrity": "sha512-OSB4ybzpYiS11rQ3VtbcJz/CS19lC0r0Hk14iRZwPtVgapnL1hKsGtmgRviZLxpLk/cZUKaxaJDuuzI/extCoA==", + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + } + }, "node_modules/@mui/private-theming": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.6.2.tgz", - "integrity": "sha512-IbrSfFXfiZdyhRMC2bgGTFtb16RBQ5mccmjeh3MtAERWuepiCK7gkW5D9WhEsfTu6iez+TEjeUKSgmMHlsM2mg==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.7.0.tgz", + "integrity": "sha512-r/6JAWAHV1IFASZnceJPe9QT/s12ia/okGbmCUO4MEPdsWcNKye1RVKSwVgLATaX3YwPxDljWguIQrM3R2gZNA==", "dependencies": { "@babel/runtime": "^7.17.2", - "@mui/utils": "^5.6.1", - "prop-types": "^15.7.2" + "@mui/utils": "^5.7.0", + "prop-types": "^15.8.1" }, "engines": { "node": ">=12.0.0" @@ -2983,13 +2997,13 @@ } }, "node_modules/@mui/styled-engine": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.6.1.tgz", - "integrity": "sha512-jEhH6TBY8jc9S8yVncXmoTYTbATjEu44RMFXj6sIYfKr5NArVwTwRo3JexLL0t3BOAiYM4xsFLgfKEIvB9SAeQ==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.7.0.tgz", + "integrity": "sha512-JTvp+6lbAXYqgf/YInwR+hd4F8Fhg5PxMBwKTFsdKbaZFvyBD95hzKcxRmO9Y/NdjwFYWm5bBhcZAT4r2g1kZA==", "dependencies": { "@babel/runtime": "^7.17.2", "@emotion/cache": "^11.7.1", - "prop-types": "^15.7.2" + "prop-types": "^15.8.1" }, "engines": { "node": ">=12.0.0" @@ -3013,18 +3027,18 @@ } }, "node_modules/@mui/system": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.6.4.tgz", - "integrity": "sha512-7rsWED1wMFMePySJobsBerFZNu7ga580QSi3Zd6sJR8nVj12qD3yIdfvxA70/PxJ/805KbIT0GX7edKI+hpyhA==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.7.0.tgz", + "integrity": "sha512-M0vemfcfaRQzqLUmVRIsAVb0rx2ULHisHED6njoJqtjH58gbVb497mH+K1vI+Lh29fKR6Ki2mx3egxVi7mUn9w==", "dependencies": { "@babel/runtime": "^7.17.2", - "@mui/private-theming": "^5.6.2", - "@mui/styled-engine": "^5.6.1", + "@mui/private-theming": "^5.7.0", + "@mui/styled-engine": "^5.7.0", "@mui/types": "^7.1.3", - "@mui/utils": "^5.6.1", + "@mui/utils": "^5.7.0", "clsx": "^1.1.1", "csstype": "^3.0.11", - "prop-types": "^15.7.2" + "prop-types": "^15.8.1" }, "engines": { "node": ">=12.0.0" @@ -3065,14 +3079,14 @@ } }, "node_modules/@mui/utils": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.6.1.tgz", - "integrity": "sha512-CPrzrkiBusCZBLWu0Sg5MJvR3fKJyK3gKecLVX012LULyqg2U64Oz04BKhfkbtBrPBbSQxM+DWW9B1c9hmV9nQ==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.7.0.tgz", + "integrity": "sha512-uWpDIEXl7bWYkJwKQQ4Rdhc2dcotVETRYuLy29V6qLYZyAbs7AMKwDDz0XKy3RMNmU7S2R/jEeSb9xjXscQUHQ==", "dependencies": { "@babel/runtime": "^7.17.2", - "@types/prop-types": "^15.7.4", + "@types/prop-types": "^15.7.5", "@types/react-is": "^16.7.1 || ^17.0.0", - "prop-types": "^15.7.2", + "prop-types": "^15.8.1", "react-is": "^17.0.2" }, "engines": { @@ -3549,14 +3563,13 @@ } }, "node_modules/@table-library/react-table-library": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@table-library/react-table-library/-/react-table-library-3.1.0.tgz", - "integrity": "sha512-YCWmLPdElk/4+VPSxDcgQXlJx+jxYH2xJwr8NXm9e1AEy17K8mtrjzD5SQXDOiVT8vSOzD21eEldfIaI/kooHA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@table-library/react-table-library/-/react-table-library-3.1.2.tgz", + "integrity": "sha512-zfjIvcEP114KFh5WyZzbPQHtaxiSr0LHHgm+A8El6YG/SQ7D+i88RUdwiBu3uuKXTY7OV+5v/GESEiioZo150w==", "dependencies": { "clsx": "1.1.1", "react-virtualized-auto-sizer": "1.0.6", - "react-window": "1.8.6", - "use-double-click": "1.0.5" + "react-window": "1.8.6" }, "peerDependencies": { "@emotion/react": ">= 11", @@ -3763,9 +3776,9 @@ "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" }, "node_modules/@types/node": { - "version": "17.0.31", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.31.tgz", - "integrity": "sha512-AR0x5HbXGqkEx9CadRH3EBYx/VkiUgZIhP4wvPn/+5KIsgpNoyFaRlVe0Zlx9gRtg8fA06a9tskE2MSN7TcG4Q==" + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.33.tgz", + "integrity": "sha512-miWq2m2FiQZmaHfdZNcbpp9PuXg34W5JZ5CrJ/BaS70VuhoJENBEQybeiYSaPBRNq6KQGnjfEnc/F3PN++D+XQ==" }, "node_modules/@types/parse-json": { "version": "4.0.0", @@ -12150,9 +12163,9 @@ } }, "node_modules/notistack": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/notistack/-/notistack-2.0.4.tgz", - "integrity": "sha512-kOJmKvTG91ElMzi4aHu82BDe1liQ0zMrBp+TnWJptgowDsTbeTKbZmsRqJNIj145BmlOtZsEE9xjcrN46zVo3w==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/notistack/-/notistack-2.0.5.tgz", + "integrity": "sha512-Ig2T1Muqkc1PaSQcEDrK7diKv6cBxw02Iq6uv074ySfgq524TV5lK41diAb6OSsaiWfp3aRt+T3+0MF8m2EcJQ==", "dependencies": { "clsx": "^1.1.0", "hoist-non-react-statics": "^3.3.0" @@ -16609,19 +16622,6 @@ "node": ">=4" } }, - "node_modules/use-double-click": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/use-double-click/-/use-double-click-1.0.5.tgz", - "integrity": "sha512-71LUca6NtzpzHYlcfM/dOdmwvmvpMbzeIVQpN87w+DctpLiMCXtZpsN8FNWPgHpPBtNhvucPUHIDh5al8D8C7w==", - "engines": { - "node": ">=8", - "npm": ">=5" - }, - "peerDependencies": { - "react": ">=16.8", - "react-dom": ">=16.8" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -19569,17 +19569,18 @@ "integrity": "sha512-rYEi46+gIzufyYUAoHDnRzkWGxajpD9vVXFQ3g1vbjrBm6P7MBmm+s/fqPa46sxa+8FOUdEuRQKaugo5a4JWpw==" }, "@mui/base": { - "version": "5.0.0-alpha.79", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.79.tgz", - "integrity": "sha512-/lZLF027BkiEjM8MIYoeS/FEhTKf+41ePU9SOijMGrCin1Y0Igucw+IHa1fF8HXD7wDbFKqHuso3J1jMG8wyNw==", + "version": "5.0.0-alpha.80", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.80.tgz", + "integrity": "sha512-sPSYwJzwNMaqpksdLuOhpQQLrhtpBH4sNnMSgkzJzo7Jo4HF9ivjNpq27Zh5+sdRe5MTt0gcBT0QSMO6zML1Aw==", "requires": { "@babel/runtime": "^7.17.2", "@emotion/is-prop-valid": "^1.1.2", + "@mui/private-classnames": "^5.7.0", "@mui/types": "^7.1.3", - "@mui/utils": "^5.6.1", + "@mui/utils": "^5.7.0", "@popperjs/core": "^2.11.5", "clsx": "^1.1.1", - "prop-types": "^15.7.2", + "prop-types": "^15.8.1", "react-is": "^17.0.2" } }, @@ -19592,57 +19593,63 @@ } }, "@mui/material": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.6.4.tgz", - "integrity": "sha512-7TD+u/SExZK2a55w6reX56oPk37gKr/M/XGt156X+m0d9LhzOsW864nkErIX/H8oSkX/6kCimxu1FDsO+gjiVw==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.7.0.tgz", + "integrity": "sha512-s1TSuUK5upNzGY5ZFHfJyzEt9fijn4cE+kEdEq7jGF+vpZIYXsDooH07+dNJ9+cJjYo6f9Fq1q5fPkknRC2Trw==", "requires": { "@babel/runtime": "^7.17.2", - "@mui/base": "5.0.0-alpha.79", - "@mui/system": "^5.6.4", + "@mui/base": "5.0.0-alpha.80", + "@mui/private-classnames": "^5.7.0", + "@mui/system": "^5.7.0", "@mui/types": "^7.1.3", - "@mui/utils": "^5.6.1", + "@mui/utils": "^5.7.0", "@types/react-transition-group": "^4.4.4", "clsx": "^1.1.1", "csstype": "^3.0.11", "hoist-non-react-statics": "^3.3.2", - "prop-types": "^15.7.2", + "prop-types": "^15.8.1", "react-is": "^17.0.2", "react-transition-group": "^4.4.2" } }, + "@mui/private-classnames": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@mui/private-classnames/-/private-classnames-5.7.0.tgz", + "integrity": "sha512-OSB4ybzpYiS11rQ3VtbcJz/CS19lC0r0Hk14iRZwPtVgapnL1hKsGtmgRviZLxpLk/cZUKaxaJDuuzI/extCoA==" + }, "@mui/private-theming": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.6.2.tgz", - "integrity": "sha512-IbrSfFXfiZdyhRMC2bgGTFtb16RBQ5mccmjeh3MtAERWuepiCK7gkW5D9WhEsfTu6iez+TEjeUKSgmMHlsM2mg==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.7.0.tgz", + "integrity": "sha512-r/6JAWAHV1IFASZnceJPe9QT/s12ia/okGbmCUO4MEPdsWcNKye1RVKSwVgLATaX3YwPxDljWguIQrM3R2gZNA==", "requires": { "@babel/runtime": "^7.17.2", - "@mui/utils": "^5.6.1", - "prop-types": "^15.7.2" + "@mui/utils": "^5.7.0", + "prop-types": "^15.8.1" } }, "@mui/styled-engine": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.6.1.tgz", - "integrity": "sha512-jEhH6TBY8jc9S8yVncXmoTYTbATjEu44RMFXj6sIYfKr5NArVwTwRo3JexLL0t3BOAiYM4xsFLgfKEIvB9SAeQ==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.7.0.tgz", + "integrity": "sha512-JTvp+6lbAXYqgf/YInwR+hd4F8Fhg5PxMBwKTFsdKbaZFvyBD95hzKcxRmO9Y/NdjwFYWm5bBhcZAT4r2g1kZA==", "requires": { "@babel/runtime": "^7.17.2", "@emotion/cache": "^11.7.1", - "prop-types": "^15.7.2" + "prop-types": "^15.8.1" } }, "@mui/system": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.6.4.tgz", - "integrity": "sha512-7rsWED1wMFMePySJobsBerFZNu7ga580QSi3Zd6sJR8nVj12qD3yIdfvxA70/PxJ/805KbIT0GX7edKI+hpyhA==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.7.0.tgz", + "integrity": "sha512-M0vemfcfaRQzqLUmVRIsAVb0rx2ULHisHED6njoJqtjH58gbVb497mH+K1vI+Lh29fKR6Ki2mx3egxVi7mUn9w==", "requires": { "@babel/runtime": "^7.17.2", - "@mui/private-theming": "^5.6.2", - "@mui/styled-engine": "^5.6.1", + "@mui/private-theming": "^5.7.0", + "@mui/styled-engine": "^5.7.0", "@mui/types": "^7.1.3", - "@mui/utils": "^5.6.1", + "@mui/utils": "^5.7.0", "clsx": "^1.1.1", "csstype": "^3.0.11", - "prop-types": "^15.7.2" + "prop-types": "^15.8.1" } }, "@mui/types": { @@ -19652,14 +19659,14 @@ "requires": {} }, "@mui/utils": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.6.1.tgz", - "integrity": "sha512-CPrzrkiBusCZBLWu0Sg5MJvR3fKJyK3gKecLVX012LULyqg2U64Oz04BKhfkbtBrPBbSQxM+DWW9B1c9hmV9nQ==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.7.0.tgz", + "integrity": "sha512-uWpDIEXl7bWYkJwKQQ4Rdhc2dcotVETRYuLy29V6qLYZyAbs7AMKwDDz0XKy3RMNmU7S2R/jEeSb9xjXscQUHQ==", "requires": { "@babel/runtime": "^7.17.2", - "@types/prop-types": "^15.7.4", + "@types/prop-types": "^15.7.5", "@types/react-is": "^16.7.1 || ^17.0.0", - "prop-types": "^15.7.2", + "prop-types": "^15.8.1", "react-is": "^17.0.2" } }, @@ -19947,14 +19954,13 @@ } }, "@table-library/react-table-library": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@table-library/react-table-library/-/react-table-library-3.1.0.tgz", - "integrity": "sha512-YCWmLPdElk/4+VPSxDcgQXlJx+jxYH2xJwr8NXm9e1AEy17K8mtrjzD5SQXDOiVT8vSOzD21eEldfIaI/kooHA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@table-library/react-table-library/-/react-table-library-3.1.2.tgz", + "integrity": "sha512-zfjIvcEP114KFh5WyZzbPQHtaxiSr0LHHgm+A8El6YG/SQ7D+i88RUdwiBu3uuKXTY7OV+5v/GESEiioZo150w==", "requires": { "clsx": "1.1.1", "react-virtualized-auto-sizer": "1.0.6", - "react-window": "1.8.6", - "use-double-click": "1.0.5" + "react-window": "1.8.6" } }, "@tootallnate/once": { @@ -20150,9 +20156,9 @@ "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" }, "@types/node": { - "version": "17.0.31", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.31.tgz", - "integrity": "sha512-AR0x5HbXGqkEx9CadRH3EBYx/VkiUgZIhP4wvPn/+5KIsgpNoyFaRlVe0Zlx9gRtg8fA06a9tskE2MSN7TcG4Q==" + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.33.tgz", + "integrity": "sha512-miWq2m2FiQZmaHfdZNcbpp9PuXg34W5JZ5CrJ/BaS70VuhoJENBEQybeiYSaPBRNq6KQGnjfEnc/F3PN++D+XQ==" }, "@types/parse-json": { "version": "4.0.0", @@ -26292,9 +26298,9 @@ "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" }, "notistack": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/notistack/-/notistack-2.0.4.tgz", - "integrity": "sha512-kOJmKvTG91ElMzi4aHu82BDe1liQ0zMrBp+TnWJptgowDsTbeTKbZmsRqJNIj145BmlOtZsEE9xjcrN46zVo3w==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/notistack/-/notistack-2.0.5.tgz", + "integrity": "sha512-Ig2T1Muqkc1PaSQcEDrK7diKv6cBxw02Iq6uv074ySfgq524TV5lK41diAb6OSsaiWfp3aRt+T3+0MF8m2EcJQ==", "requires": { "clsx": "^1.1.0", "hoist-non-react-statics": "^3.3.0" @@ -29412,12 +29418,6 @@ "prepend-http": "^2.0.0" } }, - "use-double-click": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/use-double-click/-/use-double-click-1.0.5.tgz", - "integrity": "sha512-71LUca6NtzpzHYlcfM/dOdmwvmvpMbzeIVQpN87w+DctpLiMCXtZpsN8FNWPgHpPBtNhvucPUHIDh5al8D8C7w==", - "requires": {} - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", diff --git a/interface/package.json b/interface/package.json index f278f7a4d..82f9d9f25 100644 --- a/interface/package.json +++ b/interface/package.json @@ -8,10 +8,10 @@ "@emotion/styled": "^11.8.1", "@msgpack/msgpack": "^2.7.2", "@mui/icons-material": "^5.6.2", - "@mui/material": "^5.6.4", - "@table-library/react-table-library": "^3.1.0", + "@mui/material": "^5.7.0", + "@table-library/react-table-library": "^3.1.2", "@types/lodash": "^4.14.182", - "@types/node": "^17.0.31", + "@types/node": "^17.0.33", "@types/react": "^17.0.43", "@types/react-dom": "^17.0.14", "@types/react-router-dom": "^5.3.3", @@ -20,7 +20,7 @@ "http-proxy-middleware": "^2.0.6", "jwt-decode": "^3.1.2", "lodash": "^4.17.21", - "notistack": "^2.0.4", + "notistack": "^2.0.5", "parse-ms": "^3.0.0", "react": "^17.0.2", "react-app-rewired": "^2.2.1", From fc29a3ad955f21b004e40ced8d672116e5611807 Mon Sep 17 00:00:00 2001 From: Proddy Date: Mon, 16 May 2022 21:30:06 +0200 Subject: [PATCH 4/8] replace api/settings and customizatons with secure REST calls #501 --- interface/src/api/system.ts | 1 + interface/src/project/HelpInformation.tsx | 63 +++++++++++++++++------ interface/src/project/api.ts | 8 +++ mock-api/server.js | 17 +++--- src/system.cpp | 30 ----------- src/system.h | 2 - src/version.h | 2 +- src/web/WebAPIService.cpp | 39 ++++++++++++++ src/web/WebAPIService.h | 5 ++ 9 files changed, 110 insertions(+), 57 deletions(-) diff --git a/interface/src/api/system.ts b/interface/src/api/system.ts index f93ff4853..a48158840 100644 --- a/interface/src/api/system.ts +++ b/interface/src/api/system.ts @@ -38,3 +38,4 @@ export function updateLogSettings(logSettings: LogSettings): AxiosPromise { return AXIOS_BIN.get('/fetchLog'); } + diff --git a/interface/src/project/HelpInformation.tsx b/interface/src/project/HelpInformation.tsx index 16a27dbe4..1d28946ac 100644 --- a/interface/src/project/HelpInformation.tsx +++ b/interface/src/project/HelpInformation.tsx @@ -24,7 +24,22 @@ const HelpInformation: FC = () => { const { me } = useContext(AuthenticatedContext); - const onDownload = async (endpoint: string) => { + const saveFile = (json: any, endpoint: string) => { + const a = document.createElement('a'); + const filename = 'emsesp_' + endpoint + '.json'; + a.href = URL.createObjectURL( + new Blob([JSON.stringify(json, null, 2)], { + type: 'text/plain' + }) + ); + a.setAttribute('download', filename); + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + enqueueSnackbar('File downloaded', { variant: 'info' }); + }; + + const callAPI = async (endpoint: string) => { try { const response = await EMSESP.API({ device: 'system', @@ -34,19 +49,33 @@ const HelpInformation: FC = () => { if (response.status !== 200) { enqueueSnackbar('API call failed', { variant: 'error' }); } else { - const json = response.data; - const a = document.createElement('a'); - const filename = 'emsesp_' + endpoint + '.json'; - a.href = URL.createObjectURL( - new Blob([JSON.stringify(json, null, 2)], { - type: 'text/plain' - }) - ); - a.setAttribute('download', filename); - document.body.appendChild(a); - a.click(); - document.body.removeChild(a); - enqueueSnackbar('File downloaded', { variant: 'info' }); + saveFile(response.data, endpoint); + } + } catch (error: unknown) { + enqueueSnackbar(extractErrorMessage(error, 'Problem with downloading'), { variant: 'error' }); + } + }; + + const downloadSettings = async () => { + try { + const response = await EMSESP.getSettings(); + if (response.status !== 200) { + enqueueSnackbar('Unable to get settings', { variant: 'error' }); + } else { + saveFile(response.data, 'settings'); + } + } catch (error: unknown) { + enqueueSnackbar(extractErrorMessage(error, 'Problem with downloading'), { variant: 'error' }); + } + }; + + const downloadCustomizations = async () => { + try { + const response = await EMSESP.getCustomizations(); + if (response.status !== 200) { + enqueueSnackbar('Unable to get customizations', { variant: 'error' }); + } else { + saveFile(response.data, 'customizations'); } } catch (error: unknown) { enqueueSnackbar(extractErrorMessage(error, 'Problem with downloading'), { variant: 'error' }); @@ -103,7 +132,7 @@ const HelpInformation: FC = () => { To report an issue or request a feature, please  - onDownload('info')}> + callAPI('info')}> download  the debug information and include in a new  @@ -131,7 +160,7 @@ const HelpInformation: FC = () => { startIcon={} variant="outlined" color="primary" - onClick={() => onDownload('settings')} + onClick={() => downloadSettings()} > settings @@ -139,7 +168,7 @@ const HelpInformation: FC = () => { startIcon={} variant="outlined" color="primary" - onClick={() => onDownload('customizations')} + onClick={() => downloadCustomizations()} > customizations diff --git a/interface/src/project/api.ts b/interface/src/project/api.ts index c625630c5..d6804cda4 100644 --- a/interface/src/project/api.ts +++ b/interface/src/project/api.ts @@ -86,3 +86,11 @@ export function resetCustomizations(): AxiosPromise { export function API(apiCall: APIcall): AxiosPromise { return AXIOS_API.post('/', apiCall); } + +export function getSettings(): AxiosPromise { + return AXIOS.get('/getSettings'); +} + +export function getCustomizations(): AxiosPromise { + return AXIOS.get('/getCustomizations'); +} diff --git a/mock-api/server.js b/mock-api/server.js index 33764ab66..d6bc9fefc 100644 --- a/mock-api/server.js +++ b/mock-api/server.js @@ -1193,16 +1193,19 @@ rest_server.get(SYSTEM_INFO_ENDPOINT, (req, res) => { res.json(emsesp_info) }) -const SYSTEM_SETTINGS_ENDPOINT = API_ENDPOINT_ROOT + 'system/settings' -rest_server.post(SYSTEM_SETTINGS_ENDPOINT, (req, res) => { - console.log('System Settings POST: ' + JSON.stringify(req.body)) - res.sendStatus(200) -}) -rest_server.get(SYSTEM_SETTINGS_ENDPOINT, (req, res) => { - console.log('System Settings GET') +const GET_SETTINGS_ENDPOINT = REST_ENDPOINT_ROOT + 'getSettings' +rest_server.get(GET_SETTINGS_ENDPOINT, (req, res) => { + console.log('System Settings:') res.json(settings) }) +const GET_CUSTOMIZATIONS_ENDPOINT = REST_ENDPOINT_ROOT + 'getCustomizations' +rest_server.get(GET_CUSTOMIZATIONS_ENDPOINT, (req, res) => { + console.log('Customizations:') + // not implemented yet + res.sendStatus(200) +}) + // start server const expressServer = rest_server.listen(port, () => console.log(`Mock server for EMS-ESP is up and running at http://localhost:${port}`), diff --git a/src/system.cpp b/src/system.cpp index 44eb94b31..cb3be0332 100644 --- a/src/system.cpp +++ b/src/system.cpp @@ -689,8 +689,6 @@ void System::commands_init() { // these commands will return data in JSON format Command::add(EMSdevice::DeviceType::SYSTEM, F_(info), System::command_info, F("show system status")); - Command::add(EMSdevice::DeviceType::SYSTEM, F_(settings), System::command_settings, F("fetch system settings"), CommandFlag::ADMIN_ONLY); - Command::add(EMSdevice::DeviceType::SYSTEM, F_(customizations), System::command_customizations, F("fetch system customizations")); Command::add(EMSdevice::DeviceType::SYSTEM, F_(commands), System::command_commands, F("fetch system commands")); #if defined(EMSESP_DEBUG) @@ -973,34 +971,6 @@ bool System::saveSettings(const char * filename, const char * section, JsonObjec return false; // not found } -// export all settings to JSON text -// we need to keep the original format so the import/upload works as we just replace files -// http://ems-esp/api/system/settings -bool System::command_settings(const char * value, const int8_t id, JsonObject & output) { - output["type"] = "settings"; - - JsonObject node = output.createNestedObject("System"); - node["version"] = EMSESP_APP_VERSION; - - extractSettings(NETWORK_SETTINGS_FILE, "Network", output); - extractSettings(AP_SETTINGS_FILE, "AP", output); - extractSettings(MQTT_SETTINGS_FILE, "MQTT", output); - extractSettings(NTP_SETTINGS_FILE, "NTP", output); - extractSettings(OTA_SETTINGS_FILE, "OTA", output); - extractSettings(SECURITY_SETTINGS_FILE, "Security", output); - extractSettings(EMSESP_SETTINGS_FILE, "Settings", output); - - return true; -} - -// http://ems-esp/api/system/customizations -// we need to keep the original format so the import/upload works as we just replace file -bool System::command_customizations(const char * value, const int8_t id, JsonObject & output) { - output["type"] = "customizations"; - extractSettings(EMSESP_CUSTOMIZATION_FILE, "Customizations", output); - return true; -} - // export status information including the device information // http://ems-esp/api/system/info bool System::command_info(const char * value, const int8_t id, JsonObject & output) { diff --git a/src/system.h b/src/system.h index 63010652b..2d1796f83 100644 --- a/src/system.h +++ b/src/system.h @@ -61,8 +61,6 @@ class System { static bool command_watch(const char * value, const int8_t id); static bool command_info(const char * value, const int8_t id, JsonObject & output); - static bool command_settings(const char * value, const int8_t id, JsonObject & output); - static bool command_customizations(const char * value, const int8_t id, JsonObject & output); static bool command_commands(const char * value, const int8_t id, JsonObject & output); std::string reset_reason(uint8_t cpu) const; diff --git a/src/version.h b/src/version.h index c77300d6d..93db4995f 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define EMSESP_APP_VERSION "3.4.0b17" +#define EMSESP_APP_VERSION "3.4.0b18" diff --git a/src/web/WebAPIService.cpp b/src/web/WebAPIService.cpp index c79e04ca5..5ab041987 100644 --- a/src/web/WebAPIService.cpp +++ b/src/web/WebAPIService.cpp @@ -32,6 +32,12 @@ WebAPIService::WebAPIService(AsyncWebServer * server, SecurityManager * security , _apiHandler("/api", std::bind(&WebAPIService::webAPIService_post, this, _1, _2), 256) { // for POSTS, must use 'Content-Type: application/json' in header server->on("/api", HTTP_GET, std::bind(&WebAPIService::webAPIService_get, this, _1)); // for GETS server->addHandler(&_apiHandler); + + // for settings + server->on(GET_SETTINGS_PATH, HTTP_GET, securityManager->wrapRequest(std::bind(&WebAPIService::getSettings, this, _1), AuthenticationPredicates::IS_ADMIN)); + server->on(GET_CUSTOMIZATIONS_PATH, + HTTP_GET, + securityManager->wrapRequest(std::bind(&WebAPIService::getCustomizations, this, _1), AuthenticationPredicates::IS_ADMIN)); } // HTTP GET @@ -150,4 +156,37 @@ void WebAPIService::parse(AsyncWebServerRequest * request, JsonObject & input) { #endif } +void WebAPIService::getSettings(AsyncWebServerRequest * request) { + auto * response = new AsyncJsonResponse(false, EMSESP_JSON_SIZE_XLARGE_DYN); + JsonObject root = response->getRoot(); + + root["type"] = "settings"; + + JsonObject node = root.createNestedObject("System"); + node["version"] = EMSESP_APP_VERSION; + + System::extractSettings(NETWORK_SETTINGS_FILE, "Network", root); + System::extractSettings(AP_SETTINGS_FILE, "AP", root); + System::extractSettings(MQTT_SETTINGS_FILE, "MQTT", root); + System::extractSettings(NTP_SETTINGS_FILE, "NTP", root); + System::extractSettings(OTA_SETTINGS_FILE, "OTA", root); + System::extractSettings(SECURITY_SETTINGS_FILE, "Security", root); + System::extractSettings(EMSESP_SETTINGS_FILE, "Settings", root); + + response->setLength(); + request->send(response); +} + +void WebAPIService::getCustomizations(AsyncWebServerRequest * request) { + auto * response = new AsyncJsonResponse(false, EMSESP_JSON_SIZE_XLARGE_DYN); + JsonObject root = response->getRoot(); + + root["type"] = "customizations"; + + System::extractSettings(EMSESP_CUSTOMIZATION_FILE, "Customizations", root); + + response->setLength(); + request->send(response); +} + } // namespace emsesp diff --git a/src/web/WebAPIService.h b/src/web/WebAPIService.h index 799cc82fd..5e5d2321a 100644 --- a/src/web/WebAPIService.h +++ b/src/web/WebAPIService.h @@ -20,6 +20,8 @@ #define WebAPIService_h #define EMSESP_API_SERVICE_PATH "/api" +#define GET_SETTINGS_PATH "/rest/getSettings" +#define GET_CUSTOMIZATIONS_PATH "/rest/getCustomizations" namespace emsesp { @@ -46,6 +48,9 @@ class WebAPIService { static uint16_t api_fails_; void parse(AsyncWebServerRequest * request, JsonObject & input); + + void getSettings(AsyncWebServerRequest * request); + void getCustomizations(AsyncWebServerRequest * request); }; } // namespace emsesp From 6072606918b5bf0a05a1fface6d8cc3c516a2d4a Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Tue, 17 May 2022 12:50:34 +0200 Subject: [PATCH 5/8] heatpump summer mode, fix #503 --- src/devices/thermostat.cpp | 17 +++++++++++------ src/devices/thermostat.h | 3 ++- src/locale_DE.h | 2 ++ src/locale_EN.h | 2 ++ 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index b4567d49a..c75d885e5 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -973,7 +973,7 @@ void Thermostat::process_RC300Summer(std::shared_ptr telegram) { has_update(telegram, hc->offsettemp, 2); if (!is_fetch(summer2_typeids[hc->hc()])) { has_update(telegram, hc->summertemp, 6); - has_update(telegram, hc->summer_setmode, 7); + has_update(telegram, hc->summersetmode, 7); } if (hc->heatingtype < 3) { @@ -993,7 +993,7 @@ void Thermostat::process_RC300Summer2(std::shared_ptr telegram) if (hc == nullptr) { return; } - has_update(telegram, hc->summer_setmode, 0); + has_update(telegram, hc->hpsummersetmode, 0); has_update(telegram, hc->summertemp, 1); } @@ -2348,13 +2348,16 @@ bool Thermostat::set_summermode(const char * value, const int8_t id) { } uint8_t set = 0xFF; - if (!Helpers::value2enum(value, set, FL_(enum_summermode))) { - return false; - } if (is_fetch(summer2_typeids[hc->hc()])) { + if (!Helpers::value2enum(value, set, FL_(enum_hpsummermode))) { + return false; + } write_command(summer2_typeids[hc->hc()], 0, set, summer2_typeids[hc->hc()]); } else { + if (!Helpers::value2enum(value, set, FL_(enum_summermode))) { + return false; + } write_command(summer_typeids[hc->hc()], 7, set, summer_typeids[hc->hc()]); } @@ -3831,7 +3834,9 @@ void Thermostat::register_device_values_hc(std::shared_ptrheatingtype, DeviceValueType::ENUM, FL_(enum_heatingtype), FL_(heatingtype), DeviceValueUOM::NONE, MAKE_CF_CB(set_heatingtype)); register_device_value( - tag, &hc->summer_setmode, DeviceValueType::ENUM, FL_(enum_summermode), FL_(summersetmode), DeviceValueUOM::NONE, MAKE_CF_CB(set_summermode)); + tag, &hc->summersetmode, DeviceValueType::ENUM, FL_(enum_summermode), FL_(summersetmode), DeviceValueUOM::NONE, MAKE_CF_CB(set_summermode)); + register_device_value( + tag, &hc->hpsummersetmode, DeviceValueType::ENUM, FL_(enum_hpsummermode), FL_(hpsummersetmode), DeviceValueUOM::NONE, MAKE_CF_CB(set_summermode)); register_device_value(tag, &hc->summermode, DeviceValueType::ENUM, FL_(enum_summer), FL_(summermode), DeviceValueUOM::NONE); register_device_value( tag, &hc->controlmode, DeviceValueType::ENUM, FL_(enum_controlmode), FL_(controlmode), DeviceValueUOM::NONE, MAKE_CF_CB(set_controlmode)); diff --git a/src/devices/thermostat.h b/src/devices/thermostat.h index a62a61050..e5d1a47f7 100644 --- a/src/devices/thermostat.h +++ b/src/devices/thermostat.h @@ -54,7 +54,8 @@ class Thermostat : public EMSdevice { uint8_t designtemp; // heating curve design temp at MinExtTemp int8_t offsettemp; // heating curve offest temp at roomtemp signed! uint8_t manualtemp; - uint8_t summer_setmode; + uint8_t summersetmode; + uint8_t hpsummersetmode; uint8_t roominfluence; uint8_t roominfl_factor; int16_t curroominfl; diff --git a/src/locale_DE.h b/src/locale_DE.h index 7a668d1c2..b0d93a781 100644 --- a/src/locale_DE.h +++ b/src/locale_DE.h @@ -364,6 +364,7 @@ MAKE_PSTR_LIST(enum_wwMode2, F_(off), F_(on), F_(auto)) MAKE_PSTR_LIST(enum_wwMode3, F_(on), F_(off), F_(auto)) MAKE_PSTR_LIST(enum_heatingtype, F_(off), F_(radiator), F_(convector), F_(floor)) MAKE_PSTR_LIST(enum_summermode, F_(summer), F_(auto), F_(winter)) +MAKE_PSTR_LIST(enum_hpsummermode, F_(off), F_(auto), F("heizen"), F("kühlen")) MAKE_PSTR_LIST(enum_summer, F_(winter), F_(summer)) MAKE_PSTR_LIST(enum_mode, F_(manual), F_(auto)) // RC100, RC300, RC310 @@ -649,6 +650,7 @@ MAKE_PSTR_LIST(nofrosttemp, F("nofrosttemp"), F("Frostschutztemperatur")) MAKE_PSTR_LIST(targetflowtemp, F("targetflowtemp"), F("berechnete Flusstemperatur")) MAKE_PSTR_LIST(heatingtype, F("heatingtype"), F("Heizungstyp")) MAKE_PSTR_LIST(summersetmode, F("summersetmode"), F("Einstellung Sommerbetrieb")) +MAKE_PSTR_LIST(hpsummersetmode, F("hpsummersetmode"), F("Wärmepumpe Sommerbetrieb")) MAKE_PSTR_LIST(controlmode, F("controlmode"), F("Kontrollmodus")) MAKE_PSTR_LIST(control, F("control"), F("Fernsteuerung")) MAKE_PSTR_LIST(holidays, F("holidays"), F("holiday dates")) diff --git a/src/locale_EN.h b/src/locale_EN.h index 677a3e104..67d5063b7 100644 --- a/src/locale_EN.h +++ b/src/locale_EN.h @@ -364,6 +364,7 @@ MAKE_PSTR_LIST(enum_wwMode2, F_(off), F_(on), F_(auto)) MAKE_PSTR_LIST(enum_wwMode3, F_(on), F_(off), F_(auto)) MAKE_PSTR_LIST(enum_heatingtype, F_(off), F_(radiator), F_(convector), F_(floor)) MAKE_PSTR_LIST(enum_summermode, F_(summer), F_(auto), F_(winter)) +MAKE_PSTR_LIST(enum_hpsummermode, F_(off), F_(auto), F("heating"), F("cooling")) MAKE_PSTR_LIST(enum_summer, F_(winter), F_(summer)) MAKE_PSTR_LIST(enum_mode, F_(manual), F_(auto)) // RC100, RC300, RC310 @@ -638,6 +639,7 @@ MAKE_PSTR_LIST(nofrosttemp, F("nofrosttemp"), F("nofrost temperature")) MAKE_PSTR_LIST(targetflowtemp, F("targetflowtemp"), F("target flow temperature")) MAKE_PSTR_LIST(heatingtype, F("heatingtype"), F("heating type")) MAKE_PSTR_LIST(summersetmode, F("summersetmode"), F("set summer mode")) +MAKE_PSTR_LIST(hpsummersetmode, F("hpsummersetmode"), F("heatpump summer mode")) MAKE_PSTR_LIST(controlmode, F("controlmode"), F("control mode")) MAKE_PSTR_LIST(control, F("control"), F("control device")) MAKE_PSTR_LIST(holidays, F("holidays"), F("holiday dates")) From e175b5a5a2508efd87ade091282640cb44ddedca Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Tue, 17 May 2022 20:53:22 +0200 Subject: [PATCH 6/8] heatpump summermode -> heatpump operatingsmode --- src/devices/thermostat.cpp | 6 +++--- src/devices/thermostat.h | 2 +- src/locale_DE.h | 4 ++-- src/locale_EN.h | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index c75d885e5..efd40b5ca 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -993,7 +993,7 @@ void Thermostat::process_RC300Summer2(std::shared_ptr telegram) if (hc == nullptr) { return; } - has_update(telegram, hc->hpsummersetmode, 0); + has_update(telegram, hc->hpoperatingmode, 0); has_update(telegram, hc->summertemp, 1); } @@ -2350,7 +2350,7 @@ bool Thermostat::set_summermode(const char * value, const int8_t id) { uint8_t set = 0xFF; if (is_fetch(summer2_typeids[hc->hc()])) { - if (!Helpers::value2enum(value, set, FL_(enum_hpsummermode))) { + if (!Helpers::value2enum(value, set, FL_(enum_hpoperatingmode))) { return false; } write_command(summer2_typeids[hc->hc()], 0, set, summer2_typeids[hc->hc()]); @@ -3836,7 +3836,7 @@ void Thermostat::register_device_values_hc(std::shared_ptrsummersetmode, DeviceValueType::ENUM, FL_(enum_summermode), FL_(summersetmode), DeviceValueUOM::NONE, MAKE_CF_CB(set_summermode)); register_device_value( - tag, &hc->hpsummersetmode, DeviceValueType::ENUM, FL_(enum_hpsummermode), FL_(hpsummersetmode), DeviceValueUOM::NONE, MAKE_CF_CB(set_summermode)); + tag, &hc->hpoperatingmode, DeviceValueType::ENUM, FL_(enum_hpoperatingmode), FL_(hpoperatingmode), DeviceValueUOM::NONE, MAKE_CF_CB(set_summermode)); register_device_value(tag, &hc->summermode, DeviceValueType::ENUM, FL_(enum_summer), FL_(summermode), DeviceValueUOM::NONE); register_device_value( tag, &hc->controlmode, DeviceValueType::ENUM, FL_(enum_controlmode), FL_(controlmode), DeviceValueUOM::NONE, MAKE_CF_CB(set_controlmode)); diff --git a/src/devices/thermostat.h b/src/devices/thermostat.h index e5d1a47f7..2fde27634 100644 --- a/src/devices/thermostat.h +++ b/src/devices/thermostat.h @@ -55,7 +55,7 @@ class Thermostat : public EMSdevice { int8_t offsettemp; // heating curve offest temp at roomtemp signed! uint8_t manualtemp; uint8_t summersetmode; - uint8_t hpsummersetmode; + uint8_t hpoperatingmode; uint8_t roominfluence; uint8_t roominfl_factor; int16_t curroominfl; diff --git a/src/locale_DE.h b/src/locale_DE.h index b0d93a781..a57e54abc 100644 --- a/src/locale_DE.h +++ b/src/locale_DE.h @@ -364,7 +364,7 @@ MAKE_PSTR_LIST(enum_wwMode2, F_(off), F_(on), F_(auto)) MAKE_PSTR_LIST(enum_wwMode3, F_(on), F_(off), F_(auto)) MAKE_PSTR_LIST(enum_heatingtype, F_(off), F_(radiator), F_(convector), F_(floor)) MAKE_PSTR_LIST(enum_summermode, F_(summer), F_(auto), F_(winter)) -MAKE_PSTR_LIST(enum_hpsummermode, F_(off), F_(auto), F("heizen"), F("kühlen")) +MAKE_PSTR_LIST(enum_hpoperatingmode, F_(off), F_(auto), F("heizen"), F("kühlen")) MAKE_PSTR_LIST(enum_summer, F_(winter), F_(summer)) MAKE_PSTR_LIST(enum_mode, F_(manual), F_(auto)) // RC100, RC300, RC310 @@ -650,7 +650,7 @@ MAKE_PSTR_LIST(nofrosttemp, F("nofrosttemp"), F("Frostschutztemperatur")) MAKE_PSTR_LIST(targetflowtemp, F("targetflowtemp"), F("berechnete Flusstemperatur")) MAKE_PSTR_LIST(heatingtype, F("heatingtype"), F("Heizungstyp")) MAKE_PSTR_LIST(summersetmode, F("summersetmode"), F("Einstellung Sommerbetrieb")) -MAKE_PSTR_LIST(hpsummersetmode, F("hpsummersetmode"), F("Wärmepumpe Sommerbetrieb")) +MAKE_PSTR_LIST(hpoperatingmode, F("hpoperatingmode"), F("Wärmepumpe Betriebsmodus")) MAKE_PSTR_LIST(controlmode, F("controlmode"), F("Kontrollmodus")) MAKE_PSTR_LIST(control, F("control"), F("Fernsteuerung")) MAKE_PSTR_LIST(holidays, F("holidays"), F("holiday dates")) diff --git a/src/locale_EN.h b/src/locale_EN.h index 67d5063b7..938d5f912 100644 --- a/src/locale_EN.h +++ b/src/locale_EN.h @@ -364,7 +364,7 @@ MAKE_PSTR_LIST(enum_wwMode2, F_(off), F_(on), F_(auto)) MAKE_PSTR_LIST(enum_wwMode3, F_(on), F_(off), F_(auto)) MAKE_PSTR_LIST(enum_heatingtype, F_(off), F_(radiator), F_(convector), F_(floor)) MAKE_PSTR_LIST(enum_summermode, F_(summer), F_(auto), F_(winter)) -MAKE_PSTR_LIST(enum_hpsummermode, F_(off), F_(auto), F("heating"), F("cooling")) +MAKE_PSTR_LIST(enum_hpoperatingmode, F_(off), F_(auto), F("heating"), F("cooling")) MAKE_PSTR_LIST(enum_summer, F_(winter), F_(summer)) MAKE_PSTR_LIST(enum_mode, F_(manual), F_(auto)) // RC100, RC300, RC310 @@ -639,7 +639,7 @@ MAKE_PSTR_LIST(nofrosttemp, F("nofrosttemp"), F("nofrost temperature")) MAKE_PSTR_LIST(targetflowtemp, F("targetflowtemp"), F("target flow temperature")) MAKE_PSTR_LIST(heatingtype, F("heatingtype"), F("heating type")) MAKE_PSTR_LIST(summersetmode, F("summersetmode"), F("set summer mode")) -MAKE_PSTR_LIST(hpsummersetmode, F("hpsummersetmode"), F("heatpump summer mode")) +MAKE_PSTR_LIST(hpoperatingmode, F("hpoperatingmode"), F("heatpump operating mode")) MAKE_PSTR_LIST(controlmode, F("controlmode"), F("control mode")) MAKE_PSTR_LIST(control, F("control"), F("control device")) MAKE_PSTR_LIST(holidays, F("holidays"), F("holiday dates")) From 33e58ec45a7a8c6a18e1624c85a293ab77a970e2 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Wed, 18 May 2022 07:05:11 +0200 Subject: [PATCH 7/8] RC30 designtemp write, 2.fix #496 --- src/devices/thermostat.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index efd40b5ca..726ecf98b 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -2966,7 +2966,7 @@ bool Thermostat::set_temperature(const float temperature, const uint8_t mode, co factor = 1; break; case HeatingCircuit::Mode::DESIGN: - if (hc->heatingtype == 3) { + if (hc->heatingtype == 3 && model == EMS_DEVICE_FLAG_RC35) { offset = EMS_OFFSET_RC35Set_temp_design_floor; } else { offset = EMS_OFFSET_RC35Set_temp_design; @@ -3005,7 +3005,7 @@ bool Thermostat::set_temperature(const float temperature, const uint8_t mode, co factor = 1; break; case HeatingCircuit::Mode::MAXFLOW: - if (hc->heatingtype == 3) { + if (hc->heatingtype == 3 && model == EMS_DEVICE_FLAG_RC35) { offset = 35; } else { offset = 15; From ca50c5178a0b9949008b4eac23861fe03eeaa4a4 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Wed, 18 May 2022 17:04:54 +0200 Subject: [PATCH 8/8] fix typos --- src/devices/boiler.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/devices/boiler.cpp b/src/devices/boiler.cpp index 1b2d89588..9369ec297 100644 --- a/src/devices/boiler.cpp +++ b/src/devices/boiler.cpp @@ -1164,7 +1164,7 @@ bool Boiler::set_ww_temp(const char * value, const int8_t id) { return false; } - if (is_fetch(EMS_TYPE_UBAParametersPlus)) { + if (is_fetch(EMS_TYPE_UBAParameterWWPlus)) { // write_command(EMS_TYPE_UBAFlags, 3, v, EMS_TYPE_UBAParameterWWPlus); // test for #96 write_command(EMS_TYPE_UBAParameterWWPlus, 6, v, EMS_TYPE_UBAParameterWWPlus); } else { @@ -1206,7 +1206,7 @@ bool Boiler::set_ww_disinfect_temp(const char * value, const int8_t id) { return false; } - if (is_fetch(EMS_TYPE_UBAParametersPlus)) { + if (is_fetch(EMS_TYPE_UBAParameterWWPlus)) { write_command(EMS_TYPE_UBAParameterWWPlus, 12, v, EMS_TYPE_UBAParameterWWPlus); } else { write_command(EMS_TYPE_UBAParameterWW, 8, v, EMS_TYPE_UBAParameterWW);