From 6866d5b7a9c49d8829b93d9af996222d8bd61b55 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Mon, 5 May 2025 18:29:06 +0200 Subject: [PATCH 01/13] update pkg --- interface/package.json | 18 +- interface/yarn.lock | 998 +++++++++++++++++++++++++++++++++++++---- 2 files changed, 914 insertions(+), 102 deletions(-) diff --git a/interface/package.json b/interface/package.json index 2ed0ed383..42bead0e9 100644 --- a/interface/package.json +++ b/interface/package.json @@ -27,9 +27,9 @@ "@mui/icons-material": "^7.0.2", "@mui/material": "^7.0.2", "@table-library/react-table-library": "4.1.15", - "formidable": "^3.5.4", "alova": "3.2.10", "async-validator": "^4.2.5", + "formidable": "^3.5.4", "jwt-decode": "^4.0.0", "magic-string": "^0.30.17", "mime-types": "^3.0.1", @@ -37,28 +37,28 @@ "react": "^19.1.0", "react-dom": "^19.1.0", "react-icons": "^5.5.0", - "react-router": "^7.5.1", + "react-router": "^7.5.3", "react-toastify": "^11.0.5", "typesafe-i18n": "^5.26.2", "typescript": "^5.8.3" }, "devDependencies": { - "@babel/core": "^7.26.10", - "@eslint/js": "^9.25.1", + "@babel/core": "^7.27.1", + "@eslint/js": "^9.26.0", "@preact/compat": "^18.3.1", "@preact/preset-vite": "^2.10.1", "@trivago/prettier-plugin-sort-imports": "^5.2.2", - "@types/node": "^22.14.1", + "@types/node": "^22.15.3", "@types/react": "^19.1.2", - "@types/react-dom": "^19.1.2", + "@types/react-dom": "^19.1.3", "concurrently": "^9.1.2", - "eslint": "^9.25.1", + "eslint": "^9.26.0", "eslint-config-prettier": "^10.1.2", "prettier": "^3.5.3", "rollup-plugin-visualizer": "^5.14.0", "terser": "^5.39.0", - "typescript-eslint": "8.31.0", - "vite": "^6.3.2", + "typescript-eslint": "8.31.1", + "vite": "^6.3.5", "vite-plugin-imagemin": "^0.6.1", "vite-tsconfig-paths": "^5.1.4" }, diff --git a/interface/yarn.lock b/interface/yarn.lock index 88e992c37..d0bf047ee 100644 --- a/interface/yarn.lock +++ b/interface/yarn.lock @@ -44,6 +44,17 @@ __metadata: languageName: node linkType: hard +"@babel/code-frame@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/code-frame@npm:7.27.1" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.27.1" + js-tokens: "npm:^4.0.0" + picocolors: "npm:^1.1.1" + checksum: 10c0/5dd9a18baa5fce4741ba729acc3a3272c49c25cb8736c4b18e113099520e7ef7b545a4096a26d600e4416157e63e87d66db46aa3fbf0a5f2286da2705c12da00 + languageName: node + linkType: hard + "@babel/compat-data@npm:^7.26.8": version: 7.26.8 resolution: "@babel/compat-data@npm:7.26.8" @@ -51,7 +62,14 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.22.1, @babel/core@npm:^7.26.10": +"@babel/compat-data@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/compat-data@npm:7.27.1" + checksum: 10c0/03e3a01b6772858dc5064f332ad4dc16fbbc0353f2180fd663a2651e8305058e35b6db57114e345d925def9b73cd7a322e95a45913428b8db705a098fd3dd289 + languageName: node + linkType: hard + +"@babel/core@npm:^7.22.1": version: 7.26.10 resolution: "@babel/core@npm:7.26.10" dependencies: @@ -74,6 +92,29 @@ __metadata: languageName: node linkType: hard +"@babel/core@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/core@npm:7.27.1" + dependencies: + "@ampproject/remapping": "npm:^2.2.0" + "@babel/code-frame": "npm:^7.27.1" + "@babel/generator": "npm:^7.27.1" + "@babel/helper-compilation-targets": "npm:^7.27.1" + "@babel/helper-module-transforms": "npm:^7.27.1" + "@babel/helpers": "npm:^7.27.1" + "@babel/parser": "npm:^7.27.1" + "@babel/template": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + convert-source-map: "npm:^2.0.0" + debug: "npm:^4.1.0" + gensync: "npm:^1.0.0-beta.2" + json5: "npm:^2.2.3" + semver: "npm:^6.3.1" + checksum: 10c0/0fc31f87f5401ac5d375528cb009f4ea5527fc8c5bb5b64b5b22c033b60fd0ad723388933a5f3f5db14e1edd13c958e9dd7e5c68f9b68c767aeb496199c8a4bb + languageName: node + linkType: hard + "@babel/generator@npm:^7.26.10, @babel/generator@npm:^7.26.5, @babel/generator@npm:^7.27.0": version: 7.27.0 resolution: "@babel/generator@npm:7.27.0" @@ -87,6 +128,19 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/generator@npm:7.27.1" + dependencies: + "@babel/parser": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.25" + jsesc: "npm:^3.0.2" + checksum: 10c0/c4156434b21818f558ebd93ce45f027c53ee570ce55a84fd2d9ba45a79ad204c17e0bff753c886fb6c07df3385445a9e34dc7ccb070d0ac7e80bb91c8b57f423 + languageName: node + linkType: hard + "@babel/helper-annotate-as-pure@npm:^7.25.9": version: 7.25.9 resolution: "@babel/helper-annotate-as-pure@npm:7.25.9" @@ -109,6 +163,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-compilation-targets@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-compilation-targets@npm:7.27.1" + dependencies: + "@babel/compat-data": "npm:^7.27.1" + "@babel/helper-validator-option": "npm:^7.27.1" + browserslist: "npm:^4.24.0" + lru-cache: "npm:^5.1.1" + semver: "npm:^6.3.1" + checksum: 10c0/1cfd3760a1bf1e367ea4a91214c041be7076197ba7a4f3c0710cab00fb5734eb010a2946efe6ecfb1ca9dc63e6c69644a1afa399db4082f374b9311e129f6f0b + languageName: node + linkType: hard + "@babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.25.9": version: 7.25.9 resolution: "@babel/helper-module-imports@npm:7.25.9" @@ -119,6 +186,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-imports@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-module-imports@npm:7.27.1" + dependencies: + "@babel/traverse": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + checksum: 10c0/e00aace096e4e29290ff8648455c2bc4ed982f0d61dbf2db1b5e750b9b98f318bf5788d75a4f974c151bd318fd549e81dbcab595f46b14b81c12eda3023f51e8 + languageName: node + linkType: hard + "@babel/helper-module-transforms@npm:^7.26.0": version: 7.26.0 resolution: "@babel/helper-module-transforms@npm:7.26.0" @@ -132,6 +209,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-transforms@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-module-transforms@npm:7.27.1" + dependencies: + "@babel/helper-module-imports": "npm:^7.27.1" + "@babel/helper-validator-identifier": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/196ab29635fe6eb5ba6ead2972d41b1c0d40f400f99bd8fc109cef21440de24c26c972fabf932585e618694d590379ab8d22def8da65a54459d38ec46112ead7 + languageName: node + linkType: hard + "@babel/helper-plugin-utils@npm:^7.25.9": version: 7.26.5 resolution: "@babel/helper-plugin-utils@npm:7.26.5" @@ -146,6 +236,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-string-parser@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-string-parser@npm:7.27.1" + checksum: 10c0/8bda3448e07b5583727c103560bcf9c4c24b3c1051a4c516d4050ef69df37bb9a4734a585fe12725b8c2763de0a265aa1e909b485a4e3270b7cfd3e4dbe4b602 + languageName: node + linkType: hard + "@babel/helper-validator-identifier@npm:^7.25.9": version: 7.25.9 resolution: "@babel/helper-validator-identifier@npm:7.25.9" @@ -153,6 +250,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-identifier@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-validator-identifier@npm:7.27.1" + checksum: 10c0/c558f11c4871d526498e49d07a84752d1800bf72ac0d3dad100309a2eaba24efbf56ea59af5137ff15e3a00280ebe588560534b0e894a4750f8b1411d8f78b84 + languageName: node + linkType: hard + "@babel/helper-validator-option@npm:^7.25.9": version: 7.25.9 resolution: "@babel/helper-validator-option@npm:7.25.9" @@ -160,6 +264,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-option@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-validator-option@npm:7.27.1" + checksum: 10c0/6fec5f006eba40001a20f26b1ef5dbbda377b7b68c8ad518c05baa9af3f396e780bdfded24c4eef95d14bb7b8fd56192a6ed38d5d439b97d10efc5f1a191d148 + languageName: node + linkType: hard + "@babel/helpers@npm:^7.26.10": version: 7.27.0 resolution: "@babel/helpers@npm:7.27.0" @@ -170,6 +281,16 @@ __metadata: languageName: node linkType: hard +"@babel/helpers@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helpers@npm:7.27.1" + dependencies: + "@babel/template": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + checksum: 10c0/e078257b9342dae2c041ac050276c5a28701434ad09478e6dc6976abd99f721a5a92e4bebddcbca6b1c3a7e8acace56a946340c701aad5e7507d2c87446459ba + languageName: node + linkType: hard + "@babel/parser@npm:^7.26.10, @babel/parser@npm:^7.26.7, @babel/parser@npm:^7.27.0": version: 7.27.0 resolution: "@babel/parser@npm:7.27.0" @@ -181,6 +302,17 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/parser@npm:7.27.1" + dependencies: + "@babel/types": "npm:^7.27.1" + bin: + parser: ./bin/babel-parser.js + checksum: 10c0/ae4a5eda3ada3fd54c9942d9f14385df7a18e71b386cf2652505bb9a40a32250dfde3bdda71fb08af00b1e154f0a6213e6cdaaa88e9941229ec0003f7fead759 + languageName: node + linkType: hard + "@babel/plugin-syntax-jsx@npm:^7.25.9": version: 7.25.9 resolution: "@babel/plugin-syntax-jsx@npm:7.25.9" @@ -238,6 +370,17 @@ __metadata: languageName: node linkType: hard +"@babel/template@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/template@npm:7.27.1" + dependencies: + "@babel/code-frame": "npm:^7.27.1" + "@babel/parser": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + checksum: 10c0/155a8e056e82f1f1e2413b7bf9d96890e371d617c7f77f25621fb0ddb32128958d86bc5c3356f00be266e9f8c121d886de5b4143dbb72eac362377f53aba72a2 + languageName: node + linkType: hard + "@babel/traverse@npm:^7.25.9, @babel/traverse@npm:^7.26.10, @babel/traverse@npm:^7.26.7": version: 7.27.0 resolution: "@babel/traverse@npm:7.27.0" @@ -253,6 +396,21 @@ __metadata: languageName: node linkType: hard +"@babel/traverse@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/traverse@npm:7.27.1" + dependencies: + "@babel/code-frame": "npm:^7.27.1" + "@babel/generator": "npm:^7.27.1" + "@babel/parser": "npm:^7.27.1" + "@babel/template": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + debug: "npm:^4.3.1" + globals: "npm:^11.1.0" + checksum: 10c0/d912110037b03b1d70a2436cfd51316d930366a5f54252da2bced1ba38642f644f848240a951e5caf12f1ef6c40d3d96baa92ea6e84800f2e891c15e97b25d50 + languageName: node + linkType: hard + "@babel/types@npm:^7.25.9, @babel/types@npm:^7.26.10, @babel/types@npm:^7.26.7, @babel/types@npm:^7.27.0": version: 7.27.0 resolution: "@babel/types@npm:7.27.0" @@ -263,6 +421,16 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/types@npm:7.27.1" + dependencies: + "@babel/helper-string-parser": "npm:^7.27.1" + "@babel/helper-validator-identifier": "npm:^7.27.1" + checksum: 10c0/ed736f14db2fdf0d36c539c8e06b6bb5e8f9649a12b5c0e1c516fed827f27ef35085abe08bf4d1302a4e20c9a254e762eed453bce659786d4a6e01ba26a91377 + languageName: node + linkType: hard + "@emotion/babel-plugin@npm:^11.13.5": version: 11.13.5 resolution: "@emotion/babel-plugin@npm:11.13.5" @@ -653,10 +821,10 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:9.25.1, @eslint/js@npm:^9.25.1": - version: 9.25.1 - resolution: "@eslint/js@npm:9.25.1" - checksum: 10c0/87d86b512ab109bfd3b9317ced3220ea3d444ac3bfa7abd853ca7f724d72c36e213062f9def16a632365d97dc29e0094312e3682a9767590ee6f43b3d5d873fd +"@eslint/js@npm:9.26.0, @eslint/js@npm:^9.26.0": + version: 9.26.0 + resolution: "@eslint/js@npm:9.26.0" + checksum: 10c0/89fa45b7ff7f3c2589ea1f04a31b4f6d41ad85ecac98e519195e8b3a908b103c892ac19c4aec0629cfeccefd9e5b63c2f1269183d63016e7de722b97a085dcf4 languageName: node linkType: hard @@ -790,6 +958,24 @@ __metadata: languageName: node linkType: hard +"@modelcontextprotocol/sdk@npm:^1.8.0": + version: 1.11.0 + resolution: "@modelcontextprotocol/sdk@npm:1.11.0" + dependencies: + content-type: "npm:^1.0.5" + cors: "npm:^2.8.5" + cross-spawn: "npm:^7.0.3" + eventsource: "npm:^3.0.2" + express: "npm:^5.0.1" + express-rate-limit: "npm:^7.5.0" + pkce-challenge: "npm:^5.0.0" + raw-body: "npm:^3.0.0" + zod: "npm:^3.23.8" + zod-to-json-schema: "npm:^3.24.1" + checksum: 10c0/10ce5ebe54b238df614051e0f2ef8f037fee6ceda7a870f5892c84efe21cbdcdb7e932d9be25e91982e0eb40e4c8ed33da9b0b2ca01df6baa76eb0cd5cb89ce6 + languageName: node + linkType: hard + "@mui/core-downloads-tracker@npm:^7.0.2": version: 7.0.2 resolution: "@mui/core-downloads-tracker@npm:7.0.2" @@ -951,6 +1137,13 @@ __metadata: languageName: node linkType: hard +"@noble/hashes@npm:^1.1.5": + version: 1.8.0 + resolution: "@noble/hashes@npm:1.8.0" + checksum: 10c0/06a0b52c81a6fa7f04d67762e08b2c476a00285858150caeaaff4037356dd5e119f45b2a530f638b77a5eeca013168ec1b655db41bae3236cb2e9d511484fc77 + languageName: node + linkType: hard + "@nodelib/fs.scandir@npm:2.1.5": version: 2.1.5 resolution: "@nodelib/fs.scandir@npm:2.1.5" @@ -1000,6 +1193,15 @@ __metadata: languageName: node linkType: hard +"@paralleldrive/cuid2@npm:^2.2.2": + version: 2.2.2 + resolution: "@paralleldrive/cuid2@npm:2.2.2" + dependencies: + "@noble/hashes": "npm:^1.1.5" + checksum: 10c0/af5826df93de437121308f4f4ce0b2eeb89b60bb57a1a6592fb89c0d40d311ad1d9f3f6a4db2cce6f2bcf572de1aa3f85704254e89b18ce61c41ebb06564c4ee + languageName: node + linkType: hard + "@pkgjs/parseargs@npm:^0.11.0": version: 0.11.0 resolution: "@pkgjs/parseargs@npm:0.11.0" @@ -1399,7 +1601,7 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:^22.15.2": +"@types/node@npm:*": version: 22.15.2 resolution: "@types/node@npm:22.15.2" dependencies: @@ -1408,6 +1610,15 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:^22.15.3": + version: 22.15.3 + resolution: "@types/node@npm:22.15.3" + dependencies: + undici-types: "npm:~6.21.0" + checksum: 10c0/2879f012d1aeba0bfdb5fed80d165f4f2cb3d1f2e1f98a24b18d4a211b4ace7d64bf2622784c78355982ffc1081ba79d0934efc2fb8353913e5871a63609661f + languageName: node + linkType: hard + "@types/parse-json@npm:^4.0.0": version: 4.0.2 resolution: "@types/parse-json@npm:4.0.2" @@ -1422,12 +1633,12 @@ __metadata: languageName: node linkType: hard -"@types/react-dom@npm:^19.1.2": - version: 19.1.2 - resolution: "@types/react-dom@npm:19.1.2" +"@types/react-dom@npm:^19.1.3": + version: 19.1.3 + resolution: "@types/react-dom@npm:19.1.3" peerDependencies: "@types/react": ^19.0.0 - checksum: 10c0/100c341cacba9ec8ae1d47ee051072a3450e9573bf8eeb7262490e341cb246ea0f95a07a1f2077e61cf92648f812a0324c602fcd811bd87b7ce41db2811510cd + checksum: 10c0/bb1e3f7a446958f5aa7e46f74cf8470dab7444ab958a57efacca1abcc9847e4ca71e2df68515176ed8fe3fc89315bd949d60f1f346cbadbdbf302bff59d3961b languageName: node linkType: hard @@ -1467,15 +1678,15 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:8.31.0": - version: 8.31.0 - resolution: "@typescript-eslint/eslint-plugin@npm:8.31.0" +"@typescript-eslint/eslint-plugin@npm:8.31.1": + version: 8.31.1 + resolution: "@typescript-eslint/eslint-plugin@npm:8.31.1" dependencies: "@eslint-community/regexpp": "npm:^4.10.0" - "@typescript-eslint/scope-manager": "npm:8.31.0" - "@typescript-eslint/type-utils": "npm:8.31.0" - "@typescript-eslint/utils": "npm:8.31.0" - "@typescript-eslint/visitor-keys": "npm:8.31.0" + "@typescript-eslint/scope-manager": "npm:8.31.1" + "@typescript-eslint/type-utils": "npm:8.31.1" + "@typescript-eslint/utils": "npm:8.31.1" + "@typescript-eslint/visitor-keys": "npm:8.31.1" graphemer: "npm:^1.4.0" ignore: "npm:^5.3.1" natural-compare: "npm:^1.4.0" @@ -1484,64 +1695,64 @@ __metadata: "@typescript-eslint/parser": ^8.0.0 || ^8.0.0-alpha.0 eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/7d78e0cdcc967742752d49d2d38986ee38d0b7ca64af247e5fe0816cea9ae5f1bfa5c126154acc0846af515c4fb1c52c96926ee25c73b4c3f7e6fd73cb6d2b0e + checksum: 10c0/9d805ab413a666fd2eefb16f257fbf3cea7278ccaf0db30ceb686dfe696e4f40b3aa7c336261c7f0a39a51a7c32a4f08d3d4f16bba0e764ac12c93ae94d82896 languageName: node linkType: hard -"@typescript-eslint/parser@npm:8.31.0": - version: 8.31.0 - resolution: "@typescript-eslint/parser@npm:8.31.0" +"@typescript-eslint/parser@npm:8.31.1": + version: 8.31.1 + resolution: "@typescript-eslint/parser@npm:8.31.1" dependencies: - "@typescript-eslint/scope-manager": "npm:8.31.0" - "@typescript-eslint/types": "npm:8.31.0" - "@typescript-eslint/typescript-estree": "npm:8.31.0" - "@typescript-eslint/visitor-keys": "npm:8.31.0" + "@typescript-eslint/scope-manager": "npm:8.31.1" + "@typescript-eslint/types": "npm:8.31.1" + "@typescript-eslint/typescript-estree": "npm:8.31.1" + "@typescript-eslint/visitor-keys": "npm:8.31.1" debug: "npm:^4.3.4" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/9bd903b3ea4e24bfeb444d7a5c2ed82e591ef5cffc0874c609de854c05d34935cd85543e66678ecdb8e0e3eae2cda2df5c1ba66eb72010632cb9f8779031d56d + checksum: 10c0/4fffaddbe443fc6a512042b6a777a8b7d9775938b26f54d86279b232b9b3967d90d6bfd65aca0ff010d377855df19708c918545f51cedc51b1688726201added languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:8.31.0": - version: 8.31.0 - resolution: "@typescript-eslint/scope-manager@npm:8.31.0" +"@typescript-eslint/scope-manager@npm:8.31.1": + version: 8.31.1 + resolution: "@typescript-eslint/scope-manager@npm:8.31.1" dependencies: - "@typescript-eslint/types": "npm:8.31.0" - "@typescript-eslint/visitor-keys": "npm:8.31.0" - checksum: 10c0/eae758a24cc578fa351b8bf0c30c50de384292c0b05a58762f9b632d65a009bd5d902d806eccb6b678cc0b09686289fb4f1fd67da7f12d59ad43ff033b35cc4f + "@typescript-eslint/types": "npm:8.31.1" + "@typescript-eslint/visitor-keys": "npm:8.31.1" + checksum: 10c0/759cfaa922f8bc97ecdcfe583df88ad31b04d02a865efc2c6dab622374c9f32839054596193ec3b1c478d8a73690999cbd996e1092605f41a54bbe6a9a62bbf3 languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:8.31.0": - version: 8.31.0 - resolution: "@typescript-eslint/type-utils@npm:8.31.0" +"@typescript-eslint/type-utils@npm:8.31.1": + version: 8.31.1 + resolution: "@typescript-eslint/type-utils@npm:8.31.1" dependencies: - "@typescript-eslint/typescript-estree": "npm:8.31.0" - "@typescript-eslint/utils": "npm:8.31.0" + "@typescript-eslint/typescript-estree": "npm:8.31.1" + "@typescript-eslint/utils": "npm:8.31.1" debug: "npm:^4.3.4" ts-api-utils: "npm:^2.0.1" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/f6938413a583430468b259f6823bb2ab1b5cd77cd6d4e21e1803df70e329046b9579aed5bdc9bdcf4046c8091615a911ac3990859db78d00210bb867915ba37f + checksum: 10c0/ea5369cf200cd48f26e2c6013c81f5915cc933117e011537a7424402a1ebececc8a39e290b9572a7876a237116fbd75e9ba9313c9898ab828f5a814ab26066d2 languageName: node linkType: hard -"@typescript-eslint/types@npm:8.31.0": - version: 8.31.0 - resolution: "@typescript-eslint/types@npm:8.31.0" - checksum: 10c0/04130a30aac477d36d6a155399b27773457aeb9b485ef8fb56fee05725b6e36768c9fac7e4d1f073fd16988de0eb7dffc743c3f834ae907cf918cabb075e5cd8 +"@typescript-eslint/types@npm:8.31.1": + version: 8.31.1 + resolution: "@typescript-eslint/types@npm:8.31.1" + checksum: 10c0/d52692559028b71d8bfda4f098c7fa08e272c11cf9dd99ea9e1cfb00036c0849d6d53694e047a942c6568b3bf5637512e46356de70b412a9216ec6cfb8b2b950 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:8.31.0": - version: 8.31.0 - resolution: "@typescript-eslint/typescript-estree@npm:8.31.0" +"@typescript-eslint/typescript-estree@npm:8.31.1": + version: 8.31.1 + resolution: "@typescript-eslint/typescript-estree@npm:8.31.1" dependencies: - "@typescript-eslint/types": "npm:8.31.0" - "@typescript-eslint/visitor-keys": "npm:8.31.0" + "@typescript-eslint/types": "npm:8.31.1" + "@typescript-eslint/visitor-keys": "npm:8.31.1" debug: "npm:^4.3.4" fast-glob: "npm:^3.3.2" is-glob: "npm:^4.0.3" @@ -1550,32 +1761,32 @@ __metadata: ts-api-utils: "npm:^2.0.1" peerDependencies: typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/0ec074b2b9c49f80fafea716aa0cc4b05085e65730a3ef7c7d2d39db1657a40b38abe83f22bbe15ac4f6fdf576692f47d2d057347242e6cef5be81d070f55064 + checksum: 10c0/77059f204389d2d1b6db32d4df63473c99f5bd051218200f257531c2d2b2e3f237b23aa80a79baebc9ca8a776636867f1fd2d03533d207da2685d740e2c7fbef languageName: node linkType: hard -"@typescript-eslint/utils@npm:8.31.0": - version: 8.31.0 - resolution: "@typescript-eslint/utils@npm:8.31.0" +"@typescript-eslint/utils@npm:8.31.1": + version: 8.31.1 + resolution: "@typescript-eslint/utils@npm:8.31.1" dependencies: "@eslint-community/eslint-utils": "npm:^4.4.0" - "@typescript-eslint/scope-manager": "npm:8.31.0" - "@typescript-eslint/types": "npm:8.31.0" - "@typescript-eslint/typescript-estree": "npm:8.31.0" + "@typescript-eslint/scope-manager": "npm:8.31.1" + "@typescript-eslint/types": "npm:8.31.1" + "@typescript-eslint/typescript-estree": "npm:8.31.1" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/1fd4f62e16a44a5be2de501f70ba4b2d64479e014370bde7bbc6de6897cf1699766a8b7be4deb9b0328e74c2b4171839336ede4e3c60fec6ac8378b623a75275 + checksum: 10c0/6190551702605aa60e67828163cb5880eee7ab5f1ee789d32227e4f4297d80ea9be98776400fd0660551dcbcac2a35babef33dd94267856dcb6f36c9c94f11ab languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:8.31.0": - version: 8.31.0 - resolution: "@typescript-eslint/visitor-keys@npm:8.31.0" +"@typescript-eslint/visitor-keys@npm:8.31.1": + version: 8.31.1 + resolution: "@typescript-eslint/visitor-keys@npm:8.31.1" dependencies: - "@typescript-eslint/types": "npm:8.31.0" + "@typescript-eslint/types": "npm:8.31.1" eslint-visitor-keys: "npm:^4.2.0" - checksum: 10c0/e41e2a9e287d11232cda6126377d1df4de69c6e9dc2a14058819cff15280ec654a3877886a6806728196f299766cfbb0b299eb021c2ce168eb15dff5eb07b51b + checksum: 10c0/09dbd8e1fdff72802a10bae2c12fa6d25f7e2dab1ff9b720afc2eb4e848b723c179109032aeaeb409d0c9e4107ab4fab8c8b1b47a55d58713d3f29a1365db3ea languageName: node linkType: hard @@ -1584,24 +1795,25 @@ __metadata: resolution: "EMS-ESP@workspace:." dependencies: "@alova/adapter-xhr": "npm:2.1.1" - "@babel/core": "npm:^7.26.10" + "@babel/core": "npm:^7.27.1" "@emotion/react": "npm:^11.14.0" "@emotion/styled": "npm:^11.14.0" - "@eslint/js": "npm:^9.25.1" + "@eslint/js": "npm:^9.26.0" "@mui/icons-material": "npm:^7.0.2" "@mui/material": "npm:^7.0.2" "@preact/compat": "npm:^18.3.1" "@preact/preset-vite": "npm:^2.10.1" "@table-library/react-table-library": "npm:4.1.15" "@trivago/prettier-plugin-sort-imports": "npm:^5.2.2" - "@types/node": "npm:^22.15.2" + "@types/node": "npm:^22.15.3" "@types/react": "npm:^19.1.2" - "@types/react-dom": "npm:^19.1.2" + "@types/react-dom": "npm:^19.1.3" alova: "npm:3.2.10" async-validator: "npm:^4.2.5" concurrently: "npm:^9.1.2" - eslint: "npm:^9.25.1" + eslint: "npm:^9.26.0" eslint-config-prettier: "npm:^10.1.2" + formidable: "npm:^3.5.4" jwt-decode: "npm:^4.0.0" magic-string: "npm:^0.30.17" mime-types: "npm:^3.0.1" @@ -1610,14 +1822,14 @@ __metadata: react: "npm:^19.1.0" react-dom: "npm:^19.1.0" react-icons: "npm:^5.5.0" - react-router: "npm:^7.5.2" + react-router: "npm:^7.5.3" react-toastify: "npm:^11.0.5" rollup-plugin-visualizer: "npm:^5.14.0" terser: "npm:^5.39.0" typesafe-i18n: "npm:^5.26.2" typescript: "npm:^5.8.3" - typescript-eslint: "npm:8.31.0" - vite: "npm:^6.3.3" + typescript-eslint: "npm:8.31.1" + vite: "npm:^6.3.5" vite-plugin-imagemin: "npm:^0.6.1" vite-tsconfig-paths: "npm:^5.1.4" languageName: unknown @@ -1630,6 +1842,16 @@ __metadata: languageName: node linkType: hard +"accepts@npm:^2.0.0": + version: 2.0.0 + resolution: "accepts@npm:2.0.0" + dependencies: + mime-types: "npm:^3.0.0" + negotiator: "npm:^1.0.0" + checksum: 10c0/98374742097e140891546076215f90c32644feacf652db48412329de4c2a529178a81aa500fbb13dd3e6cbf6e68d829037b123ac037fc9a08bcec4b87b358eef + languageName: node + linkType: hard + "acorn-jsx@npm:^5.3.2": version: 5.3.2 resolution: "acorn-jsx@npm:5.3.2" @@ -1758,6 +1980,13 @@ __metadata: languageName: node linkType: hard +"asap@npm:^2.0.0": + version: 2.0.6 + resolution: "asap@npm:2.0.6" + checksum: 10c0/c6d5e39fe1f15e4b87677460bd66b66050cd14c772269cee6688824c1410a08ab20254bb6784f9afb75af9144a9f9a7692d49547f4d19d715aeb7c0318f3136d + languageName: node + linkType: hard + "async-validator@npm:^4.2.5": version: 4.2.5 resolution: "async-validator@npm:4.2.5" @@ -1867,6 +2096,23 @@ __metadata: languageName: node linkType: hard +"body-parser@npm:^2.2.0": + version: 2.2.0 + resolution: "body-parser@npm:2.2.0" + dependencies: + bytes: "npm:^3.1.2" + content-type: "npm:^1.0.5" + debug: "npm:^4.4.0" + http-errors: "npm:^2.0.0" + iconv-lite: "npm:^0.6.3" + on-finished: "npm:^2.4.1" + qs: "npm:^6.14.0" + raw-body: "npm:^3.0.0" + type-is: "npm:^2.0.0" + checksum: 10c0/a9ded39e71ac9668e2211afa72e82ff86cc5ef94de1250b7d1ba9cc299e4150408aaa5f1e8b03dd4578472a3ce6d1caa2a23b27a6c18e526e48b4595174c116c + languageName: node + linkType: hard + "boolbase@npm:^1.0.0": version: 1.0.0 resolution: "boolbase@npm:1.0.0" @@ -1964,6 +2210,13 @@ __metadata: languageName: node linkType: hard +"bytes@npm:3.1.2, bytes@npm:^3.1.2": + version: 3.1.2 + resolution: "bytes@npm:3.1.2" + checksum: 10c0/76d1c43cbd602794ad8ad2ae94095cddeb1de78c5dddaa7005c51af10b0176c69971a6d88e805a90c2b6550d76636e43c40d8427a808b8645ede885de4a0358e + languageName: node + linkType: hard + "cacache@npm:^19.0.1": version: 19.0.1 resolution: "cacache@npm:19.0.1" @@ -1999,6 +2252,26 @@ __metadata: languageName: node linkType: hard +"call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2": + version: 1.0.2 + resolution: "call-bind-apply-helpers@npm:1.0.2" + dependencies: + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + checksum: 10c0/47bd9901d57b857590431243fea704ff18078b16890a6b3e021e12d279bbf211d039155e27d7566b374d49ee1f8189344bac9833dec7a20cdec370506361c938 + languageName: node + linkType: hard + +"call-bound@npm:^1.0.2": + version: 1.0.4 + resolution: "call-bound@npm:1.0.4" + dependencies: + call-bind-apply-helpers: "npm:^1.0.2" + get-intrinsic: "npm:^1.3.0" + checksum: 10c0/f4796a6a0941e71c766aea672f63b72bc61234c4f4964dc6d7606e3664c307e7d77845328a8f3359ce39ddb377fed67318f9ee203dea1d47e46165dcf2917644 + languageName: node + linkType: hard + "callsites@npm:^3.0.0": version: 3.1.0 resolution: "callsites@npm:3.1.0" @@ -2187,6 +2460,22 @@ __metadata: languageName: node linkType: hard +"content-disposition@npm:^1.0.0": + version: 1.0.0 + resolution: "content-disposition@npm:1.0.0" + dependencies: + safe-buffer: "npm:5.2.1" + checksum: 10c0/c7b1ba0cea2829da0352ebc1b7f14787c73884bc707c8bc2271d9e3bf447b372270d09f5d3980dc5037c749ceef56b9a13fccd0b0001c87c3f12579967e4dd27 + languageName: node + linkType: hard + +"content-type@npm:^1.0.5": + version: 1.0.5 + resolution: "content-type@npm:1.0.5" + checksum: 10c0/b76ebed15c000aee4678c3707e0860cb6abd4e680a598c0a26e17f0bfae723ec9cc2802f0ff1bc6e4d80603719010431d2231018373d4dde10f9ccff9dadf5af + languageName: node + linkType: hard + "convert-source-map@npm:^1.5.0": version: 1.9.0 resolution: "convert-source-map@npm:1.9.0" @@ -2201,6 +2490,20 @@ __metadata: languageName: node linkType: hard +"cookie-signature@npm:^1.2.1": + version: 1.2.2 + resolution: "cookie-signature@npm:1.2.2" + checksum: 10c0/54e05df1a293b3ce81589b27dddc445f462f6fa6812147c033350cd3561a42bc14481674e05ed14c7bd0ce1e8bb3dc0e40851bad75415733711294ddce0b7bc6 + languageName: node + linkType: hard + +"cookie@npm:^0.7.1": + version: 0.7.2 + resolution: "cookie@npm:0.7.2" + checksum: 10c0/9596e8ccdbf1a3a88ae02cf5ee80c1c50959423e1022e4e60b91dd87c622af1da309253d8abdb258fb5e3eacb4f08e579dc58b4897b8087574eee0fd35dfa5d2 + languageName: node + linkType: hard + "cookie@npm:^1.0.1": version: 1.0.2 resolution: "cookie@npm:1.0.2" @@ -2215,6 +2518,16 @@ __metadata: languageName: node linkType: hard +"cors@npm:^2.8.5": + version: 2.8.5 + resolution: "cors@npm:2.8.5" + dependencies: + object-assign: "npm:^4" + vary: "npm:^1" + checksum: 10c0/373702b7999409922da80de4a61938aabba6929aea5b6fd9096fefb9e8342f626c0ebd7507b0e8b0b311380744cc985f27edebc0a26e0ddb784b54e1085de761 + languageName: node + linkType: hard + "cosmiconfig@npm:^7.0.0": version: 7.1.0 resolution: "cosmiconfig@npm:7.1.0" @@ -2343,7 +2656,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.4.0": version: 4.4.0 resolution: "debug@npm:4.4.0" dependencies: @@ -2455,6 +2768,23 @@ __metadata: languageName: node linkType: hard +"depd@npm:2.0.0, depd@npm:^2.0.0": + version: 2.0.0 + resolution: "depd@npm:2.0.0" + checksum: 10c0/58bd06ec20e19529b06f7ad07ddab60e504d9e0faca4bd23079fac2d279c3594334d736508dc350e06e510aba5e22e4594483b3a6562ce7c17dd797f4cc4ad2c + languageName: node + linkType: hard + +"dezalgo@npm:^1.0.4": + version: 1.0.4 + resolution: "dezalgo@npm:1.0.4" + dependencies: + asap: "npm:^2.0.0" + wrappy: "npm:1" + checksum: 10c0/8a870ed42eade9a397e6141fe5c025148a59ed52f1f28b1db5de216b4d57f0af7a257070c3af7ce3d5508c1ce9dd5009028a76f4b2cc9370dc56551d2355fad8 + languageName: node + linkType: hard + "dir-glob@npm:^3.0.1": version: 3.0.1 resolution: "dir-glob@npm:3.0.1" @@ -2582,6 +2912,17 @@ __metadata: languageName: node linkType: hard +"dunder-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "dunder-proto@npm:1.0.1" + dependencies: + call-bind-apply-helpers: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + gopd: "npm:^1.2.0" + checksum: 10c0/199f2a0c1c16593ca0a145dbf76a962f8033ce3129f01284d48c45ed4e14fea9bbacd7b3610b6cdc33486cef20385ac054948fefc6272fcce645c09468f93031 + languageName: node + linkType: hard + "duplexer3@npm:^0.1.4": version: 0.1.5 resolution: "duplexer3@npm:0.1.5" @@ -2596,6 +2937,13 @@ __metadata: languageName: node linkType: hard +"ee-first@npm:1.1.1": + version: 1.1.1 + resolution: "ee-first@npm:1.1.1" + checksum: 10c0/b5bb125ee93161bc16bfe6e56c6b04de5ad2aa44234d8f644813cc95d861a6910903132b05093706de2b706599367c4130eb6d170f6b46895686b95f87d017b7 + languageName: node + linkType: hard + "electron-to-chromium@npm:^1.5.73": version: 1.5.142 resolution: "electron-to-chromium@npm:1.5.142" @@ -2617,6 +2965,13 @@ __metadata: languageName: node linkType: hard +"encodeurl@npm:^2.0.0": + version: 2.0.0 + resolution: "encodeurl@npm:2.0.0" + checksum: 10c0/5d317306acb13e6590e28e27924c754163946a2480de11865c991a3a7eed4315cd3fba378b543ca145829569eefe9b899f3d84bb09870f675ae60bc924b01ceb + languageName: node + linkType: hard + "encoding@npm:^0.1.13": version: 0.1.13 resolution: "encoding@npm:0.1.13" @@ -2672,6 +3027,29 @@ __metadata: languageName: node linkType: hard +"es-define-property@npm:^1.0.1": + version: 1.0.1 + resolution: "es-define-property@npm:1.0.1" + checksum: 10c0/3f54eb49c16c18707949ff25a1456728c883e81259f045003499efba399c08bad00deebf65cccde8c0e07908c1a225c9d472b7107e558f2a48e28d530e34527c + languageName: node + linkType: hard + +"es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85 + languageName: node + linkType: hard + +"es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": + version: 1.1.1 + resolution: "es-object-atoms@npm:1.1.1" + dependencies: + es-errors: "npm:^1.3.0" + checksum: 10c0/65364812ca4daf48eb76e2a3b7a89b3f6a2e62a1c420766ce9f692665a29d94fe41fe88b65f24106f449859549711e4b40d9fb8002d862dfd7eb1c512d10be0c + languageName: node + linkType: hard + "esbuild-android-64@npm:0.14.54": version: 0.14.54 resolution: "esbuild-android-64@npm:0.14.54" @@ -2979,6 +3357,13 @@ __metadata: languageName: node linkType: hard +"escape-html@npm:^1.0.3": + version: 1.0.3 + resolution: "escape-html@npm:1.0.3" + checksum: 10c0/524c739d776b36c3d29fa08a22e03e8824e3b2fd57500e5e44ecf3cc4707c34c60f9ca0781c0e33d191f2991161504c295e98f68c78fe7baa6e57081ec6ac0a3 + languageName: node + linkType: hard + "escape-string-regexp@npm:^1.0.2, escape-string-regexp@npm:^1.0.5": version: 1.0.5 resolution: "escape-string-regexp@npm:1.0.5" @@ -3028,9 +3413,9 @@ __metadata: languageName: node linkType: hard -"eslint@npm:^9.25.1": - version: 9.25.1 - resolution: "eslint@npm:9.25.1" +"eslint@npm:^9.26.0": + version: 9.26.0 + resolution: "eslint@npm:9.26.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.2.0" "@eslint-community/regexpp": "npm:^4.12.1" @@ -3038,11 +3423,12 @@ __metadata: "@eslint/config-helpers": "npm:^0.2.1" "@eslint/core": "npm:^0.13.0" "@eslint/eslintrc": "npm:^3.3.1" - "@eslint/js": "npm:9.25.1" + "@eslint/js": "npm:9.26.0" "@eslint/plugin-kit": "npm:^0.2.8" "@humanfs/node": "npm:^0.16.6" "@humanwhocodes/module-importer": "npm:^1.0.1" "@humanwhocodes/retry": "npm:^0.4.2" + "@modelcontextprotocol/sdk": "npm:^1.8.0" "@types/estree": "npm:^1.0.6" "@types/json-schema": "npm:^7.0.15" ajv: "npm:^6.12.4" @@ -3067,6 +3453,7 @@ __metadata: minimatch: "npm:^3.1.2" natural-compare: "npm:^1.4.0" optionator: "npm:^0.9.3" + zod: "npm:^3.24.2" peerDependencies: jiti: "*" peerDependenciesMeta: @@ -3074,7 +3461,7 @@ __metadata: optional: true bin: eslint: bin/eslint.js - checksum: 10c0/3bb1997ae994253d441e56aba2fc64a71b3b8dce32756de3dedae5e85416ba33eb07e19ede94a6fa8ce7ef3a0a3b0dd8b6836f41be46a3ab52e5345ad59a553f + checksum: 10c0/fb5ba6ce2b85a6c26c89bc1ca9b34f0ffa2166ba85d3d007a06bb2350151fb665e9a5f99d7f24051a00dc713203b50ece6e724a29fed7b297e432cdc79482fec languageName: node linkType: hard @@ -3128,6 +3515,29 @@ __metadata: languageName: node linkType: hard +"etag@npm:^1.8.1": + version: 1.8.1 + resolution: "etag@npm:1.8.1" + checksum: 10c0/12be11ef62fb9817314d790089a0a49fae4e1b50594135dcb8076312b7d7e470884b5100d249b28c18581b7fd52f8b485689ffae22a11ed9ec17377a33a08f84 + languageName: node + linkType: hard + +"eventsource-parser@npm:^3.0.1": + version: 3.0.1 + resolution: "eventsource-parser@npm:3.0.1" + checksum: 10c0/146ce5ae8325d07645a49bbc54d7ac3aef42f5138bfbbe83d5cf96293b50eab2219926d6cf41eed0a0f90132578089652ba9286a19297662900133a9da6c2fd0 + languageName: node + linkType: hard + +"eventsource@npm:^3.0.2": + version: 3.0.6 + resolution: "eventsource@npm:3.0.6" + dependencies: + eventsource-parser: "npm:^3.0.1" + checksum: 10c0/074d865ea1c7e29e3243f85a13306e89fca2d775b982dca03fa6bfa75c56827fa89cf1ab9e730db24bd6b104cbdcae074f2b37ba498874e9dd9710fbff4979bb + languageName: node + linkType: hard + "exec-buffer@npm:^3.0.0": version: 3.2.0 resolution: "exec-buffer@npm:3.2.0" @@ -3221,6 +3631,50 @@ __metadata: languageName: node linkType: hard +"express-rate-limit@npm:^7.5.0": + version: 7.5.0 + resolution: "express-rate-limit@npm:7.5.0" + peerDependencies: + express: ^4.11 || 5 || ^5.0.0-beta.1 + checksum: 10c0/3e96afa05b4f577395688ede37e0cb19901f20c350b32575fb076f3d25176209fb88d3648151755c232aaf304147c58531f070757978f376e2f08326449299fd + languageName: node + linkType: hard + +"express@npm:^5.0.1": + version: 5.1.0 + resolution: "express@npm:5.1.0" + dependencies: + accepts: "npm:^2.0.0" + body-parser: "npm:^2.2.0" + content-disposition: "npm:^1.0.0" + content-type: "npm:^1.0.5" + cookie: "npm:^0.7.1" + cookie-signature: "npm:^1.2.1" + debug: "npm:^4.4.0" + encodeurl: "npm:^2.0.0" + escape-html: "npm:^1.0.3" + etag: "npm:^1.8.1" + finalhandler: "npm:^2.1.0" + fresh: "npm:^2.0.0" + http-errors: "npm:^2.0.0" + merge-descriptors: "npm:^2.0.0" + mime-types: "npm:^3.0.0" + on-finished: "npm:^2.4.1" + once: "npm:^1.4.0" + parseurl: "npm:^1.3.3" + proxy-addr: "npm:^2.0.7" + qs: "npm:^6.14.0" + range-parser: "npm:^1.2.1" + router: "npm:^2.2.0" + send: "npm:^1.1.0" + serve-static: "npm:^2.2.0" + statuses: "npm:^2.0.1" + type-is: "npm:^2.0.1" + vary: "npm:^1.1.2" + checksum: 10c0/80ce7c53c5f56887d759b94c3f2283e2e51066c98d4b72a4cc1338e832b77f1e54f30d0239cc10815a0f849bdb753e6a284d2fa48d4ab56faf9c501f55d751d6 + languageName: node + linkType: hard + "ext-list@npm:^2.0.0": version: 2.2.2 resolution: "ext-list@npm:2.2.2" @@ -3410,6 +3864,20 @@ __metadata: languageName: node linkType: hard +"finalhandler@npm:^2.1.0": + version: 2.1.0 + resolution: "finalhandler@npm:2.1.0" + dependencies: + debug: "npm:^4.4.0" + encodeurl: "npm:^2.0.0" + escape-html: "npm:^1.0.3" + on-finished: "npm:^2.4.1" + parseurl: "npm:^1.3.3" + statuses: "npm:^2.0.1" + checksum: 10c0/da0bbca6d03873472ee890564eb2183f4ed377f25f3628a0fc9d16dac40bed7b150a0d82ebb77356e4c6d97d2796ad2dba22948b951dddee2c8768b0d1b9fb1f + languageName: node + linkType: hard + "find-root@npm:^1.1.0": version: 1.1.0 resolution: "find-root@npm:1.1.0" @@ -3473,6 +3941,31 @@ __metadata: languageName: node linkType: hard +"formidable@npm:^3.5.4": + version: 3.5.4 + resolution: "formidable@npm:3.5.4" + dependencies: + "@paralleldrive/cuid2": "npm:^2.2.2" + dezalgo: "npm:^1.0.4" + once: "npm:^1.4.0" + checksum: 10c0/3a311ce57617eb8f532368e91c0f2bbfb299a0f1a35090e085bd6ca772298f196fbb0b66f0d4b5549d7bf3c5e1844439338d4402b7b6d1fedbe206ad44a931f8 + languageName: node + linkType: hard + +"forwarded@npm:0.2.0": + version: 0.2.0 + resolution: "forwarded@npm:0.2.0" + checksum: 10c0/9b67c3fac86acdbc9ae47ba1ddd5f2f81526fa4c8226863ede5600a3f7c7416ef451f6f1e240a3cc32d0fd79fcfe6beb08fd0da454f360032bde70bf80afbb33 + languageName: node + linkType: hard + +"fresh@npm:^2.0.0": + version: 2.0.0 + resolution: "fresh@npm:2.0.0" + checksum: 10c0/0557548194cb9a809a435bf92bcfbc20c89e8b5eb38861b73ced36750437251e39a111fc3a18b98531be9dd91fe1411e4969f229dc579ec0251ce6c5d4900bbc + languageName: node + linkType: hard + "from2@npm:^2.1.1": version: 2.3.0 resolution: "from2@npm:2.3.0" @@ -3557,6 +4050,34 @@ __metadata: languageName: node linkType: hard +"get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.3.0": + version: 1.3.0 + resolution: "get-intrinsic@npm:1.3.0" + dependencies: + call-bind-apply-helpers: "npm:^1.0.2" + es-define-property: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.1.1" + function-bind: "npm:^1.1.2" + get-proto: "npm:^1.0.1" + gopd: "npm:^1.2.0" + has-symbols: "npm:^1.1.0" + hasown: "npm:^2.0.2" + math-intrinsics: "npm:^1.1.0" + checksum: 10c0/52c81808af9a8130f581e6a6a83e1ba4a9f703359e7a438d1369a5267a25412322f03dcbd7c549edaef0b6214a0630a28511d7df0130c93cfd380f4fa0b5b66a + languageName: node + linkType: hard + +"get-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "get-proto@npm:1.0.1" + dependencies: + dunder-proto: "npm:^1.0.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/9224acb44603c5526955e83510b9da41baf6ae73f7398875fba50edc5e944223a89c4a72b070fcd78beb5f7bdda58ecb6294adc28f7acfc0da05f76a2399643c + languageName: node + linkType: hard + "get-proxy@npm:^2.0.0": version: 2.1.0 resolution: "get-proxy@npm:2.1.0" @@ -3727,6 +4248,13 @@ __metadata: languageName: node linkType: hard +"gopd@npm:^1.2.0": + version: 1.2.0 + resolution: "gopd@npm:1.2.0" + checksum: 10c0/50fff1e04ba2b7737c097358534eacadad1e68d24cccee3272e04e007bed008e68d2614f3987788428fd192a5ae3889d08fb2331417e4fc4a9ab366b2043cead + languageName: node + linkType: hard + "got@npm:^7.0.0": version: 7.1.0 resolution: "got@npm:7.1.0" @@ -3811,6 +4339,13 @@ __metadata: languageName: node linkType: hard +"has-symbols@npm:^1.1.0": + version: 1.1.0 + resolution: "has-symbols@npm:1.1.0" + checksum: 10c0/dde0a734b17ae51e84b10986e651c664379018d10b91b6b0e9b293eddb32f0f069688c841fb40f19e9611546130153e0a2a48fd7f512891fb000ddfa36f5a20e + languageName: node + linkType: hard + "has-to-string-tag-x@npm:^1.2.0": version: 1.4.1 resolution: "has-to-string-tag-x@npm:1.4.1" @@ -3868,6 +4403,19 @@ __metadata: languageName: node linkType: hard +"http-errors@npm:2.0.0, http-errors@npm:^2.0.0": + version: 2.0.0 + resolution: "http-errors@npm:2.0.0" + dependencies: + depd: "npm:2.0.0" + inherits: "npm:2.0.4" + setprototypeof: "npm:1.2.0" + statuses: "npm:2.0.1" + toidentifier: "npm:1.0.1" + checksum: 10c0/fc6f2715fe188d091274b5ffc8b3657bd85c63e969daa68ccb77afb05b071a4b62841acb7a21e417b5539014dff2ebf9550f0b14a9ff126f2734a7c1387f8e19 + languageName: node + linkType: hard + "http-proxy-agent@npm:^7.0.0": version: 7.0.2 resolution: "http-proxy-agent@npm:7.0.2" @@ -3902,7 +4450,7 @@ __metadata: languageName: node linkType: hard -"iconv-lite@npm:^0.6.2": +"iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2, iconv-lite@npm:^0.6.3": version: 0.6.3 resolution: "iconv-lite@npm:0.6.3" dependencies: @@ -4061,7 +4609,7 @@ __metadata: languageName: node linkType: hard -"inherits@npm:2, inherits@npm:^2.0.1, inherits@npm:~2.0.3": +"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:~2.0.3": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 @@ -4095,6 +4643,13 @@ __metadata: languageName: node linkType: hard +"ipaddr.js@npm:1.9.1": + version: 1.9.1 + resolution: "ipaddr.js@npm:1.9.1" + checksum: 10c0/0486e775047971d3fdb5fb4f063829bac45af299ae0b82dcf3afa2145338e08290563a2a70f34b732d795ecc8311902e541a8530eeb30d75860a78ff4e94ce2a + languageName: node + linkType: hard + "is-arrayish@npm:^0.2.1": version: 0.2.1 resolution: "is-arrayish@npm:0.2.1" @@ -4210,6 +4765,13 @@ __metadata: languageName: node linkType: hard +"is-promise@npm:^4.0.0": + version: 4.0.0 + resolution: "is-promise@npm:4.0.0" + checksum: 10c0/ebd5c672d73db781ab33ccb155fb9969d6028e37414d609b115cc534654c91ccd061821d5b987eefaa97cf4c62f0b909bb2f04db88306de26e91bfe8ddc01503 + languageName: node + linkType: hard + "is-retry-allowed@npm:^1.0.0, is-retry-allowed@npm:^1.1.0": version: 1.2.0 resolution: "is-retry-allowed@npm:1.2.0" @@ -4660,6 +5222,13 @@ __metadata: languageName: node linkType: hard +"math-intrinsics@npm:^1.1.0": + version: 1.1.0 + resolution: "math-intrinsics@npm:1.1.0" + checksum: 10c0/7579ff94e899e2f76ab64491d76cf606274c874d8f2af4a442c016bd85688927fcfca157ba6bf74b08e9439dc010b248ce05b96cc7c126a354c3bae7fcb48b7f + languageName: node + linkType: hard + "mdn-data@npm:2.0.14": version: 2.0.14 resolution: "mdn-data@npm:2.0.14" @@ -4667,6 +5236,13 @@ __metadata: languageName: node linkType: hard +"media-typer@npm:^1.1.0": + version: 1.1.0 + resolution: "media-typer@npm:1.1.0" + checksum: 10c0/7b4baa40b25964bb90e2121ee489ec38642127e48d0cc2b6baa442688d3fde6262bfdca86d6bbf6ba708784afcac168c06840c71facac70e390f5f759ac121b9 + languageName: node + linkType: hard + "memoize-one@npm:>=3.1.1 <6": version: 5.2.1 resolution: "memoize-one@npm:5.2.1" @@ -4692,6 +5268,13 @@ __metadata: languageName: node linkType: hard +"merge-descriptors@npm:^2.0.0": + version: 2.0.0 + resolution: "merge-descriptors@npm:2.0.0" + checksum: 10c0/95389b7ced3f9b36fbdcf32eb946dc3dd1774c2fdf164609e55b18d03aa499b12bd3aae3a76c1c7185b96279e9803525550d3eb292b5224866060a288f335cb3 + languageName: node + linkType: hard + "merge-stream@npm:^2.0.0": version: 2.0.0 resolution: "merge-stream@npm:2.0.0" @@ -4723,7 +5306,7 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:^3.0.1": +"mime-types@npm:^3.0.0, mime-types@npm:^3.0.1": version: 3.0.1 resolution: "mime-types@npm:3.0.1" dependencies: @@ -5013,13 +5596,29 @@ __metadata: languageName: node linkType: hard -"object-assign@npm:^4.0.1, object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": +"object-assign@npm:^4, object-assign@npm:^4.0.1, object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" checksum: 10c0/1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414 languageName: node linkType: hard +"object-inspect@npm:^1.13.3": + version: 1.13.4 + resolution: "object-inspect@npm:1.13.4" + checksum: 10c0/d7f8711e803b96ea3191c745d6f8056ce1f2496e530e6a19a0e92d89b0fa3c76d910c31f0aa270432db6bd3b2f85500a376a83aaba849a8d518c8845b3211692 + languageName: node + linkType: hard + +"on-finished@npm:^2.4.1": + version: 2.4.1 + resolution: "on-finished@npm:2.4.1" + dependencies: + ee-first: "npm:1.1.1" + checksum: 10c0/46fb11b9063782f2d9968863d9cbba33d77aa13c17f895f56129c274318b86500b22af3a160fe9995aa41317efcd22941b6eba747f718ced08d9a73afdb087b4 + languageName: node + linkType: hard + "once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": version: 1.4.0 resolution: "once@npm:1.4.0" @@ -5242,6 +5841,13 @@ __metadata: languageName: node linkType: hard +"parseurl@npm:^1.3.3": + version: 1.3.3 + resolution: "parseurl@npm:1.3.3" + checksum: 10c0/90dd4760d6f6174adb9f20cf0965ae12e23879b5f5464f38e92fce8073354341e4b3b76fa3d878351efe7d01e617121955284cfd002ab087fba1a0726ec0b4f5 + languageName: node + linkType: hard + "path-exists@npm:^2.0.0": version: 2.1.0 resolution: "path-exists@npm:2.1.0" @@ -5296,6 +5902,13 @@ __metadata: languageName: node linkType: hard +"path-to-regexp@npm:^8.0.0": + version: 8.2.0 + resolution: "path-to-regexp@npm:8.2.0" + checksum: 10c0/ef7d0a887b603c0a142fad16ccebdcdc42910f0b14830517c724466ad676107476bba2fe9fffd28fd4c141391ccd42ea426f32bb44c2c82ecaefe10c37b90f5a + languageName: node + linkType: hard + "path-type@npm:^1.0.0": version: 1.1.0 resolution: "path-type@npm:1.1.0" @@ -5386,6 +5999,13 @@ __metadata: languageName: node linkType: hard +"pkce-challenge@npm:^5.0.0": + version: 5.0.0 + resolution: "pkce-challenge@npm:5.0.0" + checksum: 10c0/c6706d627fdbb6f22bf8cc5d60d96d6b6a7bb481399b336a3d3f4e9bfba3e167a2c32f8ec0b5e74be686a0ba3bcc9894865d4c2dd1b91cea4c05dba1f28602c3 + languageName: node + linkType: hard + "pngquant-bin@npm:^6.0.0": version: 6.0.1 resolution: "pngquant-bin@npm:6.0.1" @@ -5489,6 +6109,16 @@ __metadata: languageName: node linkType: hard +"proxy-addr@npm:^2.0.7": + version: 2.0.7 + resolution: "proxy-addr@npm:2.0.7" + dependencies: + forwarded: "npm:0.2.0" + ipaddr.js: "npm:1.9.1" + checksum: 10c0/c3eed999781a35f7fd935f398b6d8920b6fb00bbc14287bc6de78128ccc1a02c89b95b56742bf7cf0362cc333c61d138532049c7dedc7a328ef13343eff81210 + languageName: node + linkType: hard + "pseudomap@npm:^1.0.2": version: 1.0.2 resolution: "pseudomap@npm:1.0.2" @@ -5513,6 +6143,15 @@ __metadata: languageName: node linkType: hard +"qs@npm:^6.14.0": + version: 6.14.0 + resolution: "qs@npm:6.14.0" + dependencies: + side-channel: "npm:^1.1.0" + checksum: 10c0/8ea5d91bf34f440598ee389d4a7d95820e3b837d3fd9f433871f7924801becaa0cd3b3b4628d49a7784d06a8aea9bc4554d2b6d8d584e2d221dc06238a42909c + languageName: node + linkType: hard + "query-string@npm:^5.0.1": version: 5.1.1 resolution: "query-string@npm:5.1.1" @@ -5531,6 +6170,13 @@ __metadata: languageName: node linkType: hard +"range-parser@npm:^1.2.1": + version: 1.2.1 + resolution: "range-parser@npm:1.2.1" + checksum: 10c0/96c032ac2475c8027b7a4e9fe22dc0dfe0f6d90b85e496e0f016fbdb99d6d066de0112e680805075bd989905e2123b3b3d002765149294dce0c1f7f01fcc2ea0 + languageName: node + linkType: hard + "rate-limiter-flexible@npm:^5.0.3": version: 5.0.5 resolution: "rate-limiter-flexible@npm:5.0.5" @@ -5538,6 +6184,18 @@ __metadata: languageName: node linkType: hard +"raw-body@npm:^3.0.0": + version: 3.0.0 + resolution: "raw-body@npm:3.0.0" + dependencies: + bytes: "npm:3.1.2" + http-errors: "npm:2.0.0" + iconv-lite: "npm:0.6.3" + unpipe: "npm:1.0.0" + checksum: 10c0/f8daf4b724064a4811d118745a781ca0fb4676298b8adadfd6591155549cfea0a067523cf7dd3baeb1265fecc9ce5dfb2fc788c12c66b85202a336593ece0f87 + languageName: node + linkType: hard + "react-dom@npm:^19.1.0": version: 19.1.0 resolution: "react-dom@npm:19.1.0" @@ -5572,9 +6230,9 @@ __metadata: languageName: node linkType: hard -"react-router@npm:^7.5.2": - version: 7.5.2 - resolution: "react-router@npm:7.5.2" +"react-router@npm:^7.5.3": + version: 7.5.3 + resolution: "react-router@npm:7.5.3" dependencies: cookie: "npm:^1.0.1" set-cookie-parser: "npm:^2.6.0" @@ -5585,7 +6243,7 @@ __metadata: peerDependenciesMeta: react-dom: optional: true - checksum: 10c0/5972ecb783e0ac0512c500b84bd4ff475665ba49c67b69e13b79dc24c7ee0496d523858058bb43c70147367688e0cc0d6d6d0f51cabfdebfbc5556d559bff457 + checksum: 10c0/1f98ab5974cbf6696944a3cbe3d5708add6cdb9c765e0952459eb912d388fe361914a94557546dcd45164413fd9bc2fde97302c8daf3951156644232a9e3ce16 languageName: node linkType: hard @@ -5886,6 +6544,19 @@ __metadata: languageName: node linkType: hard +"router@npm:^2.2.0": + version: 2.2.0 + resolution: "router@npm:2.2.0" + dependencies: + debug: "npm:^4.4.0" + depd: "npm:^2.0.0" + is-promise: "npm:^4.0.0" + parseurl: "npm:^1.3.3" + path-to-regexp: "npm:^8.0.0" + checksum: 10c0/3279de7450c8eae2f6e095e9edacbdeec0abb5cb7249c6e719faa0db2dba43574b4fff5892d9220631c9abaff52dd3cad648cfea2aaace845e1a071915ac8867 + languageName: node + linkType: hard + "run-parallel@npm:^1.1.9": version: 1.2.0 resolution: "run-parallel@npm:1.2.0" @@ -5987,6 +6658,37 @@ __metadata: languageName: node linkType: hard +"send@npm:^1.1.0, send@npm:^1.2.0": + version: 1.2.0 + resolution: "send@npm:1.2.0" + dependencies: + debug: "npm:^4.3.5" + encodeurl: "npm:^2.0.0" + escape-html: "npm:^1.0.3" + etag: "npm:^1.8.1" + fresh: "npm:^2.0.0" + http-errors: "npm:^2.0.0" + mime-types: "npm:^3.0.1" + ms: "npm:^2.1.3" + on-finished: "npm:^2.4.1" + range-parser: "npm:^1.2.1" + statuses: "npm:^2.0.1" + checksum: 10c0/531bcfb5616948d3468d95a1fd0adaeb0c20818ba4a500f439b800ca2117971489e02074ce32796fd64a6772ea3e7235fe0583d8241dbd37a053dc3378eff9a5 + languageName: node + linkType: hard + +"serve-static@npm:^2.2.0": + version: 2.2.0 + resolution: "serve-static@npm:2.2.0" + dependencies: + encodeurl: "npm:^2.0.0" + escape-html: "npm:^1.0.3" + parseurl: "npm:^1.3.3" + send: "npm:^1.2.0" + checksum: 10c0/30e2ed1dbff1984836cfd0c65abf5d3f3f83bcd696c99d2d3c97edbd4e2a3ff4d3f87108a7d713640d290a7b6fe6c15ddcbc61165ab2eaad48ea8d3b52c7f913 + languageName: node + linkType: hard + "set-cookie-parser@npm:^2.6.0": version: 2.7.1 resolution: "set-cookie-parser@npm:2.7.1" @@ -5994,6 +6696,13 @@ __metadata: languageName: node linkType: hard +"setprototypeof@npm:1.2.0": + version: 1.2.0 + resolution: "setprototypeof@npm:1.2.0" + checksum: 10c0/68733173026766fa0d9ecaeb07f0483f4c2dc70ca376b3b7c40b7cda909f94b0918f6c5ad5ce27a9160bdfb475efaa9d5e705a11d8eaae18f9835d20976028bc + languageName: node + linkType: hard + "shebang-command@npm:^1.2.0": version: 1.2.0 resolution: "shebang-command@npm:1.2.0" @@ -6033,6 +6742,54 @@ __metadata: languageName: node linkType: hard +"side-channel-list@npm:^1.0.0": + version: 1.0.0 + resolution: "side-channel-list@npm:1.0.0" + dependencies: + es-errors: "npm:^1.3.0" + object-inspect: "npm:^1.13.3" + checksum: 10c0/644f4ac893456c9490ff388bf78aea9d333d5e5bfc64cfb84be8f04bf31ddc111a8d4b83b85d7e7e8a7b845bc185a9ad02c052d20e086983cf59f0be517d9b3d + languageName: node + linkType: hard + +"side-channel-map@npm:^1.0.1": + version: 1.0.1 + resolution: "side-channel-map@npm:1.0.1" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.5" + object-inspect: "npm:^1.13.3" + checksum: 10c0/010584e6444dd8a20b85bc926d934424bd809e1a3af941cace229f7fdcb751aada0fb7164f60c2e22292b7fa3c0ff0bce237081fd4cdbc80de1dc68e95430672 + languageName: node + linkType: hard + +"side-channel-weakmap@npm:^1.0.2": + version: 1.0.2 + resolution: "side-channel-weakmap@npm:1.0.2" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.5" + object-inspect: "npm:^1.13.3" + side-channel-map: "npm:^1.0.1" + checksum: 10c0/71362709ac233e08807ccd980101c3e2d7efe849edc51455030327b059f6c4d292c237f94dc0685031dd11c07dd17a68afde235d6cf2102d949567f98ab58185 + languageName: node + linkType: hard + +"side-channel@npm:^1.1.0": + version: 1.1.0 + resolution: "side-channel@npm:1.1.0" + dependencies: + es-errors: "npm:^1.3.0" + object-inspect: "npm:^1.13.3" + side-channel-list: "npm:^1.0.0" + side-channel-map: "npm:^1.0.1" + side-channel-weakmap: "npm:^1.0.2" + checksum: 10c0/cb20dad41eb032e6c24c0982e1e5a24963a28aa6122b4f05b3f3d6bf8ae7fd5474ef382c8f54a6a3ab86e0cac4d41a23bd64ede3970e5bfb50326ba02a7996e6 + languageName: node + linkType: hard + "signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" @@ -6231,6 +6988,13 @@ __metadata: languageName: node linkType: hard +"statuses@npm:2.0.1, statuses@npm:^2.0.1": + version: 2.0.1 + resolution: "statuses@npm:2.0.1" + checksum: 10c0/34378b207a1620a24804ce8b5d230fea0c279f00b18a7209646d5d47e419d1cc23e7cbf33a25a1e51ac38973dc2ac2e1e9c647a8e481ef365f77668d72becfd0 + languageName: node + linkType: hard + "strict-uri-encode@npm:^1.0.0": version: 1.1.0 resolution: "strict-uri-encode@npm:1.1.0" @@ -6518,6 +7282,13 @@ __metadata: languageName: node linkType: hard +"toidentifier@npm:1.0.1": + version: 1.0.1 + resolution: "toidentifier@npm:1.0.1" + checksum: 10c0/93937279934bd66cc3270016dd8d0afec14fb7c94a05c72dc57321f8bd1fa97e5bea6d1f7c89e728d077ca31ea125b78320a616a6c6cd0e6b9cb94cb864381c1 + languageName: node + linkType: hard + "tree-kill@npm:^1.2.2": version: 1.2.2 resolution: "tree-kill@npm:1.2.2" @@ -6605,6 +7376,17 @@ __metadata: languageName: node linkType: hard +"type-is@npm:^2.0.0, type-is@npm:^2.0.1": + version: 2.0.1 + resolution: "type-is@npm:2.0.1" + dependencies: + content-type: "npm:^1.0.5" + media-typer: "npm:^1.1.0" + mime-types: "npm:^3.0.0" + checksum: 10c0/7f7ec0a060b16880bdad36824ab37c26019454b67d73e8a465ed5a3587440fbe158bc765f0da68344498235c877e7dbbb1600beccc94628ed05599d667951b99 + languageName: node + linkType: hard + "typesafe-i18n@npm:^5.26.2": version: 5.26.2 resolution: "typesafe-i18n@npm:5.26.2" @@ -6616,17 +7398,17 @@ __metadata: languageName: node linkType: hard -"typescript-eslint@npm:8.31.0": - version: 8.31.0 - resolution: "typescript-eslint@npm:8.31.0" +"typescript-eslint@npm:8.31.1": + version: 8.31.1 + resolution: "typescript-eslint@npm:8.31.1" dependencies: - "@typescript-eslint/eslint-plugin": "npm:8.31.0" - "@typescript-eslint/parser": "npm:8.31.0" - "@typescript-eslint/utils": "npm:8.31.0" + "@typescript-eslint/eslint-plugin": "npm:8.31.1" + "@typescript-eslint/parser": "npm:8.31.1" + "@typescript-eslint/utils": "npm:8.31.1" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/8545887f70c4f40c4aee51d224326368f67ef5f770ba5ae9e67bfd36f4d9ab5f3414569ffaaec311893a312539934ea367a68135c6f2b0a3e175c3de59507338 + checksum: 10c0/58c096b96cb2262df3e3b52f06c0fc2020dc9f9d34b8a3d5331b0c7895e949ba1de43b7406d34b3cface2d1634f7e947e4c7759bf33819c92f8fb2bd67681bf1 languageName: node linkType: hard @@ -6692,6 +7474,13 @@ __metadata: languageName: node linkType: hard +"unpipe@npm:1.0.0": + version: 1.0.0 + resolution: "unpipe@npm:1.0.0" + checksum: 10c0/193400255bd48968e5c5383730344fbb4fa114cdedfab26e329e50dd2d81b134244bb8a72c6ac1b10ab0281a58b363d06405632c9d49ca9dfd5e90cbd7d0f32c + languageName: node + linkType: hard + "update-browserslist-db@npm:^1.1.1": version: 1.1.3 resolution: "update-browserslist-db@npm:1.1.3" @@ -6766,6 +7555,13 @@ __metadata: languageName: node linkType: hard +"vary@npm:^1, vary@npm:^1.1.2": + version: 1.1.2 + resolution: "vary@npm:1.1.2" + checksum: 10c0/f15d588d79f3675135ba783c91a4083dcd290a2a5be9fcb6514220a1634e23df116847b1cc51f66bfb0644cf9353b2abb7815ae499bab06e46dd33c1a6bf1f4f + languageName: node + linkType: hard + "vite-plugin-imagemin@npm:^0.6.1": version: 0.6.1 resolution: "vite-plugin-imagemin@npm:0.6.1" @@ -6831,9 +7627,9 @@ __metadata: languageName: node linkType: hard -"vite@npm:^6.3.3": - version: 6.3.3 - resolution: "vite@npm:6.3.3" +"vite@npm:^6.3.5": + version: 6.3.5 + resolution: "vite@npm:6.3.5" dependencies: esbuild: "npm:^0.25.0" fdir: "npm:^6.4.4" @@ -6882,7 +7678,7 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 10c0/7ea27d2c80a9e0b7ccf6cbd6c251455501286568160e8b632984e5332440f21a6d05f9236408212ba7653f7d2d4790f848956d8a620bbf4dd2ecb792a2fe1ab1 + checksum: 10c0/df70201659085133abffc6b88dcdb8a57ef35f742a01311fc56a4cfcda6a404202860729cc65a2c401a724f6e25f9ab40ce4339ed4946f550541531ced6fe41c languageName: node linkType: hard @@ -7042,3 +7838,19 @@ __metadata: checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f languageName: node linkType: hard + +"zod-to-json-schema@npm:^3.24.1": + version: 3.24.5 + resolution: "zod-to-json-schema@npm:3.24.5" + peerDependencies: + zod: ^3.24.1 + checksum: 10c0/0745b94ba53e652d39f262641cdeb2f75d24339fb6076a38ce55bcf53d82dfaea63adf524ebc5f658681005401687f8e9551c4feca7c4c882e123e66091dfb90 + languageName: node + linkType: hard + +"zod@npm:^3.23.8, zod@npm:^3.24.2": + version: 3.24.4 + resolution: "zod@npm:3.24.4" + checksum: 10c0/ab3112f017562180a41a0f83d870b333677f7d6b77f106696c56894567051b91154714a088149d8387a4f50806a2520efcb666f108cd384a35c236a191186d91 + languageName: node + linkType: hard From 67b5c5dd262b273d20f3ab7496c1acba7377bbdb Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Tue, 6 May 2025 19:14:31 +0200 Subject: [PATCH 02/13] chargeOptimization #2543, charging pump #2544 --- src/core/locale_translations.h | 1 + src/devices/boiler.cpp | 12 +++++++----- src/devices/boiler.h | 1 + 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/core/locale_translations.h b/src/core/locale_translations.h index 0c4d896ea..b0388940d 100644 --- a/src/core/locale_translations.h +++ b/src/core/locale_translations.h @@ -636,6 +636,7 @@ MAKE_TRANSLATION(wwStorageTemp2, "storagetemp2", "storage extern temperature", " MAKE_TRANSLATION(wwActivated, "activated", "activated", "aktiviert", "geactiveerd", "Aktiverad", "system przygotowywania c.w.u.", "aktivert", "activé", "devreye girdi", "attivato", "aktivovaný", "aktivováno") MAKE_TRANSLATION(wwDisinfecting, "disinfecting", "disinfecting", "Desinfizieren", "Desinfectie", "Desinficerar", "dezynfekcja termiczna", "desinfiserer", "désinfection", "dezenfekte ediliyor", "disinfezione", "dezinfekcia", "dezinfekce") MAKE_TRANSLATION(wwDisinfectionTemp, "disinfectiontemp", "disinfection temperature", "Desinfektionstemperatur", "Desinfectietemperatuur", "Desinfektionstemperatur", "temperatura dezynfekcji termicznej", "desinfeksjonstemperatur", "température désinfection", "dezenfeksiyon sıcaklığı", "temperatura disinfezione", "teplota dezinfekcie", "dezinfekční teplota") +MAKE_TRANSLATION(wwChargePump, "chargepump", "charge pump", "Ladepumpe", "", "", "", "", "", "", "", "", "") // TODO Translate MAKE_TRANSLATION(wwCharging, "charging", "charging", "Laden", "Laden", "Värmer", "grzanie", "varmer", "chargement", "dolduruluyor", "caricamento", "nabíjanie", "nabíjení") MAKE_TRANSLATION(wwChargeOptimization, "chargeoptimization", "charge optimization", "Ladungsoptimierung", "laadoptimalisatie", "Laddningsoptimering", "optymalizacja grzania", "oppvarmingsoptimalisering", "optimisation charge", "dolum optimizasyonu", "ottimizzazione carica", "optimalizácia poplatkov", "optimalizace nabíjení") MAKE_TRANSLATION(wwRecharging, "recharging", "recharging", "Nachladen", "herladen", "Laddar om", "ponowne grzanie", "varm på nytt", "en recharge", "tekrar dolduruluyor", "in ricarica", "nabíjanie", "dobíjení") diff --git a/src/devices/boiler.cpp b/src/devices/boiler.cpp index f79f6e919..e742a4884 100644 --- a/src/devices/boiler.cpp +++ b/src/devices/boiler.cpp @@ -1043,6 +1043,7 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const register_device_value(DeviceValueTAG::TAG_DHW1, &wwTempOK_, DeviceValueType::BOOL, FL_(wwTempOK), DeviceValueUOM::NONE); register_device_value(DeviceValueTAG::TAG_DHW1, &wwActive_, DeviceValueType::BOOL, FL_(wwActive), DeviceValueUOM::NONE); register_device_value(DeviceValueTAG::TAG_DHW1, &ww3wayValve_, DeviceValueType::BOOL, FL_(ww3wayValve), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DHW1, &wwChargePump_, DeviceValueType::BOOL, FL_(wwChargePump), DeviceValueUOM::NONE); register_device_value(DeviceValueTAG::TAG_DHW1, &wwMixerTemp_, DeviceValueType::UINT16, @@ -1297,6 +1298,7 @@ void Boiler::process_UBAMonitorFast(std::shared_ptr telegram) { has_update(curBurnPow_, curBurnPow); check_active(); // do a quick check to see if the hot water or heating is active + has_bitupdate(telegram, wwChargePump_, 23, 0); } } @@ -1348,11 +1350,11 @@ void Boiler::process_UBAParameterWW(std::shared_ptr telegram) { // has_bitupdate(telegram, wwEquipt_,0,3); // 8=boiler has ww has_update(telegram, wwActivated_, 1); // 0xFF means on has_update(telegram, wwSelTemp_, 2); - has_update(telegram, wwHystOn_, 3); // Hyst on (default -5) - has_update(telegram, wwHystOff_, 4); // Hyst off (default -1) - has_update(telegram, wwFlowTempOffset_, 5); // default 40 - has_update(telegram, wwCircPump_, 6); // 0xFF means on - has_update(telegram, wwCircMode_, 7); // 0=off, 1=1x3min 6=6x3min 7=continuous + has_update(telegram, wwHystOn_, 3); // Hyst on (default -5) + has_update(telegram, wwChargeOptimization_, 4); // bool + has_update(telegram, wwFlowTempOffset_, 5); // default 40 + has_update(telegram, wwCircPump_, 6); // 0xFF means on + has_update(telegram, wwCircMode_, 7); // 0=off, 1=1x3min 6=6x3min 7=continuous has_update(telegram, wwDisinfectionTemp_, 8); has_bitupdate(telegram, wwChargeType_, 10, 0); // 0 = charge pump, 0xff = 3-way valve diff --git a/src/devices/boiler.h b/src/devices/boiler.h index aa66281b7..1665f8c4e 100644 --- a/src/devices/boiler.h +++ b/src/devices/boiler.h @@ -81,6 +81,7 @@ class Boiler : public EMSdevice { uint8_t wwTempOK_; // DHW temperature ok on/off uint8_t wwActive_; // uint8_t ww3wayValve_; // 3-way valve on WW + uint8_t wwChargePump_; uint8_t wwFlowTempOffset_; // Boiler offset for ww heating uint8_t wwMaxPower_; // DHW maximum power uint8_t wwMaxTemp_; // DHW maximum temperature From bb60568d839fb00f64a7531941dbaf00c7fe91a5 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Sat, 10 May 2025 13:36:11 +0200 Subject: [PATCH 03/13] update pkg --- interface/package.json | 16 +-- interface/yarn.lock | 312 +++++++++++++++++++++-------------------- 2 files changed, 169 insertions(+), 159 deletions(-) diff --git a/interface/package.json b/interface/package.json index 42bead0e9..4fa01c7c6 100644 --- a/interface/package.json +++ b/interface/package.json @@ -24,8 +24,8 @@ "@alova/adapter-xhr": "2.1.1", "@emotion/react": "^11.14.0", "@emotion/styled": "^11.14.0", - "@mui/icons-material": "^7.0.2", - "@mui/material": "^7.0.2", + "@mui/icons-material": "^7.1.0", + "@mui/material": "^7.1.0", "@table-library/react-table-library": "4.1.15", "alova": "3.2.10", "async-validator": "^4.2.5", @@ -33,11 +33,11 @@ "jwt-decode": "^4.0.0", "magic-string": "^0.30.17", "mime-types": "^3.0.1", - "preact": "^10.26.5", + "preact": "^10.26.6", "react": "^19.1.0", "react-dom": "^19.1.0", "react-icons": "^5.5.0", - "react-router": "^7.5.3", + "react-router": "^7.6.0", "react-toastify": "^11.0.5", "typesafe-i18n": "^5.26.2", "typescript": "^5.8.3" @@ -48,16 +48,16 @@ "@preact/compat": "^18.3.1", "@preact/preset-vite": "^2.10.1", "@trivago/prettier-plugin-sort-imports": "^5.2.2", - "@types/node": "^22.15.3", - "@types/react": "^19.1.2", + "@types/node": "^22.15.17", + "@types/react": "^19.1.3", "@types/react-dom": "^19.1.3", "concurrently": "^9.1.2", "eslint": "^9.26.0", - "eslint-config-prettier": "^10.1.2", + "eslint-config-prettier": "^10.1.5", "prettier": "^3.5.3", "rollup-plugin-visualizer": "^5.14.0", "terser": "^5.39.0", - "typescript-eslint": "8.31.1", + "typescript-eslint": "8.32.0", "vite": "^6.3.5", "vite-plugin-imagemin": "^0.6.1", "vite-tsconfig-paths": "^5.1.4" diff --git a/interface/yarn.lock b/interface/yarn.lock index d0bf047ee..82e00a4df 100644 --- a/interface/yarn.lock +++ b/interface/yarn.lock @@ -350,7 +350,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.27.0, @babel/runtime@npm:^7.5.5, @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.5.5, @babel/runtime@npm:^7.8.7": version: 7.27.0 resolution: "@babel/runtime@npm:7.27.0" dependencies: @@ -359,6 +359,13 @@ __metadata: languageName: node linkType: hard +"@babel/runtime@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/runtime@npm:7.27.1" + checksum: 10c0/530a7332f86ac5a7442250456823a930906911d895c0b743bf1852efc88a20a016ed4cd26d442d0ca40ae6d5448111e02a08dd638a4f1064b47d080e2875dc05 + languageName: node + linkType: hard + "@babel/template@npm:^7.26.9, @babel/template@npm:^7.27.0": version: 7.27.0 resolution: "@babel/template@npm:7.27.0" @@ -759,7 +766,7 @@ __metadata: languageName: node linkType: hard -"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": +"@eslint-community/eslint-utils@npm:^4.2.0": version: 4.6.1 resolution: "@eslint-community/eslint-utils@npm:4.6.1" dependencies: @@ -770,6 +777,17 @@ __metadata: languageName: node linkType: hard +"@eslint-community/eslint-utils@npm:^4.7.0": + version: 4.7.0 + resolution: "@eslint-community/eslint-utils@npm:4.7.0" + dependencies: + eslint-visitor-keys: "npm:^3.4.3" + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: 10c0/c0f4f2bd73b7b7a9de74b716a664873d08ab71ab439e51befe77d61915af41a81ecec93b408778b3a7856185244c34c2c8ee28912072ec14def84ba2dec70adf + languageName: node + linkType: hard + "@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.12.1": version: 4.12.1 resolution: "@eslint-community/regexpp@npm:4.12.1" @@ -976,38 +994,38 @@ __metadata: languageName: node linkType: hard -"@mui/core-downloads-tracker@npm:^7.0.2": - version: 7.0.2 - resolution: "@mui/core-downloads-tracker@npm:7.0.2" - checksum: 10c0/20cb142d8c38b93c6290eb7d57f0d1d34a6821168e3085d139dbe6b82e9e9101095521869e6e0c9c12126757a32300bb01c15aacd3f308a0d9d18ce42944116c +"@mui/core-downloads-tracker@npm:^7.1.0": + version: 7.1.0 + resolution: "@mui/core-downloads-tracker@npm:7.1.0" + checksum: 10c0/6821bfa3884ce35480e843d196031d0d44a5da6e54d48171a44fc815c95e9fd9e1428b2a8a13545ab1cebecc2786cc302442808fcea459ad5daf42cfcc409d3b languageName: node linkType: hard -"@mui/icons-material@npm:^7.0.2": - version: 7.0.2 - resolution: "@mui/icons-material@npm:7.0.2" +"@mui/icons-material@npm:^7.1.0": + version: 7.1.0 + resolution: "@mui/icons-material@npm:7.1.0" dependencies: - "@babel/runtime": "npm:^7.27.0" + "@babel/runtime": "npm:^7.27.1" peerDependencies: - "@mui/material": ^7.0.2 + "@mui/material": ^7.1.0 "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: "@types/react": optional: true - checksum: 10c0/5c4e6348046cbdc305477a26fe100ad47f0f88a8d2eca37f5807c9c55c05bce61e66a1e1f7e57c239a1132de3fdbe7a13a79d661e4ebf2d9586fa292a88eb687 + checksum: 10c0/d83c5a1506526525fa93053b4ecd4ff498236a415f7594e75252fbec7e4584bb8470db3e04198a4924e8bd67af96cbaf93a9dee0f0ef9fa19a999bd6ade01734 languageName: node linkType: hard -"@mui/material@npm:^7.0.2": - version: 7.0.2 - resolution: "@mui/material@npm:7.0.2" +"@mui/material@npm:^7.1.0": + version: 7.1.0 + resolution: "@mui/material@npm:7.1.0" dependencies: - "@babel/runtime": "npm:^7.27.0" - "@mui/core-downloads-tracker": "npm:^7.0.2" - "@mui/system": "npm:^7.0.2" - "@mui/types": "npm:^7.4.1" - "@mui/utils": "npm:^7.0.2" + "@babel/runtime": "npm:^7.27.1" + "@mui/core-downloads-tracker": "npm:^7.1.0" + "@mui/system": "npm:^7.1.0" + "@mui/types": "npm:^7.4.2" + "@mui/utils": "npm:^7.1.0" "@popperjs/core": "npm:^2.11.8" "@types/react-transition-group": "npm:^4.4.12" clsx: "npm:^2.1.1" @@ -1018,7 +1036,7 @@ __metadata: peerDependencies: "@emotion/react": ^11.5.0 "@emotion/styled": ^11.3.0 - "@mui/material-pigment-css": ^7.0.2 + "@mui/material-pigment-css": ^7.1.0 "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -1031,16 +1049,16 @@ __metadata: optional: true "@types/react": optional: true - checksum: 10c0/ca854ca668ec06d57ea9b26d968c1187b56e12cd48b1ed9cccf1c7c1753878e161364cfadbb826cfa2274137080d3cc87d4968a77a71d61f80c123e6978984f8 + checksum: 10c0/c85fb340af32fdeb46a48e799a442af2a140bd75eca3c24919462e7c1a27ebb6457f1e9da68aea6f4557b54f662915fa42c6c9a642549d0d668275b18bbe865e languageName: node linkType: hard -"@mui/private-theming@npm:^7.0.2": - version: 7.0.2 - resolution: "@mui/private-theming@npm:7.0.2" +"@mui/private-theming@npm:^7.1.0": + version: 7.1.0 + resolution: "@mui/private-theming@npm:7.1.0" dependencies: - "@babel/runtime": "npm:^7.27.0" - "@mui/utils": "npm:^7.0.2" + "@babel/runtime": "npm:^7.27.1" + "@mui/utils": "npm:^7.1.0" prop-types: "npm:^15.8.1" peerDependencies: "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -1048,15 +1066,15 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 10c0/a2154b0473cab717742abe8f54e2c674ba53f4cd495970addfa5c9c0f3dcbf9d49000503b592873ad389e0c42fae28b40912e0c47d44378a0afbb70fbbb4613a + checksum: 10c0/e27c8c6da0cdcb5a82b6284e1474331a4cf79fb34007ec86ecddf9e5811dd276e9b7f1245eee6ffbc4ee19409e253cf91360d8aedefcf0ff79f418ed4fa75e41 languageName: node linkType: hard -"@mui/styled-engine@npm:^7.0.2": - version: 7.0.2 - resolution: "@mui/styled-engine@npm:7.0.2" +"@mui/styled-engine@npm:^7.1.0": + version: 7.1.0 + resolution: "@mui/styled-engine@npm:7.1.0" dependencies: - "@babel/runtime": "npm:^7.27.0" + "@babel/runtime": "npm:^7.27.1" "@emotion/cache": "npm:^11.13.5" "@emotion/serialize": "npm:^1.3.3" "@emotion/sheet": "npm:^1.4.0" @@ -1071,19 +1089,19 @@ __metadata: optional: true "@emotion/styled": optional: true - checksum: 10c0/3a8293bf2e28afe0a11e655634881ac1cf814a8fa56bd4eb4d7a9b97e007c6eb6b991f4f1b780bdac81481f9a28b0b690d4e6ed184315ce2c9bd81c0ef12165b + checksum: 10c0/face9438a12537dbf57b35cc231c3be990af22bdce73172256ba0380673bfa90d200a49b08ede835862f8fbc7e2afde35436647a0ddd186058230acc91e18f4b languageName: node linkType: hard -"@mui/system@npm:^7.0.2": - version: 7.0.2 - resolution: "@mui/system@npm:7.0.2" +"@mui/system@npm:^7.1.0": + version: 7.1.0 + resolution: "@mui/system@npm:7.1.0" dependencies: - "@babel/runtime": "npm:^7.27.0" - "@mui/private-theming": "npm:^7.0.2" - "@mui/styled-engine": "npm:^7.0.2" - "@mui/types": "npm:^7.4.1" - "@mui/utils": "npm:^7.0.2" + "@babel/runtime": "npm:^7.27.1" + "@mui/private-theming": "npm:^7.1.0" + "@mui/styled-engine": "npm:^7.1.0" + "@mui/types": "npm:^7.4.2" + "@mui/utils": "npm:^7.1.0" clsx: "npm:^2.1.1" csstype: "npm:^3.1.3" prop-types: "npm:^15.8.1" @@ -1099,30 +1117,30 @@ __metadata: optional: true "@types/react": optional: true - checksum: 10c0/d8a399d8e9ebd0021a355299e46389c9c5ad6e22f308e268b2a07fe99cc8106a4fa026f4fe3050bc1f31959ca9a98e10115d278a9ab412ade0cbc5ec8e7b2af4 + checksum: 10c0/9123bb82f39bdf9bde5b4d78b83db409c4cc86a308110b172b01860349c9a366378b10c6a51c9847375bc8bec91726a79dc3389d6df3db2aa71064983c367c9d languageName: node linkType: hard -"@mui/types@npm:^7.4.1": - version: 7.4.1 - resolution: "@mui/types@npm:7.4.1" +"@mui/types@npm:^7.4.2": + version: 7.4.2 + resolution: "@mui/types@npm:7.4.2" dependencies: - "@babel/runtime": "npm:^7.27.0" + "@babel/runtime": "npm:^7.27.1" peerDependencies: "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: "@types/react": optional: true - checksum: 10c0/958a1dd29956b4646058c7bf5615cb5211736568b9997e8baac4698b02189cdfd7aa880fa935c59138dfa9e9163549ca6c509142da28add835abeff3c68d6ccf + checksum: 10c0/9401abf306c5c993e7b21136684f80d4aefe28e00d435fccb963611bf009af71dfcf65e509c1db720a0c7d5bf9a364706aa38bd8c0a3b47718aca60f7063aac7 languageName: node linkType: hard -"@mui/utils@npm:^7.0.2": - version: 7.0.2 - resolution: "@mui/utils@npm:7.0.2" +"@mui/utils@npm:^7.1.0": + version: 7.1.0 + resolution: "@mui/utils@npm:7.1.0" dependencies: - "@babel/runtime": "npm:^7.27.0" - "@mui/types": "npm:^7.4.1" + "@babel/runtime": "npm:^7.27.1" + "@mui/types": "npm:^7.4.2" "@types/prop-types": "npm:^15.7.14" clsx: "npm:^2.1.1" prop-types: "npm:^15.8.1" @@ -1133,7 +1151,7 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 10c0/2409d6f9ede9b5c5bdff6893d1f077eb84fa816ac5a7e36a9b6878b1f228e89d9b3bf684d64328f7a62d5036a2c02fb4934a4f9a12648796b833e5390e48d0dd + checksum: 10c0/1fa21c44c54161b2239207c1900f3960a1cea5c7a3fda5f830308c8a08b05a46c7bc2dbb467baf5c2d3742677b2b19be1508d17a1dff388c9226d3663460ad08 languageName: node linkType: hard @@ -1610,12 +1628,12 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^22.15.3": - version: 22.15.3 - resolution: "@types/node@npm:22.15.3" +"@types/node@npm:^22.15.17": + version: 22.15.17 + resolution: "@types/node@npm:22.15.17" dependencies: undici-types: "npm:~6.21.0" - checksum: 10c0/2879f012d1aeba0bfdb5fed80d165f4f2cb3d1f2e1f98a24b18d4a211b4ace7d64bf2622784c78355982ffc1081ba79d0934efc2fb8353913e5871a63609661f + checksum: 10c0/fb92aa10b628683c5b965749f955bc2322485ecb0ea6c2f4cae5f2c7537a16834607e67083a9e9281faaae8d7dee9ada8d6a5c0de9a52c17d82912ef00c0fdd4 languageName: node linkType: hard @@ -1651,12 +1669,12 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:^19.1.2": - version: 19.1.2 - resolution: "@types/react@npm:19.1.2" +"@types/react@npm:^19.1.3": + version: 19.1.3 + resolution: "@types/react@npm:19.1.3" dependencies: csstype: "npm:^3.0.2" - checksum: 10c0/76ffe71395c713d4adc3c759465012d3c956db00af35ab7c6d0d91bd07b274b7ce69caa0478c0760311587bd1e38c78ffc9688ebc629f2b266682a19d8750947 + checksum: 10c0/f158f88871b8df1eeed637942d3e6142abcf505b617e4921ef3763b6d4f22241b9a883d864878dd2b6a2bdc8f4e7f871f24ef88f633d144a63257f4764b9478d languageName: node linkType: hard @@ -1678,115 +1696,115 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:8.31.1": - version: 8.31.1 - resolution: "@typescript-eslint/eslint-plugin@npm:8.31.1" +"@typescript-eslint/eslint-plugin@npm:8.32.0": + version: 8.32.0 + resolution: "@typescript-eslint/eslint-plugin@npm:8.32.0" dependencies: "@eslint-community/regexpp": "npm:^4.10.0" - "@typescript-eslint/scope-manager": "npm:8.31.1" - "@typescript-eslint/type-utils": "npm:8.31.1" - "@typescript-eslint/utils": "npm:8.31.1" - "@typescript-eslint/visitor-keys": "npm:8.31.1" + "@typescript-eslint/scope-manager": "npm:8.32.0" + "@typescript-eslint/type-utils": "npm:8.32.0" + "@typescript-eslint/utils": "npm:8.32.0" + "@typescript-eslint/visitor-keys": "npm:8.32.0" graphemer: "npm:^1.4.0" ignore: "npm:^5.3.1" natural-compare: "npm:^1.4.0" - ts-api-utils: "npm:^2.0.1" + ts-api-utils: "npm:^2.1.0" peerDependencies: "@typescript-eslint/parser": ^8.0.0 || ^8.0.0-alpha.0 eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/9d805ab413a666fd2eefb16f257fbf3cea7278ccaf0db30ceb686dfe696e4f40b3aa7c336261c7f0a39a51a7c32a4f08d3d4f16bba0e764ac12c93ae94d82896 + checksum: 10c0/db3d151386d7f086a2289ff21c12bff6d2c9e1e1fab7e20be627927604621618cfcfbe3289a1acf7ed7c0e465b64a696f02f3a95eac0aaafd1fe9d5431efe7b5 languageName: node linkType: hard -"@typescript-eslint/parser@npm:8.31.1": - version: 8.31.1 - resolution: "@typescript-eslint/parser@npm:8.31.1" +"@typescript-eslint/parser@npm:8.32.0": + version: 8.32.0 + resolution: "@typescript-eslint/parser@npm:8.32.0" dependencies: - "@typescript-eslint/scope-manager": "npm:8.31.1" - "@typescript-eslint/types": "npm:8.31.1" - "@typescript-eslint/typescript-estree": "npm:8.31.1" - "@typescript-eslint/visitor-keys": "npm:8.31.1" + "@typescript-eslint/scope-manager": "npm:8.32.0" + "@typescript-eslint/types": "npm:8.32.0" + "@typescript-eslint/typescript-estree": "npm:8.32.0" + "@typescript-eslint/visitor-keys": "npm:8.32.0" debug: "npm:^4.3.4" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/4fffaddbe443fc6a512042b6a777a8b7d9775938b26f54d86279b232b9b3967d90d6bfd65aca0ff010d377855df19708c918545f51cedc51b1688726201added + checksum: 10c0/357a30a853102b1d09a064451f0e66610d41b86f0f4f7bf8b3ce96180e8c58acb0ed24b9f5bba970f7d8d5e94e98c583f2a821135002e3037b0dbce249563926 languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:8.31.1": - version: 8.31.1 - resolution: "@typescript-eslint/scope-manager@npm:8.31.1" +"@typescript-eslint/scope-manager@npm:8.32.0": + version: 8.32.0 + resolution: "@typescript-eslint/scope-manager@npm:8.32.0" dependencies: - "@typescript-eslint/types": "npm:8.31.1" - "@typescript-eslint/visitor-keys": "npm:8.31.1" - checksum: 10c0/759cfaa922f8bc97ecdcfe583df88ad31b04d02a865efc2c6dab622374c9f32839054596193ec3b1c478d8a73690999cbd996e1092605f41a54bbe6a9a62bbf3 + "@typescript-eslint/types": "npm:8.32.0" + "@typescript-eslint/visitor-keys": "npm:8.32.0" + checksum: 10c0/9149d4eebfc7f096a3401a4865e0e552231c91cee362fe3a59c31cf2f0b6b325619f534aed41688c3702867cf86b12454e00055d09e7f229c92083e28e97baac languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:8.31.1": - version: 8.31.1 - resolution: "@typescript-eslint/type-utils@npm:8.31.1" +"@typescript-eslint/type-utils@npm:8.32.0": + version: 8.32.0 + resolution: "@typescript-eslint/type-utils@npm:8.32.0" dependencies: - "@typescript-eslint/typescript-estree": "npm:8.31.1" - "@typescript-eslint/utils": "npm:8.31.1" + "@typescript-eslint/typescript-estree": "npm:8.32.0" + "@typescript-eslint/utils": "npm:8.32.0" debug: "npm:^4.3.4" - ts-api-utils: "npm:^2.0.1" + ts-api-utils: "npm:^2.1.0" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/ea5369cf200cd48f26e2c6013c81f5915cc933117e011537a7424402a1ebececc8a39e290b9572a7876a237116fbd75e9ba9313c9898ab828f5a814ab26066d2 + checksum: 10c0/3aec7fbe77d8dae698f75d55d6bed537e7dfa3ed069fbcae456dcf5580c16746ef3e7020522223ca560a75842183fbb8e7ff309e872035d14bf98eb8fae454b4 languageName: node linkType: hard -"@typescript-eslint/types@npm:8.31.1": - version: 8.31.1 - resolution: "@typescript-eslint/types@npm:8.31.1" - checksum: 10c0/d52692559028b71d8bfda4f098c7fa08e272c11cf9dd99ea9e1cfb00036c0849d6d53694e047a942c6568b3bf5637512e46356de70b412a9216ec6cfb8b2b950 +"@typescript-eslint/types@npm:8.32.0": + version: 8.32.0 + resolution: "@typescript-eslint/types@npm:8.32.0" + checksum: 10c0/86cc1e365bc12b8baf539e8e2d280b068a7d4a4220f5834fe4de182827a971200408a1ad20f9679af4c4bcdafea03dd66319fe7f1d060ce4b5abbf2962ea3062 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:8.31.1": - version: 8.31.1 - resolution: "@typescript-eslint/typescript-estree@npm:8.31.1" +"@typescript-eslint/typescript-estree@npm:8.32.0": + version: 8.32.0 + resolution: "@typescript-eslint/typescript-estree@npm:8.32.0" dependencies: - "@typescript-eslint/types": "npm:8.31.1" - "@typescript-eslint/visitor-keys": "npm:8.31.1" + "@typescript-eslint/types": "npm:8.32.0" + "@typescript-eslint/visitor-keys": "npm:8.32.0" debug: "npm:^4.3.4" fast-glob: "npm:^3.3.2" is-glob: "npm:^4.0.3" minimatch: "npm:^9.0.4" semver: "npm:^7.6.0" - ts-api-utils: "npm:^2.0.1" + ts-api-utils: "npm:^2.1.0" peerDependencies: typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/77059f204389d2d1b6db32d4df63473c99f5bd051218200f257531c2d2b2e3f237b23aa80a79baebc9ca8a776636867f1fd2d03533d207da2685d740e2c7fbef + checksum: 10c0/c366a457b544c52cb26ffe3e07ed9d3c6eea9fa8a181c2fdba9a0d2076e5d3198dedfb8510038b0791bd338773d8c8d2af048b7c69999d3fd8540ef790dbc720 languageName: node linkType: hard -"@typescript-eslint/utils@npm:8.31.1": - version: 8.31.1 - resolution: "@typescript-eslint/utils@npm:8.31.1" +"@typescript-eslint/utils@npm:8.32.0": + version: 8.32.0 + resolution: "@typescript-eslint/utils@npm:8.32.0" dependencies: - "@eslint-community/eslint-utils": "npm:^4.4.0" - "@typescript-eslint/scope-manager": "npm:8.31.1" - "@typescript-eslint/types": "npm:8.31.1" - "@typescript-eslint/typescript-estree": "npm:8.31.1" + "@eslint-community/eslint-utils": "npm:^4.7.0" + "@typescript-eslint/scope-manager": "npm:8.32.0" + "@typescript-eslint/types": "npm:8.32.0" + "@typescript-eslint/typescript-estree": "npm:8.32.0" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/6190551702605aa60e67828163cb5880eee7ab5f1ee789d32227e4f4297d80ea9be98776400fd0660551dcbcac2a35babef33dd94267856dcb6f36c9c94f11ab + checksum: 10c0/b5b65555b98c8fc92ec016ce2329f644b4d09def28c36422ce77aad9eda1b4dae009bf97b684357e97dd15de66dddba7d8d86e426e11123dae80f7ca2b4f9bd4 languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:8.31.1": - version: 8.31.1 - resolution: "@typescript-eslint/visitor-keys@npm:8.31.1" +"@typescript-eslint/visitor-keys@npm:8.32.0": + version: 8.32.0 + resolution: "@typescript-eslint/visitor-keys@npm:8.32.0" dependencies: - "@typescript-eslint/types": "npm:8.31.1" + "@typescript-eslint/types": "npm:8.32.0" eslint-visitor-keys: "npm:^4.2.0" - checksum: 10c0/09dbd8e1fdff72802a10bae2c12fa6d25f7e2dab1ff9b720afc2eb4e848b723c179109032aeaeb409d0c9e4107ab4fab8c8b1b47a55d58713d3f29a1365db3ea + checksum: 10c0/f2e5254d9b1d00cd6360e27240ad72fbab7bcbaed46944943ff077e12fe4883790571f3734f8cb12c3e278bfd7bc4f8f7192ed899f341c282269a9dd16f0cba0 languageName: node linkType: hard @@ -1799,36 +1817,36 @@ __metadata: "@emotion/react": "npm:^11.14.0" "@emotion/styled": "npm:^11.14.0" "@eslint/js": "npm:^9.26.0" - "@mui/icons-material": "npm:^7.0.2" - "@mui/material": "npm:^7.0.2" + "@mui/icons-material": "npm:^7.1.0" + "@mui/material": "npm:^7.1.0" "@preact/compat": "npm:^18.3.1" "@preact/preset-vite": "npm:^2.10.1" "@table-library/react-table-library": "npm:4.1.15" "@trivago/prettier-plugin-sort-imports": "npm:^5.2.2" - "@types/node": "npm:^22.15.3" - "@types/react": "npm:^19.1.2" + "@types/node": "npm:^22.15.17" + "@types/react": "npm:^19.1.3" "@types/react-dom": "npm:^19.1.3" alova: "npm:3.2.10" async-validator: "npm:^4.2.5" concurrently: "npm:^9.1.2" eslint: "npm:^9.26.0" - eslint-config-prettier: "npm:^10.1.2" + eslint-config-prettier: "npm:^10.1.5" formidable: "npm:^3.5.4" jwt-decode: "npm:^4.0.0" magic-string: "npm:^0.30.17" mime-types: "npm:^3.0.1" - preact: "npm:^10.26.5" + preact: "npm:^10.26.6" prettier: "npm:^3.5.3" react: "npm:^19.1.0" react-dom: "npm:^19.1.0" react-icons: "npm:^5.5.0" - react-router: "npm:^7.5.3" + react-router: "npm:^7.6.0" react-toastify: "npm:^11.0.5" rollup-plugin-visualizer: "npm:^5.14.0" terser: "npm:^5.39.0" typesafe-i18n: "npm:^5.26.2" typescript: "npm:^5.8.3" - typescript-eslint: "npm:8.31.1" + typescript-eslint: "npm:8.32.0" vite: "npm:^6.3.5" vite-plugin-imagemin: "npm:^0.6.1" vite-tsconfig-paths: "npm:^5.1.4" @@ -3378,14 +3396,14 @@ __metadata: languageName: node linkType: hard -"eslint-config-prettier@npm:^10.1.2": - version: 10.1.2 - resolution: "eslint-config-prettier@npm:10.1.2" +"eslint-config-prettier@npm:^10.1.5": + version: 10.1.5 + resolution: "eslint-config-prettier@npm:10.1.5" peerDependencies: eslint: ">=7.0.0" bin: eslint-config-prettier: bin/cli.js - checksum: 10c0/c22c8e29193cc8fd70becf1c2dd072513f2b3004a175c2a49404c79d1745ba4dc0edc2afd00d16b0e26d24f95813a0469e7445a25104aec218f6d84cdb1697e9 + checksum: 10c0/5486255428e4577e8064b40f27db299faf7312b8e43d7b4bc913a6426e6c0f5950cd519cad81ae24e9aecb4002c502bc665c02e3b52efde57af2debcf27dd6e0 languageName: node linkType: hard @@ -6030,10 +6048,10 @@ __metadata: languageName: node linkType: hard -"preact@npm:^10.26.5": - version: 10.26.5 - resolution: "preact@npm:10.26.5" - checksum: 10c0/542a924009489c21b24e9588a5580dac03239a60951d10e6ad1207db66c8e719e1d46a38af6577c8f324b238fbe2aa92e0ffc04d3a71dbe182f56426c8abe632 +"preact@npm:^10.26.6": + version: 10.26.6 + resolution: "preact@npm:10.26.6" + checksum: 10c0/af07817a24b76c48f0eb49895d2ab49d6e43097355b6f75271a4cab5c2886999968e9eab9331a48f0b7e3477bc16153b08cd1d6a24ebf1acea4016b7054daf29 languageName: node linkType: hard @@ -6230,20 +6248,19 @@ __metadata: languageName: node linkType: hard -"react-router@npm:^7.5.3": - version: 7.5.3 - resolution: "react-router@npm:7.5.3" +"react-router@npm:^7.6.0": + version: 7.6.0 + resolution: "react-router@npm:7.6.0" dependencies: cookie: "npm:^1.0.1" set-cookie-parser: "npm:^2.6.0" - turbo-stream: "npm:2.4.0" peerDependencies: react: ">=18" react-dom: ">=18" peerDependenciesMeta: react-dom: optional: true - checksum: 10c0/1f98ab5974cbf6696944a3cbe3d5708add6cdb9c765e0952459eb912d388fe361914a94557546dcd45164413fd9bc2fde97302c8daf3951156644232a9e3ce16 + checksum: 10c0/abc4d37c01804a3137b1cfd12cf7e55bff092a67c835404ab9da1411ec9e170fe72773b9846d2db084cc0272179237e59d88dbf46cef9db031892feebcb48640 languageName: node linkType: hard @@ -7314,7 +7331,7 @@ __metadata: languageName: node linkType: hard -"ts-api-utils@npm:^2.0.1": +"ts-api-utils@npm:^2.1.0": version: 2.1.0 resolution: "ts-api-utils@npm:2.1.0" peerDependencies: @@ -7353,13 +7370,6 @@ __metadata: languageName: node linkType: hard -"turbo-stream@npm:2.4.0": - version: 2.4.0 - resolution: "turbo-stream@npm:2.4.0" - checksum: 10c0/e68b2569f1f16e6e9633d090c6024b2ae9f0e97bfeacb572451ca3732e120ebbb546f3bc4afc717c46cb57b5aea6104e04ef497f9912eef6a7641e809518e98a - languageName: node - linkType: hard - "type-check@npm:^0.4.0, type-check@npm:~0.4.0": version: 0.4.0 resolution: "type-check@npm:0.4.0" @@ -7398,17 +7408,17 @@ __metadata: languageName: node linkType: hard -"typescript-eslint@npm:8.31.1": - version: 8.31.1 - resolution: "typescript-eslint@npm:8.31.1" +"typescript-eslint@npm:8.32.0": + version: 8.32.0 + resolution: "typescript-eslint@npm:8.32.0" dependencies: - "@typescript-eslint/eslint-plugin": "npm:8.31.1" - "@typescript-eslint/parser": "npm:8.31.1" - "@typescript-eslint/utils": "npm:8.31.1" + "@typescript-eslint/eslint-plugin": "npm:8.32.0" + "@typescript-eslint/parser": "npm:8.32.0" + "@typescript-eslint/utils": "npm:8.32.0" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/58c096b96cb2262df3e3b52f06c0fc2020dc9f9d34b8a3d5331b0c7895e949ba1de43b7406d34b3cface2d1634f7e947e4c7759bf33819c92f8fb2bd67681bf1 + checksum: 10c0/f74c2a3defec95f5f6d0887a9c57ad4f38d62fabe4e4a5a83bf6e198832efb6d706d08c89002f7765c3438e41f4c71d4a4694918056aa3a50b7b786569298fe4 languageName: node linkType: hard From dc1094b6ba187222b10b12cb9ef22dfa9a5c863e Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Sat, 10 May 2025 13:36:40 +0200 Subject: [PATCH 04/13] show ntp connect in log --- src/core/system.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/core/system.cpp b/src/core/system.cpp index 22f5c03be..253700003 100644 --- a/src/core/system.cpp +++ b/src/core/system.cpp @@ -2001,8 +2001,12 @@ std::string System::reset_reason(uint8_t cpu) const { // set NTP status void System::ntp_connected(bool b) { - if (b != ntp_connected_ && !b) { - LOG_WARNING("NTP disconnected"); // if turned off report it + if (b != ntp_connected_) { + if (b) { + LOG_INFO("NTP connected"); + } else { + LOG_WARNING("NTP disconnected"); // if turned off report it + } } ntp_connected_ = b; From b3320c3e48d2f24c2274f5653bd3bbe6c213aa8a Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Sat, 10 May 2025 13:38:19 +0200 Subject: [PATCH 05/13] ha optimistic, cs6800 changes, custom entity hide --- CHANGELOG_LATEST.md | 4 + interface/src/api/app.ts | 3 +- interface/src/app/main/CustomEntities.tsx | 3 + .../src/app/main/CustomEntitiesDialog.tsx | 22 ++- interface/src/app/main/types.ts | 2 + interface/src/app/settings/MqttSettings.tsx | 176 +++++++++--------- interface/src/types/mqtt.ts | 1 + mock-api/rest_server.ts | 1 + src/ESP32React/MqttSettingsService.cpp | 10 + src/ESP32React/MqttSettingsService.h | 1 + src/core/analogsensor.cpp | 3 + src/core/default_settings.h | 4 + src/core/device_library.h | 2 +- src/core/emsdevice.h | 20 +- src/core/helpers.cpp | 19 +- src/core/helpers.h | 2 + src/core/locale_common.h | 2 + src/core/mqtt.cpp | 8 + src/core/mqtt.h | 9 + src/devices/boiler.cpp | 106 +++++++---- src/devices/boiler.h | 16 +- src/devices/thermostat.cpp | 44 ++--- src/emsesp_version.h | 2 +- src/web/WebCustomEntityService.cpp | 19 +- src/web/WebCustomEntityService.h | 1 + src/web/WebSchedulerService.cpp | 6 +- 26 files changed, 320 insertions(+), 166 deletions(-) diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index 1f2ee87d0..8e854164d 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -11,6 +11,9 @@ For more details go to [docs.emsesp.org](https://docs.emsesp.org/). - boiler auxheatersource [#2489](https://github.com/emsesp/EMS-ESP32/discussions/2489) - thermostat last error for RC100/300 [#2501](https://github.com/emsesp/EMS-ESP32/issues/2501) - boiler 0xC6 telegram [#1963](https://github.com/emsesp/EMS-ESP32/issues/1963) +- HA optimistic [#2551](https://github.com/emsesp/EMS-ESP32/issues/2551) +- CS6800i changes [#2448](https://github.com/emsesp/EMS-ESP32/issues/2448), [#2449](https://github.com/emsesp/EMS-ESP32/issues/2449) +- charging pump [#2544](https://github.com/emsesp/EMS-ESP32/issues/2544) ## Fixed @@ -21,6 +24,7 @@ For more details go to [docs.emsesp.org](https://docs.emsesp.org/). - also rebuild HA config on mqtt connect for scheduler, custom and shower - FB100 controls the hc, not the master [#2510](https://github.com/emsesp/EMS-ESP32/issues/2510) - IPM DHW module, [#2524](https://github.com/emsesp/EMS-ESP32/issues/2524) +- charge optimization [#2543](https://github.com/emsesp/EMS-ESP32/issues/2543) ## Changed diff --git a/interface/src/api/app.ts b/interface/src/api/app.ts index a56f4db53..d670a5749 100644 --- a/interface/src/api/app.ts +++ b/interface/src/api/app.ts @@ -143,7 +143,8 @@ export const readCustomEntities = () => o_name: ei.name, o_writeable: ei.writeable, o_value: ei.value, - o_deleted: ei.deleted + o_deleted: ei.deleted, + o_hide: ei.hide })); } }); diff --git a/interface/src/app/main/CustomEntities.tsx b/interface/src/app/main/CustomEntities.tsx index 73e109827..fac37a376 100644 --- a/interface/src/app/main/CustomEntities.tsx +++ b/interface/src/app/main/CustomEntities.tsx @@ -76,6 +76,7 @@ const CustomEntities = () => { ei.factor !== ei.o_factor || ei.value_type !== ei.o_value_type || ei.writeable !== ei.o_writeable || + ei.hide !== ei.o_hide || ei.deleted !== ei.o_deleted || (ei.value || '') !== (ei.o_value || '') ); @@ -147,6 +148,7 @@ const CustomEntities = () => { factor: condensed_ei.factor, uom: condensed_ei.uom, writeable: condensed_ei.writeable, + hide: condensed_ei.hide, value_type: condensed_ei.value_type, value: condensed_ei.value })) @@ -209,6 +211,7 @@ const CustomEntities = () => { value_type: item.value_type, writeable: item.writeable, deleted: false, + hide: item.hide, value: item.value }); setDialogOpen(true); diff --git a/interface/src/app/main/CustomEntitiesDialog.tsx b/interface/src/app/main/CustomEntitiesDialog.tsx index 32550cf6c..152dd2c80 100644 --- a/interface/src/app/main/CustomEntitiesDialog.tsx +++ b/interface/src/app/main/CustomEntitiesDialog.tsx @@ -2,7 +2,11 @@ import { useEffect, useState } from 'react'; import AddIcon from '@mui/icons-material/Add'; import CancelIcon from '@mui/icons-material/Cancel'; +import CommentsDisabledOutlinedIcon from '@mui/icons-material/CommentsDisabledOutlined'; import DoneIcon from '@mui/icons-material/Done'; +import EditOffOutlinedIcon from '@mui/icons-material/EditOffOutlined'; +import EditOutlinedIcon from '@mui/icons-material/EditOutlined'; +import InsertCommentOutlinedIcon from '@mui/icons-material/InsertCommentOutlined'; import RemoveIcon from '@mui/icons-material/RemoveCircleOutline'; import { Box, @@ -128,6 +132,20 @@ const CustomEntitiesDialog = ({ onChange={updateFormValue} /> + + } + checkedIcon={} + checked={editItem.hide} + onChange={updateFormValue} + name="hide" + /> + } + label="API/Mqtt" + /> + - + } + checkedIcon={} checked={editItem.writeable} onChange={updateFormValue} name="writeable" diff --git a/interface/src/app/main/types.ts b/interface/src/app/main/types.ts index 38b521563..2f967eacd 100644 --- a/interface/src/app/main/types.ts +++ b/interface/src/app/main/types.ts @@ -384,6 +384,7 @@ export interface EntityItem { value_type: number; value?: unknown; writeable: boolean; + hide: boolean; deleted?: boolean; o_id?: number; o_ram?: number; @@ -397,6 +398,7 @@ export interface EntityItem { o_deleted?: boolean; o_writeable?: boolean; o_value?: unknown; + o_hide?: boolean; } export interface Entities { diff --git a/interface/src/app/settings/MqttSettings.tsx b/interface/src/app/settings/MqttSettings.tsx index 8cbac5d9e..8ec9c30ad 100644 --- a/interface/src/app/settings/MqttSettings.tsx +++ b/interface/src/app/settings/MqttSettings.tsx @@ -254,102 +254,112 @@ const MqttSettings = () => { } label={LL.MQTT_RESPONSE()} /> - {!data.ha_enabled && ( - + + + + } + label={LL.MQTT_PUBLISH_TEXT_1()} + /> + + {data.publish_single && ( } - label={LL.MQTT_PUBLISH_TEXT_1()} + label={LL.MQTT_PUBLISH_TEXT_2()} /> - {data.publish_single && ( + )} + + + + + } + label={LL.MQTT_PUBLISH_TEXT_3()} + /> + {data.ha_enabled && data.discovery_type === 0 && ( + + } + label="Optimistic" + /> + )} + + {data.ha_enabled && ( + - - } - label={LL.MQTT_PUBLISH_TEXT_2()} + + Home Assistant + Domoticz + Domoticz (latest) + + + + - )} - - )} - {!data.publish_single && ( - - - - } - label={LL.MQTT_PUBLISH_TEXT_3()} - /> - - {data.ha_enabled && ( - - - - Home Assistant - Domoticz - Domoticz (latest) - - - - - - - - {LL.MQTT_ENTITY_FORMAT_0()} - - {LL.MQTT_ENTITY_FORMAT_1()} (v3.6) - - - {LL.MQTT_ENTITY_FORMAT_2()} (v3.6) - - {LL.MQTT_ENTITY_FORMAT_1()} - {LL.MQTT_ENTITY_FORMAT_2()} - - + + + {LL.MQTT_ENTITY_FORMAT_0()} + + {LL.MQTT_ENTITY_FORMAT_1()} (v3.6) + + + {LL.MQTT_ENTITY_FORMAT_2()} (v3.6) + + {LL.MQTT_ENTITY_FORMAT_1()} + {LL.MQTT_ENTITY_FORMAT_2()} + - )} - - )} + + )} + {LL.MQTT_PUBLISH_INTERVALS()} (0=auto) diff --git a/interface/src/types/mqtt.ts b/interface/src/types/mqtt.ts index 738dafa75..f930a12bf 100644 --- a/interface/src/types/mqtt.ts +++ b/interface/src/types/mqtt.ts @@ -43,6 +43,7 @@ export interface MqttSettingsType { mqtt_qos: number; mqtt_retain: boolean; ha_enabled: boolean; + ha_optimistic: boolean; nested_format: number; send_response: boolean; publish_single: boolean; diff --git a/mock-api/rest_server.ts b/mock-api/rest_server.ts index 8a873c385..08714dc99 100644 --- a/mock-api/rest_server.ts +++ b/mock-api/rest_server.ts @@ -567,6 +567,7 @@ let mqtt_settings = { rootCA: '', mqtt_retain: false, ha_enabled: true, + ha_optimistic: false, nested_format: 1, discovery_type: 0, discovery_prefix: 'homeassistant', diff --git a/src/ESP32React/MqttSettingsService.cpp b/src/ESP32React/MqttSettingsService.cpp index f6fb78872..55d5a5881 100644 --- a/src/ESP32React/MqttSettingsService.cpp +++ b/src/ESP32React/MqttSettingsService.cpp @@ -244,6 +244,7 @@ void MqttSettings::read(MqttSettings & settings, JsonObject root) { root["mqtt_qos"] = settings.mqtt_qos; root["mqtt_retain"] = settings.mqtt_retain; root["ha_enabled"] = settings.ha_enabled; + root["ha_optimistic"] = settings.ha_optimistic; root["nested_format"] = settings.nested_format; root["discovery_prefix"] = settings.discovery_prefix; root["discovery_type"] = settings.discovery_type; @@ -284,6 +285,7 @@ StateUpdateResult MqttSettings::update(JsonObject root, MqttSettings & settings) newSettings.publish_time_heartbeat = static_cast(root["publish_time_heartbeat"] | EMSESP_DEFAULT_PUBLISH_HEARTBEAT); newSettings.ha_enabled = root["ha_enabled"] | EMSESP_DEFAULT_HA_ENABLED; + newSettings.ha_optimistic = root["ha_optimistic"] | EMSESP_DEFAULT_HA_OPTIMISTIC; newSettings.nested_format = static_cast(root["nested_format"] | EMSESP_DEFAULT_NESTED_FORMAT); newSettings.discovery_prefix = root["discovery_prefix"] | EMSESP_DEFAULT_DISCOVERY_PREFIX; newSettings.discovery_type = static_cast(root["discovery_type"] | EMSESP_DEFAULT_DISCOVERY_TYPE); @@ -345,6 +347,14 @@ StateUpdateResult MqttSettings::update(JsonObject root, MqttSettings & settings) changed = true; } + if (newSettings.discovery_type != 0) { + newSettings.ha_optimistic = false; + } + if (newSettings.ha_optimistic != settings.ha_optimistic) { + emsesp::EMSESP::mqtt_.ha_optimistic(newSettings.ha_optimistic); + changed = true; + } + if (newSettings.mqtt_retain != settings.mqtt_retain) { emsesp::EMSESP::mqtt_.set_retain(newSettings.mqtt_retain); changed = true; diff --git a/src/ESP32React/MqttSettingsService.h b/src/ESP32React/MqttSettingsService.h index ef448af0d..760507ef2 100644 --- a/src/ESP32React/MqttSettingsService.h +++ b/src/ESP32React/MqttSettingsService.h @@ -76,6 +76,7 @@ class MqttSettings { uint8_t mqtt_qos; bool mqtt_retain; bool ha_enabled; + bool ha_optimistic; uint8_t nested_format; String discovery_prefix; uint8_t discovery_type; diff --git a/src/core/analogsensor.cpp b/src/core/analogsensor.cpp index ff3d7baf8..faca9c471 100644 --- a/src/core/analogsensor.cpp +++ b/src/core/analogsensor.cpp @@ -682,6 +682,9 @@ void AnalogSensor::publish_values(const bool force) { Mqtt::add_ha_sections_to_doc("analog", stat_t, config, !is_ha_device_created, val_cond); + if (Mqtt::ha_optimistic()) { + config["optimistic"] = true; + } sensor.ha_registered = Mqtt::queue_ha(topic, config.as()); } } diff --git a/src/core/default_settings.h b/src/core/default_settings.h index 3a0e7a269..5a32df6af 100644 --- a/src/core/default_settings.h +++ b/src/core/default_settings.h @@ -185,6 +185,10 @@ #define EMSESP_DEFAULT_HA_ENABLED false #endif +#ifndef EMSESP_DEFAULT_HA_OPTIMISTIC +#define EMSESP_DEFAULT_HA_OPTIMISTIC false +#endif + #ifndef EMSESP_DEFAULT_PUBLISH_TIME #define EMSESP_DEFAULT_PUBLISH_TIME 10 #endif diff --git a/src/core/device_library.h b/src/core/device_library.h index 43a0f24ce..0e7818df6 100644 --- a/src/core/device_library.h +++ b/src/core/device_library.h @@ -24,7 +24,7 @@ */ // Boilers - 0x08 -{ 8, DeviceType::BOILER, "CS*800i, Logatherm WLW*", DeviceFlags::EMS_DEVICE_FLAG_HEATPUMP}, +{ 8, DeviceType::BOILER, "CS5800i, CS6800i, WLW176i, WLW186i", DeviceFlags::EMS_DEVICE_FLAG_CS6800}, { 12, DeviceType::BOILER, "C1200W", DeviceFlags::EMS_DEVICE_FLAG_NONE}, { 64, DeviceType::BOILER, "BK13/BK15, Smartline, GB1*2", DeviceFlags::EMS_DEVICE_FLAG_NONE}, { 72, DeviceType::BOILER, "Logano GB1*5, Logamatic MC10", DeviceFlags::EMS_DEVICE_FLAG_EMS}, diff --git a/src/core/emsdevice.h b/src/core/emsdevice.h index 36bdecf23..bfe3560e8 100644 --- a/src/core/emsdevice.h +++ b/src/core/emsdevice.h @@ -197,6 +197,19 @@ class EMSdevice { } } + void has_enumupdate(std::shared_ptr telegram, + uint8_t & value, + const uint8_t index, + const std::vector & maskIn, + const std::vector & maskOut) { + uint8_t val = value < maskIn.size() ? maskIn[value] : EMS_VALUE_UINT8_NOTSET; + if (telegram->read_value(val, index)) { + value = val < maskOut.size() ? maskOut[val] : EMS_VALUE_UINT8_NOTSET; + has_update_ = true; + publish_value((void *)&value); + } + } + template void has_update(std::shared_ptr telegram, Value & value, const uint8_t index, uint8_t s = 0) { if (telegram->read_value(value, index, s)) { @@ -434,9 +447,10 @@ class EMSdevice { static constexpr uint8_t EMS_DEVICE_FLAG_EMS = 1; static constexpr uint8_t EMS_DEVICE_FLAG_EMSPLUS = 2; static constexpr uint8_t EMS_DEVICE_FLAG_HT3 = 3; - static constexpr uint8_t EMS_DEVICE_FLAG_HEATPUMP = 4; - static constexpr uint8_t EMS_DEVICE_FLAG_HYBRID = 5; - static constexpr uint8_t EMS_DEVICE_FLAG_HIU = 6; + static constexpr uint8_t EMS_DEVICE_FLAG_HYBRID = 4; + static constexpr uint8_t EMS_DEVICE_FLAG_HIU = 5; + static constexpr uint8_t EMS_DEVICE_FLAG_HEATPUMP = 8; // use bit for subtypes + static constexpr uint8_t EMS_DEVICE_FLAG_CS6800 = 9; // subtype of heatpump // Solar Module static constexpr uint8_t EMS_DEVICE_FLAG_SM10 = 1; diff --git a/src/core/helpers.cpp b/src/core/helpers.cpp index 95b2b366e..685181bce 100644 --- a/src/core/helpers.cpp +++ b/src/core/helpers.cpp @@ -627,10 +627,18 @@ bool Helpers::value2enum(const char * value, uint8_t & value_ui, const char * co } } value_ui = 0; - return false; } +bool Helpers::value2enum(const char * value, uint8_t & value_ui, const char * const ** strs, const std::vector & mask) { + uint8_t v = value_ui; + if (!value2enum(value, v, strs) || v >= mask.size()) { + return false; + } + value_ui = mask[v]; + return true; +} + // finds the string (value) of a list vector (strs) // returns true if found, and sets the value_ui to the index, else false // also allow true/false for on/off @@ -658,6 +666,15 @@ bool Helpers::value2enum(const char * value, uint8_t & value_ui, const char * co return false; } +bool Helpers::value2enum(const char * value, uint8_t & value_ui, const char * const * strs, const std::vector & mask) { + uint8_t v = value_ui; + if (!value2enum(value, v, strs) || v >= mask.size()) { + return false; + } + value_ui = mask[v]; + return true; +} + // https://stackoverflow.com/questions/313970/how-to-convert-stdstring-to-lower-case std::string Helpers::toLower(std::string const & s) { std::string lc = s; diff --git a/src/core/helpers.h b/src/core/helpers.h index 144653018..7a9dc92dd 100644 --- a/src/core/helpers.h +++ b/src/core/helpers.h @@ -72,7 +72,9 @@ class Helpers { static bool value2bool(const char * value, bool & value_b); static bool value2string(const char * value, std::string & value_s); static bool value2enum(const char * value, uint8_t & value_ui, const char * const ** strs); + static bool value2enum(const char * value, uint8_t & value_ui, const char * const ** strs, const std::vector & mask); static bool value2enum(const char * value, uint8_t & value_ui, const char * const * strs); + static bool value2enum(const char * value, uint8_t & value_ui, const char * const * strs, const std::vector & mask); static bool value2temperature(const char * value, float & value_f, bool relative = false); static bool value2temperature(const char * value, int & value_i, const bool relative = false, const int min = -2147483648, const int max = 2147483647); diff --git a/src/core/locale_common.h b/src/core/locale_common.h index 2718db83f..fd06c6a61 100644 --- a/src/core/locale_common.h +++ b/src/core/locale_common.h @@ -298,6 +298,8 @@ MAKE_ENUM(enum_comfort2, FL_(eco), FL_(high_comfort)) MAKE_ENUM(enum_flow, FL_(off), FL_(flow), FL_(bufferedflow), FL_(buffer), FL_(layeredbuffer)) MAKE_ENUM(enum_reset, FL_(dash), FL_(maintenance), FL_(error), FL_(history), FL_(message)) MAKE_ENUM(enum_maxHeat, FL_(0kW), FL_(2kW), FL_(3kW), FL_(4kW), FL_(6kW), FL_(9kW)) +MAKE_ENUM(enum_maxHeat1, FL_(0kW), FL_(3kW), FL_(6kW), FL_(9kW)) +MAKE_ENUM(enum_maxHeat2, FL_(3kW), FL_(6kW), FL_(9kW)) MAKE_ENUM(enum_pumpMode, FL_(proportional), FL_(deltaP1), FL_(deltaP2), FL_(deltaP3), FL_(deltaP4)) MAKE_ENUM(enum_pumpCharacter, FL_(proportional), FL_(pressure1), FL_(pressure2), FL_(pressure3), FL_(pressure4), FL_(pressure5), FL_(pressure6)) MAKE_ENUM(enum_hpPumpMode, FL_(auto), FL_(continuous)) diff --git a/src/core/mqtt.cpp b/src/core/mqtt.cpp index 42bbfc59a..280649357 100644 --- a/src/core/mqtt.cpp +++ b/src/core/mqtt.cpp @@ -40,6 +40,7 @@ uint32_t Mqtt::publish_time_heartbeat_; bool Mqtt::mqtt_enabled_; uint8_t Mqtt::entity_format_; bool Mqtt::ha_enabled_; +bool Mqtt::ha_optimistic_; uint8_t Mqtt::nested_format_; std::string Mqtt::discovery_prefix_; uint8_t Mqtt::discovery_type_; @@ -340,6 +341,7 @@ void Mqtt::load_settings() { mqtt_retain_ = mqttSettings.mqtt_retain; mqtt_enabled_ = mqttSettings.enabled; ha_enabled_ = mqttSettings.ha_enabled; + ha_optimistic_ = mqttSettings.ha_optimistic; nested_format_ = mqttSettings.nested_format; publish_single_ = mqttSettings.publish_single; publish_single2cmd_ = mqttSettings.publish_single2cmd; @@ -1114,6 +1116,9 @@ bool Mqtt::publish_ha_sensor_config(uint8_t type, // EMSdev doc["dev"] = dev_json; + if (ha_optimistic_) { + doc["optimistic"] = true; + } return queue_ha(topic, doc.as()); } @@ -1343,6 +1348,9 @@ bool Mqtt::publish_ha_climate_config(const int8_t tag, const bool has_roomtemp, // device name must be different to the entity name, take the ids value we just created add_ha_sections_to_doc("thermostat", topic_t, doc, false, seltemp_cond, has_roomtemp ? currtemp_cond : nullptr, hc_mode_cond); + if (ha_optimistic_) { + doc["optimistic"] = true; + } return queue_ha(topic, doc.as()); // publish the config payload with retain flag } diff --git a/src/core/mqtt.h b/src/core/mqtt.h index 2a7fadf0f..89d572b96 100644 --- a/src/core/mqtt.h +++ b/src/core/mqtt.h @@ -206,6 +206,14 @@ class Mqtt { ha_enabled_ = ha_enabled; } + static bool ha_optimistic() { + return ha_optimistic_; + } + + static void ha_optimistic(bool ha_optimistic) { + ha_optimistic_ = ha_optimistic; + } + static bool ha_climate_reset() { return ha_climate_reset_; } @@ -309,6 +317,7 @@ class Mqtt { static uint32_t publish_time_heartbeat_; static bool mqtt_enabled_; static bool ha_enabled_; + static bool ha_optimistic_; static uint8_t nested_format_; static uint8_t entity_format_; static std::string discovery_prefix_; diff --git a/src/devices/boiler.cpp b/src/devices/boiler.cpp index e742a4884..37d29971b 100644 --- a/src/devices/boiler.cpp +++ b/src/devices/boiler.cpp @@ -68,7 +68,7 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const register_telegram_type(0x28, "WeatherComp", true, MAKE_PF_CB(process_WeatherComp)); } - if (model() == EMSdevice::EMS_DEVICE_FLAG_HEATPUMP) { + if (!isHeatPump()) { register_telegram_type(0x494, "UBAEnergySupplied", false, MAKE_PF_CB(process_UBAEnergySupplied)); register_telegram_type(0x495, "UBAInformation", false, MAKE_PF_CB(process_UBAInformation)); register_telegram_type(0x48D, "HpPower", true, MAKE_PF_CB(process_HpPower)); @@ -96,7 +96,7 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const } // some gas boilers, see #1701 - if (model() != EMSdevice::EMS_DEVICE_FLAG_HEATPUMP) { + if (!isHeatPump()) { register_telegram_type(0x2E, "Meters", false, MAKE_PF_CB(process_Meters)); register_telegram_type(0x3B, "Energy", false, MAKE_PF_CB(process_Energy)); } @@ -187,7 +187,7 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const DeviceValueUOM::DEGREES); // exclude burner related entities from heatpump and HIU - if (model() != EMSdevice::EMS_DEVICE_FLAG_HEATPUMP && model() != EMSdevice::EMS_DEVICE_FLAG_HIU) { + if (!isHeatPump() && model() != EMSdevice::EMS_DEVICE_FLAG_HIU) { register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &exhaustTemp_, DeviceValueType::UINT16, @@ -411,7 +411,7 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const 99); } */ - if (model() != EMSdevice::EMS_DEVICE_FLAG_HEATPUMP) { + if (!isHeatPump()) { register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &meterHeat_, DeviceValueType::UINT24, @@ -436,7 +436,7 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const } // heatpump info - if (model() == EMSdevice::EMS_DEVICE_FLAG_HEATPUMP) { + if (isHeatPump()) { register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &nrgTotal_, DeviceValueType::UINT24, @@ -655,27 +655,51 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const FL_(hpIn4Opt), DeviceValueUOM::NONE, MAKE_CF_CB(set_HpIn4Logic)); - register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, - &maxHeatComp_, - DeviceValueType::ENUM, - FL_(enum_maxHeat), - FL_(maxHeatComp), - DeviceValueUOM::NONE, - MAKE_CF_CB(set_maxHeatComp)); - register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, - &maxHeatHeat_, - DeviceValueType::ENUM, - FL_(enum_maxHeat), - FL_(maxHeatHeat), - DeviceValueUOM::NONE, - MAKE_CF_CB(set_maxHeatHeat)); - register_device_value(DeviceValueTAG::TAG_DHW1, - &maxHeatDhw_, - DeviceValueType::ENUM, - FL_(enum_maxHeat), - FL_(maxHeatDhw), - DeviceValueUOM::NONE, - MAKE_CF_CB(set_maxHeatDhw)); + if (model() == EMSdevice::EMS_DEVICE_FLAG_CS6800) { + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, + &maxHeatComp_, + DeviceValueType::ENUM, + FL_(enum_maxHeat1), + FL_(maxHeatComp), + DeviceValueUOM::NONE, + MAKE_CF_CB(set_maxHeatComp)); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, + &maxHeatHeat_, + DeviceValueType::ENUM, + FL_(enum_maxHeat2), + FL_(maxHeatHeat), + DeviceValueUOM::NONE, + MAKE_CF_CB(set_maxHeatHeat)); + register_device_value(DeviceValueTAG::TAG_DHW1, + &maxHeatDhw_, + DeviceValueType::ENUM, + FL_(enum_maxHeat2), + FL_(maxHeatDhw), + DeviceValueUOM::NONE, + MAKE_CF_CB(set_maxHeatDhw)); + } else { + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, + &maxHeatComp_, + DeviceValueType::ENUM, + FL_(enum_maxHeat), + FL_(maxHeatComp), + DeviceValueUOM::NONE, + MAKE_CF_CB(set_maxHeatComp)); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, + &maxHeatHeat_, + DeviceValueType::ENUM, + FL_(enum_maxHeat), + FL_(maxHeatHeat), + DeviceValueUOM::NONE, + MAKE_CF_CB(set_maxHeatHeat)); + register_device_value(DeviceValueTAG::TAG_DHW1, + &maxHeatDhw_, + DeviceValueType::ENUM, + FL_(enum_maxHeat), + FL_(maxHeatDhw), + DeviceValueUOM::NONE, + MAKE_CF_CB(set_maxHeatDhw)); + } register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &auxHeaterSource_, DeviceValueType::ENUM, @@ -1068,7 +1092,7 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const EMSESP::send_read_request(0xC6, device_id, 0, 21); // read last errorcode on start (not broadcasted) - if (model() != EMSdevice::EMS_DEVICE_FLAG_HEATPUMP && model() != EMSdevice::EMS_DEVICE_FLAG_HIU) { + if (!isHeatPump() && model() != EMSdevice::EMS_DEVICE_FLAG_HIU) { register_telegram_type(0x04, "UBAFactory", true, MAKE_PF_CB(process_UBAFactory)); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &nomPower_, DeviceValueType::UINT8, FL_(nomPower), DeviceValueUOM::KW, MAKE_CF_CB(set_nomPower)); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, @@ -1189,7 +1213,7 @@ void Boiler::check_active() { } // calculate energy for boiler 0x08 from stored modulation an time in units of 0.01 Wh - if (model() != EMSdevice::EMS_DEVICE_FLAG_HEATPUMP && model() != EMSdevice::EMS_DEVICE_FLAG_HIU) { + if (!isHeatPump() && model() != EMSdevice::EMS_DEVICE_FLAG_HIU) { // remember values from last call static uint32_t powLastReadTime_ = uuid::get_uptime(); static uint8_t heatBurnPow = 0; @@ -1780,6 +1804,12 @@ void Boiler::process_HpCooling(std::shared_ptr telegram) { // Boiler(0x08) -W-> Me(0x0B), HpHeaterConfig(0x0492), data: 03 00 00 04 00 void Boiler::process_HpHeaterConfig(std::shared_ptr telegram) { + if (model() == EMSdevice::EMS_DEVICE_FLAG_CS6800) { + has_enumupdate(telegram, maxHeatComp_, 2, {0, 2, 4, 5}, {0, 0, 1, 0, 2, 3}); + has_enumupdate(telegram, maxHeatHeat_, 3, {2, 4, 5}, {0, 0, 0, 0, 1, 2}); + has_enumupdate(telegram, maxHeatDhw_, 4, {2, 4, 5}, {0, 0, 0, 0, 1, 2}); + return; + } has_update(telegram, maxHeatComp_, 2); has_update(telegram, maxHeatHeat_, 3); has_update(telegram, maxHeatDhw_, 4); @@ -2080,7 +2110,7 @@ void Boiler::process_HpPump2(std::shared_ptr telegram) { // Boiler(0x08) -> All(0x00), ?(0x0491), data: 03 01 00 00 00 02 64 00 00 14 01 2C 00 0A 00 1E 00 1E 00 00 1E 0A 1E 05 05 void Boiler::process_HpAdditionalHeater(std::shared_ptr telegram) { has_update(telegram, auxHeaterSource_, 0); // https://github.com/emsesp/EMS-ESP32/discussions/2489 - has_update(telegram, auxHeaterOnly_, 1); + has_update(telegram, auxHeaterOnly_, model() == EMSdevice::EMS_DEVICE_FLAG_CS6800 ? 3 : 1); has_update(telegram, auxHeaterOff_, 2); has_update(telegram, auxHeatMode_, 4); // eco/comfort has_update(telegram, tempParMode_, 5); @@ -3061,8 +3091,20 @@ bool Boiler::set_HpInLogic(const char * value, const int8_t id) { bool Boiler::set_maxHeat(const char * value, const int8_t id) { uint8_t v; - if (!Helpers::value2enum(value, v, FL_(enum_maxHeat))) { - return false; + if (model() == EMSdevice::EMS_DEVICE_FLAG_CS6800) { + if (id == 0) { + if (!Helpers::value2enum(value, v, FL_(enum_maxHeat1), {0, 2, 4, 5})) { + return false; + } + } else { + if (!Helpers::value2enum(value, v, FL_(enum_maxHeat2), {2, 4, 5})) { + return false; + } + } + } else { + if (!Helpers::value2enum(value, v, FL_(enum_maxHeat))) { + return false; + } } write_command(0x492, id, v, 0x492); return true; @@ -3107,7 +3149,7 @@ bool Boiler::set_minTempSilent(const char * value, const int8_t id) { bool Boiler::set_additionalHeaterOnly(const char * value, const int8_t id) { bool v; if (Helpers::value2bool(value, v)) { - write_command(0x491, 1, v ? 1 : 0, 0x491); + write_command(0x491, model() == EMSdevice::EMS_DEVICE_FLAG_CS6800 ? 3 : 1, v ? 1 : 0, 0x491); return true; } return false; diff --git a/src/devices/boiler.h b/src/devices/boiler.h index 1665f8c4e..48061d255 100644 --- a/src/devices/boiler.h +++ b/src/devices/boiler.h @@ -34,6 +34,9 @@ class Boiler : public EMSdevice { inline uint8_t model() const { return (flags() & 0x0F); } + inline bool isHeatPump() const { + return flags() & 0x08; + } void check_active(); void store_energy(); @@ -45,6 +48,7 @@ class Boiler : public EMSdevice { static constexpr uint8_t EMS_TYPE_UBAFunctionTest = 0x1D; static constexpr uint8_t EMS_TYPE_UBAFlags = 0x35; static constexpr uint8_t EMS_TYPE_UBASetPoints = 0x1A; + static constexpr uint16_t EMS_TYPE_UBASetPoints2 = 0x2E0; static constexpr uint8_t EMS_TYPE_UBAParameters = 0x16; static constexpr uint8_t EMS_TYPE_UBAParametersPlus = 0xE6; static constexpr uint8_t EMS_TYPE_UBAParameterWWPlus = 0xEA; @@ -82,12 +86,12 @@ class Boiler : public EMSdevice { uint8_t wwActive_; // uint8_t ww3wayValve_; // 3-way valve on WW uint8_t wwChargePump_; - uint8_t wwFlowTempOffset_; // Boiler offset for ww heating - uint8_t wwMaxPower_; // DHW maximum power - uint8_t wwMaxTemp_; // DHW maximum temperature - uint32_t wwStarts_; // DHW starts - uint32_t wwStartsHp_; // DHW starts Heatpump - uint32_t wwWorkM_; // DHW minutes + uint8_t wwFlowTempOffset_; // Boiler offset for ww heating + uint8_t wwMaxPower_; // DHW maximum power + uint8_t wwMaxTemp_; // DHW maximum temperature + uint32_t wwStarts_; // DHW starts + uint32_t wwStartsHp_; // DHW starts Heatpump + uint32_t wwWorkM_; // DHW minutes int8_t wwHystOn_; int8_t wwHystOff_; uint16_t wwMixerTemp_; // mixing temperature diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index 3ef575291..edb028a10 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -1275,30 +1275,14 @@ void Thermostat::process_RC300WWmode(std::shared_ptr telegram) { has_update(telegram, dhw->wwCircPump_, 1); // FF=off, 0=on ? if (model() == EMSdevice::EMS_DEVICE_FLAG_BC400 || model() == EMSdevice::EMS_DEVICE_FLAG_HMC310) { - const uint8_t modes[] = {0, 5, 1, 2, 4}; // off, eco+, eco, comfort, auto - uint8_t wwmode = dhw->wwMode_ < sizeof(modes) ? modes[dhw->wwMode_] : EMS_VALUE_UINT8_NOTSET; - telegram->read_value(wwmode, 2); - const uint8_t modes1[] = {0, 2, 3, 0, 4, 1}; - has_update(dhw->wwMode_, wwmode < sizeof(modes1) ? modes1[wwmode] : EMS_VALUE_UINT8_NOTSET); + has_enumupdate(telegram, dhw->wwMode_, 2, {0, 5, 1, 2, 4}, {0, 2, 3, 0, 4, 1}); } else if (model() == EMSdevice::EMS_DEVICE_FLAG_R3000) { // https://github.com/emsesp/EMS-ESP32/pull/1722#discussion_r1582823521 - const uint8_t modes[] = {1, 2, 5}; // normal, comfort, eco+ - uint8_t wwmode = dhw->wwMode_ < sizeof(modes) ? modes[dhw->wwMode_] : EMS_VALUE_UINT8_NOTSET; - telegram->read_value(wwmode, 2); - const uint8_t modes1[] = {0, 0, 1, 0, 0, 2}; // 0=normal (1), 1=comfort(2), 2=eco+(5) - has_update(dhw->wwMode_, wwmode < sizeof(modes1) ? modes1[wwmode] : EMS_VALUE_UINT8_NOTSET); + has_enumupdate(telegram, dhw->wwMode_, 2, {1, 2, 5}, {0, 0, 1, 0, 0, 2}); // normal, comfort, eco+ } else if (model() == EMSdevice::EMS_DEVICE_FLAG_CR120) { - const uint8_t modes[] = {1, 2, 4}; //// 0=normal (1), 1=comfort(2), 2=auto(4) - uint8_t wwmode = dhw->wwMode_ < sizeof(modes) ? modes[dhw->wwMode_] : EMS_VALUE_UINT8_NOTSET; - telegram->read_value(wwmode, 2); - const uint8_t modes1[] = {0, 0, 1, 0, 2, 0}; - has_update(dhw->wwMode_, wwmode < sizeof(modes1) ? modes1[wwmode] : EMS_VALUE_UINT8_NOTSET); + has_enumupdate(telegram, dhw->wwMode_, 2, {1, 2, 4}, {0, 0, 1, 0, 2, 0}); // normal, comfort, auto } else if (model() == EMSdevice::EMS_DEVICE_FLAG_RC100) { - const uint8_t modes[] = {0, 2, 3}; //// 0=off(0), 1=on(2), 2=auto(3) - uint8_t wwmode = dhw->wwMode_ < sizeof(modes) ? modes[dhw->wwMode_] : EMS_VALUE_UINT8_NOTSET; - telegram->read_value(wwmode, 2); - const uint8_t modes1[] = {0, 0, 1, 2, 0, 0}; - has_update(dhw->wwMode_, wwmode < sizeof(modes1) ? modes1[wwmode] : EMS_VALUE_UINT8_NOTSET); + has_enumupdate(telegram, dhw->wwMode_, 2, {0, 2, 3}, {0, 0, 1, 2, 0, 0}); // normal, on, auto } else { has_update(telegram, dhw->wwMode_, 2); // 0=off, 1=low, 2=high, 3=auto, 4=own prog } @@ -2294,29 +2278,25 @@ bool Thermostat::set_wwmode(const char * value, const int8_t id) { } write_command(0xB0, 2, set, 0xB0); } else if (model() == EMSdevice::EMS_DEVICE_FLAG_BC400 || model() == EMSdevice::EMS_DEVICE_FLAG_HMC310) { - if (!Helpers::value2enum(value, set, FL_(enum_wwMode4))) { // off, eco+, eco, comfort, auto + if (!Helpers::value2enum(value, set, FL_(enum_wwMode4), {0, 5, 1, 2, 4})) { // off, eco+, eco, comfort, auto return false; } - const uint8_t modes[] = {0, 5, 1, 2, 4}; - write_command(0x02F5 + dhw->offset(), 2, modes[set], 0x02F5 + dhw->offset()); + write_command(0x02F5 + dhw->offset(), 2, set, 0x02F5 + dhw->offset()); } else if (model() == EMSdevice::EMS_DEVICE_FLAG_CR120) { - if (!Helpers::value2enum(value, set, FL_(enum_wwMode6))) { // normal, comfort, auto + if (!Helpers::value2enum(value, set, FL_(enum_wwMode6), {0, 2, 4})) { // normal, comfort, auto return false; } - const uint8_t modes[] = {0, 2, 4}; - write_command(0x02F5 + dhw->offset(), 2, modes[set], 0x02F5 + dhw->offset()); + write_command(0x02F5 + dhw->offset(), 2, set, 0x02F5 + dhw->offset()); } else if (model() == EMSdevice::EMS_DEVICE_FLAG_RC100) { - if (!Helpers::value2enum(value, set, FL_(enum_wwMode2))) { // off, on, auto + if (!Helpers::value2enum(value, set, FL_(enum_wwMode2), {0, 2, 3})) { // off, on, auto return false; } - const uint8_t modes[] = {0, 2, 3}; - write_command(0x02F5 + dhw->offset(), 2, modes[set], 0x02F5 + dhw->offset()); + write_command(0x02F5 + dhw->offset(), 2, set, 0x02F5 + dhw->offset()); } else if (model() == EMSdevice::EMS_DEVICE_FLAG_R3000) { // Rego3000 - https://github.com/emsesp/EMS-ESP32/issues/1692 - if (!Helpers::value2enum(value, set, FL_(enum_wwMode5))) { + if (!Helpers::value2enum(value, set, FL_(enum_wwMode5), {1, 2, 5})) { return false; } - const uint8_t modes[] = {1, 2, 5}; - write_command(0x02F5 + dhw->offset(), 2, modes[set], 0x02F5 + dhw->offset()); + write_command(0x02F5 + dhw->offset(), 2, set, 0x02F5 + dhw->offset()); } else if (model() == EMSdevice::EMS_DEVICE_FLAG_RC300) { if (!Helpers::value2enum(value, set, FL_(enum_wwMode))) { return false; diff --git a/src/emsesp_version.h b/src/emsesp_version.h index ca6316e7b..3fdcb5c15 100644 --- a/src/emsesp_version.h +++ b/src/emsesp_version.h @@ -1 +1 @@ -#define EMSESP_APP_VERSION "3.7.3-dev.10" +#define EMSESP_APP_VERSION "3.7.3-dev.11" diff --git a/src/web/WebCustomEntityService.cpp b/src/web/WebCustomEntityService.cpp index 19e0f6fe0..69d9ad2b9 100644 --- a/src/web/WebCustomEntityService.cpp +++ b/src/web/WebCustomEntityService.cpp @@ -59,6 +59,7 @@ void WebCustomEntity::read(WebCustomEntity & webEntity, JsonObject root) { ei["uom"] = entityItem.value_type == DeviceValueType::BOOL ? 0 : entityItem.uom; ei["value_type"] = entityItem.value_type; ei["writeable"] = entityItem.writeable; + ei["hide"] = entityItem.hide; EMSESP::webCustomEntityService.render_value(ei, entityItem, true, true); } } @@ -94,6 +95,7 @@ StateUpdateResult WebCustomEntity::update(JsonObject root, WebCustomEntity & web entityItem.uom = ei["uom"]; entityItem.value_type = ei["value_type"]; entityItem.writeable = ei["writeable"]; + entityItem.hide = ei["hide"] | false; entityItem.data = ei["value"].as(); if (entityItem.ram == 1) { entityItem.device_id = 0; @@ -295,7 +297,9 @@ bool WebCustomEntityService::get_value_info(JsonObject output, const char * cmd) if (!strlen(cmd) || !strcmp(cmd, F_(values)) || !strcmp(cmd, F_(info))) { // list all names for (CustomEntityItem & entity : *customEntityItems_) { - render_value(output, entity); + if (!entity.hide) { + render_value(output, entity); + } } return true; } @@ -346,7 +350,7 @@ void WebCustomEntityService::get_value_json(JsonObject output, CustomEntityItem // publish single value void WebCustomEntityService::publish_single(CustomEntityItem & entity) { - if (!Mqtt::enabled() || !Mqtt::publish_single()) { + if (!Mqtt::enabled() || !Mqtt::publish_single() || entity.hide) { return; } @@ -387,6 +391,9 @@ void WebCustomEntityService::publish(const bool force) { bool ha_created = ha_registered_; for (CustomEntityItem & entityItem : *customEntityItems_) { + if (entityItem.hide) { + continue; + } render_value(output, entityItem); // create HA config if (Mqtt::ha_enabled() && !ha_registered_) { @@ -445,6 +452,9 @@ void WebCustomEntityService::publish(const bool force) { Mqtt::add_ha_sections_to_doc(F_(custom), stat_t, config, !ha_created, val_cond); + if (Mqtt::ha_optimistic()) { + config["optimistic"] = true; + } ha_created |= Mqtt::queue_ha(topic, config.as()); } } @@ -470,7 +480,7 @@ uint8_t WebCustomEntityService::count_entities() { for (CustomEntityItem & entity : *customEntityItems_) { render_value(output, entity); - if (output[entity.name].is() || entity.writeable) { + if (!entity.hide && (output[entity.name].is() || entity.writeable)) { count++; } } @@ -484,6 +494,9 @@ void WebCustomEntityService::generate_value_web(JsonObject output, const bool is uint8_t index = 0; for (const CustomEntityItem & entity : *customEntityItems_) { + if (entity.hide) { + continue; + } bool include = false; JsonObject root_obj = nodes.add(); // create the object, we know there is a value diff --git a/src/web/WebCustomEntityService.h b/src/web/WebCustomEntityService.h index 1aa4faf30..4a298c547 100644 --- a/src/web/WebCustomEntityService.h +++ b/src/web/WebCustomEntityService.h @@ -40,6 +40,7 @@ class CustomEntityItem { std::string data; uint8_t ram; uint8_t * raw; + bool hide; }; class WebCustomEntity { diff --git a/src/web/WebSchedulerService.cpp b/src/web/WebSchedulerService.cpp index 599672659..e8fc309d8 100644 --- a/src/web/WebSchedulerService.cpp +++ b/src/web/WebSchedulerService.cpp @@ -154,8 +154,6 @@ bool WebSchedulerService::get_value_info(JsonObject output, const char * cmd) { return true; } - const char * attribute_s = Command::get_attribute(cmd); - if (!strcmp(cmd, F_(entities))) { uint8_t i = 0; char name[30]; @@ -166,6 +164,7 @@ bool WebSchedulerService::get_value_info(JsonObject output, const char * cmd) { return true; } + const char * attribute_s = Command::get_attribute(cmd); for (const ScheduleItem & scheduleItem : *scheduleItems_) { if (Helpers::toLower(scheduleItem.name) == cmd) { get_value_json(output, scheduleItem); @@ -291,6 +290,9 @@ void WebSchedulerService::publish(const bool force) { Mqtt::add_ha_bool(config); Mqtt::add_ha_sections_to_doc(F_(scheduler), stat_t, config, !ha_created, val_cond); + if (Mqtt::ha_optimistic()) { + config["optimistic"] = true; + } ha_created |= Mqtt::queue_ha(topic, config.as()); } } From ba2ad4e175f2bff8d2945f887d72c2ea88939bc7 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Sun, 11 May 2025 15:00:41 +0200 Subject: [PATCH 06/13] typo --- src/devices/boiler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/devices/boiler.cpp b/src/devices/boiler.cpp index 37d29971b..e11898622 100644 --- a/src/devices/boiler.cpp +++ b/src/devices/boiler.cpp @@ -68,7 +68,7 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const register_telegram_type(0x28, "WeatherComp", true, MAKE_PF_CB(process_WeatherComp)); } - if (!isHeatPump()) { + if (isHeatPump()) { register_telegram_type(0x494, "UBAEnergySupplied", false, MAKE_PF_CB(process_UBAEnergySupplied)); register_telegram_type(0x495, "UBAInformation", false, MAKE_PF_CB(process_UBAInformation)); register_telegram_type(0x48D, "HpPower", true, MAKE_PF_CB(process_HpPower)); From ce2d2fb867d1a056caf607c595dc07e9e873101b Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Sun, 11 May 2025 15:01:34 +0200 Subject: [PATCH 07/13] search entities case independend #2553 --- interface/src/app/main/Customizations.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/app/main/Customizations.tsx b/interface/src/app/main/Customizations.tsx index 06d25b478..4da4ec2ae 100644 --- a/interface/src/app/main/Customizations.tsx +++ b/interface/src/app/main/Customizations.tsx @@ -306,7 +306,7 @@ const Customizations = () => { const filter_entity = (de: DeviceEntity) => (de.m & selectedFilters || !selectedFilters) && - formatName(de, true).includes(search); + formatName(de, true).toLowerCase().includes(search.toLowerCase()); const maskDisabled = (set: boolean) => { setDeviceEntities( From 6c8624298c58fc0f8dd21ff60c4f8437ee14a557 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Sun, 11 May 2025 18:47:21 +0200 Subject: [PATCH 08/13] devices entity search case-independend, #2553 --- interface/src/app/main/Devices.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/interface/src/app/main/Devices.tsx b/interface/src/app/main/Devices.tsx index 5f5de5fb1..5d6affdc0 100644 --- a/interface/src/app/main/Devices.tsx +++ b/interface/src/app/main/Devices.tsx @@ -600,9 +600,11 @@ const Devices = () => { ? deviceData.nodes.filter( (dv) => hasMask(dv.id, DeviceEntityMask.DV_FAVORITE) && - dv.id.slice(2).includes(search) + dv.id.slice(2).toLowerCase().includes(search.toLowerCase()) ) - : deviceData.nodes.filter((dv) => dv.id.slice(2).includes(search)); + : deviceData.nodes.filter((dv) => + dv.id.slice(2).toLowerCase().includes(search.toLowerCase()) + ); const deviceIndex = coreData.devices.findIndex( (d) => d.id === device_select.state.id From 52f59a7b1dbf252621ef8a57e2332ed831c662f2 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Mon, 12 May 2025 08:00:14 +0200 Subject: [PATCH 09/13] fix set chargeoptimization #2543 --- src/devices/boiler.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/devices/boiler.cpp b/src/devices/boiler.cpp index e11898622..e9ad54928 100644 --- a/src/devices/boiler.cpp +++ b/src/devices/boiler.cpp @@ -2564,6 +2564,8 @@ bool Boiler::set_ww_chargeOptimization(const char * value, const int8_t id) { if (is_received(EMS_TYPE_UBAParameterWWPlus)) { write_command(EMS_TYPE_UBAParameterWWPlus, 25, v ? 1 : 0, EMS_TYPE_UBAParameterWWPlus); + } else { + write_command(EMS_TYPE_UBAParameterWW, 4, v ? 0xFF : 0, EMS_TYPE_UBAParameterWW); } return true; From 2da312bf15ca82b09e864d078de47129ec41c444 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Mon, 12 May 2025 16:29:36 +0200 Subject: [PATCH 10/13] optimistic only for writable values --- src/core/analogsensor.cpp | 2 +- src/core/mqtt.cpp | 4 ++-- src/web/WebCustomEntityService.cpp | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/core/analogsensor.cpp b/src/core/analogsensor.cpp index faca9c471..0ca1084fe 100644 --- a/src/core/analogsensor.cpp +++ b/src/core/analogsensor.cpp @@ -682,7 +682,7 @@ void AnalogSensor::publish_values(const bool force) { Mqtt::add_ha_sections_to_doc("analog", stat_t, config, !is_ha_device_created, val_cond); - if (Mqtt::ha_optimistic()) { + if (Mqtt::ha_optimistic() && config["cmd_t"].is()) { config["optimistic"] = true; } sensor.ha_registered = Mqtt::queue_ha(topic, config.as()); diff --git a/src/core/mqtt.cpp b/src/core/mqtt.cpp index 280649357..3eff811e8 100644 --- a/src/core/mqtt.cpp +++ b/src/core/mqtt.cpp @@ -1116,7 +1116,7 @@ bool Mqtt::publish_ha_sensor_config(uint8_t type, // EMSdev doc["dev"] = dev_json; - if (ha_optimistic_) { + if (ha_optimistic_ && has_cmd) { doc["optimistic"] = true; } return queue_ha(topic, doc.as()); @@ -1406,7 +1406,7 @@ void Mqtt::add_ha_sections_to_doc(const char * name, // make local copy of state, as the pointer will get derefenced char state[50]; - strcpy(state, state_t); + strlcpy(state, state_t, sizeof(state)); // skip conditional Jinja2 templates if not home assistant if (discovery_type() == discoveryType::HOMEASSISTANT) { diff --git a/src/web/WebCustomEntityService.cpp b/src/web/WebCustomEntityService.cpp index 69d9ad2b9..a96755cb2 100644 --- a/src/web/WebCustomEntityService.cpp +++ b/src/web/WebCustomEntityService.cpp @@ -452,7 +452,7 @@ void WebCustomEntityService::publish(const bool force) { Mqtt::add_ha_sections_to_doc(F_(custom), stat_t, config, !ha_created, val_cond); - if (Mqtt::ha_optimistic()) { + if (Mqtt::ha_optimistic() && (entityItem.writeable || entityItem.ram > 0)) { config["optimistic"] = true; } ha_created |= Mqtt::queue_ha(topic, config.as()); From 2d6e02171f4572c0a2c8ebbab0439d8c0ba9ad6c Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Mon, 12 May 2025 16:47:33 +0200 Subject: [PATCH 11/13] Typo --- src/devices/boiler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/devices/boiler.cpp b/src/devices/boiler.cpp index e9ad54928..dc61a9b08 100644 --- a/src/devices/boiler.cpp +++ b/src/devices/boiler.cpp @@ -1477,7 +1477,7 @@ void Boiler::process_UBAMonitorFastPlus(std::shared_ptr telegram // at this point do a quick check to see if the hot water or heating is active uint8_t state = EMS_VALUE_UINT8_NOTSET; - if (telegram->read_value(state, 11) && model() != EMSdevice::EMS_DEVICE_FLAG_HIU && model() != EMSdevice::EMS_DEVICE_FLAG_HEATPUMP) { + if (telegram->read_value(state, 11) && model() != EMSdevice::EMS_DEVICE_FLAG_HIU && !isHeatPump()) { boilerState_ = state & 0x01 ? 0x08 : 0; // burnGas boilerState_ |= state & 0x02 ? 0x01 : 0; // heatingPump boilerState_ |= state & 0x04 ? 0x02 : 0; // 3-way-valve From 0c03fa1308211b0b1a2a739e12f46fbae8511b77 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Mon, 12 May 2025 16:49:33 +0200 Subject: [PATCH 12/13] mqtt publish_time `sensors` instead of `temperature sensors` --- interface/src/app/settings/MqttSettings.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/app/settings/MqttSettings.tsx b/interface/src/app/settings/MqttSettings.tsx index 8ec9c30ad..c8567e435 100644 --- a/interface/src/app/settings/MqttSettings.tsx +++ b/interface/src/app/settings/MqttSettings.tsx @@ -452,7 +452,7 @@ const MqttSettings = () => { Date: Mon, 12 May 2025 19:10:59 +0200 Subject: [PATCH 13/13] fix standalone --- lib_standalone/ESP32React.h | 1 + 1 file changed, 1 insertion(+) diff --git a/lib_standalone/ESP32React.h b/lib_standalone/ESP32React.h index 115a42aae..5b1d1a384 100644 --- a/lib_standalone/ESP32React.h +++ b/lib_standalone/ESP32React.h @@ -36,6 +36,7 @@ class DummySettings { String discovery_prefix = "homeassistant"; uint8_t discovery_type = 0; // HA bool ha_enabled = true; + bool ha_optimistic = false; String base = "ems-esp"; bool publish_single = false; bool publish_single2cmd = false;