Merge pull request #1319 from MichaelDvP/dev

add forceheatingoff #1262 and header/heatblock #1317
This commit is contained in:
Proddy
2023-10-08 12:19:22 +01:00
committed by GitHub
21 changed files with 212 additions and 111 deletions

View File

@@ -7,11 +7,13 @@
## Added
- humidity for ventilation devices
- telegrams for RC100H, hc2
- telegrams for RC100H, hc2 (seen on discord)
- names for BC400, GB192i, read temperatures for low loss header and heatblock [#1317](https://github.com/emsesp/EMS-ESP32/discussions/1317)
- option for `forceheatingoff` [#1262](https://github.com/emsesp/EMS-ESP32/issues/1262)
## Fixed
## Changed
- update to arduion 2.0.13 / idf 4.4.6
- update to arduino 2.0.14 / idf 4.4.6
- small changes for arduino 3.0.0 / idf 5.1 compatibility

View File

@@ -22,13 +22,13 @@
"@alova/adapter-xhr": "^1.0.1",
"@emotion/react": "^11.11.1",
"@emotion/styled": "^11.11.0",
"@mui/icons-material": "^5.14.11",
"@mui/material": "^5.14.11",
"@mui/icons-material": "^5.14.12",
"@mui/material": "^5.14.12",
"@table-library/react-table-library": "4.1.7",
"@types/lodash-es": "^4.17.9",
"@types/node": "^20.8.2",
"@types/react": "^18.2.24",
"@types/react-dom": "^18.2.8",
"@types/node": "^20.8.3",
"@types/react": "^18.2.25",
"@types/react-dom": "^18.2.11",
"@types/react-router-dom": "^5.3.3",
"alova": "^2.13.1",
"async-validator": "^4.2.5",
@@ -53,7 +53,7 @@
"@types/babel__core": "^7",
"@typescript-eslint/eslint-plugin": "^6.7.4",
"@typescript-eslint/parser": "^6.7.4",
"eslint": "^8.50.0",
"eslint": "^8.51.0",
"eslint-config-airbnb": "^19.0.4",
"eslint-config-airbnb-typescript": "^17.1.0",
"eslint-config-prettier": "^9.0.0",
@@ -69,7 +69,7 @@
"prettier": "^3.0.3",
"rollup-plugin-visualizer": "^5.9.2",
"terser": "^5.21.0",
"vite": "^4.4.10",
"vite": "^4.4.11",
"vite-plugin-svgr": "^4.1.0",
"vite-tsconfig-paths": "^4.2.1"
},

View File

@@ -126,6 +126,7 @@ const de: Translation = {
BYPASS_TOKEN: 'Zugriffstoken-Autorisierung bei API-Aufrufen umgehen',
READONLY: 'Nur-Lese-Modus aktivieren (blockiert alle ausgehenden EMS Tx Write-Befehle)',
UNDERCLOCK_CPU: 'CPU-Geschwindigkeit untertakten',
HEATINGOFF: 'Heizen ausschalten beim EMS-ESP Start',
ENABLE_SHOWER_TIMER: 'Duschtimer aktivieren',
ENABLE_SHOWER_ALERT: 'Duschalarm aktivieren',
TRIGGER_TIME: 'Auslösezeit',

View File

@@ -126,6 +126,7 @@ const en: Translation = {
BYPASS_TOKEN: 'Bypass Access Token authorization on API calls',
READONLY: 'Enable read-only mode (blocks all outgoing EMS Tx Write commands)',
UNDERCLOCK_CPU: 'Underclock CPU speed',
HEATINGOFF: 'Start boiler with forced heating off',
ENABLE_SHOWER_TIMER: 'Enable Shower Timer',
ENABLE_SHOWER_ALERT: 'Enable Shower Alert',
TRIGGER_TIME: 'Trigger Time',

View File

@@ -126,6 +126,7 @@ const fr: Translation = {
BYPASS_TOKEN: 'Contourner l\'autorisation du jeton d\'accès sur les appels API',
READONLY: 'Activer le mode lecture uniquement (bloque toutes les commandes EMS sortantes en écriture Tx)',
UNDERCLOCK_CPU: 'Underclock du CPU',
HEATINGOFF: 'Start boiler with forced heating off', // TODO translate
ENABLE_SHOWER_TIMER: 'Activer la minuterie de la douche',
ENABLE_SHOWER_ALERT: 'Activer les alertes de durée de douche',
TRIGGER_TIME: 'Durée avant déclenchement',

View File

@@ -128,6 +128,7 @@ const it: Translation = {
BYPASS_TOKEN: 'Ignora autorizzazione del token di accesso sulle chiamate API',
READONLY: 'Abilita modalità sola-lettura (blocca tutti i comandi di scrittura EMS Tx in uscita)',
UNDERCLOCK_CPU: 'Abbassa velocità della CPU',
HEATINGOFF: 'Avviamento caldaia con riscaldamento forzato spento',
ENABLE_SHOWER_TIMER: 'Abilita timer doccia',
ENABLE_SHOWER_ALERT: 'Abilita avviso doccia',
TRIGGER_TIME: 'Tempo di avvio',

View File

@@ -126,6 +126,7 @@ const nl: Translation = {
BYPASS_TOKEN: 'API Access Token authenticatie uitschakelen',
READONLY: 'Activeer read-only modus (blokkeert alle outgaande EMS Tx schrijf commandos)',
UNDERCLOCK_CPU: 'Underclock CPU snelheid',
HEATINGOFF: 'Start boiler with forced heating off', // TODO translate
ENABLE_SHOWER_TIMER: 'Activeer Douche Timer (tijdmeting)',
ENABLE_SHOWER_ALERT: 'Activeer Douchemelding',
TRIGGER_TIME: 'Trigger tijd',

View File

@@ -126,6 +126,7 @@ const no: Translation = {
BYPASS_TOKEN: 'Utelat Aksess Token authorisering av API kall',
READONLY: 'Aktiver read-only modus (blokker all EMS Tx Skriving)',
UNDERCLOCK_CPU: 'Underklokking av prosessorhastighet',
HEATINGOFF: 'Start boiler with forced heating off', // TODO translate
ENABLE_SHOWER_TIMER: 'Aktiver Dusjtimer',
ENABLE_SHOWER_ALERT: 'Aktiver Dusj-varsling',
TRIGGER_TIME: 'Aktiveringstid',

View File

@@ -126,6 +126,7 @@ const pl: BaseTranslation = {
BYPASS_TOKEN: 'Pomiń autoryzację tokenem w wywołaniach API',
READONLY: 'Tryb pracy "tylko do odczytu" (blokuje wszystkie komendy zapisu na magistralę EMS)',
UNDERCLOCK_CPU: 'Obniż taktowanie CPU',
HEATINGOFF: 'Start boiler with forced heating off', // TODO translate
ENABLE_SHOWER_TIMER: 'Aktywuj minutnik prysznica',
ENABLE_SHOWER_ALERT: 'Aktywuj alarm prysznica',
TRIGGER_TIME: 'Wyzwalaj po czasie',

View File

@@ -126,6 +126,7 @@ const sv: Translation = {
BYPASS_TOKEN: 'Inaktivera Token-autensiering för API-anrop',
READONLY: 'Aktivera read-only (blockerar alla utgående skrivkommandon mot EMS-bussen)',
UNDERCLOCK_CPU: 'Nedklocka Processorhastighet',
HEATINGOFF: 'Start boiler with forced heating off', // TODO translate
ENABLE_SHOWER_TIMER: 'Aktivera Dusch-timer',
ENABLE_SHOWER_ALERT: 'Aktivera Dusch-varning',
TRIGGER_TIME: 'Aktiveringstid',

View File

@@ -126,6 +126,7 @@ const tr: Translation = {
BYPASS_TOKEN: 'API bağlantılarında Erişim Jeton onaylamasını geç',
READONLY: 'Salt okunur modu devreye al (bütün giden EMS Tx Yazma komutlarını engeller)',
UNDERCLOCK_CPU: 'İşlemci hızını düşür',
HEATINGOFF: 'Start boiler with forced heating off', // TODO translate
ENABLE_SHOWER_TIMER: 'Duş Sayacını Devreye Al',
ENABLE_SHOWER_ALERT: 'Duş Alarmını Devreye Al',
TRIGGER_TIME: 'Tetikleme Zamanı',

View File

@@ -425,6 +425,11 @@ const SettingsApplication: FC = () => {
label={LL.UNDERCLOCK_CPU()}
disabled={saving}
/>
<BlockFormControlLabel
control={<Checkbox checked={data.boiler_heatingoff} onChange={updateFormValue} name="boiler_heatingoff" />}
label={LL.HEATINGOFF()}
disabled={saving}
/>
<Grid container spacing={0} direction="row" justifyContent="flex-start" alignItems="flex-start">
<BlockFormControlLabel
control={<Checkbox checked={data.shower_timer} onChange={updateFormValue} name="shower_timer" />}

View File

@@ -7,6 +7,7 @@ export interface Settings {
syslog_mark_interval: number;
syslog_host: string;
syslog_port: number;
boiler_heatingoff: boolean;
shower_timer: boolean;
shower_alert: boolean;
shower_alert_coldshot: number;

View File

@@ -347,7 +347,7 @@ __metadata:
languageName: node
linkType: hard
"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.22.15, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.7":
"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.7":
version: 7.22.15
resolution: "@babel/runtime@npm:7.22.15"
dependencies:
@@ -356,6 +356,15 @@ __metadata:
languageName: node
linkType: hard
"@babel/runtime@npm:^7.23.1":
version: 7.23.1
resolution: "@babel/runtime@npm:7.23.1"
dependencies:
regenerator-runtime: ^0.14.0
checksum: e57ab1436d4845efe67c3f76d578508bb584173690ecfeac105bc4e09d64b2aa6a53c1e03bca3c97cc238e5390a804e5a4ded211e6350243b735905ca45a4822
languageName: node
linkType: hard
"@babel/template@npm:^7.22.15, @babel/template@npm:^7.22.5":
version: 7.22.15
resolution: "@babel/template@npm:7.22.15"
@@ -760,10 +769,10 @@ __metadata:
languageName: node
linkType: hard
"@eslint/js@npm:8.50.0":
version: 8.50.0
resolution: "@eslint/js@npm:8.50.0"
checksum: 92cb0a823869e85f287bd172f14a6a20d7d65c3f4db886a0356a9efebfe8fe519e9ead84a5687bd18f45eca417bdcce96e3b83fe3feae8baf0f8f44d14073bae
"@eslint/js@npm:8.51.0":
version: 8.51.0
resolution: "@eslint/js@npm:8.51.0"
checksum: c126d15213d938c72062b8f04388c084ba778771f2409ce508aa4b78152bf57e442b4c7996f632577b642101da5b41df101aece775fcc213a3159f55bcc4bdee
languageName: node
linkType: hard
@@ -896,14 +905,14 @@ __metadata:
languageName: node
linkType: hard
"@mui/base@npm:5.0.0-beta.17":
version: 5.0.0-beta.17
resolution: "@mui/base@npm:5.0.0-beta.17"
"@mui/base@npm:5.0.0-beta.18":
version: 5.0.0-beta.18
resolution: "@mui/base@npm:5.0.0-beta.18"
dependencies:
"@babel/runtime": ^7.22.15
"@babel/runtime": ^7.23.1
"@floating-ui/react-dom": ^2.0.2
"@mui/types": ^7.2.4
"@mui/utils": ^5.14.11
"@mui/types": ^7.2.5
"@mui/utils": ^5.14.12
"@popperjs/core": ^2.11.8
clsx: ^2.0.0
prop-types: ^15.8.1
@@ -914,22 +923,22 @@ __metadata:
peerDependenciesMeta:
"@types/react":
optional: true
checksum: 7d0b67a279f9b63e88cd74426153fae129b3bbe670ccc06ba293357edb5466df01e8f953d86944a1ba500a8cf7cb2c2f3af0691b62b1a8e983dfbe19abc93717
checksum: 0d8f3743a69508b5259d7cd595acc3717f4ad60e1606bd7e1c58b82886ae74747151f6492a14f994ef5f88698fb02f95c84bf94a72dc71160f79965920f490bd
languageName: node
linkType: hard
"@mui/core-downloads-tracker@npm:^5.14.11":
version: 5.14.11
resolution: "@mui/core-downloads-tracker@npm:5.14.11"
checksum: 206e74991d1fb1ce83f915d8761d08e793462a98213f433368a085b4715292580efcd4df5368266d7da1a2f7cc851e6f3762db27f24958d214aedbae6e562abd
"@mui/core-downloads-tracker@npm:^5.14.12":
version: 5.14.12
resolution: "@mui/core-downloads-tracker@npm:5.14.12"
checksum: 0cfd7e96f39b585cf58f98476e21240f92cd0a3b2b70e027d5483e1a10593426a05573f1802e9d8dc7723c54ce322a9496b2765987aaf0d5ab37b55787bfa512
languageName: node
linkType: hard
"@mui/icons-material@npm:^5.14.11":
version: 5.14.11
resolution: "@mui/icons-material@npm:5.14.11"
"@mui/icons-material@npm:^5.14.12":
version: 5.14.12
resolution: "@mui/icons-material@npm:5.14.12"
dependencies:
"@babel/runtime": ^7.22.15
"@babel/runtime": ^7.23.1
peerDependencies:
"@mui/material": ^5.0.0
"@types/react": ^17.0.0 || ^18.0.0
@@ -937,20 +946,20 @@ __metadata:
peerDependenciesMeta:
"@types/react":
optional: true
checksum: f956b48b8ac83318a8e5e93a084f4f62ce82694e591a611e40d35c7c41d6395339bbde0416d0b80927e1ed3a051d4984076a090c2f8655046ac281bc5ca6466e
checksum: 06e63cdcb1ca9aa66d4d0c1d31d4e10135b9a342997e9e1da29cde529ceff5fb2471f20892769bf6163ae934d941e494bdd769a622c7d0ed7474728b4ce45e2b
languageName: node
linkType: hard
"@mui/material@npm:^5.14.11":
version: 5.14.11
resolution: "@mui/material@npm:5.14.11"
"@mui/material@npm:^5.14.12":
version: 5.14.12
resolution: "@mui/material@npm:5.14.12"
dependencies:
"@babel/runtime": ^7.22.15
"@mui/base": 5.0.0-beta.17
"@mui/core-downloads-tracker": ^5.14.11
"@mui/system": ^5.14.11
"@mui/types": ^7.2.4
"@mui/utils": ^5.14.11
"@babel/runtime": ^7.23.1
"@mui/base": 5.0.0-beta.18
"@mui/core-downloads-tracker": ^5.14.12
"@mui/system": ^5.14.12
"@mui/types": ^7.2.5
"@mui/utils": ^5.14.12
"@types/react-transition-group": ^4.4.6
clsx: ^2.0.0
csstype: ^3.1.2
@@ -970,16 +979,16 @@ __metadata:
optional: true
"@types/react":
optional: true
checksum: 53b5ba0732cee87c82c16a64c3bc145f1fd88ae014c5d1dab9f84c24a212375f75cf1cb44b0ceca80135e009ec4f1fe13a8a3ca2079a55bbe5a15f22a706429c
checksum: 65c868b1fc9b73e2afa17c12f4e9b410dccb9f5ac21b6d37f913811ec19e84c50bc724b40c67a51bbfeb699550ad10c7f8b265c2518d846dfe8056cb0203ec1c
languageName: node
linkType: hard
"@mui/private-theming@npm:^5.14.11":
version: 5.14.11
resolution: "@mui/private-theming@npm:5.14.11"
"@mui/private-theming@npm:^5.14.12":
version: 5.14.12
resolution: "@mui/private-theming@npm:5.14.12"
dependencies:
"@babel/runtime": ^7.22.15
"@mui/utils": ^5.14.11
"@babel/runtime": ^7.23.1
"@mui/utils": ^5.14.12
prop-types: ^15.8.1
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
@@ -987,15 +996,15 @@ __metadata:
peerDependenciesMeta:
"@types/react":
optional: true
checksum: e9b96b86355685a9dcbf95e617f3d86b33c502e005a5c6cd9b9cc64d102742b00b960560666d49b0ef0c4f4dac2d7a17f81ca6a745ff893b64e22515b53bd8fc
checksum: dbd24ffd3ff0d514c44b043c3fa34035403fdb9ccf459efb5c15fff127d6cc01471b7e748798c37c324ff20fd985f5923807271a5e3b857254c2e51a39ab8e4f
languageName: node
linkType: hard
"@mui/styled-engine@npm:^5.14.11":
version: 5.14.11
resolution: "@mui/styled-engine@npm:5.14.11"
"@mui/styled-engine@npm:^5.14.12":
version: 5.14.12
resolution: "@mui/styled-engine@npm:5.14.12"
dependencies:
"@babel/runtime": ^7.22.15
"@babel/runtime": ^7.23.1
"@emotion/cache": ^11.11.0
csstype: ^3.1.2
prop-types: ^15.8.1
@@ -1008,19 +1017,19 @@ __metadata:
optional: true
"@emotion/styled":
optional: true
checksum: b71cf3d9d0377bc5cdba01f4f72153147310b4d054fb10b6e5899b5307d05cc44770bcd8ba61069806c35bd367e5241328fbce7a7e91c7ec11e483fdb79fbc49
checksum: 55e4b7a0990a5f92248e2e1e622ca6306decb42757e8aa1abe2687e2b46b8ee1d7fbfcef402ea705ac286efaf085d1aed526af6aa346ae5048d8376bb696aa3d
languageName: node
linkType: hard
"@mui/system@npm:^5.14.11":
version: 5.14.11
resolution: "@mui/system@npm:5.14.11"
"@mui/system@npm:^5.14.12":
version: 5.14.12
resolution: "@mui/system@npm:5.14.12"
dependencies:
"@babel/runtime": ^7.22.15
"@mui/private-theming": ^5.14.11
"@mui/styled-engine": ^5.14.11
"@mui/types": ^7.2.4
"@mui/utils": ^5.14.11
"@babel/runtime": ^7.23.1
"@mui/private-theming": ^5.14.12
"@mui/styled-engine": ^5.14.12
"@mui/types": ^7.2.5
"@mui/utils": ^5.14.12
clsx: ^2.0.0
csstype: ^3.1.2
prop-types: ^15.8.1
@@ -1036,28 +1045,28 @@ __metadata:
optional: true
"@types/react":
optional: true
checksum: 3677dce2b1c010d5679f96a8c9cd54d803558b9ac881e4adec480ae7c3136b54895f5850131abf31b7d16493964a048d5261128332cecf2e3944c9dd58814bf1
checksum: 93f77c7a0673a116efe92d3f290886033278d915386c5aa29056c4a4557540db2865c4405140e669c7be801d6cba3dd3ddea2bb63bfc7eedd18e5b829a13ab80
languageName: node
linkType: hard
"@mui/types@npm:^7.2.4":
version: 7.2.4
resolution: "@mui/types@npm:7.2.4"
"@mui/types@npm:^7.2.5":
version: 7.2.5
resolution: "@mui/types@npm:7.2.5"
peerDependencies:
"@types/react": "*"
"@types/react": ^17.0.0 || ^18.0.0
peerDependenciesMeta:
"@types/react":
optional: true
checksum: 17411effd184eff34d6a1a55b2249c7e1ef195bb30c48154f0b16fdce428ff55be4ec5dde8b4a556c01eda2d34e3dcc18d925f8fdee606f5bc15f91167f0ecbc
checksum: df381cb230b1335d46315517da3535fa362bb53388a9d6e87964ee77991685442a6cb5a8f39cbd878d89176a152fe699aa6ecc681957ecf4695b85db0d2abe83
languageName: node
linkType: hard
"@mui/utils@npm:^5.14.11":
version: 5.14.11
resolution: "@mui/utils@npm:5.14.11"
"@mui/utils@npm:^5.14.12":
version: 5.14.12
resolution: "@mui/utils@npm:5.14.12"
dependencies:
"@babel/runtime": ^7.22.15
"@types/prop-types": ^15.7.5
"@babel/runtime": ^7.23.1
"@types/prop-types": ^15.7.7
prop-types: ^15.8.1
react-is: ^18.2.0
peerDependencies:
@@ -1066,7 +1075,7 @@ __metadata:
peerDependenciesMeta:
"@types/react":
optional: true
checksum: 21048b65e482e2f4279bf2b0e1619f026ed605bfe71818f6373b6362abc5062ea293ab7791691da1275de2d72b16cc5dafca70c2169359eca0b1c46c52aba879
checksum: 1204e6699ddc508a3d46ec86b0cb31abea59cf41ce3bcbff18f651731783ced0217b7274452662ec7bf4a230c9b1bebd184b34a8729e43ceb3a6a0e50e72bcdf
languageName: node
linkType: hard
@@ -1468,10 +1477,10 @@ __metadata:
languageName: node
linkType: hard
"@types/node@npm:^20.8.2":
version: 20.8.2
resolution: "@types/node@npm:20.8.2"
checksum: e9952db222dd3e1cca1107d1b2aaec4e93b4af8b4fc32b42dd4fac3719f98c14edb8c591829c972d2f6e2b527bbb34af53608f6a7973f4a7dbd1d3bc929bbe8d
"@types/node@npm:^20.8.3":
version: 20.8.3
resolution: "@types/node@npm:20.8.3"
checksum: 83511d7c310100f3fddbbf3a28f0049d60da6ffc4255231845b2e2189d7ff104727647d2b05d2a29b0af2ad61b529a4897056b3798e0cba027c629f3b13d7e82
languageName: node
linkType: hard
@@ -1482,19 +1491,26 @@ __metadata:
languageName: node
linkType: hard
"@types/prop-types@npm:*, @types/prop-types@npm:^15.7.5":
"@types/prop-types@npm:*":
version: 15.7.7
resolution: "@types/prop-types@npm:15.7.7"
checksum: 26d565ebae8c28dede71547d687367ce74eeccc645fdbef2d38478fe293996be24784fa6190586ba303ccd274aa94d8a631d36a5d9b8e0c08f5647ff3244d72c
languageName: node
linkType: hard
"@types/react-dom@npm:^18.2.8":
version: 18.2.8
resolution: "@types/react-dom@npm:18.2.8"
"@types/prop-types@npm:^15.7.7":
version: 15.7.8
resolution: "@types/prop-types@npm:15.7.8"
checksum: 706b3de6faa5c1a4763fc90069f25ddc54108e8b43e9724e22f510b103c418571bf14b34b241fcacd6875650959c8374af7f4633f80ec6e33e7525cb42ef6a30
languageName: node
linkType: hard
"@types/react-dom@npm:^18.2.11":
version: 18.2.11
resolution: "@types/react-dom@npm:18.2.11"
dependencies:
"@types/react": "*"
checksum: a2afa9f626751f2314ddbecb5503122912ff646827b1c81b7b230ce04083c43b71c82b02244526eb88c1795019033364a4afee0f7f719e46116a51ca8e287613
checksum: 3ba42df0dc1e8a26baed9668b9e2b5aea7c8e28289cf5baa656c1a07c6f83cd3c3360a374e00f96c01ce914950105d14d3ecd59be75cf215b8d3657b0b5d7785
languageName: node
linkType: hard
@@ -1539,14 +1555,14 @@ __metadata:
languageName: node
linkType: hard
"@types/react@npm:^18.2.24":
version: 18.2.24
resolution: "@types/react@npm:18.2.24"
"@types/react@npm:^18.2.25":
version: 18.2.25
resolution: "@types/react@npm:18.2.25"
dependencies:
"@types/prop-types": "*"
"@types/scheduler": "*"
csstype: ^3.0.2
checksum: a83c7ae0010b265012ef038e3e00e4708c27c523f0aa0631e44f934e9c5338a51b6db1901f91d8ba10d3dc292a3a200b2cb5e47430cde58fbf988969866fe75a
checksum: 17559ab8e9a3347b466eb782e21fe45f841e0e39d3f656e4711693cb6d193f948a9913c9e96b64bc4700eb24b34c47f15adbddcc39c596b4b3b79c99619b83bf
languageName: node
linkType: hard
@@ -1694,22 +1710,22 @@ __metadata:
"@babel/core": ^7.23.0
"@emotion/react": ^11.11.1
"@emotion/styled": ^11.11.0
"@mui/icons-material": ^5.14.11
"@mui/material": ^5.14.11
"@mui/icons-material": ^5.14.12
"@mui/material": ^5.14.12
"@preact/compat": ^17.1.2
"@preact/preset-vite": ^2.5.0
"@table-library/react-table-library": 4.1.7
"@types/babel__core": ^7
"@types/lodash-es": ^4.17.9
"@types/node": ^20.8.2
"@types/react": ^18.2.24
"@types/react-dom": ^18.2.8
"@types/node": ^20.8.3
"@types/react": ^18.2.25
"@types/react-dom": ^18.2.11
"@types/react-router-dom": ^5.3.3
"@typescript-eslint/eslint-plugin": ^6.7.4
"@typescript-eslint/parser": ^6.7.4
alova: ^2.13.1
async-validator: ^4.2.5
eslint: ^8.50.0
eslint: ^8.51.0
eslint-config-airbnb: ^19.0.4
eslint-config-airbnb-typescript: ^17.1.0
eslint-config-prettier: ^9.0.0
@@ -1738,7 +1754,7 @@ __metadata:
terser: ^5.21.0
typesafe-i18n: ^5.26.2
typescript: ^5.2.2
vite: ^4.4.10
vite: ^4.4.11
vite-plugin-svgr: ^4.1.0
vite-tsconfig-paths: ^4.2.1
languageName: unknown
@@ -3072,14 +3088,14 @@ eslint-plugin-prettier@alpha:
languageName: node
linkType: hard
"eslint@npm:^8.50.0":
version: 8.50.0
resolution: "eslint@npm:8.50.0"
"eslint@npm:^8.51.0":
version: 8.51.0
resolution: "eslint@npm:8.51.0"
dependencies:
"@eslint-community/eslint-utils": ^4.2.0
"@eslint-community/regexpp": ^4.6.1
"@eslint/eslintrc": ^2.1.2
"@eslint/js": 8.50.0
"@eslint/js": 8.51.0
"@humanwhocodes/config-array": ^0.11.11
"@humanwhocodes/module-importer": ^1.0.1
"@nodelib/fs.walk": ^1.2.8
@@ -3115,7 +3131,7 @@ eslint-plugin-prettier@alpha:
text-table: ^0.2.0
bin:
eslint: bin/eslint.js
checksum: 91629528cb240bc61b25480574d35cd54ed444cb61a70fa76f7d5ab26af2b637b94bf8fba94403c9052c1baa944a169b6ab9cc8070496e925f7eeef730ff9038
checksum: b534962c60cb2ad219d20a33f93c80e8ea5dd89f390f7bab44c80df32134db0a87e73e7ccd2928d87498c0595128ee29b4dba8a1f1abbbb3da9c3fb0418ecdcc
languageName: node
linkType: hard
@@ -6262,9 +6278,9 @@ react@latest:
languageName: node
linkType: hard
"vite@npm:^4.4.10":
version: 4.4.10
resolution: "vite@npm:4.4.10"
"vite@npm:^4.4.11":
version: 4.4.11
resolution: "vite@npm:4.4.11"
dependencies:
esbuild: ^0.18.10
fsevents: ~2.3.2
@@ -6298,7 +6314,7 @@ react@latest:
optional: true
bin:
vite: bin/vite.js
checksum: d1359f147eb84aad9922460848184f14295e76f335ab03f90a585886ff070e1a7c74996022b3bb07da0a3130c9829565b5556e6eb1d0db12a8aad26f3694d445
checksum: 550af0f67b600f603d0c129b74ac18dfa674d19e2b7dba28f4214d5edeba217a91fb7b8f4f47037aa0297f142d22360780a0a4533b27dbaacd2894030f61e5f4
languageName: node
linkType: hard

View File

@@ -61,6 +61,10 @@
#define EMSESP_DEFAULT_TRACELOG_RAW false
#endif
#ifndef EMSESP_DEFAULT_BOILER_HEATINGOFF
#define EMSESP_DEFAULT_BOILER_HEATINGOFF false
#endif
#ifndef EMSESP_DEFAULT_SHOWER_TIMER
#define EMSESP_DEFAULT_SHOWER_TIMER false
#endif

View File

@@ -42,7 +42,7 @@
{170, DeviceType::BOILER, "Logano GB212", DeviceFlags::EMS_DEVICE_FLAG_NONE},
{172, DeviceType::BOILER, "Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i", DeviceFlags::EMS_DEVICE_FLAG_HEATPUMP},
{173, DeviceType::BOILER, "Geo 5xx", DeviceFlags::EMS_DEVICE_FLAG_HEATPUMP},
{195, DeviceType::BOILER, "Condens 5000i/Greenstar 8000/GC9800IW", DeviceFlags::EMS_DEVICE_FLAG_NONE},
{195, DeviceType::BOILER, "Condens 5000i/Greenstar 8000/GC9800IW/GB192i.2", DeviceFlags::EMS_DEVICE_FLAG_NONE},
{203, DeviceType::BOILER, "Logamax U122/Cerapur", DeviceFlags::EMS_DEVICE_FLAG_NONE},
{206, DeviceType::BOILER, "Ecomline Excellent", DeviceFlags::EMS_DEVICE_FLAG_NONE},
{208, DeviceType::BOILER, "Logamax Plus/GB192/Condens GC9000/Greenstar ErP", DeviceFlags::EMS_DEVICE_FLAG_NONE},
@@ -81,7 +81,7 @@
{203, DeviceType::THERMOSTAT, "EasyControl CT200", DeviceFlags::EMS_DEVICE_FLAG_EASY | DeviceFlags::EMS_DEVICE_FLAG_NO_WRITE}, // 0x18, cannot write
// Thermostat - Buderus/Nefit/Bosch specific - 0x17 / 0x10 / 0x18 / 0x19-0x1B for hc2-4 / 0x38
{ 4, DeviceType::THERMOSTAT, "UI800", DeviceFlags::EMS_DEVICE_FLAG_RC300}, // 0x10
{ 4, DeviceType::THERMOSTAT, "UI800/BC400", DeviceFlags::EMS_DEVICE_FLAG_RC300}, // 0x10
{ 65, DeviceType::THERMOSTAT, "RC10", DeviceFlags::EMS_DEVICE_FLAG_RC20_N},// 0x17
{ 67, DeviceType::THERMOSTAT, "RC30", DeviceFlags::EMS_DEVICE_FLAG_RC30_N},// 0x10 - based on RC35
{ 77, DeviceType::THERMOSTAT, "RC20/Moduline 300", DeviceFlags::EMS_DEVICE_FLAG_RC20},// 0x17

View File

@@ -119,7 +119,12 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const
// reset is a command uses a dummy variable which is always zero, shown as blank, but provides command enum options
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &reset_, DeviceValueType::CMD, FL_(enum_reset), FL_(reset), DeviceValueUOM::NONE, MAKE_CF_CB(set_reset));
has_update(reset_, 0);
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA,
&forceHeatingOff_,
DeviceValueType::BOOL,
FL_(forceHeatingOff),
DeviceValueUOM::NONE,
MAKE_CF_CB(set_forceHeatingOff));
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &heatingActive_, DeviceValueType::BOOL, FL_(heatingActive), DeviceValueUOM::NONE);
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &tapwaterActive_, DeviceValueType::BOOL, FL_(tapwaterActive), DeviceValueUOM::NONE);
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &selFlowTemp_, DeviceValueType::UINT, FL_(selFlowTemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_flow_temp));
@@ -156,6 +161,18 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const
DeviceValueNumOp::DV_NUMOP_DIV10,
FL_(exhaustTemp),
DeviceValueUOM::DEGREES);
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA,
&heatblock_,
DeviceValueType::USHORT,
DeviceValueNumOp::DV_NUMOP_DIV10,
FL_(heatblock),
DeviceValueUOM::DEGREES);
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA,
&headertemp_,
DeviceValueType::USHORT,
DeviceValueNumOp::DV_NUMOP_DIV10,
FL_(headertemp),
DeviceValueUOM::DEGREES);
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &burnGas_, DeviceValueType::BOOL, FL_(burnGas), DeviceValueUOM::NONE);
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &burnGas2_, DeviceValueType::BOOL, FL_(burnGas2), DeviceValueUOM::NONE);
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &flameCurr_, DeviceValueType::USHORT, DeviceValueNumOp::DV_NUMOP_DIV10, FL_(flameCurr), DeviceValueUOM::UA);
@@ -951,6 +968,11 @@ void Boiler::check_active() {
EMSESP::tap_water_active(b); // let EMS-ESP know, used in the Shower class
}
if (!Helpers::hasValue(forceHeatingOff_, EMS_VALUE_BOOL)) {
EMSESP::webSettingsService.read([&](WebSettings & settings) { forceHeatingOff_ = (settings.boiler_heatingoff || selFlowTemp_ == 0) ? 1 : 0; });
has_update(&forceHeatingOff_);
}
// calculate energy for boiler 0x08 from stored modulation an time in units of 0.01 Wh
if (model() != EMS_DEVICE_FLAG_HEATPUMP) {
// remember values from last call
@@ -1158,6 +1180,8 @@ void Boiler::process_UBAMonitorFastPlus(std::shared_ptr<const Telegram> telegram
has_update(telegram, sysPress_, 21);
//has_update(telegram, temperatur_, 13); // unknown temperature
has_update(telegram, heatblock_, 23); // see #1317
has_update(telegram, headertemp_, 25); // see #1317
//has_update(telegram, temperatur_, 27); // unknown temperature
has_update(telegram, exhaustTemp_, 31);
@@ -1206,6 +1230,11 @@ void Boiler::process_UBAMonitorSlow(std::shared_ptr<const Telegram> telegram) {
has_update(telegram, burn2WorkMin_, 16, 3); // force to 3 bytes
has_update(telegram, heatWorkMin_, 19, 3); // force to 3 bytes
has_update(telegram, heatStarts_, 22, 3); // force to 3 bytes
if (forceHeatingOff_ == EMS_VALUE_BOOL_ON && telegram->dest == 0) {
uint8_t data[] = {0, 0, 0, 0};
write_command(EMS_TYPE_UBASetPoints, 0, data, sizeof(data), 0);
}
}
/*
@@ -1236,6 +1265,11 @@ void Boiler::process_UBAMonitorSlowPlus(std::shared_ptr<const Telegram> telegram
has_update(telegram, heatStarts_, 22, 3); // force to 3 bytes
has_update(telegram, heatingPumpMod_, 25);
// temperature measurements at 4, see #620
if (forceHeatingOff_ == EMS_VALUE_BOOL_ON && telegram->dest == 0) {
uint8_t data[] = {0, 0, 0, 0};
write_command(EMS_TYPE_UBASetPoints, 0, data, sizeof(data), 0);
}
}
/*
@@ -1485,6 +1519,12 @@ void Boiler::process_UBASetPoints(std::shared_ptr<const Telegram> telegram) {
has_update(telegram, setFlowTemp_, 0); // boiler set temp from thermostat
has_update(telegram, setBurnPow_, 1); // max burner power in %
has_update(telegram, wwSetPumpPower_, 2); // ww pump speed/power?
// overwrite other settings on receive?
if (forceHeatingOff_ == EMS_VALUE_BOOL_ON && telegram->dest == 0x08) {
uint8_t data[] = {0, 0, 0, 0};
write_command(EMS_TYPE_UBASetPoints, 0, data, sizeof(data), 0);
}
}
#pragma GCC diagnostic push
@@ -2035,9 +2075,6 @@ bool Boiler::set_ww_chargeOptimization(const char * value, const int8_t id) {
return true;
}
// set dhw max power
bool Boiler::set_ww_maxpower(const char * value, const int8_t id) {
int v;
@@ -2346,12 +2383,10 @@ bool Boiler::set_reset(const char * value, const int8_t id) {
} else if (num == 1) {
// LOG_INFO("Reset boiler maintenance message");
write_command(0x05, 0x08, 0xFF, 0x1C);
has_update(&reset_);
return true;
} else if (num == 2) {
// LOG_INFO("Reset boiler error message");
write_command(0x05, 0x00, 0x5A); // error reset
has_update(&reset_);
return true;
}
return false;
@@ -2754,6 +2789,22 @@ bool Boiler::set_wwAltOpPrio(const char * value, const int8_t id) {
return false;
}
bool Boiler::set_forceHeatingOff(const char * value, const int8_t id) {
bool v;
if (Helpers::value2bool(value, v)) {
has_update(forceHeatingOff_, v);
if (!v && Helpers::hasValue(heatingTemp_)) {
uint8_t data[] = {heatingTemp_,
(Helpers::hasValue(burnMaxPower_) ? burnMaxPower_ : (uint8_t)100),
(Helpers::hasValue(pumpModMax_) ? pumpModMax_ : (uint8_t)0),
0};
write_command(EMS_TYPE_UBASetPoints, 0, data, sizeof(data), 0);
}
return true;
}
return false;
}
// energy counters. Setting an invalid value does not update, but trigger a store.
bool Boiler::set_nrgHeat(const char * value, const int8_t id) {
float v;

View File

@@ -88,7 +88,6 @@ class Boiler : public EMSdevice {
uint32_t wwWorkM_; // DHW minutes
int8_t wwHystOn_;
int8_t wwHystOff_;
uint8_t wwTapActivated_; // maintenance-mode to switch DHW off
uint16_t wwMixerTemp_; // mixing temperature
uint16_t wwCylMiddleTemp_; // Cyl middle temperature (TS3)
uint16_t wwSolarTemp_;
@@ -96,6 +95,10 @@ class Boiler : public EMSdevice {
uint8_t wwAltOpPrioHeat_; // alternating operation, prioritize heat time
uint8_t wwAltOpPrioWw_; // alternating operation, prioritize dhw time
// special function
uint8_t forceHeatingOff_;
uint8_t wwTapActivated_; // maintenance-mode to switch DHW off
// main
uint8_t reset_; // for reset command
uint8_t heatingActive_; // Central heating is on/off
@@ -145,6 +148,8 @@ class Boiler : public EMSdevice {
uint16_t serviceCodeNumber_; // error/service code
uint8_t emergencyOps_;
uint8_t emergencyTemp_;
uint16_t headertemp_; // see #1317
uint16_t heatblock_; // see #1317
// info
uint32_t upTimeControl_; // Operating time control
@@ -468,6 +473,8 @@ class Boiler : public EMSdevice {
inline bool set_wwAltOpPrioWw(const char * value, const int8_t id) {
return set_wwAltOpPrio(value, 3);
}
bool set_forceHeatingOff(const char * value, const int8_t id);
/*
bool set_hybridStrategy(const char * value, const int8_t id);
bool set_switchOverTemp(const char * value, const int8_t id);

View File

@@ -283,6 +283,7 @@ MAKE_TRANSLATION(haclimate, "haclimate", "Discovery current room temperature", "
// Entity translations: tag, mqtt, en, de, nl, sv, pl, no, fr, tr, it
// Boiler
MAKE_TRANSLATION(forceHeatingOff, "heatingoff", "force heating off", "Heizen abschalten", "", "", "", "", "", "", "") // TODO translate
MAKE_TRANSLATION(wwtapactivated, "wwtapactivated", "turn on/off", "Durchlauferhitzer aktiv", "zet aan/uit", "på/av", "system przygotowywania", "Varmtvann active", "ecs activée", "aç/kapa", "commuta on/off")
MAKE_TRANSLATION(reset, "reset", "reset", "Reset", "Reset", "Nollställ", "kasowanie komunikatu", "nullstill", "reset", "Sıfırla", "Reset")
MAKE_TRANSLATION(oilPreHeat, "oilpreheat", "oil preheating", "Ölvorwärmung", "Olie voorverwarming", "Förvärmning olja", "podgrzewanie oleju", "oljeforvarming", "préchauffage de l'huile", "Yakıt Ön ısıtma devrede", "preriscaldamento olio")
@@ -336,6 +337,8 @@ MAKE_TRANSLATION(maintenanceTime, "maintenancetime", "time to next maintenance",
MAKE_TRANSLATION(emergencyOps, "emergencyops", "emergency operation", "Notoperation", "Noodoperatie", "Nöddrift", "praca w trybie awaryjnym", "nøddrift", "opération d'urgence", "acil durum çalışması", "operazione di emergenza")
MAKE_TRANSLATION(emergencyTemp, "emergencytemp", "emergency temperature", "Nottemperatur", "Noodtemperatuur", "Nöddrift temperatur", "temperatura w trybie awaryjnym", "nødtemperatur", "température d'urgence", "acil durum sıcaklığı", "temperatura di emergenza")
MAKE_TRANSLATION(pumpMode, "pumpmode", "boiler pump mode", "Kesselpumpen Modus", "Ketelpomp modus", "", "tryb pracy pompy kotła", "pumpemodus", "", "pompa modu", "modalità pompa caldaia") // TODO translate
MAKE_TRANSLATION(headertemp, "headertemp", "low loss header", "Hydr. Weiche", "open verdeler", "", "", "", " bouteille de déc. hydr.", "isı bloğu gidiş suyu sıc.", "comp. idr.") // TODO translate
MAKE_TRANSLATION(heatblock, "heatblock", "heating block", "Wärmezelle", "Aanvoertemp. warmtecel", "", "", "", "départ corps de chauffe", "Hid.denge kabı sıcaklığı", "mandata scamb. pr.") // TODO translate
// heatpump/compress specific
MAKE_TRANSLATION(upTimeControl, "uptimecontrol", "total operating time heat", "Betriebszeit Heizen gesamt", "Totale bedrijfstijd", "Total tid uppvärmning", "łączny czas generowania ciepła", "total driftstid", "durée totale de fonctionnement chauffage", "ısınma toplam işletme süresi", "Tempo di funzionamento totale riscaldamento")

View File

@@ -46,6 +46,7 @@ void WebSettings::read(WebSettings & settings, JsonObject & root) {
root["syslog_mark_interval"] = settings.syslog_mark_interval;
root["syslog_host"] = settings.syslog_host;
root["syslog_port"] = settings.syslog_port;
root["boiler_heatingoff"] = settings.boiler_heatingoff;
root["shower_timer"] = settings.shower_timer;
root["shower_alert"] = settings.shower_alert;
root["shower_alert_coldshot"] = settings.shower_alert_coldshot;
@@ -275,6 +276,7 @@ StateUpdateResult WebSettings::update(JsonObject & root, WebSettings & settings)
settings.notoken_api = root["notoken_api"] | EMSESP_DEFAULT_NOTOKEN_API;
settings.solar_maxflow = root["solar_maxflow"] | EMSESP_DEFAULT_SOLAR_MAXFLOW;
settings.boiler_heatingoff = root["boiler_heatingoff"] | EMSESP_DEFAULT_BOILER_HEATINGOFF;
settings.fahrenheit = root["fahrenheit"];
EMSESP::system_.fahrenheit(settings.fahrenheit);

View File

@@ -33,6 +33,7 @@ class WebSettings {
String locale;
uint8_t tx_mode;
uint8_t ems_bus_id;
bool boiler_heatingoff;
bool shower_timer;
bool shower_alert;
uint8_t shower_alert_trigger;