diff --git a/interface/package.json b/interface/package.json index f03121112..01a6cfce1 100644 --- a/interface/package.json +++ b/interface/package.json @@ -49,14 +49,14 @@ "@preact/compat": "^18.3.1", "@preact/preset-vite": "^2.10.2", "@trivago/prettier-plugin-sort-imports": "^5.2.2", - "@types/node": "^24.7.2", + "@types/node": "^24.8.1", "@types/react": "^19.2.2", "@types/react-dom": "^19.2.2", "concurrently": "^9.2.1", "eslint": "^9.37.0", "eslint-config-prettier": "^10.1.8", "prettier": "^3.6.2", - "rollup-plugin-visualizer": "^6.0.4", + "rollup-plugin-visualizer": "^6.0.5", "terser": "^5.44.0", "typescript-eslint": "^8.46.1", "vite": "^7.1.10", diff --git a/interface/pnpm-lock.yaml b/interface/pnpm-lock.yaml index 25ad8cdb5..4e982ef09 100644 --- a/interface/pnpm-lock.yaml +++ b/interface/pnpm-lock.yaml @@ -80,13 +80,13 @@ importers: version: 18.3.1(preact@10.27.2) '@preact/preset-vite': specifier: ^2.10.2 - version: 2.10.2(@babel/core@7.28.4)(preact@10.27.2)(vite@7.1.10(@types/node@24.7.2)(terser@5.44.0)) + version: 2.10.2(@babel/core@7.28.4)(preact@10.27.2)(vite@7.1.10(@types/node@24.8.1)(terser@5.44.0)) '@trivago/prettier-plugin-sort-imports': specifier: ^5.2.2 version: 5.2.2(prettier@3.6.2) '@types/node': - specifier: ^24.7.2 - version: 24.7.2 + specifier: ^24.8.1 + version: 24.8.1 '@types/react': specifier: ^19.2.2 version: 19.2.2 @@ -106,8 +106,8 @@ importers: specifier: ^3.6.2 version: 3.6.2 rollup-plugin-visualizer: - specifier: ^6.0.4 - version: 6.0.4(rollup@4.52.4) + specifier: ^6.0.5 + version: 6.0.5(rollup@4.52.4) terser: specifier: ^5.44.0 version: 5.44.0 @@ -116,13 +116,13 @@ importers: version: 8.46.1(eslint@9.37.0)(typescript@5.9.3) vite: specifier: ^7.1.10 - version: 7.1.10(@types/node@24.7.2)(terser@5.44.0) + version: 7.1.10(@types/node@24.8.1)(terser@5.44.0) vite-plugin-imagemin: specifier: ^0.6.1 - version: 0.6.1(vite@7.1.10(@types/node@24.7.2)(terser@5.44.0)) + version: 0.6.1(vite@7.1.10(@types/node@24.8.1)(terser@5.44.0)) vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.9.3)(vite@7.1.10(@types/node@24.7.2)(terser@5.44.0)) + version: 5.1.4(typescript@5.9.3)(vite@7.1.10(@types/node@24.8.1)(terser@5.44.0)) packages: @@ -851,8 +851,8 @@ packages: resolution: {integrity: sha512-zmPitbQ8+6zNutpwgcQuLcsEpn/Cj54Kbn7L5pX0Os5kdWplB7xPgEh/g+SWOB/qmows2gpuCaPyduq8ZZRnxA==} deprecated: This is a stub types definition. minimatch provides its own type definitions, so you do not need this installed. - '@types/node@24.7.2': - resolution: {integrity: sha512-/NbVmcGTP+lj5oa4yiYxxeBjRivKQ5Ns1eSZeB99ExsEQ6rX5XYU1Zy/gGxY/ilqtD4Etx9mKyrPxZRetiahhA==} + '@types/node@24.8.1': + resolution: {integrity: sha512-alv65KGRadQVfVcG69MuB4IzdYVpRwMG/mq8KWOaoOdyY617P5ivaDiMCGOFDWD2sAn5Q0mR3mRtUOgm99hL9Q==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -1014,8 +1014,8 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - baseline-browser-mapping@2.8.16: - resolution: {integrity: sha512-OMu3BGQ4E7P1ErFsIPpbJh0qvDudM/UuJeHgkAvfWe+0HFJCXh+t/l8L6fVLR55RI/UbKrVLnAXZSVwd9ysWYw==} + baseline-browser-mapping@2.8.17: + resolution: {integrity: sha512-j5zJcx6golJYTG6c05LUZ3Z8Gi+M62zRT/ycz4Xq4iCOdpcxwg7ngEYD4KA0eWZC7U17qh/Smq8bYbACJ0ipBA==} hasBin: true bin-build@3.0.0: @@ -1104,8 +1104,8 @@ packages: resolution: {integrity: sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==} engines: {node: '>=0.10.0'} - caniuse-lite@1.0.30001750: - resolution: {integrity: sha512-cuom0g5sdX6rw00qOoLNSFCJ9/mYIsuSOA+yzpDw8eopiFqcVwQvZHqov0vmEighRxX++cfC0Vg1G+1Iy/mSpQ==} + caniuse-lite@1.0.30001751: + resolution: {integrity: sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==} caw@2.0.1: resolution: {integrity: sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==} @@ -2238,8 +2238,8 @@ packages: node-html-parser@6.1.13: resolution: {integrity: sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==} - node-releases@2.0.23: - resolution: {integrity: sha512-cCmFDMSm26S6tQSDpBCg/NR8NENrVPhAJSf+XbxBG4rPFaaonlEoE9wHQmun+cls499TQGSb7ZyPBRlzgKfpeg==} + node-releases@2.0.25: + resolution: {integrity: sha512-4auku8B/vw5psvTiiN9j1dAOsXvMoGqJuKJcR+dTdqiXEK20mMTk1UEo3HS16LeGQsVG6+qKTPM9u/qQ2LqATA==} normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} @@ -2592,8 +2592,8 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - rollup-plugin-visualizer@6.0.4: - resolution: {integrity: sha512-q8Q7J/6YofkmaGW1sH/fPRAz37x/+pd7VBuaUU7lwvOS/YikuiiEU9jeb9PH8XHiq50XFrUsBbOxeAMYQ7KZkg==} + rollup-plugin-visualizer@6.0.5: + resolution: {integrity: sha512-9+HlNgKCVbJDs8tVtjQ43US12eqaiHyyiLMdBwQ7vSZPiHMysGNo2E88TAp1si5wx8NAoYriI2A5kuKfIakmJg==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -3575,18 +3575,18 @@ snapshots: dependencies: preact: 10.27.2 - '@preact/preset-vite@2.10.2(@babel/core@7.28.4)(preact@10.27.2)(vite@7.1.10(@types/node@24.7.2)(terser@5.44.0))': + '@preact/preset-vite@2.10.2(@babel/core@7.28.4)(preact@10.27.2)(vite@7.1.10(@types/node@24.8.1)(terser@5.44.0))': dependencies: '@babel/core': 7.28.4 '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.4) '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.28.4) - '@prefresh/vite': 2.4.10(preact@10.27.2)(vite@7.1.10(@types/node@24.7.2)(terser@5.44.0)) + '@prefresh/vite': 2.4.10(preact@10.27.2)(vite@7.1.10(@types/node@24.8.1)(terser@5.44.0)) '@rollup/pluginutils': 4.2.1 babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.28.4) debug: 4.4.3 picocolors: 1.1.1 - vite: 7.1.10(@types/node@24.7.2)(terser@5.44.0) - vite-prerender-plugin: 0.5.12(vite@7.1.10(@types/node@24.7.2)(terser@5.44.0)) + vite: 7.1.10(@types/node@24.8.1)(terser@5.44.0) + vite-prerender-plugin: 0.5.12(vite@7.1.10(@types/node@24.8.1)(terser@5.44.0)) transitivePeerDependencies: - preact - supports-color @@ -3599,7 +3599,7 @@ snapshots: '@prefresh/utils@1.2.1': {} - '@prefresh/vite@2.4.10(preact@10.27.2)(vite@7.1.10(@types/node@24.7.2)(terser@5.44.0))': + '@prefresh/vite@2.4.10(preact@10.27.2)(vite@7.1.10(@types/node@24.8.1)(terser@5.44.0))': dependencies: '@babel/core': 7.28.4 '@prefresh/babel-plugin': 0.5.2 @@ -3607,7 +3607,7 @@ snapshots: '@prefresh/utils': 1.2.1 '@rollup/pluginutils': 4.2.1 preact: 10.27.2 - vite: 7.1.10(@types/node@24.7.2)(terser@5.44.0) + vite: 7.1.10(@types/node@24.8.1)(terser@5.44.0) transitivePeerDependencies: - supports-color @@ -3712,7 +3712,7 @@ snapshots: '@types/glob@7.2.0': dependencies: '@types/minimatch': 6.0.0 - '@types/node': 24.7.2 + '@types/node': 24.8.1 '@types/imagemin-gifsicle@7.0.4': dependencies: @@ -3741,19 +3741,19 @@ snapshots: '@types/imagemin@7.0.1': dependencies: - '@types/node': 24.7.2 + '@types/node': 24.8.1 '@types/json-schema@7.0.15': {} '@types/keyv@3.1.4': dependencies: - '@types/node': 24.7.2 + '@types/node': 24.8.1 '@types/minimatch@6.0.0': dependencies: minimatch: 10.0.3 - '@types/node@24.7.2': + '@types/node@24.8.1': dependencies: undici-types: 7.14.0 @@ -3775,11 +3775,11 @@ snapshots: '@types/responselike@1.0.3': dependencies: - '@types/node': 24.7.2 + '@types/node': 24.8.1 '@types/svgo@2.6.4': dependencies: - '@types/node': 24.7.2 + '@types/node': 24.8.1 '@typescript-eslint/eslint-plugin@8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.37.0)(typescript@5.9.3))(eslint@9.37.0)(typescript@5.9.3)': dependencies: @@ -3936,7 +3936,7 @@ snapshots: base64-js@1.5.1: {} - baseline-browser-mapping@2.8.16: {} + baseline-browser-mapping@2.8.17: {} bin-build@3.0.0: dependencies: @@ -3993,10 +3993,10 @@ snapshots: browserslist@4.26.3: dependencies: - baseline-browser-mapping: 2.8.16 - caniuse-lite: 1.0.30001750 + baseline-browser-mapping: 2.8.17 + caniuse-lite: 1.0.30001751 electron-to-chromium: 1.5.237 - node-releases: 2.0.23 + node-releases: 2.0.25 update-browserslist-db: 1.1.3(browserslist@4.26.3) buffer-alloc-unsafe@1.1.0: {} @@ -4053,7 +4053,7 @@ snapshots: camelcase@2.1.1: {} - caniuse-lite@1.0.30001750: {} + caniuse-lite@1.0.30001751: {} caw@2.0.1: dependencies: @@ -5263,7 +5263,7 @@ snapshots: css-select: 5.2.2 he: 1.2.0 - node-releases@2.0.23: {} + node-releases@2.0.25: {} normalize-package-data@2.5.0: dependencies: @@ -5587,7 +5587,7 @@ snapshots: dependencies: glob: 7.2.3 - rollup-plugin-visualizer@6.0.4(rollup@4.52.4): + rollup-plugin-visualizer@6.0.5(rollup@4.52.4): dependencies: open: 8.4.2 picomatch: 4.0.3 @@ -5936,7 +5936,7 @@ snapshots: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - vite-plugin-imagemin@0.6.1(vite@7.1.10(@types/node@24.7.2)(terser@5.44.0)): + vite-plugin-imagemin@0.6.1(vite@7.1.10(@types/node@24.8.1)(terser@5.44.0)): dependencies: '@types/imagemin': 7.0.1 '@types/imagemin-gifsicle': 7.0.4 @@ -5961,11 +5961,11 @@ snapshots: imagemin-webp: 6.1.0 jpegtran-bin: 6.0.1 pathe: 0.2.0 - vite: 7.1.10(@types/node@24.7.2)(terser@5.44.0) + vite: 7.1.10(@types/node@24.8.1)(terser@5.44.0) transitivePeerDependencies: - supports-color - vite-prerender-plugin@0.5.12(vite@7.1.10(@types/node@24.7.2)(terser@5.44.0)): + vite-prerender-plugin@0.5.12(vite@7.1.10(@types/node@24.8.1)(terser@5.44.0)): dependencies: kolorist: 1.8.0 magic-string: 0.30.19 @@ -5973,20 +5973,20 @@ snapshots: simple-code-frame: 1.3.0 source-map: 0.7.6 stack-trace: 1.0.0-pre2 - vite: 7.1.10(@types/node@24.7.2)(terser@5.44.0) + vite: 7.1.10(@types/node@24.8.1)(terser@5.44.0) - vite-tsconfig-paths@5.1.4(typescript@5.9.3)(vite@7.1.10(@types/node@24.7.2)(terser@5.44.0)): + vite-tsconfig-paths@5.1.4(typescript@5.9.3)(vite@7.1.10(@types/node@24.8.1)(terser@5.44.0)): dependencies: debug: 4.4.3 globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.9.3) optionalDependencies: - vite: 7.1.10(@types/node@24.7.2)(terser@5.44.0) + vite: 7.1.10(@types/node@24.8.1)(terser@5.44.0) transitivePeerDependencies: - supports-color - typescript - vite@7.1.10(@types/node@24.7.2)(terser@5.44.0): + vite@7.1.10(@types/node@24.8.1)(terser@5.44.0): dependencies: esbuild: 0.25.11 fdir: 6.5.0(picomatch@4.0.3) @@ -5995,7 +5995,7 @@ snapshots: rollup: 4.52.4 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.7.2 + '@types/node': 24.8.1 fsevents: 2.3.3 terser: 5.44.0 diff --git a/src/devices/connect.cpp b/src/devices/connect.cpp index 63ed29760..60f008744 100644 --- a/src/devices/connect.cpp +++ b/src/devices/connect.cpp @@ -145,7 +145,8 @@ void Connect::process_roomThermostatName(std::shared_ptr telegra has_update(telegram, rc->icon_, 0); for (uint8_t i = telegram->offset; i < telegram->message_length + telegram->offset && i < 100; i++) { if ((i > 1) && (i % 2) == 0) { - rc->name_[(i - 2) / 2] = telegram->message_data[i - telegram->offset]; + // replace ISOLatin1 characters with questionmark + rc->name_[(i - 2) / 2] = telegram->message_data[i - telegram->offset] & 0x80 ? '?' : telegram->message_data[i - telegram->offset]; } } rc->name_[50] = '\0'; // make sure name is terminated @@ -183,9 +184,14 @@ void Connect::process_roomThermostatData(std::shared_ptr telegra // schedule for all thermostats void Connect::process_roomSchedule(std::shared_ptr telegram) { - toggle_fetch(telegram->type_id, false); // fetch only once - auto length = ((telegram->offset + telegram->message_length) > 126) ? 126 - telegram->offset : telegram->message_length; + uint8_t length = ((telegram->offset + telegram->message_length) > 126) ? 126 - telegram->offset : telegram->message_length; memcpy(&schedule_[telegram->offset], telegram->message_data, length); + for (uint8_t c : schedule_) { + if (c == 0xFE) { + return; + } + } + toggle_fetch(telegram->type_id, false); // fetch only once if all is initialized } // Settings: @@ -228,6 +234,9 @@ bool Connect::set_name(const char * value, const int8_t id) { for (uint8_t i = 0; i < strlen(value) + 1; i++) { // include terminating '\0' data[2 * i] = 0; data[2 * i + 1] = value[i]; + if (value[i] & 0x80) { // accept only ascii names + return false; + } } uint8_t ofs = 0; while (len > 0) {