mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2026-03-15 06:06:31 +03:00
Merge pull request #1639 from MichaelDvP/dev2
merge dev changes/fixes, new entities, env for N32R8 chip, fix custom board profile on boot
This commit is contained in:
@@ -22,6 +22,11 @@
|
||||
- mixer MM100 telegram 0x2CC [#1554](https://github.com/emsesp/EMS-ESP32/issues/1554)
|
||||
- boiler hpSetDiffPressure [#1563](https://github.com/emsesp/EMS-ESP32/issues/1563)
|
||||
- custom variables [#1423](https://github.com/emsesp/EMS-ESP32/issues/1423)
|
||||
- thermostat second dhw circuit [#1634](https://github.com/emsesp/EMS-ESP32/issues/1634)
|
||||
- heatpump dhw energy meter [#1609](https://github.com/emsesp/EMS-ESP32/issues/1609)
|
||||
- remote thermostat emulation for RC100H, RC200 and FB10 [#1287](https://github.com/emsesp/EMS-ESP32/discussions/1287), [#1602](https://github.com/emsesp/EMS-ESP32/discussions/1602), [#1551](https://github.com/emsesp/EMS-ESP32/discussions/1551)
|
||||
- env and partitions for DevKitC-1-N32R8 [#1635](https://github.com/emsesp/EMS-ESP32/discussions/1635)
|
||||
- heatpump dhw stop temperatures [#1624](https://github.com/emsesp/EMS-ESP32/issues/1624)
|
||||
|
||||
## Fixed
|
||||
|
||||
@@ -35,6 +40,8 @@
|
||||
- Wifi Tx Power not adjusted [#1614](https://github.com/emsesp/EMS-ESP32/issues/1614)
|
||||
- MQTT discovery of custom entity doesn't consider type of data [#1587](https://github.com/emsesp/EMS-ESP32/issues/1587)
|
||||
- WiFi TxPower wasn't correctly used. Added an 'Auto' setting, which is the default.
|
||||
- MQTT heap check [#622](https://github.com/emsesp/EMS-ESP32/issues/1622)
|
||||
- Slovak language fix [#1636](https://github.com/emsesp/EMS-ESP32/discussions/1636)
|
||||
|
||||
## Changed
|
||||
|
||||
@@ -45,3 +52,4 @@
|
||||
- Length of mqtt Broker adress [#1619](https://github.com/emsesp/EMS-ESP32/issues/1619)
|
||||
- C++ optimizations - see <https://github.com/emsesp/EMS-ESP32/pull/1615>
|
||||
- Send MQTT heartbeat immediately after connection [#1628](https://github.com/emsesp/EMS-ESP32/issues/1628)
|
||||
- 16MB partitions with second nvs, larger FS, Coredump
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
# Name, Type, SubType, Offset, Size, Flags
|
||||
nvs, data, nvs, 0x9000, 0x035000,
|
||||
nvs, data, nvs, 0x9000, 0x005000,
|
||||
otadata, data, ota, , 0x002000,
|
||||
app0, app, ota_0, , 0x6E0000,
|
||||
app1, app, ota_1, , 0x6E0000,
|
||||
spiffs, data, spiffs, , 0x200000,
|
||||
app0, app, ota_0, , 0x5D0000,
|
||||
app1, app, ota_1, , 0x5D0000,
|
||||
nvs1, data, nvs, , 0x040000,
|
||||
spiffs, data, spiffs, , 0x400000,
|
||||
coredump, data, coredump,, 0x010000,
|
||||
|
8
esp32_partition_32M.csv
Normal file
8
esp32_partition_32M.csv
Normal file
@@ -0,0 +1,8 @@
|
||||
# Name, Type, SubType, Offset, Size, Flags
|
||||
nvs, data, nvs, 0x9000, 0x005000,
|
||||
otadata, data, ota, , 0x002000,
|
||||
app0, app, ota_0, , 0xDD0000,
|
||||
app1, app, ota_1, , 0xDD0000,
|
||||
nvs1, data, nvs, , 0x040000,
|
||||
spiffs, data, spiffs, , 0x400000,
|
||||
coredump, data, coredump,, 0x010000,
|
||||
|
@@ -26,13 +26,13 @@
|
||||
"@babel/core": "^7.23.9",
|
||||
"@emotion/react": "^11.11.3",
|
||||
"@emotion/styled": "^11.11.0",
|
||||
"@mui/icons-material": "^5.15.10",
|
||||
"@mui/material": "^5.15.10",
|
||||
"@mui/icons-material": "^5.15.11",
|
||||
"@mui/material": "^5.15.11",
|
||||
"@table-library/react-table-library": "4.1.7",
|
||||
"@types/imagemin": "^8.0.5",
|
||||
"@types/lodash-es": "^4.17.12",
|
||||
"@types/node": "^20.11.20",
|
||||
"@types/react": "^18.2.57",
|
||||
"@types/react": "^18.2.58",
|
||||
"@types/react-dom": "^18.2.19",
|
||||
"@types/react-router-dom": "^5.3.3",
|
||||
"alova": "^2.17.0",
|
||||
@@ -57,7 +57,7 @@
|
||||
"@typescript-eslint/eslint-plugin": "^7.0.2",
|
||||
"@typescript-eslint/parser": "^7.0.2",
|
||||
"concurrently": "^8.2.2",
|
||||
"eslint": "^8.56.0",
|
||||
"eslint": "^8.57.0",
|
||||
"eslint-config-prettier": "^9.1.0",
|
||||
"eslint-import-resolver-typescript": "^3.6.1",
|
||||
"eslint-plugin-autofix": "^1.1.0",
|
||||
@@ -69,7 +69,7 @@
|
||||
"preact": "^10.19.6",
|
||||
"prettier": "^3.2.5",
|
||||
"rollup-plugin-visualizer": "^5.12.0",
|
||||
"terser": "^5.27.2",
|
||||
"terser": "^5.28.1",
|
||||
"vite": "^5.1.4",
|
||||
"vite-plugin-imagemin": "^0.6.1",
|
||||
"vite-tsconfig-paths": "^4.3.1"
|
||||
|
||||
@@ -95,13 +95,13 @@ const sk: Translation = {
|
||||
'API volania',
|
||||
'Syslog správy'
|
||||
],
|
||||
NUM_DEVICES: '{num} Zariadenia{{s}}',
|
||||
NUM_TEMP_SENSORS: '{num} Teplotné snímače{{s}}',
|
||||
NUM_ANALOG_SENSORS: '{num} Analógové snímače{{s}}',
|
||||
NUM_DAYS: '{num} dní{{s}}',
|
||||
NUM_SECONDS: '{num} sekúnd{{s}}',
|
||||
NUM_HOURS: '{num} hodín{{s}}',
|
||||
NUM_MINUTES: '{num} minút{{s}}',
|
||||
NUM_DEVICES: '{num} Zariaden{{í|ie|ia|ia|í}}',
|
||||
NUM_TEMP_SENSORS: '{num} Teplotn{{ých|ý|é|é|ých}} snímač{{ov||e|e|ov}}',
|
||||
NUM_ANALOG_SENSORS: '{num} Analogov{ých|ý|é|é|ých}} snímač{{ov||e|e|ov}}',
|
||||
NUM_DAYS: '{num} d{{ní|eň|ní|ní|ní}}',
|
||||
NUM_SECONDS: '{num} sek{{únd|unda|undy|undy|únd}}',
|
||||
NUM_HOURS: '{num} hod{{ín|ina|iny|iny|ín}}',
|
||||
NUM_MINUTES: '{num} minú{{t|ta|ty|ty|t}}',
|
||||
APPLICATION_SETTINGS: 'Nastavenia aplikácie',
|
||||
CUSTOMIZATIONS: 'Prispôsobenia',
|
||||
APPLICATION_RESTARTING: 'EMS-ESP sa reštartuje',
|
||||
|
||||
@@ -856,10 +856,10 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@eslint/js@npm:8.56.0":
|
||||
version: 8.56.0
|
||||
resolution: "@eslint/js@npm:8.56.0"
|
||||
checksum: 10/97a4b5ccf7e24f4d205a1fb0f21cdcd610348ecf685f6798a48dd41ba443f2c1eedd3050ff5a0b8f30b8cf6501ab512aa9b76e531db15e59c9ebaa41f3162e37
|
||||
"@eslint/js@npm:8.57.0":
|
||||
version: 8.57.0
|
||||
resolution: "@eslint/js@npm:8.57.0"
|
||||
checksum: 10/3c501ce8a997cf6cbbaf4ed358af5492875e3550c19b9621413b82caa9ae5382c584b0efa79835639e6e0ddaa568caf3499318e5bdab68643ef4199dce5eb0a0
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -901,14 +901,14 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@humanwhocodes/config-array@npm:^0.11.13":
|
||||
version: 0.11.13
|
||||
resolution: "@humanwhocodes/config-array@npm:0.11.13"
|
||||
"@humanwhocodes/config-array@npm:^0.11.14":
|
||||
version: 0.11.14
|
||||
resolution: "@humanwhocodes/config-array@npm:0.11.14"
|
||||
dependencies:
|
||||
"@humanwhocodes/object-schema": "npm:^2.0.1"
|
||||
debug: "npm:^4.1.1"
|
||||
"@humanwhocodes/object-schema": "npm:^2.0.2"
|
||||
debug: "npm:^4.3.1"
|
||||
minimatch: "npm:^3.0.5"
|
||||
checksum: 10/9f655e1df7efa5a86822cd149ca5cef57240bb8ffd728f0c07cc682cc0a15c6bdce68425fbfd58f9b3e8b16f79b3fd8cb1e96b10c434c9a76f20b2a89f213272
|
||||
checksum: 10/3ffb24ecdfab64014a230e127118d50a1a04d11080cbb748bc21629393d100850496456bbcb4e8c438957fe0934430d731042f1264d6a167b62d32fc2863580a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -919,10 +919,10 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@humanwhocodes/object-schema@npm:^2.0.1":
|
||||
version: 2.0.1
|
||||
resolution: "@humanwhocodes/object-schema@npm:2.0.1"
|
||||
checksum: 10/dbddfd0465aecf92ed845ec30d06dba3f7bb2496d544b33b53dac7abc40370c0e46b8787b268d24a366730d5eeb5336ac88967232072a183905ee4abf7df4dab
|
||||
"@humanwhocodes/object-schema@npm:^2.0.2":
|
||||
version: 2.0.2
|
||||
resolution: "@humanwhocodes/object-schema@npm:2.0.2"
|
||||
checksum: 10/ef915e3e2f34652f3d383b28a9a99cfea476fa991482370889ab14aac8ecd2b38d47cc21932526c6d949da0daf4a4a6bf629d30f41b0caca25e146819cbfa70e
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -992,14 +992,14 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@mui/base@npm:5.0.0-beta.36":
|
||||
version: 5.0.0-beta.36
|
||||
resolution: "@mui/base@npm:5.0.0-beta.36"
|
||||
"@mui/base@npm:5.0.0-beta.37":
|
||||
version: 5.0.0-beta.37
|
||||
resolution: "@mui/base@npm:5.0.0-beta.37"
|
||||
dependencies:
|
||||
"@babel/runtime": "npm:^7.23.9"
|
||||
"@floating-ui/react-dom": "npm:^2.0.8"
|
||||
"@mui/types": "npm:^7.2.13"
|
||||
"@mui/utils": "npm:^5.15.9"
|
||||
"@mui/utils": "npm:^5.15.11"
|
||||
"@popperjs/core": "npm:^2.11.8"
|
||||
clsx: "npm:^2.1.0"
|
||||
prop-types: "npm:^15.8.1"
|
||||
@@ -1010,20 +1010,20 @@ __metadata:
|
||||
peerDependenciesMeta:
|
||||
"@types/react":
|
||||
optional: true
|
||||
checksum: 10/32be203df3ffa2e36095d37295adae7870489fb2ed82a156c10f9ea4a51c3d06b0c3415e8503b110aa2ee98d3d86d6c1c50e190e85130aa1c1db694afa56ab7a
|
||||
checksum: 10/28ac58e46ecf7d43fec77f501604e16687df499c82ace9cb32228623cf2549ebf2b74815aacae2920ccb2feed5402c68ad8c599b1bdc717fa5c4caaa408e9c0a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@mui/core-downloads-tracker@npm:^5.15.10":
|
||||
version: 5.15.10
|
||||
resolution: "@mui/core-downloads-tracker@npm:5.15.10"
|
||||
checksum: 10/aeb16b31f60c08cc03585fedadceadd54aa48dda394fb945ab885f884c1b1692efb72309465641b6ca2367bd53d5fdce15f189d4691f42b59206622ffb2d6f0f
|
||||
"@mui/core-downloads-tracker@npm:^5.15.11":
|
||||
version: 5.15.11
|
||||
resolution: "@mui/core-downloads-tracker@npm:5.15.11"
|
||||
checksum: 10/7b6b9dc9fbe63e80cd0de85db73eb397031c8e60fbfc4fcd9d6c396f9222c1467bfb2bbe817973e6090576a0016fb0189b4a8ccee3e42210ace99efb5ace52d3
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@mui/icons-material@npm:^5.15.10":
|
||||
version: 5.15.10
|
||||
resolution: "@mui/icons-material@npm:5.15.10"
|
||||
"@mui/icons-material@npm:^5.15.11":
|
||||
version: 5.15.11
|
||||
resolution: "@mui/icons-material@npm:5.15.11"
|
||||
dependencies:
|
||||
"@babel/runtime": "npm:^7.23.9"
|
||||
peerDependencies:
|
||||
@@ -1033,20 +1033,20 @@ __metadata:
|
||||
peerDependenciesMeta:
|
||||
"@types/react":
|
||||
optional: true
|
||||
checksum: 10/ce22c02dc7ed960a21f8d5ea7c4d4fc03d9f71e8a26ced02f75da1ffd6c768e6fa0682a308a03be53bffc2325a5aaf68be69f9e192b0a57c6752f7548e5b9045
|
||||
checksum: 10/2b337aa7c39e8e75cffd92742aaf7e1a8196597b9e3285322cd3aa3dc7c7f0142ac00d768affaf3a8c7eeab7fd3535de70419a6a8b599fdfa00d65323b6982f8
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@mui/material@npm:^5.15.10":
|
||||
version: 5.15.10
|
||||
resolution: "@mui/material@npm:5.15.10"
|
||||
"@mui/material@npm:^5.15.11":
|
||||
version: 5.15.11
|
||||
resolution: "@mui/material@npm:5.15.11"
|
||||
dependencies:
|
||||
"@babel/runtime": "npm:^7.23.9"
|
||||
"@mui/base": "npm:5.0.0-beta.36"
|
||||
"@mui/core-downloads-tracker": "npm:^5.15.10"
|
||||
"@mui/system": "npm:^5.15.9"
|
||||
"@mui/base": "npm:5.0.0-beta.37"
|
||||
"@mui/core-downloads-tracker": "npm:^5.15.11"
|
||||
"@mui/system": "npm:^5.15.11"
|
||||
"@mui/types": "npm:^7.2.13"
|
||||
"@mui/utils": "npm:^5.15.9"
|
||||
"@mui/utils": "npm:^5.15.11"
|
||||
"@types/react-transition-group": "npm:^4.4.10"
|
||||
clsx: "npm:^2.1.0"
|
||||
csstype: "npm:^3.1.3"
|
||||
@@ -1066,16 +1066,16 @@ __metadata:
|
||||
optional: true
|
||||
"@types/react":
|
||||
optional: true
|
||||
checksum: 10/a88ad1287a905549ed516742544c8ba32f0cd7e1b184564efc8ceba5f43060d37b5cd113db605f1bb5be6c74cbdad7321d3fd7df410ba33d55548cf7c5bbf8d0
|
||||
checksum: 10/1f95143a9704829179c504404449994cd4c5bcdb6ea536bd15a85113a92874c6ecdbd2cf18df46a2982d98c6855e2d1a9198ea53a059abb02a7411eaa1c630ec
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@mui/private-theming@npm:^5.15.9":
|
||||
version: 5.15.9
|
||||
resolution: "@mui/private-theming@npm:5.15.9"
|
||||
"@mui/private-theming@npm:^5.15.11":
|
||||
version: 5.15.11
|
||||
resolution: "@mui/private-theming@npm:5.15.11"
|
||||
dependencies:
|
||||
"@babel/runtime": "npm:^7.23.9"
|
||||
"@mui/utils": "npm:^5.15.9"
|
||||
"@mui/utils": "npm:^5.15.11"
|
||||
prop-types: "npm:^15.8.1"
|
||||
peerDependencies:
|
||||
"@types/react": ^17.0.0 || ^18.0.0
|
||||
@@ -1083,13 +1083,13 @@ __metadata:
|
||||
peerDependenciesMeta:
|
||||
"@types/react":
|
||||
optional: true
|
||||
checksum: 10/ca6d0643289eb14e127d46a516311807a7935994dcbb14a108e756ba9fe39bf08e2fe2f2bd75cec5a71817f3b2fe74de2f3322b67931539ced5e2f13aa9e2326
|
||||
checksum: 10/ec185f586586bb1460cf93ebe82cf7bc0b62822d70e5836d95fa50e1525ce84c32b937ce005a32226bc9bab45c3763cb2865c503eac7c96bb98a58498b2d64f5
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@mui/styled-engine@npm:^5.15.9":
|
||||
version: 5.15.9
|
||||
resolution: "@mui/styled-engine@npm:5.15.9"
|
||||
"@mui/styled-engine@npm:^5.15.11":
|
||||
version: 5.15.11
|
||||
resolution: "@mui/styled-engine@npm:5.15.11"
|
||||
dependencies:
|
||||
"@babel/runtime": "npm:^7.23.9"
|
||||
"@emotion/cache": "npm:^11.11.0"
|
||||
@@ -1104,19 +1104,19 @@ __metadata:
|
||||
optional: true
|
||||
"@emotion/styled":
|
||||
optional: true
|
||||
checksum: 10/ddf0bda85507419829c8fe3735b5b05d9544fea0f954de574a9841d46d14dd750050834aae5b1f0b676a1dc5fe1278c22fb16415df7d6202d6aa49fea12d59de
|
||||
checksum: 10/fedbb9891abd633e5072d30aae7405cec9e5e22ac63c9e117c49ddb66e86ec7baaed58f934efc7847ea86cc856a8c9a9ec5a08cd0072a7850184321a968704ad
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@mui/system@npm:^5.15.9":
|
||||
version: 5.15.9
|
||||
resolution: "@mui/system@npm:5.15.9"
|
||||
"@mui/system@npm:^5.15.11":
|
||||
version: 5.15.11
|
||||
resolution: "@mui/system@npm:5.15.11"
|
||||
dependencies:
|
||||
"@babel/runtime": "npm:^7.23.9"
|
||||
"@mui/private-theming": "npm:^5.15.9"
|
||||
"@mui/styled-engine": "npm:^5.15.9"
|
||||
"@mui/private-theming": "npm:^5.15.11"
|
||||
"@mui/styled-engine": "npm:^5.15.11"
|
||||
"@mui/types": "npm:^7.2.13"
|
||||
"@mui/utils": "npm:^5.15.9"
|
||||
"@mui/utils": "npm:^5.15.11"
|
||||
clsx: "npm:^2.1.0"
|
||||
csstype: "npm:^3.1.3"
|
||||
prop-types: "npm:^15.8.1"
|
||||
@@ -1132,7 +1132,7 @@ __metadata:
|
||||
optional: true
|
||||
"@types/react":
|
||||
optional: true
|
||||
checksum: 10/85c2d18f3846cc1554db48071606a52f22186cf4ac1b0be748b275a8e200c12528c477acb794b8eb545e4603e5b8566186ea022eb09b5b1a3668554dd0ea9c7d
|
||||
checksum: 10/004e64a558e6d75ab0036f65555459f0769b9ab8b50aecd583a9a41a0db5358168c3bd9f4146848dec4ececfedd6f5af11f519ba3f7bd2e28224f5487a1eef81
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -1148,9 +1148,9 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@mui/utils@npm:^5.15.9":
|
||||
version: 5.15.9
|
||||
resolution: "@mui/utils@npm:5.15.9"
|
||||
"@mui/utils@npm:^5.15.11":
|
||||
version: 5.15.11
|
||||
resolution: "@mui/utils@npm:5.15.11"
|
||||
dependencies:
|
||||
"@babel/runtime": "npm:^7.23.9"
|
||||
"@types/prop-types": "npm:^15.7.11"
|
||||
@@ -1162,7 +1162,7 @@ __metadata:
|
||||
peerDependenciesMeta:
|
||||
"@types/react":
|
||||
optional: true
|
||||
checksum: 10/8628e4402856427bbc1ee3628afff596149ae3067ca6d62a1890d7b15217248fbeb65ec9360afc6963b330c08945fe6452deef2849d8ca35d894b42746cdad77
|
||||
checksum: 10/a3c3862a93eb646ddd212c19dee44bef4bee9232fc463a0b27ffc79b0e41a6c4b09b152953156c7ca458b1856dddd0cc4febc078e2151574e3df62868504fb59
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -1670,14 +1670,14 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/react@npm:^18.2.57":
|
||||
version: 18.2.57
|
||||
resolution: "@types/react@npm:18.2.57"
|
||||
"@types/react@npm:^18.2.58":
|
||||
version: 18.2.58
|
||||
resolution: "@types/react@npm:18.2.58"
|
||||
dependencies:
|
||||
"@types/prop-types": "npm:*"
|
||||
"@types/scheduler": "npm:*"
|
||||
csstype: "npm:^3.0.2"
|
||||
checksum: 10/beee45a8ee48862fb5101f6ebdd89ccc20c5a6df29dcd2315560bc3b57ea3af8d09a8e9bb1c58063a70f9010e0d2c7bd300819438e2ca62810285c3d7275ab5a
|
||||
checksum: 10/ec5e1a7d8acc55551efec7a3d63441d24c7e94b66bf8039944541a8408048668e51b7b4b0b6e8303cdea271b7c6da242cdc7bb8ca501eedf822956edbdbfc67e
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -1851,15 +1851,15 @@ __metadata:
|
||||
"@babel/core": "npm:^7.23.9"
|
||||
"@emotion/react": "npm:^11.11.3"
|
||||
"@emotion/styled": "npm:^11.11.0"
|
||||
"@mui/icons-material": "npm:^5.15.10"
|
||||
"@mui/material": "npm:^5.15.10"
|
||||
"@mui/icons-material": "npm:^5.15.11"
|
||||
"@mui/material": "npm:^5.15.11"
|
||||
"@preact/compat": "npm:^17.1.2"
|
||||
"@preact/preset-vite": "npm:^2.8.1"
|
||||
"@table-library/react-table-library": "npm:4.1.7"
|
||||
"@types/imagemin": "npm:^8.0.5"
|
||||
"@types/lodash-es": "npm:^4.17.12"
|
||||
"@types/node": "npm:^20.11.20"
|
||||
"@types/react": "npm:^18.2.57"
|
||||
"@types/react": "npm:^18.2.58"
|
||||
"@types/react-dom": "npm:^18.2.19"
|
||||
"@types/react-router-dom": "npm:^5.3.3"
|
||||
"@typescript-eslint/eslint-plugin": "npm:^7.0.2"
|
||||
@@ -1867,7 +1867,7 @@ __metadata:
|
||||
alova: "npm:^2.17.0"
|
||||
async-validator: "npm:^4.2.5"
|
||||
concurrently: "npm:^8.2.2"
|
||||
eslint: "npm:^8.56.0"
|
||||
eslint: "npm:^8.57.0"
|
||||
eslint-config-prettier: "npm:^9.1.0"
|
||||
eslint-import-resolver-typescript: "npm:^3.6.1"
|
||||
eslint-plugin-autofix: "npm:^1.1.0"
|
||||
@@ -1890,7 +1890,7 @@ __metadata:
|
||||
react-toastify: "npm:^10.0.4"
|
||||
rollup-plugin-visualizer: "npm:^5.12.0"
|
||||
sockette: "npm:^2.0.6"
|
||||
terser: "npm:^5.27.2"
|
||||
terser: "npm:^5.28.1"
|
||||
typesafe-i18n: "npm:^5.26.2"
|
||||
typescript: "npm:^5.3.3"
|
||||
vite: "npm:^5.1.4"
|
||||
@@ -3979,15 +3979,15 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"eslint@npm:^8.56.0":
|
||||
version: 8.56.0
|
||||
resolution: "eslint@npm:8.56.0"
|
||||
"eslint@npm:^8.57.0":
|
||||
version: 8.57.0
|
||||
resolution: "eslint@npm:8.57.0"
|
||||
dependencies:
|
||||
"@eslint-community/eslint-utils": "npm:^4.2.0"
|
||||
"@eslint-community/regexpp": "npm:^4.6.1"
|
||||
"@eslint/eslintrc": "npm:^2.1.4"
|
||||
"@eslint/js": "npm:8.56.0"
|
||||
"@humanwhocodes/config-array": "npm:^0.11.13"
|
||||
"@eslint/js": "npm:8.57.0"
|
||||
"@humanwhocodes/config-array": "npm:^0.11.14"
|
||||
"@humanwhocodes/module-importer": "npm:^1.0.1"
|
||||
"@nodelib/fs.walk": "npm:^1.2.8"
|
||||
"@ungap/structured-clone": "npm:^1.2.0"
|
||||
@@ -4023,7 +4023,7 @@ __metadata:
|
||||
text-table: "npm:^0.2.0"
|
||||
bin:
|
||||
eslint: bin/eslint.js
|
||||
checksum: 10/ef6193c6e4cef20774b985a5cc2fd4bf6d3c4decd423117cbc4a0196617861745db291217ad3c537bc3a160650cca965bc818f55e1f3e446af1fcb293f9940a5
|
||||
checksum: 10/00496e218b23747a7a9817bf58b522276d0dc1f2e546dceb4eea49f9871574088f72f1f069a6b560ef537efa3a75261b8ef70e51ef19033da1cc4c86a755ef15
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -8312,9 +8312,9 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"terser@npm:^5.27.2":
|
||||
version: 5.27.2
|
||||
resolution: "terser@npm:5.27.2"
|
||||
"terser@npm:^5.28.1":
|
||||
version: 5.28.1
|
||||
resolution: "terser@npm:5.28.1"
|
||||
dependencies:
|
||||
"@jridgewell/source-map": "npm:^0.3.3"
|
||||
acorn: "npm:^8.8.2"
|
||||
@@ -8322,7 +8322,7 @@ __metadata:
|
||||
source-map-support: "npm:~0.5.20"
|
||||
bin:
|
||||
terser: bin/terser
|
||||
checksum: 10/589f1112d6cd7653f6e2d4a38970e97a160de01cddb214dc924aa330c22b8c3635067a47db1233e060e613e380b979ca336c3211b17507ea13b0adff10ecbd40
|
||||
checksum: 10/922159f036a89a7d01b8b67e0eacb4425c20cf19067d2e82c1523153ed3bf66c36b945fd16c610b7ea41fedb867b189d2a350415fb566f4668a1701ab768728e
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
|
||||
@@ -248,7 +248,13 @@ static bool _start_async_task() {
|
||||
return false;
|
||||
}
|
||||
if (!_async_service_task_handle) {
|
||||
customTaskCreateUniversal(_async_service_task, "async_tcp", CONFIG_ASYNC_TCP_STACK_SIZE, NULL, CONFIG_ASYNC_TCP_TASK_PRIORITY, &_async_service_task_handle, CONFIG_ASYNC_TCP_RUNNING_CORE);
|
||||
customTaskCreateUniversal(_async_service_task,
|
||||
"async_tcp",
|
||||
CONFIG_ASYNC_TCP_STACK_SIZE,
|
||||
NULL,
|
||||
CONFIG_ASYNC_TCP_TASK_PRIORITY,
|
||||
&_async_service_task_handle,
|
||||
CONFIG_ASYNC_TCP_RUNNING_CORE);
|
||||
if (!_async_service_task_handle) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -53,13 +53,15 @@ extern "C" {
|
||||
#define CONFIG_ASYNC_TCP_TASK_PRIORITY 5
|
||||
#endif
|
||||
|
||||
// stack usage measured: ESP32: ~2.3K, ESP32S3: ~3.5k
|
||||
#ifndef CONFIG_ASYNC_TCP_STACK_SIZE
|
||||
#define CONFIG_ASYNC_TCP_STACK_SIZE 5120
|
||||
#endif
|
||||
|
||||
|
||||
// maybe enlarge queue to 64 or 128 see https://github.com/emsesp/EMS-ESP32/issues/177
|
||||
#ifndef CONFIG_ASYNC_TCP_QUEUE
|
||||
#define CONFIG_ASYNC_TCP_QUEUE 128
|
||||
#define CONFIG_ASYNC_TCP_QUEUE 32
|
||||
#endif
|
||||
|
||||
class AsyncClient;
|
||||
|
||||
@@ -33,7 +33,7 @@ build_flags =
|
||||
-D ARDUINOTRACE_ENABLE=0
|
||||
-D CONFIG_ETH_ENABLED
|
||||
-D CONFIG_UART_ISR_IN_IRAM
|
||||
-D CONFIG_ASYNC_TCP_STACK_SIZE=8192
|
||||
-D CONFIG_ASYNC_TCP_STACK_SIZE=5120
|
||||
|
||||
unbuild_flags =
|
||||
${common.core_unbuild_flags}
|
||||
@@ -97,6 +97,20 @@ build_flags =
|
||||
${espressi32_base.build_flags}
|
||||
'-DEMSESP_DEFAULT_BOARD_PROFILE="S32S3"'
|
||||
|
||||
[env:ci_s3_32M]
|
||||
extends = espressi32_base
|
||||
extra_scripts = scripts/rename_fw.py
|
||||
board = lolin_s3
|
||||
board_build.f_cpu = 240000000L
|
||||
board_upload.flash_size = 32MB
|
||||
board_build.partitions = esp32_partition_32M.csv
|
||||
board_build.flash_mode = opi
|
||||
board_build.arduino.memory_type: opi_opi
|
||||
build_unflags = ${common.unbuild_flags}
|
||||
build_flags =
|
||||
${espressi32_base.build_flags}
|
||||
'-DEMSESP_DEFAULT_BOARD_PROFILE="S32S3"'
|
||||
|
||||
[env:esp32_4M]
|
||||
extends = espressi32_base_tasmota
|
||||
board = esp32dev
|
||||
|
||||
@@ -660,10 +660,9 @@ bool AnalogSensor::get_value_info(JsonObject output, const char * cmd, const int
|
||||
|
||||
// this is for a specific sensor
|
||||
// make a copy of the string command for parsing, and lowercase it
|
||||
char sensor_name[30] = {'\0'};
|
||||
char sensor_name[COMMAND_MAX_LENGTH] = {'\0'};
|
||||
char * attribute_s = nullptr;
|
||||
strlcpy(sensor_name, cmd, sizeof(sensor_name));
|
||||
auto sensor_lowercase = Helpers::toLower(sensor_name);
|
||||
strlcpy(sensor_name, Helpers::toLower(cmd).c_str(), sizeof(sensor_name));
|
||||
|
||||
// check specific attribute to fetch instead of the complete record
|
||||
char * breakp = strchr(sensor_name, '/');
|
||||
@@ -673,7 +672,7 @@ bool AnalogSensor::get_value_info(JsonObject output, const char * cmd, const int
|
||||
}
|
||||
|
||||
for (const auto & sensor : sensors_) {
|
||||
if (sensor_lowercase == Helpers::toLower(sensor.name().c_str()) || Helpers::atoint(sensor_name) == sensor.gpio()) {
|
||||
if (sensor_name == Helpers::toLower(sensor.name()) || Helpers::atoint(sensor_name) == sensor.gpio()) {
|
||||
// add the details
|
||||
addSensorJson(output, sensor);
|
||||
|
||||
|
||||
@@ -88,12 +88,12 @@ uint8_t Command::process(const char * path, const bool is_admin, const JsonObjec
|
||||
command_p = p.paths()[1].c_str();
|
||||
} else if (num_paths == 3) {
|
||||
// concatenate the path into one string as it could be in the format 'hc/XXX'
|
||||
char command[50];
|
||||
char command[COMMAND_MAX_LENGTH];
|
||||
snprintf(command, sizeof(command), "%s/%s", p.paths()[1].c_str(), p.paths()[2].c_str());
|
||||
command_p = command;
|
||||
} else if (num_paths > 3) {
|
||||
// concatenate the path into one string as it could be in the format 'hc/XXX/attribute'
|
||||
char command[50];
|
||||
char command[COMMAND_MAX_LENGTH];
|
||||
snprintf(command, sizeof(command), "%s/%s/%s", p.paths()[1].c_str(), p.paths()[2].c_str(), p.paths()[3].c_str());
|
||||
command_p = command;
|
||||
} else {
|
||||
@@ -151,7 +151,7 @@ uint8_t Command::process(const char * path, const bool is_admin, const JsonObjec
|
||||
if (strlen(d)) {
|
||||
char * device_end = (char *)strchr(d, '/');
|
||||
if (device_end != nullptr) {
|
||||
char device_s[15] = {'\0'};
|
||||
char device_s[20] = {'\0'};
|
||||
const char * device_p = device_s;
|
||||
const char * data_p = nullptr;
|
||||
strlcpy(device_s, d, device_end - d + 1);
|
||||
@@ -161,7 +161,7 @@ uint8_t Command::process(const char * path, const bool is_admin, const JsonObjec
|
||||
if (data_p == nullptr) {
|
||||
return CommandRet::INVALID;
|
||||
}
|
||||
char data_s[40];
|
||||
char data_s[COMMAND_MAX_LENGTH];
|
||||
strlcpy(data_s, Helpers::toLower(data_p).c_str(), 30);
|
||||
if (strstr(data_s, "/value") == nullptr) {
|
||||
strcat(data_s, "/value");
|
||||
|
||||
@@ -27,6 +27,8 @@ using uuid::console::Shell;
|
||||
|
||||
namespace emsesp {
|
||||
|
||||
#define COMMAND_MAX_LENGTH 50
|
||||
|
||||
// mqtt flags for command subscriptions
|
||||
enum CommandFlag : uint8_t {
|
||||
MQTT_SUB_FLAG_DEFAULT = 0, // 0 no flags set, always subscribe to MQTT
|
||||
|
||||
@@ -836,6 +836,24 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const
|
||||
MAKE_CF_CB(set_wwEcoPlusDiffTemp),
|
||||
6,
|
||||
12);
|
||||
register_device_value(DeviceValueTAG::TAG_BOILER_DATA_WW,
|
||||
&wwComfStopTemp_,
|
||||
DeviceValueType::UINT,
|
||||
FL_(wwComfStopTemp),
|
||||
DeviceValueUOM::DEGREES,
|
||||
MAKE_CF_CB(set_wwComfStopTemp));
|
||||
register_device_value(DeviceValueTAG::TAG_BOILER_DATA_WW,
|
||||
&wwEcoStopTemp_,
|
||||
DeviceValueType::UINT,
|
||||
FL_(wwEcoStopTemp),
|
||||
DeviceValueUOM::DEGREES,
|
||||
MAKE_CF_CB(set_wwEcoStopTemp));
|
||||
register_device_value(DeviceValueTAG::TAG_BOILER_DATA_WW,
|
||||
&wwEcoPlusStopTemp_,
|
||||
DeviceValueType::UINT,
|
||||
FL_(wwEcoPlusStopTemp),
|
||||
DeviceValueUOM::DEGREES,
|
||||
MAKE_CF_CB(set_wwEcoPlusStopTemp));
|
||||
register_device_value(DeviceValueTAG::TAG_BOILER_DATA_WW,
|
||||
&hpCircPumpWw_,
|
||||
DeviceValueType::BOOL,
|
||||
@@ -1940,6 +1958,10 @@ void Boiler::process_HpDhwSettings(std::shared_ptr<const Telegram> telegram) {
|
||||
has_update(telegram, wwComfDiffTemp_, 12);
|
||||
has_update(telegram, wwEcoDiffTemp_, 13);
|
||||
has_update(telegram, wwEcoPlusDiffTemp_, 14);
|
||||
//https://github.com/emsesp/EMS-ESP32/issues/1624
|
||||
has_update(telegram, wwComfStopTemp_, 8);
|
||||
has_update(telegram, wwEcoStopTemp_, 9);
|
||||
has_update(telegram, wwEcoPlusStopTemp_, 10);
|
||||
}
|
||||
|
||||
// 0x49C:
|
||||
@@ -2952,6 +2974,7 @@ bool Boiler::set_tempDiff(const char * value, const int8_t id) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// also used for stopTemp with different index
|
||||
bool Boiler::set_wwOffTemp(const char * value, const int8_t id) {
|
||||
int v;
|
||||
if (Helpers::value2temperature(value, v)) {
|
||||
|
||||
@@ -269,6 +269,9 @@ class Boiler : public EMSdevice {
|
||||
uint8_t wwComfDiffTemp_;
|
||||
uint8_t wwEcoDiffTemp_;
|
||||
uint8_t wwEcoPlusDiffTemp_;
|
||||
uint8_t wwComfStopTemp_;
|
||||
uint8_t wwEcoStopTemp_;
|
||||
uint8_t wwEcoPlusStopTemp_;
|
||||
|
||||
uint8_t vp_cooling_;
|
||||
uint8_t heatCable_;
|
||||
@@ -489,6 +492,15 @@ class Boiler : public EMSdevice {
|
||||
inline bool set_wwEcoPlusDiffTemp(const char * value, const int8_t id) {
|
||||
return set_wwDiffTemp(value, 14);
|
||||
}
|
||||
inline bool set_wwComfStopTemp(const char * value, const int8_t id) {
|
||||
return set_wwOffTemp(value, 8);
|
||||
}
|
||||
inline bool set_wwEcoStopTemp(const char * value, const int8_t id) {
|
||||
return set_wwOffTemp(value, 9);
|
||||
}
|
||||
inline bool set_wwEcoPlusStopTemp(const char * value, const int8_t id) {
|
||||
return set_wwOffTemp(value, 10);
|
||||
}
|
||||
bool set_vp_cooling(const char * value, const int8_t id);
|
||||
bool set_heatCable(const char * value, const int8_t id);
|
||||
bool set_VC0valve(const char * value, const int8_t id);
|
||||
|
||||
@@ -164,6 +164,7 @@ Thermostat::Thermostat(uint8_t device_type, uint8_t device_id, uint8_t product_i
|
||||
register_telegram_type(hpmode_typeids[i], "HPMode", true, MAKE_PF_CB(process_HPMode));
|
||||
}
|
||||
register_telegram_type(0x2F5, "RC300WWmode", true, MAKE_PF_CB(process_RC300WWmode));
|
||||
register_telegram_type(0x2F6, "RC300WW2mode", true, MAKE_PF_CB(process_RC300WW2mode));
|
||||
register_telegram_type(0x31B, "RC300WWtemp", true, MAKE_PF_CB(process_RC300WWtemp));
|
||||
register_telegram_type(0x31D, "RC300WWmode2", false, MAKE_PF_CB(process_RC300WWmode2));
|
||||
register_telegram_type(0x31E, "RC300WWmode2", false, MAKE_PF_CB(process_RC300WWmode2));
|
||||
@@ -1198,6 +1199,30 @@ void Thermostat::process_RC300WWmode(std::shared_ptr<const Telegram> telegram) {
|
||||
has_update(telegram, wwDailyHeatTime_, 9); // value in steps of 15 min
|
||||
}
|
||||
|
||||
// type 02F6
|
||||
// RC300WWmode(0x2F6), data: 02 FF 04 00 00 00 08 05 00 08 04 00 00 00 00 00 00 00 00 00 01
|
||||
void Thermostat::process_RC300WW2mode(std::shared_ptr<const Telegram> telegram) {
|
||||
has_update(telegram, wwCircPump2_, 1); // FF=off, 0=on ?
|
||||
|
||||
if (model() == EMSdevice::EMS_DEVICE_FLAG_BC400) {
|
||||
const uint8_t modes[] = {0, 5, 1, 2, 4}; // off, eco+, eco, comfort, auto
|
||||
uint8_t wwmode = wwMode_ < sizeof(modes) ? modes[wwMode2_] : EMS_VALUE_UINT_NOTSET;
|
||||
telegram->read_value(wwmode, 2);
|
||||
const uint8_t modes1[] = {0, 2, 3, 0, 4, 1};
|
||||
has_update(wwMode2_, wwmode < sizeof(modes1) ? modes1[wwmode] : EMS_VALUE_UINT_NOTSET);
|
||||
} else {
|
||||
has_update(telegram, wwMode2_, 2); // 0=off, 1=low, 2=high, 3=auto, 4=own prog
|
||||
}
|
||||
has_update(telegram, wwCircMode2_, 3); // 0=off, 1=on, 2=auto, 4=own?
|
||||
has_update(telegram, wwChargeDuration2_, 10); // value in steps of 15 min
|
||||
has_update(telegram, wwCharge2_, 11); // bool 0xFF on
|
||||
has_update(telegram, wwDisinfecting2_, 5); // 0-off, 0xFF on
|
||||
has_update(telegram, wwDisinfectHour2_, 6); // value in steps of 15 min
|
||||
has_update(telegram, wwDisinfectDay2_, 7); // 0-6 Day of week, 7 every day
|
||||
has_update(telegram, wwDailyHeating2_, 8); // 0-off, 0xFF on
|
||||
has_update(telegram, wwDailyHeatTime2_, 9); // value in steps of 15 min
|
||||
}
|
||||
|
||||
// types 0x31D and 0x31E
|
||||
// RC300WWmode2(0x31D), data: 00 00 09 07
|
||||
void Thermostat::process_RC300WWmode2(std::shared_ptr<const Telegram> telegram) {
|
||||
@@ -1991,6 +2016,7 @@ bool Thermostat::set_roomsensor(const char * value, const int8_t id) {
|
||||
|
||||
// sets the thermostat ww working mode, where mode is a string, ems and ems+
|
||||
bool Thermostat::set_wwmode(const char * value, const int8_t id) {
|
||||
uint8_t wwc = (id == DeviceValueTAG::TAG_WWC2 - DeviceValueTAG::TAG_HC1 + 1) ? 1 : 0;
|
||||
uint8_t set;
|
||||
|
||||
if (model() == EMSdevice::EMS_DEVICE_FLAG_RC10) {
|
||||
@@ -2003,12 +2029,12 @@ bool Thermostat::set_wwmode(const char * value, const int8_t id) {
|
||||
return false;
|
||||
}
|
||||
const uint8_t modes[] = {0, 5, 1, 2, 4};
|
||||
write_command(0x02F5, 2, modes[set], 0x02F5);
|
||||
write_command(0x02F5 + wwc, 2, modes[set], 0x02F5 + wwc);
|
||||
} else if ((model() == EMSdevice::EMS_DEVICE_FLAG_RC300) || (model() == EMSdevice::EMS_DEVICE_FLAG_RC100)) {
|
||||
if (!Helpers::value2enum(value, set, FL_(enum_wwMode))) {
|
||||
return false;
|
||||
}
|
||||
write_command(0x02F5, 2, set, 0x02F5);
|
||||
write_command(0x02F5 + wwc, 2, set, 0x02F5 + wwc);
|
||||
} else if (model() == EMSdevice::EMS_DEVICE_FLAG_RC30) {
|
||||
if (!Helpers::value2enum(value, set, FL_(enum_wwMode3))) {
|
||||
return false;
|
||||
@@ -2062,7 +2088,8 @@ bool Thermostat::set_wwtemplow(const char * value, const int8_t id) {
|
||||
|
||||
// Set ww charge RC300, ems+
|
||||
bool Thermostat::set_wwcharge(const char * value, const int8_t id) {
|
||||
bool b;
|
||||
uint8_t wwc = (id == DeviceValueTAG::TAG_WWC2 - DeviceValueTAG::TAG_HC1 + 1) ? 1 : 0;
|
||||
bool b;
|
||||
if (!Helpers::value2bool(value, b)) {
|
||||
return false;
|
||||
}
|
||||
@@ -2070,7 +2097,7 @@ bool Thermostat::set_wwcharge(const char * value, const int8_t id) {
|
||||
if ((model() == EMSdevice::EMS_DEVICE_FLAG_JUNKERS)) {
|
||||
write_command(0x0115, 0, b ? 0xFF : 0x00, 0x01D3);
|
||||
} else {
|
||||
write_command(0x02F5, 11, b ? 0xFF : 0x00, 0x02F5);
|
||||
write_command(0x02F5 + wwc, 11, b ? 0xFF : 0x00, 0x02F5 + wwc);
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -2078,13 +2105,14 @@ bool Thermostat::set_wwcharge(const char * value, const int8_t id) {
|
||||
|
||||
// Set ww charge duration in steps of 15 min, ems+
|
||||
bool Thermostat::set_wwchargeduration(const char * value, const int8_t id) {
|
||||
int t;
|
||||
uint8_t wwc = (id == DeviceValueTAG::TAG_WWC2 - DeviceValueTAG::TAG_HC1 + 1) ? 1 : 0;
|
||||
int t;
|
||||
if (!Helpers::value2number(value, t)) {
|
||||
return false;
|
||||
}
|
||||
t = (t + 8) / 15;
|
||||
|
||||
write_command(0x2F5, 10, t, 0x02F5);
|
||||
write_command(0x2F5 + wwc, 10, t, 0x02F5 + wwc);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -2126,13 +2154,14 @@ bool Thermostat::set_cooling(const char * value, const int8_t id) {
|
||||
|
||||
// sets the thermostat ww circulation working mode, where mode is a string
|
||||
bool Thermostat::set_wwcircmode(const char * value, const int8_t id) {
|
||||
uint8_t wwc = (id == DeviceValueTAG::TAG_WWC2 - DeviceValueTAG::TAG_HC1 + 1) ? 1 : 0;
|
||||
uint8_t set;
|
||||
|
||||
if ((model() == EMSdevice::EMS_DEVICE_FLAG_BC400) || (model() == EMSdevice::EMS_DEVICE_FLAG_RC300) || (model() == EMSdevice::EMS_DEVICE_FLAG_RC100)) {
|
||||
if (!Helpers::value2enum(value, set, FL_(enum_wwCircMode))) {
|
||||
return false;
|
||||
}
|
||||
write_command(0x02F5, 3, set, 0x02F5);
|
||||
write_command(0x02F5 + wwc, 3, set, 0x02F5 + wwc);
|
||||
return true;
|
||||
}
|
||||
if (!Helpers::value2enum(value, set, FL_(enum_wwMode2))) {
|
||||
@@ -2145,17 +2174,19 @@ bool Thermostat::set_wwcircmode(const char * value, const int8_t id) {
|
||||
}
|
||||
|
||||
bool Thermostat::set_wwDailyHeating(const char * value, const int8_t id) {
|
||||
bool b;
|
||||
uint8_t wwc = (id == DeviceValueTAG::TAG_WWC2 - DeviceValueTAG::TAG_HC1 + 1) ? 1 : 0;
|
||||
bool b;
|
||||
if (!Helpers::value2bool(value, b)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
write_command(0x2F5, 8, b ? 0xFF : 0x00, 0x2F5);
|
||||
write_command(0x2F5 + wwc, 8, b ? 0xFF : 0x00, 0x2F5 + wwc);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Thermostat::set_wwDailyHeatTime(const char * value, const int8_t id) {
|
||||
int set;
|
||||
uint8_t wwc = (id == DeviceValueTAG::TAG_WWC2 - DeviceValueTAG::TAG_HC1 + 1) ? 1 : 0;
|
||||
int set;
|
||||
if (!Helpers::value2number(value, set)) {
|
||||
return false;
|
||||
}
|
||||
@@ -2166,19 +2197,20 @@ bool Thermostat::set_wwDailyHeatTime(const char * value, const int8_t id) {
|
||||
return false;
|
||||
}
|
||||
|
||||
write_command(0x2F5, 9, t, 0x2F5);
|
||||
write_command(0x2F5 + wwc, 9, t, 0x2F5 + wwc);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Thermostat::set_wwDisinfect(const char * value, const int8_t id) {
|
||||
bool b;
|
||||
uint8_t wwc = (id == DeviceValueTAG::TAG_WWC2 - DeviceValueTAG::TAG_HC1 + 1) ? 1 : 0;
|
||||
bool b;
|
||||
if (!Helpers::value2bool(value, b)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ((model() == EMSdevice::EMS_DEVICE_FLAG_BC400) || (model() == EMSdevice::EMS_DEVICE_FLAG_RC300) || (model() == EMSdevice::EMS_DEVICE_FLAG_RC100)) {
|
||||
write_command(0x2F5, 5, b ? 0xFF : 0x00, 0x2F5);
|
||||
write_command(0x2F5 + wwc, 5, b ? 0xFF : 0x00, 0x2F5 + wwc);
|
||||
} else if (model() == EMSdevice::EMS_DEVICE_FLAG_RC30) {
|
||||
write_command(EMS_TYPE_RC30wwSettings, 2, b ? 0xFF : 0x00, EMS_TYPE_RC30wwSettings);
|
||||
} else {
|
||||
@@ -2189,13 +2221,14 @@ bool Thermostat::set_wwDisinfect(const char * value, const int8_t id) {
|
||||
}
|
||||
|
||||
bool Thermostat::set_wwDisinfectDay(const char * value, const int8_t id) {
|
||||
uint8_t wwc = (id == DeviceValueTAG::TAG_WWC2 - DeviceValueTAG::TAG_HC1 + 1) ? 1 : 0;
|
||||
uint8_t set;
|
||||
if (!Helpers::value2enum(value, set, FL_(enum_dayOfWeek))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ((model() == EMSdevice::EMS_DEVICE_FLAG_BC400) || (model() == EMSdevice::EMS_DEVICE_FLAG_RC300) || (model() == EMSdevice::EMS_DEVICE_FLAG_RC100)) {
|
||||
write_command(0x2F5, 7, set, 0x2F5);
|
||||
write_command(0x2F5 + wwc, 7, set, 0x2F5 + wwc);
|
||||
} else if (model() == EMSdevice::EMS_DEVICE_FLAG_RC30) {
|
||||
write_command(EMS_TYPE_RC30wwSettings, 3, set, EMS_TYPE_RC30wwSettings);
|
||||
} else {
|
||||
@@ -2206,12 +2239,13 @@ bool Thermostat::set_wwDisinfectDay(const char * value, const int8_t id) {
|
||||
}
|
||||
|
||||
bool Thermostat::set_wwDisinfectHour(const char * value, const int8_t id) {
|
||||
int set;
|
||||
uint8_t wwc = (id == DeviceValueTAG::TAG_WWC2 - DeviceValueTAG::TAG_HC1 + 1) ? 1 : 0;
|
||||
int set;
|
||||
if ((model() == EMSdevice::EMS_DEVICE_FLAG_BC400) || (model() == EMSdevice::EMS_DEVICE_FLAG_RC300) || (model() == EMSdevice::EMS_DEVICE_FLAG_RC100)) {
|
||||
if (!Helpers::value2number(value, set, 0, 1431)) {
|
||||
return false;
|
||||
}
|
||||
write_command(0x2F5, 6, (set + 8) / 15, 0x2F5);
|
||||
write_command(0x2F5 + wwc, 6, (set + 8) / 15, 0x2F5 + wwc);
|
||||
} else if (model() == EMSdevice::EMS_DEVICE_FLAG_RC30) {
|
||||
if (!Helpers::value2number(value, set, 0, 23)) {
|
||||
return false;
|
||||
@@ -3816,6 +3850,8 @@ void Thermostat::register_device_values() {
|
||||
FL_(wwMode),
|
||||
DeviceValueUOM::NONE,
|
||||
MAKE_CF_CB(set_wwmode));
|
||||
register_device_value(
|
||||
DeviceValueTAG::TAG_WWC2, &wwMode2_, DeviceValueType::ENUM, FL_(enum_wwMode4), FL_(wwMode), DeviceValueUOM::NONE, MAKE_CF_CB(set_wwmode));
|
||||
|
||||
} else {
|
||||
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW,
|
||||
@@ -3825,6 +3861,8 @@ void Thermostat::register_device_values() {
|
||||
FL_(wwMode),
|
||||
DeviceValueUOM::NONE,
|
||||
MAKE_CF_CB(set_wwmode));
|
||||
register_device_value(
|
||||
DeviceValueTAG::TAG_WWC2, &wwMode2_, DeviceValueType::ENUM, FL_(enum_wwMode), FL_(wwMode), DeviceValueUOM::NONE, MAKE_CF_CB(set_wwmode));
|
||||
}
|
||||
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW,
|
||||
&wwSetTempLow_,
|
||||
@@ -3848,7 +3886,6 @@ void Thermostat::register_device_values() {
|
||||
MAKE_CF_CB(set_wwchargeduration));
|
||||
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW, &wwCharge_, DeviceValueType::BOOL, FL_(wwCharge), DeviceValueUOM::NONE, MAKE_CF_CB(set_wwcharge));
|
||||
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW, &wwExtra1_, DeviceValueType::UINT, FL_(wwExtra1), DeviceValueUOM::DEGREES);
|
||||
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW, &wwExtra2_, DeviceValueType::UINT, FL_(wwExtra2), DeviceValueUOM::DEGREES);
|
||||
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW,
|
||||
&wwDisinfecting_,
|
||||
DeviceValueType::BOOL,
|
||||
@@ -3871,6 +3908,74 @@ void Thermostat::register_device_values() {
|
||||
MAKE_CF_CB(set_wwDisinfectHour),
|
||||
0,
|
||||
1431);
|
||||
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW,
|
||||
&wwDailyHeating_,
|
||||
DeviceValueType::BOOL,
|
||||
FL_(wwDailyHeating),
|
||||
DeviceValueUOM::NONE,
|
||||
MAKE_CF_CB(set_wwDailyHeating));
|
||||
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW,
|
||||
&wwDailyHeatTime_,
|
||||
DeviceValueType::UINT,
|
||||
DeviceValueNumOp::DV_NUMOP_MUL15,
|
||||
FL_(wwDailyHeatTime),
|
||||
DeviceValueUOM::MINUTES,
|
||||
MAKE_CF_CB(set_wwDailyHeatTime),
|
||||
0,
|
||||
1431);
|
||||
register_device_value(DeviceValueTAG::TAG_WWC2,
|
||||
&wwCircMode2_,
|
||||
DeviceValueType::ENUM,
|
||||
FL_(enum_wwCircMode),
|
||||
FL_(wwCircMode),
|
||||
DeviceValueUOM::NONE,
|
||||
MAKE_CF_CB(set_wwcircmode));
|
||||
register_device_value(DeviceValueTAG::TAG_WWC2,
|
||||
&wwChargeDuration2_,
|
||||
DeviceValueType::UINT,
|
||||
DeviceValueNumOp::DV_NUMOP_MUL15,
|
||||
FL_(wwChargeDuration),
|
||||
DeviceValueUOM::MINUTES,
|
||||
MAKE_CF_CB(set_wwchargeduration));
|
||||
register_device_value(DeviceValueTAG::TAG_WWC2, &wwCharge2_, DeviceValueType::BOOL, FL_(wwCharge), DeviceValueUOM::NONE, MAKE_CF_CB(set_wwcharge));
|
||||
register_device_value(DeviceValueTAG::TAG_WWC2, &wwExtra2_, DeviceValueType::UINT, FL_(wwExtra2), DeviceValueUOM::DEGREES);
|
||||
register_device_value(DeviceValueTAG::TAG_WWC2,
|
||||
&wwDisinfecting2_,
|
||||
DeviceValueType::BOOL,
|
||||
FL_(wwDisinfecting),
|
||||
DeviceValueUOM::NONE,
|
||||
MAKE_CF_CB(set_wwDisinfect));
|
||||
register_device_value(DeviceValueTAG::TAG_WWC2,
|
||||
&wwDisinfectDay2_,
|
||||
DeviceValueType::ENUM,
|
||||
FL_(enum_dayOfWeek),
|
||||
FL_(wwDisinfectDay),
|
||||
DeviceValueUOM::NONE,
|
||||
MAKE_CF_CB(set_wwDisinfectDay));
|
||||
register_device_value(DeviceValueTAG::TAG_WWC2,
|
||||
&wwDisinfectHour2_,
|
||||
DeviceValueType::UINT,
|
||||
DeviceValueNumOp::DV_NUMOP_MUL15,
|
||||
FL_(wwDisinfectTime),
|
||||
DeviceValueUOM::MINUTES,
|
||||
MAKE_CF_CB(set_wwDisinfectHour),
|
||||
0,
|
||||
1431);
|
||||
register_device_value(DeviceValueTAG::TAG_WWC2,
|
||||
&wwDailyHeating2_,
|
||||
DeviceValueType::BOOL,
|
||||
FL_(wwDailyHeating),
|
||||
DeviceValueUOM::NONE,
|
||||
MAKE_CF_CB(set_wwDailyHeating));
|
||||
register_device_value(DeviceValueTAG::TAG_WWC2,
|
||||
&wwDailyHeatTime2_,
|
||||
DeviceValueType::UINT,
|
||||
DeviceValueNumOp::DV_NUMOP_MUL15,
|
||||
FL_(wwDailyHeatTime),
|
||||
DeviceValueUOM::MINUTES,
|
||||
MAKE_CF_CB(set_wwDailyHeatTime),
|
||||
0,
|
||||
1431);
|
||||
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA,
|
||||
&hybridStrategy_,
|
||||
DeviceValueType::ENUM,
|
||||
|
||||
@@ -223,15 +223,23 @@ class Thermostat : public EMSdevice {
|
||||
uint8_t wwExtra1_; // wwExtra active for wwSystem 1
|
||||
uint8_t wwExtra2_;
|
||||
uint8_t wwMode_;
|
||||
uint8_t wwMode2_;
|
||||
uint8_t wwCircPump_;
|
||||
uint8_t wwCircPump2_;
|
||||
uint8_t wwCircMode_;
|
||||
uint8_t wwCircMode2_;
|
||||
uint8_t wwSetTemp_;
|
||||
uint8_t wwSetTempLow_;
|
||||
uint8_t wwCharge_;
|
||||
uint8_t wwCharge2_;
|
||||
uint8_t wwChargeDuration_;
|
||||
uint8_t wwChargeDuration2_;
|
||||
uint8_t wwDisinfecting_;
|
||||
uint8_t wwDisinfecting2_;
|
||||
uint8_t wwDisinfectDay_;
|
||||
uint8_t wwDisinfectHour_;
|
||||
uint8_t wwDisinfectDay2_;
|
||||
uint8_t wwDisinfectHour2_;
|
||||
uint8_t wwMaxTemp_;
|
||||
uint8_t wwOneTimeKey_;
|
||||
uint8_t wwProgMode_;
|
||||
@@ -240,6 +248,8 @@ class Thermostat : public EMSdevice {
|
||||
char wwCircSwitchTime_[16];
|
||||
uint8_t wwDailyHeating_;
|
||||
uint8_t wwDailyHeatTime_;
|
||||
uint8_t wwDailyHeating2_;
|
||||
uint8_t wwDailyHeatTime2_;
|
||||
uint8_t wwWhenModeOff_;
|
||||
char wwHoliday_[26];
|
||||
char wwVacation_[26];
|
||||
@@ -393,6 +403,7 @@ class Thermostat : public EMSdevice {
|
||||
void process_RC300Summer(std::shared_ptr<const Telegram> telegram);
|
||||
void process_RC300Summer2(std::shared_ptr<const Telegram> telegram);
|
||||
void process_RC300WWmode(std::shared_ptr<const Telegram> telegram);
|
||||
void process_RC300WW2mode(std::shared_ptr<const Telegram> telegram);
|
||||
void process_RC300WWmode2(std::shared_ptr<const Telegram> telegram);
|
||||
void process_RC300WWtemp(std::shared_ptr<const Telegram> telegram);
|
||||
void process_RC300OutdoorTemp(std::shared_ptr<const Telegram> telegram);
|
||||
|
||||
@@ -1496,7 +1496,9 @@ void EMSESP::start() {
|
||||
|
||||
esp8266React.begin(); // loads core system services settings (network, mqtt, ap, ntp etc)
|
||||
|
||||
nvs_.begin("ems-esp", false, "nvs");
|
||||
if (!nvs_.begin("ems-esp", false, "nvs1")) { // try new partition on 16M flash first
|
||||
nvs_.begin("ems-esp", false, "nvs"); // fallback to first nvs
|
||||
}
|
||||
|
||||
LOG_INFO("Starting EMS-ESP version %s", EMSESP_APP_VERSION); // welcome message
|
||||
LOG_DEBUG("System is running in Debug mode");
|
||||
|
||||
@@ -444,6 +444,9 @@ MAKE_TRANSLATION(wwEcoPlusOffTemp, "wwecoplusoff", "eco+ switch off", "ECO+ Auss
|
||||
MAKE_TRANSLATION(wwComfDiffTemp, "wwcomfdiff", "comfort diff", "Komfort Differenztemp", "", "", "", "", "", "", "", "") // TODO translate
|
||||
MAKE_TRANSLATION(wwEcoDiffTemp, "wwecodiff", "eco diff", "ECO Differenztemp", "", "", "", "", "", "", "", "") // TODO translate
|
||||
MAKE_TRANSLATION(wwEcoPlusDiffTemp, "wwecoplusdiff", "eco+ diff", "ECO+ Differenztemp", "", "", "", "", "", "", "", "") // TODO translate
|
||||
MAKE_TRANSLATION(wwComfStopTemp, "wwcomfstop", "comfort stop temp", "Komfort Stopptemp", "", "", "", "", "", "", "", "") // TODO translate
|
||||
MAKE_TRANSLATION(wwEcoStopTemp, "wwecostop", "eco stop temp", "ECO Stopptemp", "", "", "", "", "", "", "", "") // TODO translate
|
||||
MAKE_TRANSLATION(wwEcoPlusStopTemp, "wwecoplusstop", "eco+ stop temp", "ECO+ Stopptemp", "", "", "", "", "", "", "", "") // TODO translate
|
||||
|
||||
MAKE_TRANSLATION(auxHeatMode, "auxheatrmode", "aux heater mode", "Modus Zusatzheizer", "Modus bijverwarmer", "", "tryb pracy dogrzewacza po blokadzie z Zakładu Energetycznego", "tilleggsvarmer modus", "", "ilave ısıtıcı modu", "modalità riscaldatore addizionale", "režim pomocného ohrievača") // TODO translate
|
||||
MAKE_TRANSLATION(auxMaxLimit, "auxmaxlimit", "aux heater max limit", "Zusatzheizer max. Grenze", "Bijverwarmer grensinstelling maximaal", "", "dogrzewacz, maksymalny limit", "tillegsvarme maksgrense", "", "ilave ısıtıcı maks limit", "limite massimo riscaldatore addizionale", "maximálny limit pomocného ohrievača") // TODO translate
|
||||
|
||||
15
src/mqtt.cpp
15
src/mqtt.cpp
@@ -607,7 +607,8 @@ bool Mqtt::queue_message(const uint8_t operation, const std::string & topic, con
|
||||
}
|
||||
// check free mem
|
||||
#ifndef EMSESP_STANDALONE
|
||||
if (ESP.getFreeHeap() < 60 * 1024 || ESP.getMaxAllocHeap() < 40 * 1024) {
|
||||
// if (ESP.getFreeHeap() < 60 * 1024 || ESP.getMaxAllocHeap() < 40 * 1024) {
|
||||
if (heap_caps_get_free_size(MALLOC_CAP_8BIT) < 60 * 1024) { // checks free Heap+PSRAM
|
||||
if (operation == Operation::PUBLISH) {
|
||||
mqtt_message_id_++;
|
||||
mqtt_publish_fails_++;
|
||||
@@ -1327,13 +1328,13 @@ void Mqtt::add_ha_sections_to_doc(const char * name,
|
||||
|
||||
const char * tpl_draft = "{{'online' if %s else 'offline'}}";
|
||||
|
||||
// EMS-ESP status check
|
||||
char tpl[150];
|
||||
snprintf(tpl, sizeof(tpl), "%s/status", Mqtt::base().c_str());
|
||||
avty_json["t"] = tpl;
|
||||
snprintf(tpl, sizeof(tpl), tpl_draft, "value == 'online'");
|
||||
avty_json["val_tpl"] = tpl;
|
||||
avty.add(avty_json); // returns 0 if no mem
|
||||
// EMS-ESP status check
|
||||
// snprintf(tpl, sizeof(tpl), "%s/status", Mqtt::base().c_str());
|
||||
// avty_json["t"] = tpl;
|
||||
// snprintf(tpl, sizeof(tpl), tpl_draft, "value == 'online'");
|
||||
// avty_json["val_tpl"] = tpl;
|
||||
// avty.add(avty_json); // returns 0 if no mem
|
||||
|
||||
// skip conditional Jinja2 templates if not home assistant
|
||||
if (discovery_type() == discoveryType::HOMEASSISTANT) {
|
||||
|
||||
@@ -1204,10 +1204,12 @@ bool System::command_info(const char * value, const int8_t id, JsonObject output
|
||||
node["uptime"] = uuid::log::format_timestamp_ms(uuid::get_uptime_ms(), 3);
|
||||
node["uptime (seconds)"] = uuid::get_uptime_sec();
|
||||
#ifndef EMSESP_STANDALONE
|
||||
node["platform"] = ARDUINO_VERSION;
|
||||
node["platform"] = EMSESP_PLATFORM;
|
||||
node["arduino"] = ARDUINO_VERSION;
|
||||
node["sdk"] = ESP.getSdkVersion();
|
||||
node["free mem"] = getHeapMem();
|
||||
node["max alloc"] = getMaxAllocMem();
|
||||
node["free caps"] = heap_caps_get_free_size(MALLOC_CAP_8BIT) / 1024; // includes heap and psram
|
||||
node["used app"] = EMSESP::system_.appUsed(); // kilobytes
|
||||
node["free app"] = EMSESP::system_.appFree(); // kilobytes
|
||||
node["partition"] = esp_ota_get_running_partition()->label;
|
||||
|
||||
@@ -377,10 +377,9 @@ bool TemperatureSensor::get_value_info(JsonObject output, const char * cmd, cons
|
||||
|
||||
// this is for a specific sensor
|
||||
// make a copy of the string command for parsing, and lowercase it
|
||||
char sensor_name[30] = {'\0'};
|
||||
char sensor_name[COMMAND_MAX_LENGTH] = {'\0'};
|
||||
char * attribute_s = nullptr;
|
||||
strlcpy(sensor_name, cmd, sizeof(sensor_name));
|
||||
auto sensor_lowercase = Helpers::toLower(sensor_name);
|
||||
strlcpy(sensor_name, Helpers::toLower(cmd).c_str(), sizeof(sensor_name));
|
||||
|
||||
// check for a specific attribute to fetch instead of the complete record
|
||||
char * breakp = strchr(sensor_name, '/');
|
||||
@@ -391,7 +390,7 @@ bool TemperatureSensor::get_value_info(JsonObject output, const char * cmd, cons
|
||||
|
||||
for (const auto & sensor : sensors_) {
|
||||
// match custom name or sensor ID
|
||||
if (sensor_lowercase == Helpers::toLower(sensor.name().c_str()) || sensor_lowercase == Helpers::toLower(sensor.id().c_str())) {
|
||||
if (sensor_name == Helpers::toLower(sensor.name()) || sensor_name == Helpers::toLower(sensor.id())) {
|
||||
// add values
|
||||
addSensorJson(output, sensor);
|
||||
// if we're filtering on an attribute, go find it
|
||||
|
||||
@@ -47,20 +47,18 @@ void EMSuart::uart_event_task(void * pvParameters) {
|
||||
while (1) {
|
||||
//Waiting for UART event.
|
||||
if (xQueueReceive(uart_queue, (void *)&event, portMAX_DELAY)) {
|
||||
if (event.type == UART_DATA) {
|
||||
length += event.size;
|
||||
} else if (event.type == UART_BREAK) {
|
||||
if (event.type == UART_BREAK) {
|
||||
length += event.size ? event.size - 1 : 0;
|
||||
if (length == 2 || (length >= 6 && length <= EMS_MAXBUFFERSIZE)) {
|
||||
uart_read_bytes(EMSUART_NUM, telegram, length, portMAX_DELAY);
|
||||
// if (telegram[0] && !telegram[length - 1]) {
|
||||
EMSESP::incoming_telegram(telegram, (uint8_t)(length - 1));
|
||||
// }
|
||||
} else {
|
||||
// flush buffer up to break
|
||||
} else { // flush buffer up to break
|
||||
uint8_t buf[length];
|
||||
uart_read_bytes(EMSUART_NUM, buf, length, portMAX_DELAY);
|
||||
}
|
||||
length = 0;
|
||||
} else if (event.type == UART_DATA) {
|
||||
length += event.size;
|
||||
} else if (event.type == UART_BUFFER_FULL) {
|
||||
uart_flush_input(EMSUART_NUM);
|
||||
length = 0;
|
||||
|
||||
@@ -1 +1 @@
|
||||
#define EMSESP_APP_VERSION "3.6.5-test.15"
|
||||
#define EMSESP_APP_VERSION "3.6.5-test.16"
|
||||
|
||||
@@ -278,8 +278,8 @@ bool WebCustomEntityService::get_value_info(JsonObject output, const char * cmd)
|
||||
return true;
|
||||
}
|
||||
|
||||
char command_s[30];
|
||||
strlcpy(command_s, cmd, sizeof(command_s));
|
||||
char command_s[COMMAND_MAX_LENGTH];
|
||||
strlcpy(command_s, Helpers::toLower(cmd).c_str(), sizeof(command_s));
|
||||
char * attribute_s = nullptr;
|
||||
// check specific attribute to fetch instead of the complete record
|
||||
char * breakp = strchr(command_s, '/');
|
||||
@@ -289,7 +289,7 @@ bool WebCustomEntityService::get_value_info(JsonObject output, const char * cmd)
|
||||
}
|
||||
|
||||
for (const auto & entity : *customEntityItems) {
|
||||
if (Helpers::toLower(entity.name) == Helpers::toLower(command_s)) {
|
||||
if (Helpers::toLower(entity.name) == command_s) {
|
||||
output["name"] = entity.name;
|
||||
output["ram"] = entity.ram;
|
||||
output["type"] = entity.value_type == DeviceValueType::BOOL ? "boolean" : entity.value_type == DeviceValueType::STRING ? "string" : F_(number);
|
||||
|
||||
@@ -168,8 +168,8 @@ bool WebSchedulerService::get_value_info(JsonObject output, const char * cmd) {
|
||||
return (output.size() > 0);
|
||||
}
|
||||
|
||||
char command_s[30];
|
||||
strlcpy(command_s, cmd, sizeof(command_s));
|
||||
char command_s[COMMAND_MAX_LENGTH];
|
||||
strlcpy(command_s, Helpers::toLower(cmd).c_str(), sizeof(command_s));
|
||||
char * attribute_s = nullptr;
|
||||
|
||||
// check specific attribute to fetch instead of the complete record
|
||||
@@ -180,7 +180,7 @@ bool WebSchedulerService::get_value_info(JsonObject output, const char * cmd) {
|
||||
}
|
||||
|
||||
for (const ScheduleItem & scheduleItem : *scheduleItems_) {
|
||||
if (Helpers::toLower(scheduleItem.name) == Helpers::toLower(command_s)) {
|
||||
if (Helpers::toLower(scheduleItem.name) == command_s) {
|
||||
output["name"] = scheduleItem.name;
|
||||
output["type"] = "boolean";
|
||||
if (EMSESP::system_.bool_format() == BOOL_FORMAT_TRUEFALSE) {
|
||||
|
||||
@@ -93,24 +93,25 @@ StateUpdateResult WebSettings::update(JsonObject root, WebSettings & settings) {
|
||||
bool psram = ESP.getPsramSize() > 0; // System::PSram() is initializd later
|
||||
if (System::load_board_profile(data, settings.board_profile.c_str())) {
|
||||
if (settings.board_profile == "CUSTOM") { //read pins, fallback to S32
|
||||
data[0] = root["led_gpio"] | 2;
|
||||
data[1] = root["dallas_gpio"] | 18;
|
||||
data[2] = root["rx_gpio"] | 23;
|
||||
data[3] = root["tx_gpio"] | 5;
|
||||
data[4] = root["pbutton_gpio"] | 0;
|
||||
data[5] = root["phy_type"] | PHY_type::PHY_TYPE_NONE;
|
||||
data[6] = root["eth_power"] | 0;
|
||||
data[7] = root["eth_phy_addr"] | 0;
|
||||
data[8] = root["eth_clock_mode"] | 0;
|
||||
data = {(int8_t)(root["led_gpio"] | 2),
|
||||
(int8_t)(root["dallas_gpio"] | 18),
|
||||
(int8_t)(root["rx_gpio"] | 23),
|
||||
(int8_t)(root["tx_gpio"] | 5),
|
||||
(int8_t)(root["pbutton_gpio"] | 0),
|
||||
(int8_t)(root["phy_type"] | PHY_type::PHY_TYPE_NONE),
|
||||
(int8_t)(root["eth_power"] | 0),
|
||||
(int8_t)(root["eth_phy_addr"] | 0),
|
||||
(int8_t)(root["eth_clock_mode"] | 0)};
|
||||
}
|
||||
// check valid pins in this board profile
|
||||
if (!System::is_valid_gpio(data[0], psram) || !System::is_valid_gpio(data[1], psram) || !System::is_valid_gpio(data[2], psram)
|
||||
|| !System::is_valid_gpio(data[3], psram) || !System::is_valid_gpio(data[4], psram) || !System::is_valid_gpio(data[6], psram)) {
|
||||
settings.board_profile = ""; // reset to factory default
|
||||
}
|
||||
} else {
|
||||
settings.board_profile = ""; // reset to factory default
|
||||
}
|
||||
// load the profile
|
||||
if (!System::load_board_profile(data, settings.board_profile.c_str())) {
|
||||
if (settings.board_profile == "") {
|
||||
// unknown, check for NVS or scan for ethernet, use default E32/E32V2/S32
|
||||
settings.board_profile = EMSESP::nvs_.getString("boot");
|
||||
if (!System::load_board_profile(data, settings.board_profile.c_str())) {
|
||||
|
||||
Reference in New Issue
Block a user