Merge branch 'emsesp:dev' into dev

This commit is contained in:
Proddy
2022-02-12 17:38:38 +01:00
committed by GitHub
8 changed files with 164 additions and 152 deletions

View File

@@ -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

View File

@@ -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",

View File

@@ -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",

View File

@@ -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);

View File

@@ -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

View File

@@ -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<JsonObject>();
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<JsonObject>();
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<JsonObject>();
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<JsonObject>();
need_publish |= emsdevice->generate_values(json, DeviceValueTAG::TAG_NONE, true, EMSdevice::OUTPUT_TARGET::MQTT); // nested
} else {
json = doc.to<JsonObject>();
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<JsonObject>();
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<JsonObject>();
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<JsonObject>();
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<JsonObject>();
need_publish |= emsdevice->generate_values(json, DeviceValueTAG::TAG_NONE, true, EMSdevice::OUTPUT_TARGET::MQTT); // nested
}
}

View File

@@ -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;
}

View File

@@ -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