Merge pull request #2734 from proddy/dev

minor updates
This commit is contained in:
Proddy
2025-11-12 21:11:34 +01:00
committed by GitHub
23 changed files with 227 additions and 178 deletions

View File

@@ -22,7 +22,7 @@ For more details go to [docs.emsesp.org](https://docs.emsesp.org/).
- Internal sensors of E32V2_2
- FW200 display options [#2610](https://github.com/emsesp/EMS-ESP32/discussions/2610)
- CR11 mode settings OFF/MANUAL depends on selTemp [#2437](https://github.com/emsesp/EMS-ESP32/issues/2437)
- Fuse settings for BBQKees boards
- implemented eFuse settings for BBQKees boards to store model type and ESP chipset
- Analogsensors for pulse output [#2624](https://github.com/emsesp/EMS-ESP32/discussions/2624)
- Analogsensors frequency input [#2631](https://github.com/emsesp/EMS-ESP32/discussions/2631)
- SRC plus thermostats [#2636](https://github.com/emsesp/EMS-ESP32/issues/2636)
@@ -63,3 +63,4 @@ For more details go to [docs.emsesp.org](https://docs.emsesp.org/).
- internal system analog sensors (core_voltage, supply_voltage and gateway_temperature) cannot be accidentally removed
- double click button reconnects EMS-ESP to AP
- place system message command in side scheduler loop to reduce stack memory usage by 2KB
- syslog mark interval set to 60 seconds

View File

@@ -52,9 +52,9 @@
"@preact/compat": "^18.3.1",
"@preact/preset-vite": "^2.10.2",
"@trivago/prettier-plugin-sort-imports": "^6.0.0",
"@types/node": "^24.10.0",
"@types/react": "^19.2.2",
"@types/react-dom": "^19.2.2",
"@types/node": "^24.10.1",
"@types/react": "^19.2.3",
"@types/react-dom": "^19.2.3",
"axe-core": "^4.11.0",
"concurrently": "^9.2.1",
"eslint": "^9.39.1",

196
interface/pnpm-lock.yaml generated
View File

@@ -13,22 +13,22 @@ importers:
version: 2.2.1(alova@3.3.4)
'@emotion/react':
specifier: ^11.14.0
version: 11.14.0(@types/react@19.2.2)(react@19.2.0)
version: 11.14.0(@types/react@19.2.3)(react@19.2.0)
'@emotion/styled':
specifier: ^11.14.1
version: 11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0)
version: 11.14.1(@emotion/react@11.14.0(@types/react@19.2.3)(react@19.2.0))(@types/react@19.2.3)(react@19.2.0)
'@mui/icons-material':
specifier: ^7.3.5
version: 7.3.5(@mui/material@7.3.5(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@types/react@19.2.2)(react@19.2.0)
version: 7.3.5(@mui/material@7.3.5(@emotion/react@11.14.0(@types/react@19.2.3)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.3)(react@19.2.0))(@types/react@19.2.3)(react@19.2.0))(@types/react@19.2.3)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@types/react@19.2.3)(react@19.2.0)
'@mui/material':
specifier: ^7.3.5
version: 7.3.5(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
version: 7.3.5(@emotion/react@11.14.0(@types/react@19.2.3)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.3)(react@19.2.0))(@types/react@19.2.3)(react@19.2.0))(@types/react@19.2.3)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
'@preact/compat':
specifier: ^18.3.1
version: 18.3.1(preact@10.27.2)
'@table-library/react-table-library':
specifier: 4.1.15
version: 4.1.15(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
version: 4.1.15(@emotion/react@11.14.0(@types/react@19.2.3)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
alova:
specifier: 3.3.4
version: 3.3.4
@@ -83,19 +83,19 @@ importers:
version: 9.39.1
'@preact/preset-vite':
specifier: ^2.10.2
version: 2.10.2(@babel/core@7.28.5)(preact@10.27.2)(vite@7.2.2(@types/node@24.10.0)(terser@5.44.1))
version: 2.10.2(@babel/core@7.28.5)(preact@10.27.2)(vite@7.2.2(@types/node@24.10.1)(terser@5.44.1))
'@trivago/prettier-plugin-sort-imports':
specifier: ^6.0.0
version: 6.0.0(prettier@3.6.2)
'@types/node':
specifier: ^24.10.0
version: 24.10.0
specifier: ^24.10.1
version: 24.10.1
'@types/react':
specifier: ^19.2.2
version: 19.2.2
specifier: ^19.2.3
version: 19.2.3
'@types/react-dom':
specifier: ^19.2.2
version: 19.2.2(@types/react@19.2.2)
specifier: ^19.2.3
version: 19.2.3(@types/react@19.2.3)
axe-core:
specifier: ^4.11.0
version: 4.11.0
@@ -122,13 +122,13 @@ importers:
version: 8.46.4(eslint@9.39.1)(typescript@5.9.3)
vite:
specifier: ^7.2.2
version: 7.2.2(@types/node@24.10.0)(terser@5.44.1)
version: 7.2.2(@types/node@24.10.1)(terser@5.44.1)
vite-plugin-imagemin:
specifier: ^0.6.1
version: 0.6.1(vite@7.2.2(@types/node@24.10.0)(terser@5.44.1))
version: 0.6.1(vite@7.2.2(@types/node@24.10.1)(terser@5.44.1))
vite-tsconfig-paths:
specifier: ^5.1.4
version: 5.1.4(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.0)(terser@5.44.1))
version: 5.1.4(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.1)(terser@5.44.1))
packages:
@@ -860,8 +860,8 @@ packages:
resolution: {integrity: sha512-zmPitbQ8+6zNutpwgcQuLcsEpn/Cj54Kbn7L5pX0Os5kdWplB7xPgEh/g+SWOB/qmows2gpuCaPyduq8ZZRnxA==}
deprecated: This is a stub types definition. minimatch provides its own type definitions, so you do not need this installed.
'@types/node@24.10.0':
resolution: {integrity: sha512-qzQZRBqkFsYyaSWXuEHc2WR9c0a0CXwiE5FWUvn7ZM+vdy1uZLfCunD38UzhuB7YN/J11ndbDBcTmOdxJo9Q7A==}
'@types/node@24.10.1':
resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==}
'@types/parse-json@4.0.2':
resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==}
@@ -869,8 +869,8 @@ packages:
'@types/prop-types@15.7.15':
resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==}
'@types/react-dom@19.2.2':
resolution: {integrity: sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw==}
'@types/react-dom@19.2.3':
resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==}
peerDependencies:
'@types/react': ^19.2.0
@@ -879,8 +879,8 @@ packages:
peerDependencies:
'@types/react': '*'
'@types/react@19.2.2':
resolution: {integrity: sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==}
'@types/react@19.2.3':
resolution: {integrity: sha512-k5dJVszUiNr1DSe8Cs+knKR6IrqhqdhpUwzqhkS8ecQTSf3THNtbfIp/umqHMpX2bv+9dkx3fwDv/86LcSfvSg==}
'@types/responselike@1.0.3':
resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==}
@@ -1027,8 +1027,8 @@ packages:
base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
baseline-browser-mapping@2.8.25:
resolution: {integrity: sha512-2NovHVesVF5TXefsGX1yzx1xgr7+m9JQenvz6FQY3qd+YXkKkYiv+vTCc7OriP9mcDZpTC5mAOYN4ocd29+erA==}
baseline-browser-mapping@2.8.26:
resolution: {integrity: sha512-73lC1ugzwoaWCLJ1LvOgrR5xsMLTqSKIEoMHVtL9E/HNk0PXtTM76ZIm84856/SF7Nv8mPZxKoBsgpm0tR1u1Q==}
hasBin: true
bin-build@3.0.0:
@@ -1067,8 +1067,8 @@ packages:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
browserslist@4.27.0:
resolution: {integrity: sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==}
browserslist@4.28.0:
resolution: {integrity: sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
@@ -1337,8 +1337,8 @@ packages:
duplexer3@0.1.5:
resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==}
electron-to-chromium@1.5.249:
resolution: {integrity: sha512-5vcfL3BBe++qZ5kuFhD/p8WOM1N9m3nwvJPULJx+4xf2usSlZFJ0qoNYO2fOX4hi3ocuDcmDobtA+5SFr4OmBg==}
electron-to-chromium@1.5.250:
resolution: {integrity: sha512-/5UMj9IiGDMOFBnN4i7/Ry5onJrAGSbOGo3s9FEKmwobGq6xw832ccET0CE3CkkMBZ8GJSlUIesZofpyurqDXw==}
emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
@@ -3149,7 +3149,7 @@ snapshots:
dependencies:
'@babel/compat-data': 7.28.5
'@babel/helper-validator-option': 7.27.1
browserslist: 4.27.0
browserslist: 4.28.0
lru-cache: 5.1.1
semver: 6.3.1
@@ -3268,7 +3268,7 @@ snapshots:
'@emotion/memoize@0.9.0': {}
'@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0)':
'@emotion/react@11.14.0(@types/react@19.2.3)(react@19.2.0)':
dependencies:
'@babel/runtime': 7.28.4
'@emotion/babel-plugin': 11.13.5
@@ -3280,7 +3280,7 @@ snapshots:
hoist-non-react-statics: 3.3.2
react: 19.2.0
optionalDependencies:
'@types/react': 19.2.2
'@types/react': 19.2.3
transitivePeerDependencies:
- supports-color
@@ -3294,18 +3294,18 @@ snapshots:
'@emotion/sheet@1.4.0': {}
'@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0)':
'@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.3)(react@19.2.0))(@types/react@19.2.3)(react@19.2.0)':
dependencies:
'@babel/runtime': 7.28.4
'@emotion/babel-plugin': 11.13.5
'@emotion/is-prop-valid': 1.4.0
'@emotion/react': 11.14.0(@types/react@19.2.2)(react@19.2.0)
'@emotion/react': 11.14.0(@types/react@19.2.3)(react@19.2.0)
'@emotion/serialize': 1.3.3
'@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.2.0)
'@emotion/utils': 1.4.2
react: 19.2.0
optionalDependencies:
'@types/react': 19.2.2
'@types/react': 19.2.3
transitivePeerDependencies:
- supports-color
@@ -3489,23 +3489,23 @@ snapshots:
'@mui/core-downloads-tracker@7.3.5': {}
'@mui/icons-material@7.3.5(@mui/material@7.3.5(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@types/react@19.2.2)(react@19.2.0)':
'@mui/icons-material@7.3.5(@mui/material@7.3.5(@emotion/react@11.14.0(@types/react@19.2.3)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.3)(react@19.2.0))(@types/react@19.2.3)(react@19.2.0))(@types/react@19.2.3)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@types/react@19.2.3)(react@19.2.0)':
dependencies:
'@babel/runtime': 7.28.4
'@mui/material': 7.3.5(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
'@mui/material': 7.3.5(@emotion/react@11.14.0(@types/react@19.2.3)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.3)(react@19.2.0))(@types/react@19.2.3)(react@19.2.0))(@types/react@19.2.3)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
react: 19.2.0
optionalDependencies:
'@types/react': 19.2.2
'@types/react': 19.2.3
'@mui/material@7.3.5(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
'@mui/material@7.3.5(@emotion/react@11.14.0(@types/react@19.2.3)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.3)(react@19.2.0))(@types/react@19.2.3)(react@19.2.0))(@types/react@19.2.3)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
'@babel/runtime': 7.28.4
'@mui/core-downloads-tracker': 7.3.5
'@mui/system': 7.3.5(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0)
'@mui/types': 7.4.8(@types/react@19.2.2)
'@mui/utils': 7.3.5(@types/react@19.2.2)(react@19.2.0)
'@mui/system': 7.3.5(@emotion/react@11.14.0(@types/react@19.2.3)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.3)(react@19.2.0))(@types/react@19.2.3)(react@19.2.0))(@types/react@19.2.3)(react@19.2.0)
'@mui/types': 7.4.8(@types/react@19.2.3)
'@mui/utils': 7.3.5(@types/react@19.2.3)(react@19.2.0)
'@popperjs/core': 2.11.8
'@types/react-transition-group': 4.4.12(@types/react@19.2.2)
'@types/react-transition-group': 4.4.12(@types/react@19.2.3)
clsx: 2.1.1
csstype: 3.1.3
prop-types: 15.8.1
@@ -3514,20 +3514,20 @@ snapshots:
react-is: 19.2.0
react-transition-group: 4.4.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
optionalDependencies:
'@emotion/react': 11.14.0(@types/react@19.2.2)(react@19.2.0)
'@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0)
'@types/react': 19.2.2
'@emotion/react': 11.14.0(@types/react@19.2.3)(react@19.2.0)
'@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.3)(react@19.2.0))(@types/react@19.2.3)(react@19.2.0)
'@types/react': 19.2.3
'@mui/private-theming@7.3.5(@types/react@19.2.2)(react@19.2.0)':
'@mui/private-theming@7.3.5(@types/react@19.2.3)(react@19.2.0)':
dependencies:
'@babel/runtime': 7.28.4
'@mui/utils': 7.3.5(@types/react@19.2.2)(react@19.2.0)
'@mui/utils': 7.3.5(@types/react@19.2.3)(react@19.2.0)
prop-types: 15.8.1
react: 19.2.0
optionalDependencies:
'@types/react': 19.2.2
'@types/react': 19.2.3
'@mui/styled-engine@7.3.5(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(react@19.2.0)':
'@mui/styled-engine@7.3.5(@emotion/react@11.14.0(@types/react@19.2.3)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.3)(react@19.2.0))(@types/react@19.2.3)(react@19.2.0))(react@19.2.0)':
dependencies:
'@babel/runtime': 7.28.4
'@emotion/cache': 11.14.0
@@ -3537,42 +3537,42 @@ snapshots:
prop-types: 15.8.1
react: 19.2.0
optionalDependencies:
'@emotion/react': 11.14.0(@types/react@19.2.2)(react@19.2.0)
'@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0)
'@emotion/react': 11.14.0(@types/react@19.2.3)(react@19.2.0)
'@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.3)(react@19.2.0))(@types/react@19.2.3)(react@19.2.0)
'@mui/system@7.3.5(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0)':
'@mui/system@7.3.5(@emotion/react@11.14.0(@types/react@19.2.3)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.3)(react@19.2.0))(@types/react@19.2.3)(react@19.2.0))(@types/react@19.2.3)(react@19.2.0)':
dependencies:
'@babel/runtime': 7.28.4
'@mui/private-theming': 7.3.5(@types/react@19.2.2)(react@19.2.0)
'@mui/styled-engine': 7.3.5(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(react@19.2.0)
'@mui/types': 7.4.8(@types/react@19.2.2)
'@mui/utils': 7.3.5(@types/react@19.2.2)(react@19.2.0)
'@mui/private-theming': 7.3.5(@types/react@19.2.3)(react@19.2.0)
'@mui/styled-engine': 7.3.5(@emotion/react@11.14.0(@types/react@19.2.3)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.3)(react@19.2.0))(@types/react@19.2.3)(react@19.2.0))(react@19.2.0)
'@mui/types': 7.4.8(@types/react@19.2.3)
'@mui/utils': 7.3.5(@types/react@19.2.3)(react@19.2.0)
clsx: 2.1.1
csstype: 3.1.3
prop-types: 15.8.1
react: 19.2.0
optionalDependencies:
'@emotion/react': 11.14.0(@types/react@19.2.2)(react@19.2.0)
'@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0)
'@types/react': 19.2.2
'@emotion/react': 11.14.0(@types/react@19.2.3)(react@19.2.0)
'@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.3)(react@19.2.0))(@types/react@19.2.3)(react@19.2.0)
'@types/react': 19.2.3
'@mui/types@7.4.8(@types/react@19.2.2)':
'@mui/types@7.4.8(@types/react@19.2.3)':
dependencies:
'@babel/runtime': 7.28.4
optionalDependencies:
'@types/react': 19.2.2
'@types/react': 19.2.3
'@mui/utils@7.3.5(@types/react@19.2.2)(react@19.2.0)':
'@mui/utils@7.3.5(@types/react@19.2.3)(react@19.2.0)':
dependencies:
'@babel/runtime': 7.28.4
'@mui/types': 7.4.8(@types/react@19.2.2)
'@mui/types': 7.4.8(@types/react@19.2.3)
'@types/prop-types': 15.7.15
clsx: 2.1.1
prop-types: 15.8.1
react: 19.2.0
react-is: 19.2.0
optionalDependencies:
'@types/react': 19.2.2
'@types/react': 19.2.3
'@noble/hashes@1.8.0': {}
@@ -3598,18 +3598,18 @@ snapshots:
dependencies:
preact: 10.27.2
'@preact/preset-vite@2.10.2(@babel/core@7.28.5)(preact@10.27.2)(vite@7.2.2(@types/node@24.10.0)(terser@5.44.1))':
'@preact/preset-vite@2.10.2(@babel/core@7.28.5)(preact@10.27.2)(vite@7.2.2(@types/node@24.10.1)(terser@5.44.1))':
dependencies:
'@babel/core': 7.28.5
'@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.5)
'@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.28.5)
'@prefresh/vite': 2.4.11(preact@10.27.2)(vite@7.2.2(@types/node@24.10.0)(terser@5.44.1))
'@prefresh/vite': 2.4.11(preact@10.27.2)(vite@7.2.2(@types/node@24.10.1)(terser@5.44.1))
'@rollup/pluginutils': 4.2.1
babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.28.5)
debug: 4.4.3
picocolors: 1.1.1
vite: 7.2.2(@types/node@24.10.0)(terser@5.44.1)
vite-prerender-plugin: 0.5.12(vite@7.2.2(@types/node@24.10.0)(terser@5.44.1))
vite: 7.2.2(@types/node@24.10.1)(terser@5.44.1)
vite-prerender-plugin: 0.5.12(vite@7.2.2(@types/node@24.10.1)(terser@5.44.1))
transitivePeerDependencies:
- preact
- supports-color
@@ -3622,7 +3622,7 @@ snapshots:
'@prefresh/utils@1.2.1': {}
'@prefresh/vite@2.4.11(preact@10.27.2)(vite@7.2.2(@types/node@24.10.0)(terser@5.44.1))':
'@prefresh/vite@2.4.11(preact@10.27.2)(vite@7.2.2(@types/node@24.10.1)(terser@5.44.1))':
dependencies:
'@babel/core': 7.28.5
'@prefresh/babel-plugin': 0.5.2
@@ -3630,7 +3630,7 @@ snapshots:
'@prefresh/utils': 1.2.1
'@rollup/pluginutils': 4.2.1
preact: 10.27.2
vite: 7.2.2(@types/node@24.10.0)(terser@5.44.1)
vite: 7.2.2(@types/node@24.10.1)(terser@5.44.1)
transitivePeerDependencies:
- supports-color
@@ -3707,9 +3707,9 @@ snapshots:
'@sindresorhus/is@0.7.0': {}
'@table-library/react-table-library@4.1.15(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
'@table-library/react-table-library@4.1.15(@emotion/react@11.14.0(@types/react@19.2.3)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
'@emotion/react': 11.14.0(@types/react@19.2.2)(react@19.2.0)
'@emotion/react': 11.14.0(@types/react@19.2.3)(react@19.2.0)
clsx: 1.1.1
react: 19.2.0
react-dom: 19.2.0(react@19.2.0)
@@ -3737,7 +3737,7 @@ snapshots:
'@types/glob@7.2.0':
dependencies:
'@types/minimatch': 6.0.0
'@types/node': 24.10.0
'@types/node': 24.10.1
'@types/imagemin-gifsicle@7.0.4':
dependencies:
@@ -3766,19 +3766,19 @@ snapshots:
'@types/imagemin@7.0.1':
dependencies:
'@types/node': 24.10.0
'@types/node': 24.10.1
'@types/json-schema@7.0.15': {}
'@types/keyv@3.1.4':
dependencies:
'@types/node': 24.10.0
'@types/node': 24.10.1
'@types/minimatch@6.0.0':
dependencies:
minimatch: 10.1.1
'@types/node@24.10.0':
'@types/node@24.10.1':
dependencies:
undici-types: 7.16.0
@@ -3786,25 +3786,25 @@ snapshots:
'@types/prop-types@15.7.15': {}
'@types/react-dom@19.2.2(@types/react@19.2.2)':
'@types/react-dom@19.2.3(@types/react@19.2.3)':
dependencies:
'@types/react': 19.2.2
'@types/react': 19.2.3
'@types/react-transition-group@4.4.12(@types/react@19.2.2)':
'@types/react-transition-group@4.4.12(@types/react@19.2.3)':
dependencies:
'@types/react': 19.2.2
'@types/react': 19.2.3
'@types/react@19.2.2':
'@types/react@19.2.3':
dependencies:
csstype: 3.1.3
'@types/responselike@1.0.3':
dependencies:
'@types/node': 24.10.0
'@types/node': 24.10.1
'@types/svgo@2.6.4':
dependencies:
'@types/node': 24.10.0
'@types/node': 24.10.1
'@typescript-eslint/eslint-plugin@8.46.4(@typescript-eslint/parser@8.46.4(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)':
dependencies:
@@ -3963,7 +3963,7 @@ snapshots:
base64-js@1.5.1: {}
baseline-browser-mapping@2.8.25: {}
baseline-browser-mapping@2.8.26: {}
bin-build@3.0.0:
dependencies:
@@ -4018,13 +4018,13 @@ snapshots:
dependencies:
fill-range: 7.1.1
browserslist@4.27.0:
browserslist@4.28.0:
dependencies:
baseline-browser-mapping: 2.8.25
baseline-browser-mapping: 2.8.26
caniuse-lite: 1.0.30001754
electron-to-chromium: 1.5.249
electron-to-chromium: 1.5.250
node-releases: 2.0.27
update-browserslist-db: 1.1.4(browserslist@4.27.0)
update-browserslist-db: 1.1.4(browserslist@4.28.0)
buffer-alloc-unsafe@1.1.0: {}
@@ -4367,7 +4367,7 @@ snapshots:
duplexer3@0.1.5: {}
electron-to-chromium@1.5.249: {}
electron-to-chromium@1.5.250: {}
emoji-regex@8.0.0: {}
@@ -5941,9 +5941,9 @@ snapshots:
universalify@2.0.1: {}
update-browserslist-db@1.1.4(browserslist@4.27.0):
update-browserslist-db@1.1.4(browserslist@4.28.0):
dependencies:
browserslist: 4.27.0
browserslist: 4.28.0
escalade: 3.2.0
picocolors: 1.1.1
@@ -5970,7 +5970,7 @@ snapshots:
spdx-correct: 3.2.0
spdx-expression-parse: 3.0.1
vite-plugin-imagemin@0.6.1(vite@7.2.2(@types/node@24.10.0)(terser@5.44.1)):
vite-plugin-imagemin@0.6.1(vite@7.2.2(@types/node@24.10.1)(terser@5.44.1)):
dependencies:
'@types/imagemin': 7.0.1
'@types/imagemin-gifsicle': 7.0.4
@@ -5995,11 +5995,11 @@ snapshots:
imagemin-webp: 6.1.0
jpegtran-bin: 6.0.1
pathe: 0.2.0
vite: 7.2.2(@types/node@24.10.0)(terser@5.44.1)
vite: 7.2.2(@types/node@24.10.1)(terser@5.44.1)
transitivePeerDependencies:
- supports-color
vite-prerender-plugin@0.5.12(vite@7.2.2(@types/node@24.10.0)(terser@5.44.1)):
vite-prerender-plugin@0.5.12(vite@7.2.2(@types/node@24.10.1)(terser@5.44.1)):
dependencies:
kolorist: 1.8.0
magic-string: 0.30.21
@@ -6007,20 +6007,20 @@ snapshots:
simple-code-frame: 1.3.0
source-map: 0.7.6
stack-trace: 1.0.0-pre2
vite: 7.2.2(@types/node@24.10.0)(terser@5.44.1)
vite: 7.2.2(@types/node@24.10.1)(terser@5.44.1)
vite-tsconfig-paths@5.1.4(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.0)(terser@5.44.1)):
vite-tsconfig-paths@5.1.4(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.1)(terser@5.44.1)):
dependencies:
debug: 4.4.3
globrex: 0.1.2
tsconfck: 3.1.6(typescript@5.9.3)
optionalDependencies:
vite: 7.2.2(@types/node@24.10.0)(terser@5.44.1)
vite: 7.2.2(@types/node@24.10.1)(terser@5.44.1)
transitivePeerDependencies:
- supports-color
- typescript
vite@7.2.2(@types/node@24.10.0)(terser@5.44.1):
vite@7.2.2(@types/node@24.10.1)(terser@5.44.1):
dependencies:
esbuild: 0.25.12
fdir: 6.5.0(picomatch@4.0.3)
@@ -6029,7 +6029,7 @@ snapshots:
rollup: 4.53.2
tinyglobby: 0.2.15
optionalDependencies:
'@types/node': 24.10.0
'@types/node': 24.10.1
fsevents: 2.3.3
terser: 5.44.1

View File

@@ -512,22 +512,24 @@ const Customizations = () => {
</Button>
</>
) : (
<Button
startIcon={<EditIcon />}
variant="outlined"
onClick={() => setRename(true)}
>
{LL.RENAME()}
</Button>
<>
<Button
startIcon={<EditIcon />}
variant="outlined"
onClick={() => setRename(true)}
>
{LL.RENAME()}
</Button>
<Button
startIcon={<SettingsBackupRestoreIcon />}
variant="outlined"
color="error"
onClick={() => setConfirmReset(true)}
>
{LL.REMOVE_ALL()}
</Button>
</>
))}
<Button
startIcon={<SettingsBackupRestoreIcon />}
variant="outlined"
color="error"
onClick={() => setConfirmReset(true)}
>
{LL.REMOVE_ALL()}
</Button>
</Box>
</>
);

View File

@@ -1,7 +1,16 @@
import { memo, useCallback, useContext } from 'react';
import PersonIcon from '@mui/icons-material/Person';
import { Avatar, Box, Button, List, ListItem, ListItemText } from '@mui/material';
import {
Avatar,
Box,
Button,
Divider,
List,
ListItem,
ListItemText,
Typography
} from '@mui/material';
import { AuthenticatedContext } from '@/contexts/authentication';
import { SectionContent, useLayoutTitle } from 'components';
@@ -12,7 +21,7 @@ const UserProfileComponent = () => {
const { LL } = useI18nContext();
const { me, signOut } = useContext(AuthenticatedContext);
useLayoutTitle(LL.USER(1));
useLayoutTitle(LL.USER_PROFILE());
const handleSignOut = useCallback(() => {
signOut(true);
@@ -20,32 +29,33 @@ const UserProfileComponent = () => {
return (
<SectionContent>
<Box padding={2} justifyContent="center" flexDirection="column">
<Box display="flex" alignItems="center" justifyContent="space-between">
<List sx={{ flexGrow: 1 }}>
<ListItem disablePadding>
<Avatar sx={{ bgcolor: '#9e9e9e', color: 'white' }}>
<PersonIcon />
</Avatar>
<ListItemText
sx={{ pl: 2, color: '#2196f3' }}
primary={me.username}
secondary={'(' + (me.admin ? LL.ADMINISTRATOR() : LL.GUEST()) + ')'}
/>
</ListItem>
</List>
<LanguageSelector />
</Box>
<Button
sx={{ mt: 2 }}
variant="outlined"
fullWidth
color="primary"
onClick={handleSignOut}
>
{LL.SIGN_OUT()}
</Button>
<List sx={{ flexGrow: 1 }}>
<ListItem disablePadding>
<Avatar sx={{ bgcolor: '#9e9e9e', color: 'white' }}>
<PersonIcon />
</Avatar>
<ListItemText
sx={{ pl: 2, color: '#2196f3' }}
primary={me.username}
secondary={'(' + (me.admin ? LL.ADMINISTRATOR() : LL.GUEST()) + ')'}
/>
</ListItem>
</List>
<Box mt={2} mb={2} display="flex" alignItems="center">
<Typography mr={2} variant="body1" align="center">
{LL.LANGUAGE()}:
</Typography>
<LanguageSelector />
</Box>
<Divider />
<Button
sx={{ mt: 2 }}
variant="outlined"
color="primary"
onClick={handleSignOut}
>
{LL.SIGN_OUT()}
</Button>
</SectionContent>
);
};

View File

@@ -28,7 +28,7 @@ const VALIDATION_LIMITS = {
MODBUS_TIMEOUT_MIN: 100,
MODBUS_TIMEOUT_MAX: 20000,
SYSLOG_MARK_INTERVAL_MIN: 0,
SYSLOG_MARK_INTERVAL_MAX: 10,
SYSLOG_MARK_INTERVAL_MAX: 60,
SHOWER_MIN_DURATION_MIN: 10,
SHOWER_MIN_DURATION_MAX: 360,
SHOWER_ALERT_TRIGGER_MIN: 1,

View File

@@ -284,7 +284,6 @@ const Version = () => {
const [downloadOnly, setDownloadOnly] = useState<boolean>(false);
const [showVersionInfo, setShowVersionInfo] = useState<number>(0);
// API calls with optimized error handling
const { send: sendCheckUpgrade } = useRequest(
(versions: string) => callAction({ action: 'checkUpgrade', param: versions }),
{ immediate: false }

View File

@@ -1,4 +1,4 @@
// Optimized exports - use direct exports to reduce bundle size
// use direct exports to reduce bundle size
export { default as SectionContent } from './SectionContent';
export { default as ButtonRow } from './ButtonRow';
export { default as MessageBox } from './MessageBox';

View File

@@ -355,7 +355,8 @@ const cz: Translation = {
INTERNET_CONNECTION_REQUIRED: 'Pro automatickou kontrolu a instalaci aktualizací je třeba internetové připojení',
SWITCH_RELEASE_TYPE: 'Přepnout na {0} verzi',
FIRMWARE_VERSION_INFO: 'Informace o verzi firmwaru',
NO_DATA: 'Žádná data'
NO_DATA: 'Žádná data',
USER_PROFILE: 'Uživatelský profil'
};
export default cz;

View File

@@ -355,7 +355,8 @@ const de: Translation = {
INTERNET_CONNECTION_REQUIRED: 'Für die automatische Versionsprüfung und Aktualisierung ist eine Internetverbindung erforderlich',
SWITCH_RELEASE_TYPE: 'Zum {0}-Release wechseln',
FIRMWARE_VERSION_INFO: 'Firmware-Versionsinformation',
NO_DATA: 'Keine Daten'
NO_DATA: 'Keine Daten',
USER_PROFILE: 'Benutzerprofil'
};
export default de;

View File

@@ -355,7 +355,8 @@ const en: Translation = {
INTERNET_CONNECTION_REQUIRED: 'Internet connection required for automatic version checking and upgrading',
SWITCH_RELEASE_TYPE: 'Switch to {0} release',
FIRMWARE_VERSION_INFO: 'Firmware Version Information',
NO_DATA: 'No data'
NO_DATA: 'No data',
USER_PROFILE: 'User Profile'
};
export default en;

View File

@@ -355,7 +355,8 @@ const fr: Translation = {
INTERNET_CONNECTION_REQUIRED: 'Connexion Internet requise pour la vérification automatique des versions et la mise à niveau',
SWITCH_RELEASE_TYPE: 'Passer à la version {0}',
FIRMWARE_VERSION_INFO: 'Informations sur la version du firmware',
NO_DATA: 'Aucune donnée'
NO_DATA: 'Aucune donnée',
USER_PROFILE: 'Profil utilisateur'
};
export default fr;

View File

@@ -47,7 +47,7 @@ const it: Translation = {
REMOVE: 'Elimina',
PROBLEM_UPDATING: 'Problema aggiornamento',
PROBLEM_LOADING: 'Problema caricamento',
ANALOG_SENSOR: 'Sensore Analogico',
ANALOG_SENSOR: 'Sensore Analogico',
ANALOG_SENSORS: 'Sensori Analogici',
SETTINGS: 'Settings',
UPDATED_OF: '{0} Aggiornati',
@@ -355,7 +355,8 @@ const it: Translation = {
INTERNET_CONNECTION_REQUIRED: 'Connessione internet richiesta per il controllo automatico delle versioni e l\'aggiornamento',
SWITCH_RELEASE_TYPE: 'Cambia in {0} rilascio',
FIRMWARE_VERSION_INFO: 'Informazioni sulla versione del firmware',
NO_DATA: 'Nessun dato'
NO_DATA: 'Nessun dato',
USER_PROFILE: 'Profilo utente'
};
export default it;

View File

@@ -355,7 +355,8 @@ const nl: Translation = {
INTERNET_CONNECTION_REQUIRED: 'Internetverbinding vereist voor automatische versiecontrole en -upgrade',
SWITCH_RELEASE_TYPE: 'Switch naar {0} release',
FIRMWARE_VERSION_INFO: 'Informatie over firmwareversie',
NO_DATA: 'Geen data'
NO_DATA: 'Geen data',
USER_PROFILE: 'Gebruikersprofiel'
};
export default nl;

View File

@@ -355,7 +355,8 @@ const no: Translation = {
INTERNET_CONNECTION_REQUIRED: 'Internettilkobling kreves for automatisk versjonskontroll og oppgradering',
SWITCH_RELEASE_TYPE: 'Bytt til {0} utgivelse',
FIRMWARE_VERSION_INFO: 'Informasjon om firmwareversjon',
NO_DATA: 'Ingen data'
NO_DATA: 'Ingen data',
USER_PROFILE: 'Brukerprofil'
};
export default no;

View File

@@ -355,7 +355,8 @@ const pl: BaseTranslation = {
INTERNET_CONNECTION_REQUIRED: 'Połączenie internetowe jest wymagane do automatycznej kontroli wersji i aktualizacji',
SWITCH_RELEASE_TYPE: 'Zmień na {0} wydanie',
FIRMWARE_VERSION_INFO: 'Informacje o wersji firmware',
NO_DATA: 'Brak danych'
NO_DATA: 'Brak danych',
USER_PROFILE: 'Profil użytkownika'
};
export default pl;

View File

@@ -355,7 +355,8 @@ const sk: Translation = {
INTERNET_CONNECTION_REQUIRED: 'Internetové pripojenie je potrebné pre automatickú kontrolu a aktualizáciu',
SWITCH_RELEASE_TYPE: 'Prepnúť na {0} verziu',
FIRMWARE_VERSION_INFO: 'Informácie o verzii firmware',
NO_DATA: 'Žiadne dáta'
NO_DATA: 'Žiadne dáta',
USER_PROFILE: 'Profil používateľa'
};
export default sk;

View File

@@ -355,7 +355,8 @@ const sv: Translation = {
INTERNET_CONNECTION_REQUIRED: 'Internetanslutning krävs för automatisk version kontroll och uppdatering',
SWITCH_RELEASE_TYPE: 'Byt till {0} utgåva',
FIRMWARE_VERSION_INFO: 'Information om firmwareversion',
NO_DATA: 'Ingen data'
NO_DATA: 'Ingen data',
USER_PROFILE: 'Användarprofil'
};
export default sv;

View File

@@ -355,7 +355,8 @@ const tr: Translation = {
INTERNET_CONNECTION_REQUIRED: 'Otomatik sürüm kontrolü ve güncelleme için internet bağlantısı gereklidir',
SWITCH_RELEASE_TYPE: '{0} sürümüne geç',
FIRMWARE_VERSION_INFO: 'Firmware Sürüm Bilgisi',
NO_DATA: 'Hiçbir veri yok'
NO_DATA: 'Hiçbir veri yok',
USER_PROFILE: 'Kullanıcı Profili'
};
export default tr;

View File

@@ -11,9 +11,29 @@ export const numberValue = (value?: number): string =>
export const extractEventValue = (
event: React.ChangeEvent<HTMLInputElement>
): string | number | boolean => {
const { type, valueAsNumber, checked, value } = event.target;
const { type, checked, value } = event.target;
if (type === 'number') return valueAsNumber;
if (type === 'number') {
if (value === '') return NaN;
const normalizedValue = value.replace(',', '.');
// For incomplete number entries, keep the raw string to allow smooth typing
// This includes: "0.", "1.0", "0.00", "-", "-.", "-.5", etc.
const endsWithDecimalAndZeros = /\.\d*0$/.test(normalizedValue);
const isIncomplete =
normalizedValue.endsWith('.') ||
normalizedValue === '-' ||
normalizedValue === '-.' ||
endsWithDecimalAndZeros;
if (isIncomplete) {
return normalizedValue;
}
const parsedValue = parseFloat(normalizedValue);
return parsedValue;
}
if (type === 'checkbox') return checked;
return value;
};

View File

@@ -7,7 +7,7 @@ const VALID_EXTENSIONS = new Set(['bin', 'json', 'md5']);
const ONE_SECOND_MS = 1000;
const TEN_PERCENT = 10;
// Optimized padding function
// padding function
const pad = (number) => String(number).padStart(2, '0');
// Simple throttle helper (time-based)

View File

@@ -276,10 +276,10 @@ function updateMask(entity: any, de: any, dd: any) {
const old_custom_name = dd.nodes[dd_objIndex].cn;
console.log(
'comparing names, old (' +
old_custom_name +
') with new (' +
new_custom_name +
')'
old_custom_name +
') with new (' +
new_custom_name +
')'
);
if (old_custom_name !== new_custom_name) {
changed = true;
@@ -375,15 +375,15 @@ function check_upgrade(version: string) {
console.log(
'Upgrade this version (' +
THIS_VERSION +
') to dev (' +
dev_version +
') is ' +
(DEV_VERSION_IS_UPGRADEABLE ? 'YES' : 'NO') +
' and to stable (' +
stable_version +
') is ' +
(STABLE_VERSION_IS_UPGRADEABLE ? 'YES' : 'NO')
THIS_VERSION +
') to dev (' +
dev_version +
') is ' +
(DEV_VERSION_IS_UPGRADEABLE ? 'YES' : 'NO') +
' and to stable (' +
stable_version +
') is ' +
(STABLE_VERSION_IS_UPGRADEABLE ? 'YES' : 'NO')
);
data = {
emsesp_version: THIS_VERSION,
@@ -4559,8 +4559,8 @@ router
let dashboard_object: { id?: number; n?: string; t?: number; nodes?: any[] } =
{};
// let fake = false;
let fake = true; // toggle for testing, shows a subset of data
let fake = false;
// let fake = true; // toggle for testing, shows a subset of data
if (!fake) {
// pick EMS devices from coredata

View File

@@ -1436,4 +1436,10 @@ washingmachine
switchprogram
brotlin
fanspd
currhum
currhum
pumpstep
constmed
constlow
proplow
chimneysweeper