diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index e9c0e154f..89d33a09b 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -19,7 +19,7 @@ - Added 8700i Boiler device - Added Cascade CM10 Controller device - Add Olimex ESP32-POE-ISO to board profiles plus settings to customize Ethernet modules [#301](https://github.com/emsesp/EMS-ESP32/issues/301) -- helptext for string commands in WebUI [#320](https://github.com/emsesp/EMS-ESP32/issues/320) +- Help text for string commands in WebUI [#320](https://github.com/emsesp/EMS-ESP32/issues/320) - Germany translations (at compile time) - #entities added to system/info` endpoint [#322](https://github.com/emsesp/EMS-ESP32/issues/322) @@ -36,6 +36,8 @@ - Increased number of Mixers and Heating Circuits [#294](https://github.com/emsesp/EMS-ESP32/issues/294) - Check receive status before removing a telegram fetch [#268](https://github.com/emsesp/EMS-ESP32/issues/268), [#282](https://github.com/emsesp/EMS-ESP32/issues/282) - Fix uploading firmware on OSX [#345](https://github.com/emsesp/EMS-ESP32/issues/345) +- Non-nested MQTT would corrupt the json [#354](https://github.com/emsesp/EMS-ESP32/issues/354) +- Burner selected max power can have a value higher than 100% [#314](https://github.com/emsesp/EMS-ESP32/issues/314) ### Changed diff --git a/interface/package-lock.json b/interface/package-lock.json index f944ce0ce..60c3969f8 100644 --- a/interface/package-lock.json +++ b/interface/package-lock.json @@ -10,17 +10,17 @@ "dependencies": { "@emotion/react": "^11.7.1", "@emotion/styled": "^11.6.0", - "@msgpack/msgpack": "^2.7.1", - "@mui/icons-material": "^5.3.1", - "@mui/material": "^5.4.0", + "@msgpack/msgpack": "^2.7.2", + "@mui/icons-material": "^5.4.1", + "@mui/material": "^5.4.1", "@types/lodash": "^4.14.178", - "@types/node": "^17.0.15", + "@types/node": "^17.0.17", "@types/react": "^17.0.39", "@types/react-dom": "^17.0.11", "@types/react-router-dom": "^5.3.3", "async-validator": "^4.0.7", "axios": "^0.25.0", - "http-proxy-middleware": "^2.0.2", + "http-proxy-middleware": "^2.0.3", "jwt-decode": "^3.1.2", "lodash": "^4.17.21", "notistack": "^2.0.3", @@ -28,7 +28,7 @@ "react": "^17.0.2", "react-app-rewired": "^2.1.11", "react-dom": "^17.0.2", - "react-dropzone": "^12.0.0", + "react-dropzone": "^12.0.2", "react-icons": "^4.3.1", "react-router-dom": "^6.2.1", "react-scripts": "5.0.0", @@ -1740,9 +1740,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.7.tgz", - "integrity": "sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ==", + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.2.tgz", + "integrity": "sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw==", "dependencies": { "regenerator-runtime": "^0.13.4" }, @@ -2699,21 +2699,21 @@ } }, "node_modules/@msgpack/msgpack": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/@msgpack/msgpack/-/msgpack-2.7.1.tgz", - "integrity": "sha512-ApwiSL2c9ObewdOE/sqt788P1C5lomBOHyO8nUBCr4ofErBCnYQ003NtJ8lS9OQZc11ximkbmgAZJjB8y6cCdA==", + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/@msgpack/msgpack/-/msgpack-2.7.2.tgz", + "integrity": "sha512-rYEi46+gIzufyYUAoHDnRzkWGxajpD9vVXFQ3g1vbjrBm6P7MBmm+s/fqPa46sxa+8FOUdEuRQKaugo5a4JWpw==", "engines": { "node": ">= 10" } }, "node_modules/@mui/base": { - "version": "5.0.0-alpha.67", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.67.tgz", - "integrity": "sha512-yK2++NivZUitAVpheMc5QVuwrVCphrTw85L6qjKcvnSpB8wmVYne58CY2vzMCNEuHkuHG2jccq9/JlRZFGAanw==", + "version": "5.0.0-alpha.68", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.68.tgz", + "integrity": "sha512-q+3gX6EHuM/AyOn8fkoANQxSzIHBeuNsrGgb7SPP0y7NuM+4ZHG/b9882+OfHcilaSqPDWUQoLbphcBpw/m/RA==", "dependencies": { - "@babel/runtime": "^7.16.7", + "@babel/runtime": "^7.17.0", "@emotion/is-prop-valid": "^1.1.1", - "@mui/utils": "^5.3.0", + "@mui/utils": "^5.4.1", "@popperjs/core": "^2.4.4", "clsx": "^1.1.1", "prop-types": "^15.7.2", @@ -2738,11 +2738,11 @@ } }, "node_modules/@mui/icons-material": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.3.1.tgz", - "integrity": "sha512-8zBWCaE8DHjIGZhGgMod92p6Rm38EhXrS+cZtaV0+jOTMeWh7z+mvswXzb/rVKc0ZYqw6mQYBcn2uEs2yclI9w==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.4.1.tgz", + "integrity": "sha512-koiq9q2GfjXRUWcC5fEi1b+EA4vfJHgIaAdBHlkOrBx2cnmmazQcyib501eodPfaZGx9BikrhivODaNQYQq8hA==", "dependencies": { - "@babel/runtime": "^7.16.7" + "@babel/runtime": "^7.17.0" }, "engines": { "node": ">=12.0.0" @@ -2763,15 +2763,15 @@ } }, "node_modules/@mui/material": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.4.0.tgz", - "integrity": "sha512-vfBIAMsRNWI/A4p/eP01MjqhSACwxRGYp/2Yi7WAU64PpI/TXR4b9SRl+XJMMJXVC7+abu4E3hTdF3oqwMCSYA==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.4.1.tgz", + "integrity": "sha512-SxAT43UAjFTBBpJrN+oGrv40xP1uCa5Z49NfHt3m93xYeFzbxKOk0V9IKU7zlUjbsaVQ0i+o24yF5GULZmynlA==", "dependencies": { - "@babel/runtime": "^7.16.7", - "@mui/base": "5.0.0-alpha.67", - "@mui/system": "^5.4.0", - "@mui/types": "^7.1.0", - "@mui/utils": "^5.3.0", + "@babel/runtime": "^7.17.0", + "@mui/base": "5.0.0-alpha.68", + "@mui/system": "^5.4.1", + "@mui/types": "^7.1.1", + "@mui/utils": "^5.4.1", "@types/react-transition-group": "^4.4.4", "clsx": "^1.1.1", "csstype": "^3.0.10", @@ -2807,12 +2807,12 @@ } }, "node_modules/@mui/private-theming": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.3.0.tgz", - "integrity": "sha512-EBobUEyM9fMnteKrVPp8pTMUh81xXakyfdpkoh7Y19q9JpD2eh7QGAQVJVj0JBFlcUJD60NIE4K8rdokrRmLwg==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.4.1.tgz", + "integrity": "sha512-Xbc4MXFZxv0A3hoc4TSDBhzjhstppKfc+gQcTMqqBZQP7KjnmxF+wO7rEPQuYRBihjCqQBdrHIGMLsKWrhkZkQ==", "dependencies": { - "@babel/runtime": "^7.16.7", - "@mui/utils": "^5.3.0", + "@babel/runtime": "^7.17.0", + "@mui/utils": "^5.4.1", "prop-types": "^15.7.2" }, "engines": { @@ -2833,11 +2833,11 @@ } }, "node_modules/@mui/styled-engine": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.3.0.tgz", - "integrity": "sha512-I4YemFy9WnCLUdZ5T+6egpzc8e7Jq/uh9AJ3QInZHbyNu/9I2SWvNn7vHjWOT/D8Y8LMzIOhu5WwZbzjez7YRw==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.4.1.tgz", + "integrity": "sha512-CFLNJkopRoAuShkgUZOTBVxdTlKu4w6L4kOwPi4r3QB2XXS6O5kyLHSsg9huUbtOYk5Dv5UZyUSc5pw4J7ezdg==", "dependencies": { - "@babel/runtime": "^7.16.7", + "@babel/runtime": "^7.17.0", "@emotion/cache": "^11.7.1", "prop-types": "^15.7.2" }, @@ -2863,15 +2863,15 @@ } }, "node_modules/@mui/system": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.4.0.tgz", - "integrity": "sha512-LX7g5gK5yCwiueSUVG73uVNc0yeHjsWUIFLrnPjP3m+J7O38RkPqyao5nZahhaSL1PGNbR9+zfkxljXthO9QqA==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.4.1.tgz", + "integrity": "sha512-07JBYf9iQdxIHZU8cFOLoxBnkQDUPLb7UBhNxo4998yEqpWFJ00WKgEVYBKvPl0X+MRU/20wqFz6yGIuCx4AeA==", "dependencies": { - "@babel/runtime": "^7.16.7", - "@mui/private-theming": "^5.3.0", - "@mui/styled-engine": "^5.3.0", - "@mui/types": "^7.1.0", - "@mui/utils": "^5.3.0", + "@babel/runtime": "^7.17.0", + "@mui/private-theming": "^5.4.1", + "@mui/styled-engine": "^5.4.1", + "@mui/types": "^7.1.1", + "@mui/utils": "^5.4.1", "clsx": "^1.1.1", "csstype": "^3.0.10", "prop-types": "^15.7.2" @@ -2902,9 +2902,9 @@ } }, "node_modules/@mui/types": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.1.0.tgz", - "integrity": "sha512-Hh7ALdq/GjfIwLvqH3XftuY3bcKhupktTm+S6qRIDGOtPtRuq2L21VWzOK4p7kblirK0XgGVH5BLwa6u8z/6QQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.1.1.tgz", + "integrity": "sha512-33hbHFLCwenTpS+T4m4Cz7cQ/ng5g+IgtINkw1uDBVvi1oM83VNt/IGzWIQNPK8H2pr0WIfkmboD501bVdYsPw==", "peerDependencies": { "@types/react": "*" }, @@ -2915,11 +2915,11 @@ } }, "node_modules/@mui/utils": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.3.0.tgz", - "integrity": "sha512-O/E9IQKPMg0OrN7+gkn7Ga5o5WA2iXQGdyqNBFPNrYzxOvwzsEtM5K7MtTCGGYKFe8mhTRM0ZOjh5OM0dglw+Q==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.4.1.tgz", + "integrity": "sha512-5HzM+ZjlQqbSp7UTOvLlhAjkWB+o9Z4NzO0W+yhZ1KnxITr+zr/MBzYmmQ3kyvhui8pyhgRDoTcVgwb+02ZUZA==", "dependencies": { - "@babel/runtime": "^7.16.7", + "@babel/runtime": "^7.17.0", "@types/prop-types": "^15.7.4", "@types/react-is": "^16.7.1 || ^17.0.0", "prop-types": "^15.7.2", @@ -3597,9 +3597,9 @@ "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" }, "node_modules/@types/node": { - "version": "17.0.15", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.15.tgz", - "integrity": "sha512-zWt4SDDv1S9WRBNxLFxFRHxdD9tvH8f5/kg5/IaLFdnSNXsDY4eL3Q3XXN+VxUnWIhyVFDwcsmAprvwXoM/ClA==" + "version": "17.0.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.17.tgz", + "integrity": "sha512-e8PUNQy1HgJGV3iU/Bp2+D/DXh3PYeyli8LgIwsQcs1Ar1LoaWHSIT6Rw+H2rNJmiq6SNWiDytfx8+gYj7wDHw==" }, "node_modules/@types/parse-json": { "version": "4.0.0", @@ -8756,9 +8756,9 @@ } }, "node_modules/http-proxy-middleware": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.2.tgz", - "integrity": "sha512-XtmDN5w+vdFTBZaYhdJAbMqn0DP/EhkUaAeo963mojwpKMMbw6nivtFKw07D7DDOH745L5k0VL0P8KRYNEVF/g==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.3.tgz", + "integrity": "sha512-1bloEwnrHMnCoO/Gcwbz7eSVvW50KPES01PecpagI+YLNLci4AcuKJrujW4Mc3sBLpFxMSlsLNHS5Nl/lvrTPA==", "dependencies": { "@types/http-proxy": "^1.17.8", "http-proxy": "^1.18.1", @@ -8771,6 +8771,11 @@ }, "peerDependencies": { "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } } }, "node_modules/https-proxy-agent": { @@ -14227,9 +14232,9 @@ } }, "node_modules/react-dropzone": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-12.0.0.tgz", - "integrity": "sha512-xGZr9YFTLqLkYDSx7CMRhjW4rIEqE9w2DhJB0CIEslPzUj3OQQcg7fK8uW85exB+UaJoPfk74lnKi0kv7q6rDw==", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-12.0.2.tgz", + "integrity": "sha512-wnU3+QZA9H5XqC+UNdEDs5YuB+XgJh5mQ9Bop4PUtN/2nKTGTpBbfkcsm9OVCYylBHak69Ezjzbhx/0Cb6OfjA==", "dependencies": { "attr-accept": "^2.2.2", "file-selector": "^0.4.0", @@ -18610,9 +18615,9 @@ } }, "@babel/runtime": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.7.tgz", - "integrity": "sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ==", + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.2.tgz", + "integrity": "sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -19328,18 +19333,18 @@ } }, "@msgpack/msgpack": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/@msgpack/msgpack/-/msgpack-2.7.1.tgz", - "integrity": "sha512-ApwiSL2c9ObewdOE/sqt788P1C5lomBOHyO8nUBCr4ofErBCnYQ003NtJ8lS9OQZc11ximkbmgAZJjB8y6cCdA==" + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/@msgpack/msgpack/-/msgpack-2.7.2.tgz", + "integrity": "sha512-rYEi46+gIzufyYUAoHDnRzkWGxajpD9vVXFQ3g1vbjrBm6P7MBmm+s/fqPa46sxa+8FOUdEuRQKaugo5a4JWpw==" }, "@mui/base": { - "version": "5.0.0-alpha.67", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.67.tgz", - "integrity": "sha512-yK2++NivZUitAVpheMc5QVuwrVCphrTw85L6qjKcvnSpB8wmVYne58CY2vzMCNEuHkuHG2jccq9/JlRZFGAanw==", + "version": "5.0.0-alpha.68", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.68.tgz", + "integrity": "sha512-q+3gX6EHuM/AyOn8fkoANQxSzIHBeuNsrGgb7SPP0y7NuM+4ZHG/b9882+OfHcilaSqPDWUQoLbphcBpw/m/RA==", "requires": { - "@babel/runtime": "^7.16.7", + "@babel/runtime": "^7.17.0", "@emotion/is-prop-valid": "^1.1.1", - "@mui/utils": "^5.3.0", + "@mui/utils": "^5.4.1", "@popperjs/core": "^2.4.4", "clsx": "^1.1.1", "prop-types": "^15.7.2", @@ -19347,23 +19352,23 @@ } }, "@mui/icons-material": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.3.1.tgz", - "integrity": "sha512-8zBWCaE8DHjIGZhGgMod92p6Rm38EhXrS+cZtaV0+jOTMeWh7z+mvswXzb/rVKc0ZYqw6mQYBcn2uEs2yclI9w==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.4.1.tgz", + "integrity": "sha512-koiq9q2GfjXRUWcC5fEi1b+EA4vfJHgIaAdBHlkOrBx2cnmmazQcyib501eodPfaZGx9BikrhivODaNQYQq8hA==", "requires": { - "@babel/runtime": "^7.16.7" + "@babel/runtime": "^7.17.0" } }, "@mui/material": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.4.0.tgz", - "integrity": "sha512-vfBIAMsRNWI/A4p/eP01MjqhSACwxRGYp/2Yi7WAU64PpI/TXR4b9SRl+XJMMJXVC7+abu4E3hTdF3oqwMCSYA==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.4.1.tgz", + "integrity": "sha512-SxAT43UAjFTBBpJrN+oGrv40xP1uCa5Z49NfHt3m93xYeFzbxKOk0V9IKU7zlUjbsaVQ0i+o24yF5GULZmynlA==", "requires": { - "@babel/runtime": "^7.16.7", - "@mui/base": "5.0.0-alpha.67", - "@mui/system": "^5.4.0", - "@mui/types": "^7.1.0", - "@mui/utils": "^5.3.0", + "@babel/runtime": "^7.17.0", + "@mui/base": "5.0.0-alpha.68", + "@mui/system": "^5.4.1", + "@mui/types": "^7.1.1", + "@mui/utils": "^5.4.1", "@types/react-transition-group": "^4.4.4", "clsx": "^1.1.1", "csstype": "^3.0.10", @@ -19374,52 +19379,52 @@ } }, "@mui/private-theming": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.3.0.tgz", - "integrity": "sha512-EBobUEyM9fMnteKrVPp8pTMUh81xXakyfdpkoh7Y19q9JpD2eh7QGAQVJVj0JBFlcUJD60NIE4K8rdokrRmLwg==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.4.1.tgz", + "integrity": "sha512-Xbc4MXFZxv0A3hoc4TSDBhzjhstppKfc+gQcTMqqBZQP7KjnmxF+wO7rEPQuYRBihjCqQBdrHIGMLsKWrhkZkQ==", "requires": { - "@babel/runtime": "^7.16.7", - "@mui/utils": "^5.3.0", + "@babel/runtime": "^7.17.0", + "@mui/utils": "^5.4.1", "prop-types": "^15.7.2" } }, "@mui/styled-engine": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.3.0.tgz", - "integrity": "sha512-I4YemFy9WnCLUdZ5T+6egpzc8e7Jq/uh9AJ3QInZHbyNu/9I2SWvNn7vHjWOT/D8Y8LMzIOhu5WwZbzjez7YRw==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.4.1.tgz", + "integrity": "sha512-CFLNJkopRoAuShkgUZOTBVxdTlKu4w6L4kOwPi4r3QB2XXS6O5kyLHSsg9huUbtOYk5Dv5UZyUSc5pw4J7ezdg==", "requires": { - "@babel/runtime": "^7.16.7", + "@babel/runtime": "^7.17.0", "@emotion/cache": "^11.7.1", "prop-types": "^15.7.2" } }, "@mui/system": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.4.0.tgz", - "integrity": "sha512-LX7g5gK5yCwiueSUVG73uVNc0yeHjsWUIFLrnPjP3m+J7O38RkPqyao5nZahhaSL1PGNbR9+zfkxljXthO9QqA==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.4.1.tgz", + "integrity": "sha512-07JBYf9iQdxIHZU8cFOLoxBnkQDUPLb7UBhNxo4998yEqpWFJ00WKgEVYBKvPl0X+MRU/20wqFz6yGIuCx4AeA==", "requires": { - "@babel/runtime": "^7.16.7", - "@mui/private-theming": "^5.3.0", - "@mui/styled-engine": "^5.3.0", - "@mui/types": "^7.1.0", - "@mui/utils": "^5.3.0", + "@babel/runtime": "^7.17.0", + "@mui/private-theming": "^5.4.1", + "@mui/styled-engine": "^5.4.1", + "@mui/types": "^7.1.1", + "@mui/utils": "^5.4.1", "clsx": "^1.1.1", "csstype": "^3.0.10", "prop-types": "^15.7.2" } }, "@mui/types": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.1.0.tgz", - "integrity": "sha512-Hh7ALdq/GjfIwLvqH3XftuY3bcKhupktTm+S6qRIDGOtPtRuq2L21VWzOK4p7kblirK0XgGVH5BLwa6u8z/6QQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.1.1.tgz", + "integrity": "sha512-33hbHFLCwenTpS+T4m4Cz7cQ/ng5g+IgtINkw1uDBVvi1oM83VNt/IGzWIQNPK8H2pr0WIfkmboD501bVdYsPw==", "requires": {} }, "@mui/utils": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.3.0.tgz", - "integrity": "sha512-O/E9IQKPMg0OrN7+gkn7Ga5o5WA2iXQGdyqNBFPNrYzxOvwzsEtM5K7MtTCGGYKFe8mhTRM0ZOjh5OM0dglw+Q==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.4.1.tgz", + "integrity": "sha512-5HzM+ZjlQqbSp7UTOvLlhAjkWB+o9Z4NzO0W+yhZ1KnxITr+zr/MBzYmmQ3kyvhui8pyhgRDoTcVgwb+02ZUZA==", "requires": { - "@babel/runtime": "^7.16.7", + "@babel/runtime": "^7.17.0", "@types/prop-types": "^15.7.4", "@types/react-is": "^16.7.1 || ^17.0.0", "prop-types": "^15.7.2", @@ -19902,9 +19907,9 @@ "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" }, "@types/node": { - "version": "17.0.15", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.15.tgz", - "integrity": "sha512-zWt4SDDv1S9WRBNxLFxFRHxdD9tvH8f5/kg5/IaLFdnSNXsDY4eL3Q3XXN+VxUnWIhyVFDwcsmAprvwXoM/ClA==" + "version": "17.0.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.17.tgz", + "integrity": "sha512-e8PUNQy1HgJGV3iU/Bp2+D/DXh3PYeyli8LgIwsQcs1Ar1LoaWHSIT6Rw+H2rNJmiq6SNWiDytfx8+gYj7wDHw==" }, "@types/parse-json": { "version": "4.0.0", @@ -23737,9 +23742,9 @@ } }, "http-proxy-middleware": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.2.tgz", - "integrity": "sha512-XtmDN5w+vdFTBZaYhdJAbMqn0DP/EhkUaAeo963mojwpKMMbw6nivtFKw07D7DDOH745L5k0VL0P8KRYNEVF/g==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.3.tgz", + "integrity": "sha512-1bloEwnrHMnCoO/Gcwbz7eSVvW50KPES01PecpagI+YLNLci4AcuKJrujW4Mc3sBLpFxMSlsLNHS5Nl/lvrTPA==", "requires": { "@types/http-proxy": "^1.17.8", "http-proxy": "^1.18.1", @@ -27560,9 +27565,9 @@ } }, "react-dropzone": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-12.0.0.tgz", - "integrity": "sha512-xGZr9YFTLqLkYDSx7CMRhjW4rIEqE9w2DhJB0CIEslPzUj3OQQcg7fK8uW85exB+UaJoPfk74lnKi0kv7q6rDw==", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-12.0.2.tgz", + "integrity": "sha512-wnU3+QZA9H5XqC+UNdEDs5YuB+XgJh5mQ9Bop4PUtN/2nKTGTpBbfkcsm9OVCYylBHak69Ezjzbhx/0Cb6OfjA==", "requires": { "attr-accept": "^2.2.2", "file-selector": "^0.4.0", diff --git a/interface/package.json b/interface/package.json index 57b9388fc..5e3d4bfb3 100644 --- a/interface/package.json +++ b/interface/package.json @@ -6,17 +6,17 @@ "dependencies": { "@emotion/react": "^11.7.1", "@emotion/styled": "^11.6.0", - "@msgpack/msgpack": "^2.7.1", - "@mui/icons-material": "^5.3.1", - "@mui/material": "^5.4.0", + "@msgpack/msgpack": "^2.7.2", + "@mui/icons-material": "^5.4.1", + "@mui/material": "^5.4.1", "@types/lodash": "^4.14.178", - "@types/node": "^17.0.15", + "@types/node": "^17.0.17", "@types/react": "^17.0.39", "@types/react-dom": "^17.0.11", "@types/react-router-dom": "^5.3.3", "async-validator": "^4.0.7", "axios": "^0.25.0", - "http-proxy-middleware": "^2.0.2", + "http-proxy-middleware": "^2.0.3", "jwt-decode": "^3.1.2", "lodash": "^4.17.21", "notistack": "^2.0.3", @@ -24,7 +24,7 @@ "react": "^17.0.2", "react-app-rewired": "^2.1.11", "react-dom": "^17.0.2", - "react-dropzone": "^12.0.0", + "react-dropzone": "^12.0.2", "react-icons": "^4.3.1", "react-router-dom": "^6.2.1", "react-scripts": "5.0.0", diff --git a/src/devices/boiler.cpp b/src/devices/boiler.cpp index b143e8dbb..6ddebf5d7 100644 --- a/src/devices/boiler.cpp +++ b/src/devices/boiler.cpp @@ -96,8 +96,15 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &tapwaterActive_, DeviceValueType::BOOL, nullptr, FL_(tapwaterActive), DeviceValueUOM::NONE); register_device_value( DeviceValueTAG::TAG_BOILER_DATA, &selFlowTemp_, DeviceValueType::UINT, nullptr, FL_(selFlowTemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_flow_temp)); - register_device_value( - DeviceValueTAG::TAG_BOILER_DATA, &selBurnPow_, DeviceValueType::UINT, nullptr, FL_(selBurnPow), DeviceValueUOM::PERCENT, MAKE_CF_CB(set_burn_power)); + register_device_value(DeviceValueTAG::TAG_BOILER_DATA, + &selBurnPow_, + DeviceValueType::UINT, + nullptr, + FL_(selBurnPow), + DeviceValueUOM::PERCENT, + MAKE_CF_CB(set_burn_power), + 0, + 130); register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &heatingPumpMod_, DeviceValueType::UINT, nullptr, FL_(heatingPumpMod), DeviceValueUOM::PERCENT); register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &heatingPump2Mod_, DeviceValueType::UINT, nullptr, FL_(heatingPump2Mod), DeviceValueUOM::PERCENT); register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &outdoorTemp_, DeviceValueType::SHORT, FL_(div10), FL_(outdoorTemp), DeviceValueUOM::DEGREES); diff --git a/src/devices/boiler.h b/src/devices/boiler.h index 5b81c69c7..c53d0b3f5 100644 --- a/src/devices/boiler.h +++ b/src/devices/boiler.h @@ -93,7 +93,7 @@ class Boiler : public EMSdevice { uint8_t heatingActive_; // Central heating is on/off uint8_t tapwaterActive_; // Hot tap water is on/off uint8_t selFlowTemp_; // Selected flow temperature - uint8_t selBurnPow_; // Burner max power % + uint8_t selBurnPow_; // Burner max power % (can be > 100%) uint8_t heatingPump2Mod_; // heatpump modulation from 0xE3 (heatpumps) uint8_t heatingPumpMod_; // Pump modulation % int16_t outdoorTemp_; // Outside temperature diff --git a/src/emsesp.cpp b/src/emsesp.cpp index b40c6dd64..a4bedf1b2 100644 --- a/src/emsesp.cpp +++ b/src/emsesp.cpp @@ -552,11 +552,10 @@ void EMSESP::reset_mqtt_ha() { // this will also create the HA /config topic // generate_values_json is called to build the device value (dv) object array void EMSESP::publish_device_values(uint8_t device_type) { - DynamicJsonDocument doc(EMSESP_JSON_SIZE_XLARGE_DYN); // use max size - JsonObject json = doc.to(); + DynamicJsonDocument doc(EMSESP_JSON_SIZE_XLARGE_DYN); + JsonObject json; bool need_publish = false; - - bool nested = (Mqtt::is_nested()); + bool nested = (Mqtt::is_nested()); // group by device type for (const auto & emsdevice : emsdevices) { @@ -572,10 +571,11 @@ void EMSESP::publish_device_values(uint8_t device_type) { // if its a boiler, generate json for each group and publish it directly. not nested if (device_type == DeviceType::BOILER) { + json = doc.to(); if (emsdevice->generate_values(json, DeviceValueTAG::TAG_BOILER_DATA, false, EMSdevice::OUTPUT_TARGET::MQTT)) { Mqtt::publish(Mqtt::tag_to_topic(device_type, DeviceValueTAG::TAG_BOILER_DATA), json); } - doc.clear(); + json = doc.to(); if (emsdevice->generate_values(json, DeviceValueTAG::TAG_DEVICE_DATA_WW, false, EMSdevice::OUTPUT_TARGET::MQTT)) { Mqtt::publish(Mqtt::tag_to_topic(device_type, DeviceValueTAG::TAG_DEVICE_DATA_WW), json); } @@ -587,39 +587,42 @@ void EMSESP::publish_device_values(uint8_t device_type) { // only publish the single master thermostat if (emsdevice->device_id() == EMSESP::actual_master_thermostat()) { if (nested) { + json = doc.to(); need_publish |= emsdevice->generate_values(json, DeviceValueTAG::TAG_NONE, true, EMSdevice::OUTPUT_TARGET::MQTT); // nested } else { + json = doc.to(); if (emsdevice->generate_values(json, DeviceValueTAG::TAG_THERMOSTAT_DATA, false, EMSdevice::OUTPUT_TARGET::MQTT)) { // not nested Mqtt::publish(Mqtt::tag_to_topic(device_type, DeviceValueTAG::TAG_NONE), json); } - doc.clear(); for (uint8_t hc_tag = DeviceValueTAG::TAG_HC1; hc_tag <= DeviceValueTAG::TAG_HC8; hc_tag++) { + json = doc.to(); if (emsdevice->generate_values(json, hc_tag, false, EMSdevice::OUTPUT_TARGET::MQTT)) { // not nested Mqtt::publish(Mqtt::tag_to_topic(device_type, hc_tag), json); } - doc.clear(); } - need_publish = false; } + need_publish = false; } } // Mixer else if (device_type == DeviceType::MIXER) { if (nested) { + json = doc.to(); need_publish |= emsdevice->generate_values(json, DeviceValueTAG::TAG_NONE, true, EMSdevice::OUTPUT_TARGET::MQTT); // nested } else { for (uint8_t hc_tag = DeviceValueTAG::TAG_HC1; hc_tag <= DeviceValueTAG::TAG_WWC4; hc_tag++) { + json = doc.to(); if (emsdevice->generate_values(json, hc_tag, false, EMSdevice::OUTPUT_TARGET::MQTT)) { // not nested Mqtt::publish(Mqtt::tag_to_topic(device_type, hc_tag), json); } - doc.clear(); } need_publish = false; } } else { // for all other devices add the values to the json + json = doc.to(); need_publish |= emsdevice->generate_values(json, DeviceValueTAG::TAG_NONE, true, EMSdevice::OUTPUT_TARGET::MQTT); // nested } } diff --git a/src/mqtt.h b/src/mqtt.h index ca180897e..95b461de4 100644 --- a/src/mqtt.h +++ b/src/mqtt.h @@ -183,27 +183,23 @@ class Mqtt { static uint8_t nested_format() { return nested_format_; } - static bool is_nested() { return nested_format_ == 1; } + static void nested_format(uint8_t nested_format) { + nested_format_ = nested_format; + } static bool publish_single() { return publish_single_; } - static void publish_single(bool publish_single) { publish_single_ = publish_single; } - static void nested_format(uint8_t nested_format) { - nested_format_ = nested_format; - } - static bool ha_enabled() { return ha_enabled_; } - static void ha_enabled(bool ha_enabled) { ha_enabled_ = ha_enabled; } @@ -211,7 +207,6 @@ class Mqtt { static bool send_response() { return send_response_; } - static void send_response(bool send_response) { send_response_ = send_response; } diff --git a/src/test/test.cpp b/src/test/test.cpp index e185c0818..dc97151d1 100644 --- a/src/test/test.cpp +++ b/src/test/test.cpp @@ -173,8 +173,6 @@ bool Test::run_test(const char * command, int8_t id) { if (strcmp(command, "thermostat") == 0) { EMSESP::logger().info(F("Adding thermostat...")); - Mqtt::nested_format(1); // use nested - // Mqtt::nested_format(2); // single add_device(0x10, 192); // FW120 @@ -498,17 +496,19 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & cmd, const if (command == "ha") { shell.printfln(F("Testing HA mqtt discovery")); - Mqtt::ha_enabled(true); - // Mqtt::nested_format(1); - Mqtt::nested_format(2); + // Mqtt::ha_enabled(true); + Mqtt::ha_enabled(false); - run_test("boiler"); + // Mqtt::nested_format(1); // is nested + Mqtt::nested_format(2); // not nested + + // run_test("boiler"); run_test("thermostat"); // run_test("solar"); // run_test("mixer"); shell.invoke_command("call system publish"); - shell.invoke_command("show mqtt"); + // shell.invoke_command("show mqtt"); // shell.invoke_command("call boiler fanwork"); // shell.invoke_command("call thermostat seltemp"); // sensor.thermostat_hc1_selected_room_temperature