From a6e0280ac10960728cf2852e3c00e5a9ce37f6bd Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Sat, 21 May 2022 08:37:00 +0200 Subject: [PATCH 01/38] NPM update --- interface/package-lock.json | 634 +++++++++++++++++++++--------------- 1 file changed, 368 insertions(+), 266 deletions(-) diff --git a/interface/package-lock.json b/interface/package-lock.json index cb883cd5d..5fdcc21d6 100644 --- a/interface/package-lock.json +++ b/interface/package-lock.json @@ -73,20 +73,20 @@ } }, "node_modules/@babel/core": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.12.tgz", - "integrity": "sha512-44ODe6O1IVz9s2oJE3rZ4trNNKTX9O7KpQpfAP4t8QII/zwrVRHL7i2pxhqtcY7tqMLrrKfMlBKnm1QlrRFs5w==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.0.tgz", + "integrity": "sha512-Xyw74OlJwDijToNi0+6BBI5mLLR5+5R3bcSH80LXzjzEGEUlvNzujEE71BaD/ApEZHAvFI/Mlmp4M5lIkdeeWw==", "dependencies": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.12", + "@babel/generator": "^7.18.0", "@babel/helper-compilation-targets": "^7.17.10", - "@babel/helper-module-transforms": "^7.17.12", - "@babel/helpers": "^7.17.9", - "@babel/parser": "^7.17.12", + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helpers": "^7.18.0", + "@babel/parser": "^7.18.0", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.12", - "@babel/types": "^7.17.12", + "@babel/traverse": "^7.18.0", + "@babel/types": "^7.18.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -147,11 +147,11 @@ } }, "node_modules/@babel/generator": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.12.tgz", - "integrity": "sha512-V49KtZiiiLjH/CnIW6OjJdrenrGoyh6AmKQ3k2AZFKozC1h846Q4NYlZ5nqAigPDUXfGzC88+LOUuG8yKd2kCw==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.0.tgz", + "integrity": "sha512-81YO9gGx6voPXlvYdZBliFXAZU8vZ9AZ6z+CjlmcnaeOcYSFbMTpdeDUO9xD9dh/68Vq03I8ZspfUTPfitcDHg==", "dependencies": { - "@babel/types": "^7.17.12", + "@babel/types": "^7.18.0", "@jridgewell/gen-mapping": "^0.3.0", "jsesc": "^2.5.1" }, @@ -213,9 +213,9 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.12.tgz", - "integrity": "sha512-sZoOeUTkFJMyhqCei2+Z+wtH/BehW8NVKQt7IRUQlRiOARuXymJYfN/FCcI8CvVbR0XVyDM6eLFOlR7YtiXnew==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.0.tgz", + "integrity": "sha512-Kh8zTGR9de3J63e5nS0rQUdRs/kbtwoeQQ0sriS0lItjC96u8XXZN6lKpuyWd2coKSU13py/y+LTmThLuVX0Pg==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.16.7", "@babel/helper-environment-visitor": "^7.16.7", @@ -333,9 +333,9 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.12.tgz", - "integrity": "sha512-t5s2BeSWIghhFRPh9XMn6EIGmvn8Lmw5RVASJzkIx1mSemubQQBNIZiQD7WzaFmaHIrjAec4x8z9Yx8SjJ1/LA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz", + "integrity": "sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==", "dependencies": { "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-module-imports": "^7.16.7", @@ -343,8 +343,8 @@ "@babel/helper-split-export-declaration": "^7.16.7", "@babel/helper-validator-identifier": "^7.16.7", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.12", - "@babel/types": "^7.17.12" + "@babel/traverse": "^7.18.0", + "@babel/types": "^7.18.0" }, "engines": { "node": ">=6.9.0" @@ -461,13 +461,13 @@ } }, "node_modules/@babel/helpers": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz", - "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.0.tgz", + "integrity": "sha512-AE+HMYhmlMIbho9nbvicHyxFwhrO+xhKB6AhRxzl8w46Yj0VXTZjEsAoBVC7rB2I0jzX+yWyVybnO08qkfx6kg==", "dependencies": { "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.9", - "@babel/types": "^7.17.0" + "@babel/traverse": "^7.18.0", + "@babel/types": "^7.18.0" }, "engines": { "node": ">=6.9.0" @@ -487,9 +487,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.12.tgz", - "integrity": "sha512-FLzHmN9V3AJIrWfOpvRlZCeVg/WLdicSnTMsLur6uDj9TT8ymUlG9XxURdW/XvuygK+2CW0poOJABdA4m/YKxA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.0.tgz", + "integrity": "sha512-AqDccGC+m5O/iUStSJy3DGRIUFu7WbY/CppZYwrEUB4N0tZlnI8CSTsgL7v5fHVFmUbRv2sd+yy27o8Ydt4MGg==", "bin": { "parser": "bin/babel-parser.js" }, @@ -559,11 +559,11 @@ } }, "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.12.tgz", - "integrity": "sha512-8ILyDG6eL14F8iub97dVc8q35Md0PJYAnA5Kz9NACFOkt6ffCcr0FISyUPKHsvuAy36fkpIitxZ9bVYPFMGQHA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.0.tgz", + "integrity": "sha512-t+8LsRMMDE74c6sV7KShIw13sqbqd58tlqNrsWoWBTIMw7SVQ0cZ905wLNS/FBCy/3PyooRHLFFlfrUNyyz5lA==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-create-class-features-plugin": "^7.18.0", "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, @@ -684,9 +684,9 @@ } }, "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.12.tgz", - "integrity": "sha512-6l9cO3YXXRh4yPCPRA776ZyJ3RobG4ZKJZhp7NDRbKIOeV3dBPG8FXCF7ZtiO2RTCIOkQOph1xDDcc01iWVNjQ==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.0.tgz", + "integrity": "sha512-nbTv371eTrFabDfHLElkn9oyf9VG+VKK6WMzhY2o4eHKaG19BToD9947zzGMO6I/Irstx9d8CwX6njPNIAR/yw==", "dependencies": { "@babel/compat-data": "^7.17.10", "@babel/helper-compilation-targets": "^7.17.10", @@ -876,6 +876,20 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.17.12.tgz", + "integrity": "sha512-n/loy2zkq9ZEM8tEOwON9wTQSTNDTDEz6NujPtJGLU7qObzT1N4c4YZZf8E6ATB2AjNQg/Ib2AIpO03EZaCehw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-import-meta": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", @@ -1114,9 +1128,9 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.12.tgz", - "integrity": "sha512-P8pt0YiKtX5UMUL5Xzsc9Oyij+pJE6JuC+F1k0/brq/OOGs5jDa1If3OY0LRWGvJsJhI+8tsiecL3nJLc0WTlg==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.0.tgz", + "integrity": "sha512-Mo69klS79z6KEfrLg/1WkmVnB8javh75HX4pi2btjvlIoasuxilEyjtsQW6XPrubNd7AQy0MMaNIaQE4e7+PQw==", "dependencies": { "@babel/helper-plugin-utils": "^7.17.12" }, @@ -1187,9 +1201,9 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.17.12.tgz", - "integrity": "sha512-76lTwYaCxw8ldT7tNmye4LLwSoKDbRCBzu6n/DcK/P3FOR29+38CIIaVIZfwol9By8W/QHORYEnYSLuvcQKrsg==", + "version": "7.18.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.1.tgz", + "integrity": "sha512-+TTB5XwvJ5hZbO8xvl2H4XaMDOAK57zF4miuC9qQJgysPNEAZZ9Z69rdF5LJkozGdZrjBIUAIyKUWRMmebI7vg==", "dependencies": { "@babel/helper-plugin-utils": "^7.17.12" }, @@ -1245,11 +1259,11 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.17.12.tgz", - "integrity": "sha512-p5rt9tB5Ndcc2Za7CeNxVf7YAjRcUMR6yi8o8tKjb9KhRkEvXwa+C0hj6DA5bVDkKRxB0NYhMUGbVKoFu4+zEA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.0.tgz", + "integrity": "sha512-h8FjOlYmdZwl7Xm2Ug4iX2j7Qy63NANI+NQVWQzv6r25fqgg7k2dZl03p95kvqNclglHs4FZ+isv4p1uXMA+QA==", "dependencies": { - "@babel/helper-module-transforms": "^7.17.12", + "@babel/helper-module-transforms": "^7.18.0", "@babel/helper-plugin-utils": "^7.17.12", "babel-plugin-dynamic-import-node": "^2.3.3" }, @@ -1261,11 +1275,11 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.12.tgz", - "integrity": "sha512-tVPs6MImAJz+DiX8Y1xXEMdTk5Lwxu9jiPjlS+nv5M2A59R7+/d1+9A8C/sbuY0b3QjIxqClkj6KAplEtRvzaA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.0.tgz", + "integrity": "sha512-cCeR0VZWtfxWS4YueAK2qtHtBPJRSaJcMlbS8jhSIm/A3E2Kpro4W1Dn4cqJtp59dtWfXjQwK7SPKF8ghs7rlw==", "dependencies": { - "@babel/helper-module-transforms": "^7.17.12", + "@babel/helper-module-transforms": "^7.18.0", "@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-simple-access": "^7.17.7", "babel-plugin-dynamic-import-node": "^2.3.3" @@ -1278,12 +1292,12 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.17.12.tgz", - "integrity": "sha512-NVhDb0q00hqZcuLduUf/kMzbOQHiocmPbIxIvk23HLiEqaTKC/l4eRxeC7lO63M72BmACoiKOcb9AkOAJRerpw==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.0.tgz", + "integrity": "sha512-vwKpxdHnlM5tIrRt/eA0bzfbi7gUBLN08vLu38np1nZevlPySRe6yvuATJB5F/WPJ+ur4OXwpVYq9+BsxqAQuQ==", "dependencies": { "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-module-transforms": "^7.17.12", + "@babel/helper-module-transforms": "^7.18.0", "@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-validator-identifier": "^7.16.7", "babel-plugin-dynamic-import-node": "^2.3.3" @@ -1296,11 +1310,11 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.17.12.tgz", - "integrity": "sha512-BnsPkrUHsjzZGpnrmJeDFkOMMljWFHPjDc9xDcz71/C+ybF3lfC3V4m3dwXPLZrE5b3bgd4V+3/Pj+3620d7IA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.0.tgz", + "integrity": "sha512-d/zZ8I3BWli1tmROLxXLc9A6YXvGK8egMxHp+E/rRwMh1Kip0AP77VwZae3snEJ33iiWwvNv2+UIIhfalqhzZA==", "dependencies": { - "@babel/helper-module-transforms": "^7.17.12", + "@babel/helper-module-transforms": "^7.18.0", "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { @@ -1443,12 +1457,12 @@ } }, "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz", - "integrity": "sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.0.tgz", + "integrity": "sha512-6+0IK6ouvqDn9bmEG7mEyF/pwlJXVj5lwydybpyyH3D0A7Hftk+NCTdYjnLNZksn261xaOV5ksmp20pQEmc2RQ==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" @@ -1458,10 +1472,11 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.17.9.tgz", - "integrity": "sha512-Lc2TfbxR1HOyn/c6b4Y/b6NHoTb67n/IoWLxTu4kC7h4KQnWlhCq2S8Tx0t2SVvv5Uu87Hs+6JEJ5kt2tYGylQ==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.0.tgz", + "integrity": "sha512-C8YdRw9uzx25HSIzwA7EM7YP0FhCe5wNvJbZzjVNHHPGVcDJ3Aie+qGYYdS1oVQgn+B3eAIJbWFLrJ4Jipv7nw==", "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12", "regenerator-transform": "^0.15.0" }, "engines": { @@ -1486,9 +1501,9 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.12.tgz", - "integrity": "sha512-xsl5MeGjWnmV6Ui9PfILM2+YRpa3GqLOrczPpXV3N2KCgQGU+sU8OfzuMbjkIdfvZEZIm+3y0V7w58sk0SGzlw==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.0.tgz", + "integrity": "sha512-7kM/jJ3DD/y1hDPn0jov12DoUIFsxLiItprhNydUSibxaywaxNqKwq+ODk72J9ePn4LWobIc5ik6TAJhVl8IkQ==", "dependencies": { "@babel/helper-module-imports": "^7.16.7", "@babel/helper-plugin-utils": "^7.17.12", @@ -1576,11 +1591,11 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.17.12.tgz", - "integrity": "sha512-ICbXZqg6hgenjmwciVI/UfqZtExBrZOrS8sLB5mTHGO/j08Io3MmooULBiijWk9JBknjM3CbbtTc/0ZsqLrjXQ==", + "version": "7.18.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.1.tgz", + "integrity": "sha512-F+RJmL479HJmC0KeqqwEGZMg1P7kWArLGbAKfEi9yPthJyMNjF+DjxFF/halfQvq1Q9GFM4TUbYDNV8xe4Ctqg==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-create-class-features-plugin": "^7.18.0", "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-typescript": "^7.17.12" }, @@ -1621,9 +1636,9 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.17.12.tgz", - "integrity": "sha512-Kke30Rj3Lmcx97bVs71LO0s8M6FmJ7tUAQI9fNId62rf0cYG1UAWwdNO9/sE0/pLEahAw1MqMorymoD12bj5Fg==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.0.tgz", + "integrity": "sha512-cP74OMs7ECLPeG1reiCQ/D/ypyOxgfm8uR6HRYV23vTJ7Lu1nbgj9DQDo/vH59gnn7GOAwtTDPPYV4aXzsMKHA==", "dependencies": { "@babel/compat-data": "^7.17.10", "@babel/helper-compilation-targets": "^7.17.10", @@ -1633,14 +1648,14 @@ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.17.12", "@babel/plugin-proposal-async-generator-functions": "^7.17.12", "@babel/plugin-proposal-class-properties": "^7.17.12", - "@babel/plugin-proposal-class-static-block": "^7.17.12", + "@babel/plugin-proposal-class-static-block": "^7.18.0", "@babel/plugin-proposal-dynamic-import": "^7.16.7", "@babel/plugin-proposal-export-namespace-from": "^7.17.12", "@babel/plugin-proposal-json-strings": "^7.17.12", "@babel/plugin-proposal-logical-assignment-operators": "^7.17.12", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.17.12", "@babel/plugin-proposal-numeric-separator": "^7.16.7", - "@babel/plugin-proposal-object-rest-spread": "^7.17.12", + "@babel/plugin-proposal-object-rest-spread": "^7.18.0", "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", "@babel/plugin-proposal-optional-chaining": "^7.17.12", "@babel/plugin-proposal-private-methods": "^7.17.12", @@ -1651,6 +1666,7 @@ "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.17.12", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", @@ -1666,7 +1682,7 @@ "@babel/plugin-transform-block-scoping": "^7.17.12", "@babel/plugin-transform-classes": "^7.17.12", "@babel/plugin-transform-computed-properties": "^7.17.12", - "@babel/plugin-transform-destructuring": "^7.17.12", + "@babel/plugin-transform-destructuring": "^7.18.0", "@babel/plugin-transform-dotall-regex": "^7.16.7", "@babel/plugin-transform-duplicate-keys": "^7.17.12", "@babel/plugin-transform-exponentiation-operator": "^7.16.7", @@ -1674,16 +1690,16 @@ "@babel/plugin-transform-function-name": "^7.16.7", "@babel/plugin-transform-literals": "^7.17.12", "@babel/plugin-transform-member-expression-literals": "^7.16.7", - "@babel/plugin-transform-modules-amd": "^7.17.12", - "@babel/plugin-transform-modules-commonjs": "^7.17.12", - "@babel/plugin-transform-modules-systemjs": "^7.17.12", - "@babel/plugin-transform-modules-umd": "^7.17.12", + "@babel/plugin-transform-modules-amd": "^7.18.0", + "@babel/plugin-transform-modules-commonjs": "^7.18.0", + "@babel/plugin-transform-modules-systemjs": "^7.18.0", + "@babel/plugin-transform-modules-umd": "^7.18.0", "@babel/plugin-transform-named-capturing-groups-regex": "^7.17.12", "@babel/plugin-transform-new-target": "^7.17.12", "@babel/plugin-transform-object-super": "^7.16.7", "@babel/plugin-transform-parameters": "^7.17.12", "@babel/plugin-transform-property-literals": "^7.16.7", - "@babel/plugin-transform-regenerator": "^7.17.9", + "@babel/plugin-transform-regenerator": "^7.18.0", "@babel/plugin-transform-reserved-words": "^7.17.12", "@babel/plugin-transform-shorthand-properties": "^7.16.7", "@babel/plugin-transform-spread": "^7.17.12", @@ -1693,7 +1709,7 @@ "@babel/plugin-transform-unicode-escapes": "^7.16.7", "@babel/plugin-transform-unicode-regex": "^7.16.7", "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.17.12", + "@babel/types": "^7.18.0", "babel-plugin-polyfill-corejs2": "^0.3.0", "babel-plugin-polyfill-corejs3": "^0.5.0", "babel-plugin-polyfill-regenerator": "^0.3.0", @@ -1758,9 +1774,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz", - "integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.0.tgz", + "integrity": "sha512-YMQvx/6nKEaucl0MY56mwIG483xk8SDNdlUwb2Ts6FUpr7fm85DxEmsY18LXBNhcTz6tO6JwZV8w1W06v8UKeg==", "dependencies": { "regenerator-runtime": "^0.13.4" }, @@ -1769,9 +1785,9 @@ } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.17.9.tgz", - "integrity": "sha512-WxYHHUWF2uZ7Hp1K+D1xQgbgkGUfA+5UPOegEXGt2Y5SMog/rYCVaifLZDbw8UkNXozEqqrZTy6bglL7xTaCOw==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.18.0.tgz", + "integrity": "sha512-G5FaGZOWORq9zthDjIrjib5XlcddeqLbIiDO3YQsut6j7aGf76xn0umUC/pA6+nApk3hQJF4JzLzg5PCl6ewJg==", "dependencies": { "core-js-pure": "^3.20.2", "regenerator-runtime": "^0.13.4" @@ -1794,18 +1810,18 @@ } }, "node_modules/@babel/traverse": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.12.tgz", - "integrity": "sha512-zULPs+TbCvOkIFd4FrG53xrpxvCBwLIgo6tO0tJorY7YV2IWFxUfS/lXDJbGgfyYt9ery/Gxj2niwttNnB0gIw==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.0.tgz", + "integrity": "sha512-oNOO4vaoIQoGjDQ84LgtF/IAlxlyqL4TUuoQ7xLkQETFaHkY1F7yazhB4Kt3VcZGL0ZF/jhrEpnXqUb0M7V3sw==", "dependencies": { "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.12", + "@babel/generator": "^7.18.0", "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-function-name": "^7.17.9", "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.12", - "@babel/types": "^7.17.12", + "@babel/parser": "^7.18.0", + "@babel/types": "^7.18.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -1814,9 +1830,9 @@ } }, "node_modules/@babel/types": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.12.tgz", - "integrity": "sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.0.tgz", + "integrity": "sha512-vhAmLPAiC8j9K2GnsnLPCIH5wCrPpYIVBCWRBFDCB7Y/BXLqi/O+1RSTTM2bsmg6U/551+FCf9PNPxjABmxHTw==", "dependencies": { "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" @@ -1835,6 +1851,25 @@ "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz", "integrity": "sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==" }, + "node_modules/@csstools/postcss-cascade-layers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.0.2.tgz", + "integrity": "sha512-n5fSd3N/RTLjwC6TLnHjlVEt5tRg6S6Pu+LpRgXayX0QVJHvlMzE3+R12cd2F0we8WB4OE8o5r5iWgmBPpqUyQ==", + "dependencies": { + "@csstools/selector-specificity": "^1.0.0", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, "node_modules/@csstools/postcss-color-function": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.0.tgz", @@ -4755,6 +4790,24 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array.prototype.reduce": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz", + "integrity": "sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", @@ -6982,6 +7035,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" + }, "node_modules/es-module-lexer": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", @@ -7413,24 +7471,24 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.29.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.29.4.tgz", - "integrity": "sha512-CVCXajliVh509PcZYRFyu/BoUEz452+jtQJq2b3Bae4v3xBUWPLCmtmBM+ZinG4MzwmxJgJ2M5rMqhqLVn7MtQ==", + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.30.0.tgz", + "integrity": "sha512-RgwH7hjW48BleKsYyHK5vUAvxtE9SMPDKmcPRQgtRCYaZA0XQPt5FSkrU3nhz5ifzMZcA8opwmRJ2cmOO8tr5A==", "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flatmap": "^1.2.5", + "array-includes": "^3.1.5", + "array.prototype.flatmap": "^1.3.0", "doctrine": "^2.1.0", "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", "object.entries": "^1.1.5", "object.fromentries": "^2.0.5", - "object.hasown": "^1.1.0", + "object.hasown": "^1.1.1", "object.values": "^1.1.5", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.3", "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.6" + "string.prototype.matchall": "^4.0.7" }, "engines": { "node": ">=4" @@ -12659,13 +12717,14 @@ } }, "node_modules/object.getownpropertydescriptors": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", - "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz", + "integrity": "sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ==", "dependencies": { + "array.prototype.reduce": "^1.0.4", "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.1" }, "engines": { "node": ">= 0.8" @@ -13142,9 +13201,9 @@ } }, "node_modules/postcss": { - "version": "8.4.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.13.tgz", - "integrity": "sha512-jtL6eTBrza5MPzy8oJLFuUscHDXTV5KcLlqAWHl5q5WYRfnNRGSmOZmOZ1T6Gy7A99mOZfqungmZMpMmCVJ8ZA==", + "version": "8.4.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", + "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", "funding": [ { "type": "opencollective", @@ -13156,7 +13215,7 @@ } ], "dependencies": { - "nanoid": "^3.3.3", + "nanoid": "^3.3.4", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -13214,15 +13273,19 @@ } }, "node_modules/postcss-color-functional-notation": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.2.tgz", - "integrity": "sha512-DXVtwUhIk4f49KK5EGuEdgx4Gnyj6+t2jBSEmxvpIK9QI40tWrpS2Pua8Q7iIZWBrki2QOaeUdEaLPPa91K0RQ==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.3.tgz", + "integrity": "sha512-5fbr6FzFzjwHXKsVnkmEYrJYG8VNNzvD1tAXaPPWR97S6rhKI5uh2yOfV5TAzhDkZoq4h+chxEplFDc8GeyFtw==", "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^12 || ^14 || >=16" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, "peerDependencies": { "postcss": "^8.4" } @@ -13797,9 +13860,9 @@ } }, "node_modules/postcss-nesting": { - "version": "10.1.6", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.1.6.tgz", - "integrity": "sha512-8C0X0pOOShlgqYkCzB4wlWLyulos+GXFpw7r2+x7g+ROQ1RwN8MlN2NCcpNQScNBPfbjxbjwY8e25raTcEXqmg==", + "version": "10.1.7", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.1.7.tgz", + "integrity": "sha512-Btho5XzDTpl117SmB3tvUHP8txg5n7Ayv7vQ5m4b1zXkfs1Y52C67uZjZ746h7QvOJ+rLRg50OlhhjFW+IQY6A==", "dependencies": { "@csstools/selector-specificity": "1.0.0", "postcss-selector-parser": "^6.0.10" @@ -14024,21 +14087,22 @@ } }, "node_modules/postcss-preset-env": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.5.0.tgz", - "integrity": "sha512-0BJzWEfCdTtK2R3EiKKSdkE51/DI/BwnhlnicSW482Ym6/DGHud8K0wGLcdjip1epVX0HKo4c8zzTeV/SkiejQ==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.6.0.tgz", + "integrity": "sha512-5cnzpSFZnQJOlBu85xn4Nnluy/WjIST/ugn+gOVcKnmFJ+GLtkfRhmJPo/TW9UDpG7oyA467kvDOO8mtcpOL4g==", "dependencies": { + "@csstools/postcss-cascade-layers": "^1.0.1", "@csstools/postcss-color-function": "^1.1.0", "@csstools/postcss-font-format-keywords": "^1.0.0", - "@csstools/postcss-hwb-function": "^1.0.0", + "@csstools/postcss-hwb-function": "^1.0.1", "@csstools/postcss-ic-unit": "^1.0.0", - "@csstools/postcss-is-pseudo-class": "^2.0.2", + "@csstools/postcss-is-pseudo-class": "^2.0.4", "@csstools/postcss-normalize-display-values": "^1.0.0", "@csstools/postcss-oklab-function": "^1.1.0", "@csstools/postcss-progressive-custom-properties": "^1.3.0", "@csstools/postcss-stepped-value-functions": "^1.0.0", - "@csstools/postcss-unset-value": "^1.0.0", - "autoprefixer": "^10.4.6", + "@csstools/postcss-unset-value": "^1.0.1", + "autoprefixer": "^10.4.7", "browserslist": "^4.20.3", "css-blank-pseudo": "^3.0.3", "css-has-pseudo": "^3.0.4", @@ -14064,12 +14128,12 @@ "postcss-lab-function": "^4.2.0", "postcss-logical": "^5.0.4", "postcss-media-minmax": "^5.0.0", - "postcss-nesting": "^10.1.4", + "postcss-nesting": "^10.1.6", "postcss-opacity-percentage": "^1.1.2", "postcss-overflow-shorthand": "^3.0.3", "postcss-page-break": "^3.0.4", "postcss-place": "^7.0.4", - "postcss-pseudo-class-any-link": "^7.1.2", + "postcss-pseudo-class-any-link": "^7.1.4", "postcss-replace-overflow-wrap": "^4.0.0", "postcss-selector-not": "^5.0.0", "postcss-value-parser": "^4.2.0" @@ -15350,9 +15414,9 @@ } }, "node_modules/rollup": { - "version": "2.73.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.73.0.tgz", - "integrity": "sha512-h/UngC3S4Zt28mB3g0+2YCMegT5yoftnQplwzPqGZcKvlld5e+kT/QRmJiL+qxGyZKOYpgirWGdLyEO1b0dpLQ==", + "version": "2.74.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.74.1.tgz", + "integrity": "sha512-K2zW7kV8Voua5eGkbnBtWYfMIhYhT9Pel2uhBk2WO5eMee161nPze/XRfvEQPFYz7KgrCCnmh2Wy0AMFLGGmMA==", "bin": { "rollup": "dist/bin/rollup" }, @@ -18017,20 +18081,20 @@ "integrity": "sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==" }, "@babel/core": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.12.tgz", - "integrity": "sha512-44ODe6O1IVz9s2oJE3rZ4trNNKTX9O7KpQpfAP4t8QII/zwrVRHL7i2pxhqtcY7tqMLrrKfMlBKnm1QlrRFs5w==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.0.tgz", + "integrity": "sha512-Xyw74OlJwDijToNi0+6BBI5mLLR5+5R3bcSH80LXzjzEGEUlvNzujEE71BaD/ApEZHAvFI/Mlmp4M5lIkdeeWw==", "requires": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.12", + "@babel/generator": "^7.18.0", "@babel/helper-compilation-targets": "^7.17.10", - "@babel/helper-module-transforms": "^7.17.12", - "@babel/helpers": "^7.17.9", - "@babel/parser": "^7.17.12", + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helpers": "^7.18.0", + "@babel/parser": "^7.18.0", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.12", - "@babel/types": "^7.17.12", + "@babel/traverse": "^7.18.0", + "@babel/types": "^7.18.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -18070,11 +18134,11 @@ } }, "@babel/generator": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.12.tgz", - "integrity": "sha512-V49KtZiiiLjH/CnIW6OjJdrenrGoyh6AmKQ3k2AZFKozC1h846Q4NYlZ5nqAigPDUXfGzC88+LOUuG8yKd2kCw==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.0.tgz", + "integrity": "sha512-81YO9gGx6voPXlvYdZBliFXAZU8vZ9AZ6z+CjlmcnaeOcYSFbMTpdeDUO9xD9dh/68Vq03I8ZspfUTPfitcDHg==", "requires": { - "@babel/types": "^7.17.12", + "@babel/types": "^7.18.0", "@jridgewell/gen-mapping": "^0.3.0", "jsesc": "^2.5.1" }, @@ -18120,9 +18184,9 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.12.tgz", - "integrity": "sha512-sZoOeUTkFJMyhqCei2+Z+wtH/BehW8NVKQt7IRUQlRiOARuXymJYfN/FCcI8CvVbR0XVyDM6eLFOlR7YtiXnew==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.0.tgz", + "integrity": "sha512-Kh8zTGR9de3J63e5nS0rQUdRs/kbtwoeQQ0sriS0lItjC96u8XXZN6lKpuyWd2coKSU13py/y+LTmThLuVX0Pg==", "requires": { "@babel/helper-annotate-as-pure": "^7.16.7", "@babel/helper-environment-visitor": "^7.16.7", @@ -18207,9 +18271,9 @@ } }, "@babel/helper-module-transforms": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.12.tgz", - "integrity": "sha512-t5s2BeSWIghhFRPh9XMn6EIGmvn8Lmw5RVASJzkIx1mSemubQQBNIZiQD7WzaFmaHIrjAec4x8z9Yx8SjJ1/LA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz", + "integrity": "sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==", "requires": { "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-module-imports": "^7.16.7", @@ -18217,8 +18281,8 @@ "@babel/helper-split-export-declaration": "^7.16.7", "@babel/helper-validator-identifier": "^7.16.7", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.12", - "@babel/types": "^7.17.12" + "@babel/traverse": "^7.18.0", + "@babel/types": "^7.18.0" } }, "@babel/helper-optimise-call-expression": { @@ -18302,13 +18366,13 @@ } }, "@babel/helpers": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz", - "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.0.tgz", + "integrity": "sha512-AE+HMYhmlMIbho9nbvicHyxFwhrO+xhKB6AhRxzl8w46Yj0VXTZjEsAoBVC7rB2I0jzX+yWyVybnO08qkfx6kg==", "requires": { "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.9", - "@babel/types": "^7.17.0" + "@babel/traverse": "^7.18.0", + "@babel/types": "^7.18.0" } }, "@babel/highlight": { @@ -18322,9 +18386,9 @@ } }, "@babel/parser": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.12.tgz", - "integrity": "sha512-FLzHmN9V3AJIrWfOpvRlZCeVg/WLdicSnTMsLur6uDj9TT8ymUlG9XxURdW/XvuygK+2CW0poOJABdA4m/YKxA==" + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.0.tgz", + "integrity": "sha512-AqDccGC+m5O/iUStSJy3DGRIUFu7WbY/CppZYwrEUB4N0tZlnI8CSTsgL7v5fHVFmUbRv2sd+yy27o8Ydt4MGg==" }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.17.12", @@ -18364,11 +18428,11 @@ } }, "@babel/plugin-proposal-class-static-block": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.12.tgz", - "integrity": "sha512-8ILyDG6eL14F8iub97dVc8q35Md0PJYAnA5Kz9NACFOkt6ffCcr0FISyUPKHsvuAy36fkpIitxZ9bVYPFMGQHA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.0.tgz", + "integrity": "sha512-t+8LsRMMDE74c6sV7KShIw13sqbqd58tlqNrsWoWBTIMw7SVQ0cZ905wLNS/FBCy/3PyooRHLFFlfrUNyyz5lA==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-create-class-features-plugin": "^7.18.0", "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-class-static-block": "^7.14.5" } @@ -18441,9 +18505,9 @@ } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.12.tgz", - "integrity": "sha512-6l9cO3YXXRh4yPCPRA776ZyJ3RobG4ZKJZhp7NDRbKIOeV3dBPG8FXCF7ZtiO2RTCIOkQOph1xDDcc01iWVNjQ==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.0.tgz", + "integrity": "sha512-nbTv371eTrFabDfHLElkn9oyf9VG+VKK6WMzhY2o4eHKaG19BToD9947zzGMO6I/Irstx9d8CwX6njPNIAR/yw==", "requires": { "@babel/compat-data": "^7.17.10", "@babel/helper-compilation-targets": "^7.17.10", @@ -18564,6 +18628,14 @@ "@babel/helper-plugin-utils": "^7.17.12" } }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.17.12.tgz", + "integrity": "sha512-n/loy2zkq9ZEM8tEOwON9wTQSTNDTDEz6NujPtJGLU7qObzT1N4c4YZZf8E6ATB2AjNQg/Ib2AIpO03EZaCehw==", + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, "@babel/plugin-syntax-import-meta": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", @@ -18718,9 +18790,9 @@ } }, "@babel/plugin-transform-destructuring": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.12.tgz", - "integrity": "sha512-P8pt0YiKtX5UMUL5Xzsc9Oyij+pJE6JuC+F1k0/brq/OOGs5jDa1If3OY0LRWGvJsJhI+8tsiecL3nJLc0WTlg==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.0.tgz", + "integrity": "sha512-Mo69klS79z6KEfrLg/1WkmVnB8javh75HX4pi2btjvlIoasuxilEyjtsQW6XPrubNd7AQy0MMaNIaQE4e7+PQw==", "requires": { "@babel/helper-plugin-utils": "^7.17.12" } @@ -18761,9 +18833,9 @@ } }, "@babel/plugin-transform-for-of": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.17.12.tgz", - "integrity": "sha512-76lTwYaCxw8ldT7tNmye4LLwSoKDbRCBzu6n/DcK/P3FOR29+38CIIaVIZfwol9By8W/QHORYEnYSLuvcQKrsg==", + "version": "7.18.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.1.tgz", + "integrity": "sha512-+TTB5XwvJ5hZbO8xvl2H4XaMDOAK57zF4miuC9qQJgysPNEAZZ9Z69rdF5LJkozGdZrjBIUAIyKUWRMmebI7vg==", "requires": { "@babel/helper-plugin-utils": "^7.17.12" } @@ -18795,44 +18867,44 @@ } }, "@babel/plugin-transform-modules-amd": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.17.12.tgz", - "integrity": "sha512-p5rt9tB5Ndcc2Za7CeNxVf7YAjRcUMR6yi8o8tKjb9KhRkEvXwa+C0hj6DA5bVDkKRxB0NYhMUGbVKoFu4+zEA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.0.tgz", + "integrity": "sha512-h8FjOlYmdZwl7Xm2Ug4iX2j7Qy63NANI+NQVWQzv6r25fqgg7k2dZl03p95kvqNclglHs4FZ+isv4p1uXMA+QA==", "requires": { - "@babel/helper-module-transforms": "^7.17.12", + "@babel/helper-module-transforms": "^7.18.0", "@babel/helper-plugin-utils": "^7.17.12", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.12.tgz", - "integrity": "sha512-tVPs6MImAJz+DiX8Y1xXEMdTk5Lwxu9jiPjlS+nv5M2A59R7+/d1+9A8C/sbuY0b3QjIxqClkj6KAplEtRvzaA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.0.tgz", + "integrity": "sha512-cCeR0VZWtfxWS4YueAK2qtHtBPJRSaJcMlbS8jhSIm/A3E2Kpro4W1Dn4cqJtp59dtWfXjQwK7SPKF8ghs7rlw==", "requires": { - "@babel/helper-module-transforms": "^7.17.12", + "@babel/helper-module-transforms": "^7.18.0", "@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-simple-access": "^7.17.7", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.17.12.tgz", - "integrity": "sha512-NVhDb0q00hqZcuLduUf/kMzbOQHiocmPbIxIvk23HLiEqaTKC/l4eRxeC7lO63M72BmACoiKOcb9AkOAJRerpw==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.0.tgz", + "integrity": "sha512-vwKpxdHnlM5tIrRt/eA0bzfbi7gUBLN08vLu38np1nZevlPySRe6yvuATJB5F/WPJ+ur4OXwpVYq9+BsxqAQuQ==", "requires": { "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-module-transforms": "^7.17.12", + "@babel/helper-module-transforms": "^7.18.0", "@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-validator-identifier": "^7.16.7", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.17.12.tgz", - "integrity": "sha512-BnsPkrUHsjzZGpnrmJeDFkOMMljWFHPjDc9xDcz71/C+ybF3lfC3V4m3dwXPLZrE5b3bgd4V+3/Pj+3620d7IA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.0.tgz", + "integrity": "sha512-d/zZ8I3BWli1tmROLxXLc9A6YXvGK8egMxHp+E/rRwMh1Kip0AP77VwZae3snEJ33iiWwvNv2+UIIhfalqhzZA==", "requires": { - "@babel/helper-module-transforms": "^7.17.12", + "@babel/helper-module-transforms": "^7.18.0", "@babel/helper-plugin-utils": "^7.17.12" } }, @@ -18915,19 +18987,20 @@ } }, "@babel/plugin-transform-react-pure-annotations": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz", - "integrity": "sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.0.tgz", + "integrity": "sha512-6+0IK6ouvqDn9bmEG7mEyF/pwlJXVj5lwydybpyyH3D0A7Hftk+NCTdYjnLNZksn261xaOV5ksmp20pQEmc2RQ==", "requires": { "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-transform-regenerator": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.17.9.tgz", - "integrity": "sha512-Lc2TfbxR1HOyn/c6b4Y/b6NHoTb67n/IoWLxTu4kC7h4KQnWlhCq2S8Tx0t2SVvv5Uu87Hs+6JEJ5kt2tYGylQ==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.0.tgz", + "integrity": "sha512-C8YdRw9uzx25HSIzwA7EM7YP0FhCe5wNvJbZzjVNHHPGVcDJ3Aie+qGYYdS1oVQgn+B3eAIJbWFLrJ4Jipv7nw==", "requires": { + "@babel/helper-plugin-utils": "^7.17.12", "regenerator-transform": "^0.15.0" } }, @@ -18940,9 +19013,9 @@ } }, "@babel/plugin-transform-runtime": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.12.tgz", - "integrity": "sha512-xsl5MeGjWnmV6Ui9PfILM2+YRpa3GqLOrczPpXV3N2KCgQGU+sU8OfzuMbjkIdfvZEZIm+3y0V7w58sk0SGzlw==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.0.tgz", + "integrity": "sha512-7kM/jJ3DD/y1hDPn0jov12DoUIFsxLiItprhNydUSibxaywaxNqKwq+ODk72J9ePn4LWobIc5ik6TAJhVl8IkQ==", "requires": { "@babel/helper-module-imports": "^7.16.7", "@babel/helper-plugin-utils": "^7.17.12", @@ -18994,11 +19067,11 @@ } }, "@babel/plugin-transform-typescript": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.17.12.tgz", - "integrity": "sha512-ICbXZqg6hgenjmwciVI/UfqZtExBrZOrS8sLB5mTHGO/j08Io3MmooULBiijWk9JBknjM3CbbtTc/0ZsqLrjXQ==", + "version": "7.18.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.1.tgz", + "integrity": "sha512-F+RJmL479HJmC0KeqqwEGZMg1P7kWArLGbAKfEi9yPthJyMNjF+DjxFF/halfQvq1Q9GFM4TUbYDNV8xe4Ctqg==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-create-class-features-plugin": "^7.18.0", "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-typescript": "^7.17.12" } @@ -19021,9 +19094,9 @@ } }, "@babel/preset-env": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.17.12.tgz", - "integrity": "sha512-Kke30Rj3Lmcx97bVs71LO0s8M6FmJ7tUAQI9fNId62rf0cYG1UAWwdNO9/sE0/pLEahAw1MqMorymoD12bj5Fg==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.0.tgz", + "integrity": "sha512-cP74OMs7ECLPeG1reiCQ/D/ypyOxgfm8uR6HRYV23vTJ7Lu1nbgj9DQDo/vH59gnn7GOAwtTDPPYV4aXzsMKHA==", "requires": { "@babel/compat-data": "^7.17.10", "@babel/helper-compilation-targets": "^7.17.10", @@ -19033,14 +19106,14 @@ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.17.12", "@babel/plugin-proposal-async-generator-functions": "^7.17.12", "@babel/plugin-proposal-class-properties": "^7.17.12", - "@babel/plugin-proposal-class-static-block": "^7.17.12", + "@babel/plugin-proposal-class-static-block": "^7.18.0", "@babel/plugin-proposal-dynamic-import": "^7.16.7", "@babel/plugin-proposal-export-namespace-from": "^7.17.12", "@babel/plugin-proposal-json-strings": "^7.17.12", "@babel/plugin-proposal-logical-assignment-operators": "^7.17.12", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.17.12", "@babel/plugin-proposal-numeric-separator": "^7.16.7", - "@babel/plugin-proposal-object-rest-spread": "^7.17.12", + "@babel/plugin-proposal-object-rest-spread": "^7.18.0", "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", "@babel/plugin-proposal-optional-chaining": "^7.17.12", "@babel/plugin-proposal-private-methods": "^7.17.12", @@ -19051,6 +19124,7 @@ "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.17.12", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", @@ -19066,7 +19140,7 @@ "@babel/plugin-transform-block-scoping": "^7.17.12", "@babel/plugin-transform-classes": "^7.17.12", "@babel/plugin-transform-computed-properties": "^7.17.12", - "@babel/plugin-transform-destructuring": "^7.17.12", + "@babel/plugin-transform-destructuring": "^7.18.0", "@babel/plugin-transform-dotall-regex": "^7.16.7", "@babel/plugin-transform-duplicate-keys": "^7.17.12", "@babel/plugin-transform-exponentiation-operator": "^7.16.7", @@ -19074,16 +19148,16 @@ "@babel/plugin-transform-function-name": "^7.16.7", "@babel/plugin-transform-literals": "^7.17.12", "@babel/plugin-transform-member-expression-literals": "^7.16.7", - "@babel/plugin-transform-modules-amd": "^7.17.12", - "@babel/plugin-transform-modules-commonjs": "^7.17.12", - "@babel/plugin-transform-modules-systemjs": "^7.17.12", - "@babel/plugin-transform-modules-umd": "^7.17.12", + "@babel/plugin-transform-modules-amd": "^7.18.0", + "@babel/plugin-transform-modules-commonjs": "^7.18.0", + "@babel/plugin-transform-modules-systemjs": "^7.18.0", + "@babel/plugin-transform-modules-umd": "^7.18.0", "@babel/plugin-transform-named-capturing-groups-regex": "^7.17.12", "@babel/plugin-transform-new-target": "^7.17.12", "@babel/plugin-transform-object-super": "^7.16.7", "@babel/plugin-transform-parameters": "^7.17.12", "@babel/plugin-transform-property-literals": "^7.16.7", - "@babel/plugin-transform-regenerator": "^7.17.9", + "@babel/plugin-transform-regenerator": "^7.18.0", "@babel/plugin-transform-reserved-words": "^7.17.12", "@babel/plugin-transform-shorthand-properties": "^7.16.7", "@babel/plugin-transform-spread": "^7.17.12", @@ -19093,7 +19167,7 @@ "@babel/plugin-transform-unicode-escapes": "^7.16.7", "@babel/plugin-transform-unicode-regex": "^7.16.7", "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.17.12", + "@babel/types": "^7.18.0", "babel-plugin-polyfill-corejs2": "^0.3.0", "babel-plugin-polyfill-corejs3": "^0.5.0", "babel-plugin-polyfill-regenerator": "^0.3.0", @@ -19137,17 +19211,17 @@ } }, "@babel/runtime": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz", - "integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.0.tgz", + "integrity": "sha512-YMQvx/6nKEaucl0MY56mwIG483xk8SDNdlUwb2Ts6FUpr7fm85DxEmsY18LXBNhcTz6tO6JwZV8w1W06v8UKeg==", "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/runtime-corejs3": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.17.9.tgz", - "integrity": "sha512-WxYHHUWF2uZ7Hp1K+D1xQgbgkGUfA+5UPOegEXGt2Y5SMog/rYCVaifLZDbw8UkNXozEqqrZTy6bglL7xTaCOw==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.18.0.tgz", + "integrity": "sha512-G5FaGZOWORq9zthDjIrjib5XlcddeqLbIiDO3YQsut6j7aGf76xn0umUC/pA6+nApk3hQJF4JzLzg5PCl6ewJg==", "requires": { "core-js-pure": "^3.20.2", "regenerator-runtime": "^0.13.4" @@ -19164,26 +19238,26 @@ } }, "@babel/traverse": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.12.tgz", - "integrity": "sha512-zULPs+TbCvOkIFd4FrG53xrpxvCBwLIgo6tO0tJorY7YV2IWFxUfS/lXDJbGgfyYt9ery/Gxj2niwttNnB0gIw==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.0.tgz", + "integrity": "sha512-oNOO4vaoIQoGjDQ84LgtF/IAlxlyqL4TUuoQ7xLkQETFaHkY1F7yazhB4Kt3VcZGL0ZF/jhrEpnXqUb0M7V3sw==", "requires": { "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.12", + "@babel/generator": "^7.18.0", "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-function-name": "^7.17.9", "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.12", - "@babel/types": "^7.17.12", + "@babel/parser": "^7.18.0", + "@babel/types": "^7.18.0", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.12.tgz", - "integrity": "sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.0.tgz", + "integrity": "sha512-vhAmLPAiC8j9K2GnsnLPCIH5wCrPpYIVBCWRBFDCB7Y/BXLqi/O+1RSTTM2bsmg6U/551+FCf9PNPxjABmxHTw==", "requires": { "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" @@ -19199,6 +19273,15 @@ "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz", "integrity": "sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==" }, + "@csstools/postcss-cascade-layers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.0.2.tgz", + "integrity": "sha512-n5fSd3N/RTLjwC6TLnHjlVEt5tRg6S6Pu+LpRgXayX0QVJHvlMzE3+R12cd2F0we8WB4OE8o5r5iWgmBPpqUyQ==", + "requires": { + "@csstools/selector-specificity": "^1.0.0", + "postcss-selector-parser": "^6.0.10" + } + }, "@csstools/postcss-color-function": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.0.tgz", @@ -21257,6 +21340,18 @@ "es-shim-unscopables": "^1.0.0" } }, + "array.prototype.reduce": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz", + "integrity": "sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + } + }, "asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", @@ -22900,6 +22995,11 @@ "unbox-primitive": "^1.0.2" } }, + "es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" + }, "es-module-lexer": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", @@ -23338,24 +23438,24 @@ } }, "eslint-plugin-react": { - "version": "7.29.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.29.4.tgz", - "integrity": "sha512-CVCXajliVh509PcZYRFyu/BoUEz452+jtQJq2b3Bae4v3xBUWPLCmtmBM+ZinG4MzwmxJgJ2M5rMqhqLVn7MtQ==", + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.30.0.tgz", + "integrity": "sha512-RgwH7hjW48BleKsYyHK5vUAvxtE9SMPDKmcPRQgtRCYaZA0XQPt5FSkrU3nhz5ifzMZcA8opwmRJ2cmOO8tr5A==", "requires": { - "array-includes": "^3.1.4", - "array.prototype.flatmap": "^1.2.5", + "array-includes": "^3.1.5", + "array.prototype.flatmap": "^1.3.0", "doctrine": "^2.1.0", "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", "object.entries": "^1.1.5", "object.fromentries": "^2.0.5", - "object.hasown": "^1.1.0", + "object.hasown": "^1.1.1", "object.values": "^1.1.5", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.3", "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.6" + "string.prototype.matchall": "^4.0.7" }, "dependencies": { "doctrine": { @@ -27008,13 +27108,14 @@ } }, "object.getownpropertydescriptors": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", - "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz", + "integrity": "sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ==", "requires": { + "array.prototype.reduce": "^1.0.4", "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.1" } }, "object.hasown": { @@ -27348,11 +27449,11 @@ } }, "postcss": { - "version": "8.4.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.13.tgz", - "integrity": "sha512-jtL6eTBrza5MPzy8oJLFuUscHDXTV5KcLlqAWHl5q5WYRfnNRGSmOZmOZ1T6Gy7A99mOZfqungmZMpMmCVJ8ZA==", + "version": "8.4.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", + "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", "requires": { - "nanoid": "^3.3.3", + "nanoid": "^3.3.4", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } @@ -27389,9 +27490,9 @@ } }, "postcss-color-functional-notation": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.2.tgz", - "integrity": "sha512-DXVtwUhIk4f49KK5EGuEdgx4Gnyj6+t2jBSEmxvpIK9QI40tWrpS2Pua8Q7iIZWBrki2QOaeUdEaLPPa91K0RQ==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.3.tgz", + "integrity": "sha512-5fbr6FzFzjwHXKsVnkmEYrJYG8VNNzvD1tAXaPPWR97S6rhKI5uh2yOfV5TAzhDkZoq4h+chxEplFDc8GeyFtw==", "requires": { "postcss-value-parser": "^4.2.0" } @@ -27718,9 +27819,9 @@ } }, "postcss-nesting": { - "version": "10.1.6", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.1.6.tgz", - "integrity": "sha512-8C0X0pOOShlgqYkCzB4wlWLyulos+GXFpw7r2+x7g+ROQ1RwN8MlN2NCcpNQScNBPfbjxbjwY8e25raTcEXqmg==", + "version": "10.1.7", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.1.7.tgz", + "integrity": "sha512-Btho5XzDTpl117SmB3tvUHP8txg5n7Ayv7vQ5m4b1zXkfs1Y52C67uZjZ746h7QvOJ+rLRg50OlhhjFW+IQY6A==", "requires": { "@csstools/selector-specificity": "1.0.0", "postcss-selector-parser": "^6.0.10" @@ -27843,21 +27944,22 @@ } }, "postcss-preset-env": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.5.0.tgz", - "integrity": "sha512-0BJzWEfCdTtK2R3EiKKSdkE51/DI/BwnhlnicSW482Ym6/DGHud8K0wGLcdjip1epVX0HKo4c8zzTeV/SkiejQ==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.6.0.tgz", + "integrity": "sha512-5cnzpSFZnQJOlBu85xn4Nnluy/WjIST/ugn+gOVcKnmFJ+GLtkfRhmJPo/TW9UDpG7oyA467kvDOO8mtcpOL4g==", "requires": { + "@csstools/postcss-cascade-layers": "^1.0.1", "@csstools/postcss-color-function": "^1.1.0", "@csstools/postcss-font-format-keywords": "^1.0.0", - "@csstools/postcss-hwb-function": "^1.0.0", + "@csstools/postcss-hwb-function": "^1.0.1", "@csstools/postcss-ic-unit": "^1.0.0", - "@csstools/postcss-is-pseudo-class": "^2.0.2", + "@csstools/postcss-is-pseudo-class": "^2.0.4", "@csstools/postcss-normalize-display-values": "^1.0.0", "@csstools/postcss-oklab-function": "^1.1.0", "@csstools/postcss-progressive-custom-properties": "^1.3.0", "@csstools/postcss-stepped-value-functions": "^1.0.0", - "@csstools/postcss-unset-value": "^1.0.0", - "autoprefixer": "^10.4.6", + "@csstools/postcss-unset-value": "^1.0.1", + "autoprefixer": "^10.4.7", "browserslist": "^4.20.3", "css-blank-pseudo": "^3.0.3", "css-has-pseudo": "^3.0.4", @@ -27883,12 +27985,12 @@ "postcss-lab-function": "^4.2.0", "postcss-logical": "^5.0.4", "postcss-media-minmax": "^5.0.0", - "postcss-nesting": "^10.1.4", + "postcss-nesting": "^10.1.6", "postcss-opacity-percentage": "^1.1.2", "postcss-overflow-shorthand": "^3.0.3", "postcss-page-break": "^3.0.4", "postcss-place": "^7.0.4", - "postcss-pseudo-class-any-link": "^7.1.2", + "postcss-pseudo-class-any-link": "^7.1.4", "postcss-replace-overflow-wrap": "^4.0.0", "postcss-selector-not": "^5.0.0", "postcss-value-parser": "^4.2.0" @@ -28812,9 +28914,9 @@ } }, "rollup": { - "version": "2.73.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.73.0.tgz", - "integrity": "sha512-h/UngC3S4Zt28mB3g0+2YCMegT5yoftnQplwzPqGZcKvlld5e+kT/QRmJiL+qxGyZKOYpgirWGdLyEO1b0dpLQ==", + "version": "2.74.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.74.1.tgz", + "integrity": "sha512-K2zW7kV8Voua5eGkbnBtWYfMIhYhT9Pel2uhBk2WO5eMee161nPze/XRfvEQPFYz7KgrCCnmh2Wy0AMFLGGmMA==", "requires": { "fsevents": "~2.3.2" } From 9d3426877d2d0c849a8933fd7e15f1c9944b3388 Mon Sep 17 00:00:00 2001 From: tp1de Date: Tue, 24 May 2022 16:53:01 +0200 Subject: [PATCH 02/38] reducemode1, reducetemp and noreducetemp for RC310 --- src/devices/thermostat.cpp | 36 ++++++++++++++++++++++++++++++++++++ src/devices/thermostat.h | 3 +++ src/locale_EN.h | 2 ++ 3 files changed, 41 insertions(+) diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index 7be718f9b..e9d68fcee 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -959,6 +959,10 @@ void Thermostat::process_RC300Set(std::shared_ptr telegram) { has_update(telegram, hc->manualtemp, 10); // is * 2 has_enumupdate(telegram, hc->program, 11, 1); // timer program 1 or 2 + + has_enumupdate(telegram, hc->reducemode1, 5, 1); // 1-outdoor temp threshold, 2-room temp threshold, 3-reduced mode + has_update(telegram, hc->reducetemp, 9); + has_update(telegram, hc->noreducetemp, 12); } // types 0x2AF ff @@ -2399,6 +2403,27 @@ bool Thermostat::set_reducemode(const char * value, const int8_t id) { return true; } +// sets the thermostat reducemode1 for RC310 +bool Thermostat::set_reducemode1(const char * value, const int8_t id) { + uint8_t hc_num = (id == -1) ? AUTO_HEATING_CIRCUIT : id; + std::shared_ptr hc = heating_circuit(hc_num); + if (hc == nullptr) { + return false; + } + + uint8_t set = 0xFF; + if (model() == EMS_DEVICE_FLAG_RC300 || model() == EMS_DEVICE_FLAG_RC100) { + if (Helpers::value2enum(value, set, FL_(enum_reducemode1))) { + write_command(set_typeids[hc->hc()], 5, set + 1, set_typeids[hc->hc()]); + } + } + + if (set == 0xFF) { + return false; + } + return true; +} + // sets the thermostat reducemode for RC35 vacations bool Thermostat::set_vacreducemode(const char * value, const int8_t id) { uint8_t hc_num = (id == -1) ? AUTO_HEATING_CIRCUIT : id; @@ -2894,6 +2919,14 @@ bool Thermostat::set_temperature(const float temperature, const uint8_t mode, co offset = 0; factor = 1; break; + case HeatingCircuit::Mode::NOREDUCE: + offset = 12; + factor = 1; + break; + case HeatingCircuit::Mode::REDUCE: + offset = 9; + factor = 1; + break; default: // HeatingCircuit::Mode::AUTO: uint8_t mode_ = hc->get_mode(); @@ -3849,6 +3882,9 @@ void Thermostat::register_device_values_hc(std::shared_ptrtempautotemp, DeviceValueType::INT, FL_(div2), FL_(tempautotemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_tempautotemp), -1, 30); register_device_value(tag, &hc->fastHeatup, DeviceValueType::UINT, nullptr, FL_(fastheatup), DeviceValueUOM::PERCENT, MAKE_CF_CB(set_fastheatup)); + register_device_value(tag, &hc->reducemode1, DeviceValueType::ENUM, FL_(enum_reducemode1), FL_(reducemode1), DeviceValueUOM::NONE, MAKE_CF_CB(set_reducemode1)); + register_device_value(tag, &hc->noreducetemp, DeviceValueType::INT, nullptr, FL_(noreducetemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_noreducetemp)); + register_device_value(tag, &hc->reducetemp, DeviceValueType::INT, nullptr, FL_(reducetemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_reducetemp)); break; case EMS_DEVICE_FLAG_CRF: register_device_value(tag, &hc->mode, DeviceValueType::ENUM, FL_(enum_mode5), FL_(mode), DeviceValueUOM::NONE); diff --git a/src/devices/thermostat.h b/src/devices/thermostat.h index 2fde27634..fa214cf24 100644 --- a/src/devices/thermostat.h +++ b/src/devices/thermostat.h @@ -63,6 +63,7 @@ class Thermostat : public EMSdevice { uint8_t minflowtemp; uint8_t maxflowtemp; uint8_t reducemode; + uint8_t reducemode1; // for RC310 uint8_t nofrostmode; uint8_t program; uint8_t controlmode; @@ -71,6 +72,7 @@ class Thermostat : public EMSdevice { uint8_t party; int8_t noreducetemp; // signed -20°C to +10°C int8_t reducetemp; + int8_t reducetemp1; int8_t vacreducetemp; uint8_t vacreducemode; uint8_t wwprio; @@ -420,6 +422,7 @@ class Thermostat : public EMSdevice { bool set_minflowtemp(const char * value, const int8_t id); bool set_maxflowtemp(const char * value, const int8_t id); bool set_reducemode(const char * value, const int8_t id); + bool set_reducemode1(const char * value, const int8_t id); // for RC310 bool set_switchtime1(const char * value, const int8_t id); bool set_switchtime2(const char * value, const int8_t id); bool set_program(const char * value, const int8_t id); diff --git a/src/locale_EN.h b/src/locale_EN.h index 5ddf6dc1e..a375976cc 100644 --- a/src/locale_EN.h +++ b/src/locale_EN.h @@ -383,6 +383,7 @@ MAKE_PSTR_LIST(enum_modetype4, F_(nofrost), F_(eco), F_(heat)) MAKE_PSTR_LIST(enum_modetype5, F_(off), F_(on)) MAKE_PSTR_LIST(enum_reducemode, F_(nofrost), F_(reduce), F_(room), F_(outdoor)) +MAKE_PSTR_LIST(enum_reducemode1, F_(outdoor), F_(room), F_(reduce)) // RC310 values: 1-3 MAKE_PSTR_LIST(enum_nofrostmode, F_(off), F_(room), F_(outdoor)) MAKE_PSTR_LIST(enum_controlmode, F_(off), F_(optimized), F_(simple), F_(mpc), F_(room), F_(power), F_(constant)) @@ -659,6 +660,7 @@ MAKE_PSTR_LIST(summermode, F("summermode"), F("summer mode")) MAKE_PSTR_LIST(holidaymode, F("holidaymode"), F("holiday mode")) MAKE_PSTR_LIST(flowtempoffset, F("flowtempoffset"), F("flow temperature offset for mixer")) MAKE_PSTR_LIST(reducemode, F("reducemode"), F("reduce mode")) +MAKE_PSTR_LIST(reducemode1, F("reducemode1"), F("reduce/setback mode")) // RC310 MAKE_PSTR_LIST(noreducetemp, F("noreducetemp"), F("no reduce below temperature")) MAKE_PSTR_LIST(reducetemp, F("reducetemp"), F("off/reduce switch temperature")) MAKE_PSTR_LIST(vacreducetemp, F("vacreducetemp"), F("vacations off/reduce switch temperature")) From 94c45891b4477768c1152eb0c990e699e3cc3b72 Mon Sep 17 00:00:00 2001 From: tp1de Date: Tue, 24 May 2022 19:51:37 +0200 Subject: [PATCH 03/38] add nofrostmode1 for RC310 --- src/devices/thermostat.cpp | 19 +++++++++++++++++++ src/devices/thermostat.h | 2 ++ src/locale_EN.h | 3 +++ 3 files changed, 24 insertions(+) diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index e9d68fcee..7a51cf30f 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -1010,6 +1010,7 @@ void Thermostat::process_RC300Curve(std::shared_ptr telegram) { has_update(telegram, hc->controlmode, 0); // 1-outdoor, 2-simple, 3-MPC, 4-room, 5-power, 6-const has_update(telegram, hc->heatingtype, 1); // 1=radiator, 2=convector, 3=floor + has_enumupdate(telegram, hc->nofrostmode1, 5, 1); // 1-room, 2-outdoor, 3- room & outdoor has_update(telegram, hc->nofrosttemp, 6); if (hc->heatingtype < 3) { @@ -2458,6 +2459,22 @@ bool Thermostat::set_nofrostmode(const char * value, const int8_t id) { return true; } +bool Thermostat::set_nofrostmode1(const char * value, const int8_t id) { + uint8_t hc_num = (id == -1) ? AUTO_HEATING_CIRCUIT : id; + std::shared_ptr hc = heating_circuit(hc_num); + if (hc == nullptr) { + return false; + } + + uint8_t set = 0xFF; + if (!Helpers::value2enum(value, set, FL_(enum_nofrostmode1))) { + return false; + } + + write_command(curve_typeids[hc->hc()], 5, set + 1, curve_typeids[hc->hc()]); + return true; +} + // sets the thermostat heatingtype for RC35, RC300 bool Thermostat::set_heatingtype(const char * value, const int8_t id) { uint8_t hc_num = (id == -1) ? AUTO_HEATING_CIRCUIT : id; @@ -3862,6 +3879,8 @@ void Thermostat::register_device_values_hc(std::shared_ptrroominfl_factor, DeviceValueType::UINT, FL_(div10), FL_(roominfl_factor), DeviceValueUOM::NONE, MAKE_CF_CB(set_roominfl_factor)); register_device_value(tag, &hc->curroominfl, DeviceValueType::SHORT, FL_(div10), FL_(curroominfl), DeviceValueUOM::DEGREES_R); + register_device_value( + tag, &hc->nofrostmode1, DeviceValueType::ENUM, FL_(enum_nofrostmode1), FL_(nofrostmode1), DeviceValueUOM::NONE, MAKE_CF_CB(set_nofrostmode1)); register_device_value(tag, &hc->nofrosttemp, DeviceValueType::INT, nullptr, FL_(nofrosttemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_nofrosttemp)); register_device_value(tag, &hc->targetflowtemp, DeviceValueType::UINT, nullptr, FL_(targetflowtemp), DeviceValueUOM::DEGREES); register_device_value( diff --git a/src/devices/thermostat.h b/src/devices/thermostat.h index fa214cf24..d9ea04b61 100644 --- a/src/devices/thermostat.h +++ b/src/devices/thermostat.h @@ -65,6 +65,7 @@ class Thermostat : public EMSdevice { uint8_t reducemode; uint8_t reducemode1; // for RC310 uint8_t nofrostmode; + uint8_t nofrostmode1; // for RC310 uint8_t program; uint8_t controlmode; uint8_t control; @@ -414,6 +415,7 @@ class Thermostat : public EMSdevice { bool set_vacreducetemp(const char * value, const int8_t id); bool set_vacreducemode(const char * value, const int8_t id); bool set_nofrostmode(const char * value, const int8_t id); + bool set_nofrostmode1(const char * value, const int8_t id); bool set_remotetemp(const char * value, const int8_t id); bool set_roominfluence(const char * value, const int8_t id); diff --git a/src/locale_EN.h b/src/locale_EN.h index a375976cc..9d53f60ad 100644 --- a/src/locale_EN.h +++ b/src/locale_EN.h @@ -313,6 +313,7 @@ MAKE_PSTR_WORD(winter) MAKE_PSTR_WORD(outdoor) MAKE_PSTR_WORD(mpc) MAKE_PSTR_WORD(room) +MAKE_PSTR_WORD(room_outdoor) MAKE_PSTR_WORD(power) MAKE_PSTR_WORD(constant) MAKE_PSTR_WORD(simple) @@ -385,6 +386,7 @@ MAKE_PSTR_LIST(enum_modetype5, F_(off), F_(on)) MAKE_PSTR_LIST(enum_reducemode, F_(nofrost), F_(reduce), F_(room), F_(outdoor)) MAKE_PSTR_LIST(enum_reducemode1, F_(outdoor), F_(room), F_(reduce)) // RC310 values: 1-3 MAKE_PSTR_LIST(enum_nofrostmode, F_(off), F_(room), F_(outdoor)) +MAKE_PSTR_LIST(enum_nofrostmode1, F_(room), F_(outdoor), F_(room_outdoor)) MAKE_PSTR_LIST(enum_controlmode, F_(off), F_(optimized), F_(simple), F_(mpc), F_(room), F_(power), F_(constant)) MAKE_PSTR_LIST(enum_controlmode2, F_(outdoor), F_(room)) @@ -666,6 +668,7 @@ MAKE_PSTR_LIST(reducetemp, F("reducetemp"), F("off/reduce switch temperature")) MAKE_PSTR_LIST(vacreducetemp, F("vacreducetemp"), F("vacations off/reduce switch temperature")) MAKE_PSTR_LIST(vacreducemode, F("vacreducemode"), F("vacations reduce mode")) MAKE_PSTR_LIST(nofrostmode, F("nofrostmode"), F("nofrost mode")) +MAKE_PSTR_LIST(nofrostmode1, F("nofrostmode1"), F("nofrost mode")) // RC310 MAKE_PSTR_LIST(remotetemp, F("remotetemp"), F("room temperature from remote")) MAKE_PSTR_LIST(reducehours, F("reducehours"), F("duration for nighttemp")) MAKE_PSTR_LIST(reduceminutes, F("reduceminutes"), F("remaining time for nightmode")) From c1598f3d4ed8624b697a3cf88235da94e24fb518 Mon Sep 17 00:00:00 2001 From: tp1de Date: Tue, 24 May 2022 20:08:10 +0200 Subject: [PATCH 04/38] changelog --- CHANGELOG_LATEST.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index 0ec10fa91..9c8ebf8c1 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -4,6 +4,8 @@ ### Added +- Added nofrostmode1, reducemode1,reducetemp & noreducetemp for RC310 +- Added emergencyops and emergencytemp, wwmaxtemp, wwflowtempoffset and wwcomfort1 for RC310 - WebUI optimizations, updated look&feel and better performance [#124](https://github.com/emsesp/EMS-ESP32/issues/124) - Auto refresh of WebUI after successful firmware upload [#178](https://github.com/emsesp/EMS-ESP32/issues/178) - New Customization Service in WebUI. First feature is the ability to enable/disabled Enitites (device values) from EMS devices [#206](https://github.com/emsesp/EMS-ESP32/issues/206) From c32cdf5d98a03be9a833253e0b2ff6b2943ec501 Mon Sep 17 00:00:00 2001 From: Proddy Date: Tue, 24 May 2022 22:50:18 +0200 Subject: [PATCH 05/38] React18 modifications --- interface/package-lock.json | 14 +++++++------- interface/package.json | 2 +- interface/src/index.tsx | 14 +++++++------- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/interface/package-lock.json b/interface/package-lock.json index 65851482f..1f1e0d019 100644 --- a/interface/package-lock.json +++ b/interface/package-lock.json @@ -34,7 +34,7 @@ "react-router-dom": "^6.3.0", "react-scripts": "5.0.1", "sockette": "^2.0.6", - "typescript": "^4.6.4" + "typescript": "^4.7.2" }, "devDependencies": { "nodemon": "^2.0.16", @@ -16806,9 +16806,9 @@ } }, "node_modules/typescript": { - "version": "4.6.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", - "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.2.tgz", + "integrity": "sha512-Mamb1iX2FDUpcTRzltPxgWMKy3fhg0TN378ylbktPGPK/99KbDtMQ4W1hwgsbPAsG3a0xKa1vmw4VKZQbkvz5A==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -29974,9 +29974,9 @@ } }, "typescript": { - "version": "4.6.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", - "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==" + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.2.tgz", + "integrity": "sha512-Mamb1iX2FDUpcTRzltPxgWMKy3fhg0TN378ylbktPGPK/99KbDtMQ4W1hwgsbPAsG3a0xKa1vmw4VKZQbkvz5A==" }, "unbox-primitive": { "version": "1.0.2", diff --git a/interface/package.json b/interface/package.json index 2ad65f12b..b4bf9d9c3 100644 --- a/interface/package.json +++ b/interface/package.json @@ -30,7 +30,7 @@ "react-router-dom": "^6.3.0", "react-scripts": "5.0.1", "sockette": "^2.0.6", - "typescript": "^4.6.4" + "typescript": "^4.7.2" }, "scripts": { "start": "react-app-rewired start", diff --git a/interface/src/index.tsx b/interface/src/index.tsx index e0f77e141..e5473f9d6 100644 --- a/interface/src/index.tsx +++ b/interface/src/index.tsx @@ -1,15 +1,15 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; - +import { StrictMode } from 'react'; +import { createRoot } from 'react-dom/client'; import { BrowserRouter } from 'react-router-dom'; import App from './App'; -ReactDOM.render( - +const root = createRoot(document.getElementById('root') as HTMLElement); + +root.render( + - , - document.getElementById('root') + ); From 3115fae80707bc155faaf447136d3c529160ca12 Mon Sep 17 00:00:00 2001 From: tp1de Date: Wed, 25 May 2022 13:38:50 +0200 Subject: [PATCH 06/38] Added enum_controlmode1 - Adjusted enum list for RC310 --- CHANGELOG_LATEST.md | 1 + src/devices/thermostat.cpp | 11 ++++++++--- src/locale_EN.h | 1 + 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index 9c8ebf8c1..b7f7965d7 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -4,6 +4,7 @@ ### Added +- Added enum_controlmode1 for RC310 (enum list) - Added nofrostmode1, reducemode1,reducetemp & noreducetemp for RC310 - Added emergencyops and emergencytemp, wwmaxtemp, wwflowtempoffset and wwcomfort1 for RC310 - WebUI optimizations, updated look&feel and better performance [#124](https://github.com/emsesp/EMS-ESP32/issues/124) diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index 7a51cf30f..e2f8e556f 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -1008,7 +1008,7 @@ void Thermostat::process_RC300Curve(std::shared_ptr telegram) { return; } - has_update(telegram, hc->controlmode, 0); // 1-outdoor, 2-simple, 3-MPC, 4-room, 5-power, 6-const + has_enumupdate(telegram, hc->controlmode, 0, 1); // 1-weather_compensated, 2-outside_footpoint,3-n/a, 4-room -- RC310 has_update(telegram, hc->heatingtype, 1); // 1=radiator, 2=convector, 3=floor has_enumupdate(telegram, hc->nofrostmode1, 5, 1); // 1-room, 2-outdoor, 3- room & outdoor has_update(telegram, hc->nofrosttemp, 6); @@ -2509,11 +2509,16 @@ bool Thermostat::set_controlmode(const char * value, const int8_t id) { } uint8_t set = 0xFF; - if (model() == EMS_DEVICE_FLAG_RC300 || model() == EMS_DEVICE_FLAG_RC100) { + if (model() == EMS_DEVICE_FLAG_RC100) { if (Helpers::value2enum(value, set, FL_(enum_controlmode))) { write_command(curve_typeids[hc->hc()], 0, set, curve_typeids[hc->hc()]); return true; } + } else if (model() == EMS_DEVICE_FLAG_RC300) { + if (Helpers::value2enum(value, set, FL_(enum_controlmode1))) { + write_command(curve_typeids[hc->hc()], 0, set + 1, curve_typeids[hc->hc()]); + return true; + } } else if (model() == EMS_DEVICE_FLAG_RC30) { if (Helpers::value2enum(value, set, FL_(enum_controlmode2))) { write_command(curve_typeids[hc->hc()], 1, set, curve_typeids[hc->hc()]); @@ -3896,7 +3901,7 @@ void Thermostat::register_device_values_hc(std::shared_ptrsummermode, DeviceValueType::ENUM, FL_(enum_summer), FL_(summermode), DeviceValueUOM::NONE); register_device_value( - tag, &hc->controlmode, DeviceValueType::ENUM, FL_(enum_controlmode), FL_(controlmode), DeviceValueUOM::NONE, MAKE_CF_CB(set_controlmode)); + tag, &hc->controlmode, DeviceValueType::ENUM, FL_(enum_controlmode1), FL_(controlmode), DeviceValueUOM::NONE, MAKE_CF_CB(set_controlmode)); register_device_value(tag, &hc->program, DeviceValueType::ENUM, FL_(enum_progMode), FL_(program), DeviceValueUOM::NONE, MAKE_CF_CB(set_program)); register_device_value( tag, &hc->tempautotemp, DeviceValueType::INT, FL_(div2), FL_(tempautotemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_tempautotemp), -1, 30); diff --git a/src/locale_EN.h b/src/locale_EN.h index 9d53f60ad..914f38db9 100644 --- a/src/locale_EN.h +++ b/src/locale_EN.h @@ -389,6 +389,7 @@ MAKE_PSTR_LIST(enum_nofrostmode, F_(off), F_(room), F_(outdoor)) MAKE_PSTR_LIST(enum_nofrostmode1, F_(room), F_(outdoor), F_(room_outdoor)) MAKE_PSTR_LIST(enum_controlmode, F_(off), F_(optimized), F_(simple), F_(mpc), F_(room), F_(power), F_(constant)) +MAKE_PSTR_LIST(enum_controlmode1, F("weather-compensated") ,F("outside-basepoint"), F("n/a"), F_(room)) // RC310 1-4 MAKE_PSTR_LIST(enum_controlmode2, F_(outdoor), F_(room)) // MAKE_PSTR_LIST(enum_controlmode3, F_(off), F_(room), F_(outdoor), F("room+outdoor")) MAKE_PSTR_LIST(enum_control, F_(off), F_(rc20), F_(rc3x)) From 60e1a9396662435af1b3e147aa9418a75f890eae Mon Sep 17 00:00:00 2001 From: tp1de Date: Wed, 25 May 2022 14:22:12 +0200 Subject: [PATCH 07/38] correct nofrostmodet1 & reducemode1 - just change enums ! --- CHANGELOG_LATEST.md | 4 +-- src/devices/thermostat.cpp | 69 ++++++++++++-------------------------- src/devices/thermostat.h | 5 --- src/locale_EN.h | 1 - 4 files changed, 24 insertions(+), 55 deletions(-) diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index b7f7965d7..3a93bd74c 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -4,8 +4,8 @@ ### Added -- Added enum_controlmode1 for RC310 (enum list) -- Added nofrostmode1, reducemode1,reducetemp & noreducetemp for RC310 +- Added enum_controlmode for RC310 (new enum list) +- Added nofrostmode, reducemode, reducetemp & noreducetemp for RC310 - Added emergencyops and emergencytemp, wwmaxtemp, wwflowtempoffset and wwcomfort1 for RC310 - WebUI optimizations, updated look&feel and better performance [#124](https://github.com/emsesp/EMS-ESP32/issues/124) - Auto refresh of WebUI after successful firmware upload [#178](https://github.com/emsesp/EMS-ESP32/issues/178) diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index e2f8e556f..7ce7cdb6b 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -960,7 +960,7 @@ void Thermostat::process_RC300Set(std::shared_ptr telegram) { has_update(telegram, hc->manualtemp, 10); // is * 2 has_enumupdate(telegram, hc->program, 11, 1); // timer program 1 or 2 - has_enumupdate(telegram, hc->reducemode1, 5, 1); // 1-outdoor temp threshold, 2-room temp threshold, 3-reduced mode + has_enumupdate(telegram, hc->reducemode, 5, 1); // 1-outdoor temp threshold, 2-room temp threshold, 3-reduced mode has_update(telegram, hc->reducetemp, 9); has_update(telegram, hc->noreducetemp, 12); } @@ -1010,7 +1010,7 @@ void Thermostat::process_RC300Curve(std::shared_ptr telegram) { has_enumupdate(telegram, hc->controlmode, 0, 1); // 1-weather_compensated, 2-outside_footpoint,3-n/a, 4-room -- RC310 has_update(telegram, hc->heatingtype, 1); // 1=radiator, 2=convector, 3=floor - has_enumupdate(telegram, hc->nofrostmode1, 5, 1); // 1-room, 2-outdoor, 3- room & outdoor + has_enumupdate(telegram, hc->nofrostmode, 5, 1); // 1-room, 2-outdoor, 3- room & outdoor has_update(telegram, hc->nofrosttemp, 6); if (hc->heatingtype < 3) { @@ -2387,7 +2387,7 @@ bool Thermostat::set_fastheatup(const char * value, const int8_t id) { return true; } -// sets the thermostat reducemode for RC35 +// sets the thermostat reducemode for RC35 and RC310 bool Thermostat::set_reducemode(const char * value, const int8_t id) { uint8_t hc_num = (id == -1) ? AUTO_HEATING_CIRCUIT : id; std::shared_ptr hc = heating_circuit(hc_num); @@ -2396,35 +2396,21 @@ bool Thermostat::set_reducemode(const char * value, const int8_t id) { } uint8_t set = 0xFF; - if (!Helpers::value2enum(value, set, FL_(enum_reducemode))) { - return false; - } - - write_command(set_typeids[hc->hc()], EMS_OFFSET_RC35Set_reducemode, set, set_typeids[hc->hc()]); - return true; -} - -// sets the thermostat reducemode1 for RC310 -bool Thermostat::set_reducemode1(const char * value, const int8_t id) { - uint8_t hc_num = (id == -1) ? AUTO_HEATING_CIRCUIT : id; - std::shared_ptr hc = heating_circuit(hc_num); - if (hc == nullptr) { - return false; - } - - uint8_t set = 0xFF; - if (model() == EMS_DEVICE_FLAG_RC300 || model() == EMS_DEVICE_FLAG_RC100) { + if (model() == EMS_DEVICE_FLAG_RC300 ) { if (Helpers::value2enum(value, set, FL_(enum_reducemode1))) { write_command(set_typeids[hc->hc()], 5, set + 1, set_typeids[hc->hc()]); } } - - if (set == 0xFF) { - return false; + else { + if (Helpers::value2enum(value, set, FL_(enum_reducemode))) { + write_command(set_typeids[hc->hc()], EMS_OFFSET_RC35Set_reducemode, set, set_typeids[hc->hc()]); + return true; + } } return true; } + // sets the thermostat reducemode for RC35 vacations bool Thermostat::set_vacreducemode(const char * value, const int8_t id) { uint8_t hc_num = (id == -1) ? AUTO_HEATING_CIRCUIT : id; @@ -2449,29 +2435,18 @@ bool Thermostat::set_nofrostmode(const char * value, const int8_t id) { if (hc == nullptr) { return false; } - uint8_t set = 0xFF; - if (!Helpers::value2enum(value, set, FL_(enum_nofrostmode))) { - return false; + if (model() == EMS_DEVICE_FLAG_RC300) { + if (Helpers::value2enum(value, set, FL_(enum_controlmode1))) { + write_command(curve_typeids[hc->hc()], 5, set + 1, curve_typeids[hc->hc()]); + return true; + } + } else { + if (Helpers::value2enum(value, set, FL_(enum_controlmode))) { + write_command(set_typeids[hc->hc()], EMS_OFFSET_RC35Set_nofrostmode, set, set_typeids[hc->hc()]); + return true; + } } - - write_command(set_typeids[hc->hc()], EMS_OFFSET_RC35Set_nofrostmode, set, set_typeids[hc->hc()]); - return true; -} - -bool Thermostat::set_nofrostmode1(const char * value, const int8_t id) { - uint8_t hc_num = (id == -1) ? AUTO_HEATING_CIRCUIT : id; - std::shared_ptr hc = heating_circuit(hc_num); - if (hc == nullptr) { - return false; - } - - uint8_t set = 0xFF; - if (!Helpers::value2enum(value, set, FL_(enum_nofrostmode1))) { - return false; - } - - write_command(curve_typeids[hc->hc()], 5, set + 1, curve_typeids[hc->hc()]); return true; } @@ -3885,7 +3860,7 @@ void Thermostat::register_device_values_hc(std::shared_ptrroominfl_factor, DeviceValueType::UINT, FL_(div10), FL_(roominfl_factor), DeviceValueUOM::NONE, MAKE_CF_CB(set_roominfl_factor)); register_device_value(tag, &hc->curroominfl, DeviceValueType::SHORT, FL_(div10), FL_(curroominfl), DeviceValueUOM::DEGREES_R); register_device_value( - tag, &hc->nofrostmode1, DeviceValueType::ENUM, FL_(enum_nofrostmode1), FL_(nofrostmode1), DeviceValueUOM::NONE, MAKE_CF_CB(set_nofrostmode1)); + tag, &hc->nofrostmode, DeviceValueType::ENUM, FL_(enum_nofrostmode1), FL_(nofrostmode), DeviceValueUOM::NONE, MAKE_CF_CB(set_nofrostmode)); register_device_value(tag, &hc->nofrosttemp, DeviceValueType::INT, nullptr, FL_(nofrosttemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_nofrosttemp)); register_device_value(tag, &hc->targetflowtemp, DeviceValueType::UINT, nullptr, FL_(targetflowtemp), DeviceValueUOM::DEGREES); register_device_value( @@ -3906,7 +3881,7 @@ void Thermostat::register_device_values_hc(std::shared_ptrtempautotemp, DeviceValueType::INT, FL_(div2), FL_(tempautotemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_tempautotemp), -1, 30); register_device_value(tag, &hc->fastHeatup, DeviceValueType::UINT, nullptr, FL_(fastheatup), DeviceValueUOM::PERCENT, MAKE_CF_CB(set_fastheatup)); - register_device_value(tag, &hc->reducemode1, DeviceValueType::ENUM, FL_(enum_reducemode1), FL_(reducemode1), DeviceValueUOM::NONE, MAKE_CF_CB(set_reducemode1)); + register_device_value(tag, &hc->reducemode, DeviceValueType::ENUM, FL_(enum_reducemode1), FL_(reducemode), DeviceValueUOM::NONE, MAKE_CF_CB(set_reducemode)); register_device_value(tag, &hc->noreducetemp, DeviceValueType::INT, nullptr, FL_(noreducetemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_noreducetemp)); register_device_value(tag, &hc->reducetemp, DeviceValueType::INT, nullptr, FL_(reducetemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_reducetemp)); break; diff --git a/src/devices/thermostat.h b/src/devices/thermostat.h index d9ea04b61..db2cad313 100644 --- a/src/devices/thermostat.h +++ b/src/devices/thermostat.h @@ -63,9 +63,7 @@ class Thermostat : public EMSdevice { uint8_t minflowtemp; uint8_t maxflowtemp; uint8_t reducemode; - uint8_t reducemode1; // for RC310 uint8_t nofrostmode; - uint8_t nofrostmode1; // for RC310 uint8_t program; uint8_t controlmode; uint8_t control; @@ -415,8 +413,6 @@ class Thermostat : public EMSdevice { bool set_vacreducetemp(const char * value, const int8_t id); bool set_vacreducemode(const char * value, const int8_t id); bool set_nofrostmode(const char * value, const int8_t id); - bool set_nofrostmode1(const char * value, const int8_t id); - bool set_remotetemp(const char * value, const int8_t id); bool set_roominfluence(const char * value, const int8_t id); bool set_roominfl_factor(const char * value, const int8_t id); @@ -424,7 +420,6 @@ class Thermostat : public EMSdevice { bool set_minflowtemp(const char * value, const int8_t id); bool set_maxflowtemp(const char * value, const int8_t id); bool set_reducemode(const char * value, const int8_t id); - bool set_reducemode1(const char * value, const int8_t id); // for RC310 bool set_switchtime1(const char * value, const int8_t id); bool set_switchtime2(const char * value, const int8_t id); bool set_program(const char * value, const int8_t id); diff --git a/src/locale_EN.h b/src/locale_EN.h index 914f38db9..8ed5594a2 100644 --- a/src/locale_EN.h +++ b/src/locale_EN.h @@ -663,7 +663,6 @@ MAKE_PSTR_LIST(summermode, F("summermode"), F("summer mode")) MAKE_PSTR_LIST(holidaymode, F("holidaymode"), F("holiday mode")) MAKE_PSTR_LIST(flowtempoffset, F("flowtempoffset"), F("flow temperature offset for mixer")) MAKE_PSTR_LIST(reducemode, F("reducemode"), F("reduce mode")) -MAKE_PSTR_LIST(reducemode1, F("reducemode1"), F("reduce/setback mode")) // RC310 MAKE_PSTR_LIST(noreducetemp, F("noreducetemp"), F("no reduce below temperature")) MAKE_PSTR_LIST(reducetemp, F("reducetemp"), F("off/reduce switch temperature")) MAKE_PSTR_LIST(vacreducetemp, F("vacreducetemp"), F("vacations off/reduce switch temperature")) From 570588f498d2bc930995c5a06ed5de8ca7a60ea8 Mon Sep 17 00:00:00 2001 From: tp1de Date: Wed, 25 May 2022 20:01:56 +0200 Subject: [PATCH 08/38] delete obsolete reducetemp1 --- src/devices/thermostat.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/devices/thermostat.h b/src/devices/thermostat.h index db2cad313..516af32c8 100644 --- a/src/devices/thermostat.h +++ b/src/devices/thermostat.h @@ -71,7 +71,6 @@ class Thermostat : public EMSdevice { uint8_t party; int8_t noreducetemp; // signed -20°C to +10°C int8_t reducetemp; - int8_t reducetemp1; int8_t vacreducetemp; uint8_t vacreducemode; uint8_t wwprio; From 53d3bda3266b2a388b9386a401f725abbd0290bc Mon Sep 17 00:00:00 2001 From: tp1de Date: Wed, 25 May 2022 21:20:32 +0200 Subject: [PATCH 09/38] Added switchonoptimization for RC310 --- CHANGELOG_LATEST.md | 1 + src/devices/thermostat.cpp | 20 ++++++++++++++++++++ src/devices/thermostat.h | 2 ++ src/locale_EN.h | 1 + 4 files changed, 24 insertions(+) diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index 3a93bd74c..f4b7ddf98 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -4,6 +4,7 @@ ### Added +- Added switchonoptimization for RC310 - Added enum_controlmode for RC310 (new enum list) - Added nofrostmode, reducemode, reducetemp & noreducetemp for RC310 - Added emergencyops and emergencytemp, wwmaxtemp, wwflowtempoffset and wwcomfort1 for RC310 diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index 7ce7cdb6b..d4ce46fec 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -1010,6 +1010,7 @@ void Thermostat::process_RC300Curve(std::shared_ptr telegram) { has_enumupdate(telegram, hc->controlmode, 0, 1); // 1-weather_compensated, 2-outside_footpoint,3-n/a, 4-room -- RC310 has_update(telegram, hc->heatingtype, 1); // 1=radiator, 2=convector, 3=floor + has_update(telegram, hc->switchonoptimization, 4); has_enumupdate(telegram, hc->nofrostmode, 5, 1); // 1-room, 2-outdoor, 3- room & outdoor has_update(telegram, hc->nofrosttemp, 6); @@ -2387,6 +2388,24 @@ bool Thermostat::set_fastheatup(const char * value, const int8_t id) { return true; } +// Set switchonoptimization RC310 +bool Thermostat::set_switchonoptimization(const char * value, const int8_t id) { +uint8_t hc_num = (id == -1) ? AUTO_HEATING_CIRCUIT : id; + std::shared_ptr hc = heating_circuit(hc_num); + if (hc == nullptr) { + return false; + } + + bool b = false; + + if (!Helpers::value2bool(value, b)) { + return false; + } + write_command(curve_typeids[hc->hc()], 4, b ? 0xFF : 0x00, curve_typeids[hc->hc()]); + return true; +} + + // sets the thermostat reducemode for RC35 and RC310 bool Thermostat::set_reducemode(const char * value, const int8_t id) { uint8_t hc_num = (id == -1) ? AUTO_HEATING_CIRCUIT : id; @@ -3881,6 +3900,7 @@ void Thermostat::register_device_values_hc(std::shared_ptrtempautotemp, DeviceValueType::INT, FL_(div2), FL_(tempautotemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_tempautotemp), -1, 30); register_device_value(tag, &hc->fastHeatup, DeviceValueType::UINT, nullptr, FL_(fastheatup), DeviceValueUOM::PERCENT, MAKE_CF_CB(set_fastheatup)); + register_device_value(tag, &hc->switchonoptimization, DeviceValueType::BOOL, nullptr, FL_(switchonoptimization), DeviceValueUOM::NONE, MAKE_CF_CB(set_switchonoptimization)); register_device_value(tag, &hc->reducemode, DeviceValueType::ENUM, FL_(enum_reducemode1), FL_(reducemode), DeviceValueUOM::NONE, MAKE_CF_CB(set_reducemode)); register_device_value(tag, &hc->noreducetemp, DeviceValueType::INT, nullptr, FL_(noreducetemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_noreducetemp)); register_device_value(tag, &hc->reducetemp, DeviceValueType::INT, nullptr, FL_(reducetemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_reducetemp)); diff --git a/src/devices/thermostat.h b/src/devices/thermostat.h index 516af32c8..bc1d3483a 100644 --- a/src/devices/thermostat.h +++ b/src/devices/thermostat.h @@ -80,6 +80,7 @@ class Thermostat : public EMSdevice { char switchtime1[16]; char switchtime2[16]; uint8_t climate; + uint8_t switchonoptimization; // RC 10 uint8_t reducehours; // night reduce duration @@ -425,6 +426,7 @@ class Thermostat : public EMSdevice { bool set_controlmode(const char * value, const int8_t id); bool set_wwprio(const char * value, const int8_t id); bool set_fastheatup(const char * value, const int8_t id); + bool set_switchonoptimization(const char * value, const int8_t id); // set functions - these don't use the id/hc, the parameters are ignored bool set_wwmode(const char * value, const int8_t id); diff --git a/src/locale_EN.h b/src/locale_EN.h index 8ed5594a2..0c1ae03e5 100644 --- a/src/locale_EN.h +++ b/src/locale_EN.h @@ -672,6 +672,7 @@ MAKE_PSTR_LIST(nofrostmode1, F("nofrostmode1"), F("nofrost mode")) // RC310 MAKE_PSTR_LIST(remotetemp, F("remotetemp"), F("room temperature from remote")) MAKE_PSTR_LIST(reducehours, F("reducehours"), F("duration for nighttemp")) MAKE_PSTR_LIST(reduceminutes, F("reduceminutes"), F("remaining time for nightmode")) +MAKE_PSTR_LIST(switchonoptimization, F("switchonoptimization"), F("switch-on optimization")) // heatpump MAKE_PSTR_LIST(airHumidity, F("airhumidity"), F("relative air humidity")) From 77a8857e2fcbe23bffd80eaea47ee18755b42b47 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Thu, 26 May 2022 12:42:38 +0200 Subject: [PATCH 10/38] fix #522, device-flag for IVT controller --- src/device_library.h | 2 +- src/devices/controller.cpp | 6 ++++-- src/emsdevice.h | 3 +++ 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/device_library.h b/src/device_library.h index 21fd47917..acbbc514c 100644 --- a/src/device_library.h +++ b/src/device_library.h @@ -68,7 +68,7 @@ {224, DeviceType::CONTROLLER, F("9000i"), DeviceFlags::EMS_DEVICE_FLAG_NONE}, // 0x09 {229, DeviceType::CONTROLLER, F("8700i"), DeviceFlags::EMS_DEVICE_FLAG_NONE}, // 0x09 {230, DeviceType::CONTROLLER, F("BC Base"), DeviceFlags::EMS_DEVICE_FLAG_NONE}, // 0x09 -{240, DeviceType::CONTROLLER, F("Rego 3000"), DeviceFlags::EMS_DEVICE_FLAG_NONE}, // 0x09 +{240, DeviceType::CONTROLLER, F("Rego 3000"), DeviceFlags::EMS_DEVICE_FLAG_IVT}, // 0x09 {241, DeviceType::CONTROLLER, F("Condens 5000i"), DeviceFlags::EMS_DEVICE_FLAG_NONE}, // 0x09 // Thermostat - not currently supporting write operations, like the Easy/100 types - 0x18 diff --git a/src/devices/controller.cpp b/src/devices/controller.cpp index f7b0b952f..a60912629 100644 --- a/src/devices/controller.cpp +++ b/src/devices/controller.cpp @@ -25,8 +25,10 @@ REGISTER_FACTORY(Controller, EMSdevice::DeviceType::CONTROLLER); Controller::Controller(uint8_t device_type, uint8_t device_id, uint8_t product_id, const char * version, const std::string & name, uint8_t flags, uint8_t brand) : EMSdevice(device_type, device_id, product_id, version, name, flags, brand) { // IVT broadcasts Thermostat time from controller (0x09) if display is off. - register_telegram_type(0x06, F("RCTime"), false, MAKE_PF_CB(process_dateTime)); - register_device_value(DeviceValueTAG::TAG_NONE, &dateTime_, DeviceValueType::STRING, nullptr, FL_(dateTime), DeviceValueUOM::NONE); + if ((flags & 0x0F) == EMS_DEVICE_FLAG_IVT) { + register_telegram_type(0x06, F("RCTime"), false, MAKE_PF_CB(process_dateTime)); + register_device_value(DeviceValueTAG::TAG_NONE, &dateTime_, DeviceValueType::STRING, nullptr, FL_(dateTime), DeviceValueUOM::NONE); + } } // process_dateTime - type 0x06 - date and time from a thermostat - 14 bytes long, IVT only diff --git a/src/emsdevice.h b/src/emsdevice.h index 3da12a4e3..567cfd8f8 100644 --- a/src/emsdevice.h +++ b/src/emsdevice.h @@ -315,6 +315,9 @@ class EMSdevice { // device flags: The lower 4 bits hold the unique identifier, the upper 4 bits are used for specific flags static constexpr uint8_t EMS_DEVICE_FLAG_NONE = 0; + // Controller + static constexpr uint8_t EMS_DEVICE_FLAG_IVT = 1; + // Boiler static constexpr uint8_t EMS_DEVICE_FLAG_EMS = 1; static constexpr uint8_t EMS_DEVICE_FLAG_EMSPLUS = 2; From d2609e429174f997c1d6bf3182616bd63b3e93a7 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Thu, 26 May 2022 12:42:55 +0200 Subject: [PATCH 11/38] fix #523, rename 'climate' to more explaning name --- src/locale_EN.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/locale_EN.h b/src/locale_EN.h index 5ddf6dc1e..c6f0eb096 100644 --- a/src/locale_EN.h +++ b/src/locale_EN.h @@ -616,7 +616,7 @@ MAKE_PSTR_LIST(wwDailyHeating, F("wwdailyheating"), F("daily heating")) MAKE_PSTR_LIST(wwDailyHeatTime, F("wwdailyheattime"), F("daily heating time")) MAKE_PSTR_LIST(wwWhenModeOff, F("wwwhenmodeoff"), F("when thermostat mode off")) // thermostat hc -MAKE_PSTR_LIST(climate, F("climate")) +MAKE_PSTR_LIST(climate, F("ha_climate_config_creation")) // no full-name, hidden, only for creation MAKE_PSTR_LIST(selRoomTemp, F("seltemp"), F("selected room temperature")) MAKE_PSTR_LIST(roomTemp, F("currtemp"), F("current room temperature")) MAKE_PSTR_LIST(mode, F("mode"), F("mode")) From 34cb3ad375f0c2719526b5882bfa2ea7cdb5a3da Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Thu, 26 May 2022 12:43:10 +0200 Subject: [PATCH 12/38] fix #524, free memory of json response --- src/web/WebAPIService.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/web/WebAPIService.cpp b/src/web/WebAPIService.cpp index 5ab041987..407e33fb2 100644 --- a/src/web/WebAPIService.cpp +++ b/src/web/WebAPIService.cpp @@ -132,6 +132,7 @@ void WebAPIService::parse(AsyncWebServerRequest * request, JsonObject & input) { JsonVariant data = output["api_data"]; request->send(200, "text/plain; charset=utf-8", data.as()); api_count_++; + delete response; return; } From 89b07114645e3c7ff64a57de0e2a536c8e7ebea5 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Thu, 26 May 2022 13:05:37 +0200 Subject: [PATCH 13/38] changelog --- CHANGELOG_LATEST.md | 83 +++------------------------------------------ 1 file changed, 4 insertions(+), 79 deletions(-) diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index 0ec10fa91..cae9e2969 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -1,91 +1,16 @@ # Changelog -## [3.4.0] +## [3.4.1] ### Added -- WebUI optimizations, updated look&feel and better performance [#124](https://github.com/emsesp/EMS-ESP32/issues/124) -- Auto refresh of WebUI after successful firmware upload [#178](https://github.com/emsesp/EMS-ESP32/issues/178) -- New Customization Service in WebUI. First feature is the ability to enable/disabled Enitites (device values) from EMS devices [#206](https://github.com/emsesp/EMS-ESP32/issues/206) -- Option to disable Telnet Console [#209](https://github.com/emsesp/EMS-ESP32/issues/209) -- Added Hide SSID, Max Clients and Preferred Channel to Access Point -- Merged in MichaelDvP's changes like Fahrenheit conversion, publish single (for IOBroker) and a few other critical optimizations -- Enabled bi-directional read/write with Home Assistant, so values can be changed automatically from the UI without scripting [#265](https://github.com/emsesp/EMS-ESP32/issues/265) -- Added GC7000F Boiler [#270](https://github.com/emsesp/EMS-ESP32/issues/270) -- Revised LED flash sequence on boot up to show system health (1 flash=no ems, 2 flashes=no wifi) [#224](https://github.com/emsesp/EMS-ESP32/issues/224) -- Analog Sensor support [#271](https://github.com/emsesp/EMS-ESP32/issues/271) -- Solar cylinder priority [#247](https://github.com/emsesp/EMS-ESP32/issues/247) -- Read only mode in Settings, where EMS Tx/Write commands are blocked [#286](https://github.com/emsesp/EMS-ESP32/issues/286) -- Added 8700i Boiler device -- Added Cascade CM10 Controller device -- Add Olimex ESP32-POE-ISO to board profiles plus settings to customize Ethernet modules [#301](https://github.com/emsesp/EMS-ESP32/issues/301) -- Help text for string commands in WebUI [#320](https://github.com/emsesp/EMS-ESP32/issues/320) -- Germany translations (at compile time) -- #entities added to system/info` endpoint [#322](https://github.com/emsesp/EMS-ESP32/issues/322) -- analog outputs digital/pwm/dac -- remove MQTT retained configs if discovery is disabled -- timeout 10 min for MQTT-QoS wait -- Moduline 300 auto-temperatures T1-T4, RC300 romminfluencefactor -- RC35 parameters [#392](https://github.com/emsesp/EMS-ESP32/issues/392), [#398](https://github.com/emsesp/EMS-ESP32/issues/398) -- sync time with thermostat [#386](https://github.com/emsesp/EMS-ESP32/issues/386), [#408](https://github.com/emsesp/EMS-ESP32/issues/408) -- set mode has immediate effect [#395](https://github.com/emsesp/EMS-ESP32/issues/395) -- min/max in web value setting -- Extend customization to select if an entity is to be shown in the WebUI or forced as read-only [#317](https://github.com/emsesp/EMS-ESP32/issues/317) -- Added Moduline 400 installation parameters [PR #449 by @kwertie01](https://github.com/emsesp/EMS-ESP32/pull/449) -- Read time from IVT-controller [#439](https://github.com/emsesp/EMS-ESP32/issues/439) -- Hybrid Heatpump product-id 168 [#459](https://github.com/emsesp/EMS-ESP32/issues/459), thermostat settings -- Junkers ISM2 and IPM in warm water mode [#437](https://github.com/emsesp/EMS-ESP32/issues/437) -- Added Shower Alert trigger time and cold shot time [#436](https://github.com/emsesp/EMS-ESP32/issues/436) -- Improved Table layout in Web UI (searching, filtering, sorting, exporting to CSV) -- API fetch individual attributes from an entity [#462](https://github.com/emsesp/EMS-ESP32/issues/462) -- Option to disable mDNS -- Option for rendering booleans on dashboard [#456](https://github.com/emsesp/EMS-ESP32/issues/456) -- Upload customization settings from a file [#256](https://github.com/emsesp/EMS-ESP32/issues/256) - ### Fixed -- lastcode broke MQTT JSON structure [#228](https://github.com/emsesp/EMS-ESP32/issues/228) -- fixed issue with overlapping while reading sequence of EMS1.0 telegrams -- fixed redundant telegram readings (because of offset overflow) -- added missing RC30/Moduline 400 [#243](https://github.com/emsesp/EMS-ESP32/issues/243) -- Correct modes for RC25 [#106](https://github.com/emsesp/EMS-ESP32/issues/106) -- Clean up old HA config's in MQTT before publishing data. This will prevent HA giving the 'dict' warnings [#229](https://github.com/emsesp/EMS-ESP32/issues/229) -- RC25 temperature setting [#272](https://github.com/emsesp/EMS-ESP32/issues/272) -- Buderus RC25 - "hc1 mode type" incorrect value [#273](https://github.com/emsesp/EMS-ESP32/issues/273) -- Increased number of Mixers and Heating Circuits [#294](https://github.com/emsesp/EMS-ESP32/issues/294) -- Check receive status before removing a telegram fetch [#268](https://github.com/emsesp/EMS-ESP32/issues/268), [#282](https://github.com/emsesp/EMS-ESP32/issues/282) -- Fix uploading firmware on OSX [#345](https://github.com/emsesp/EMS-ESP32/issues/345) -- Non-nested MQTT would corrupt the json [#354](https://github.com/emsesp/EMS-ESP32/issues/354) -- Burner selected max power can have a value higher than 100% [#314](https://github.com/emsesp/EMS-ESP32/issues/314) -- some missing fahrenheit calculations -- limited number of exclusions [#339](https://github.com/emsesp/EMS-ESP32/issues/339) -- MQTT sometimes would not reconnect after a WiFi outage +- fix memory leak in api [#524](https://github.com/emsesp/EMS-ESP32/issues/524) ### Changed -- Use flash system to show system health (1 flash=no ems, 2 flashes=no wifi) [#224](https://github.com/emsesp/EMS-ESP32/issues/224) -- Renamed Dallas Sensor to Temperature Sensor in UI -- Dallas Format removed. Use the name to give each sensor an alias -- No longer MQTT subscribes to topic `/thermostat_hc` as it supports a path similar to the API endpoint construct -- Show Sensors quality in WebUI -- Controller not shown in WebUI dashboard -- renamed "Home Assistant Integration" to "MQTT Discovery" in MQTT Settings [#290](https://github.com/emsesp/EMS-ESP32/issues/290) -- Show ems tx reads and writes separately -- Show ems device handlers separated for received, fetched and pending handlers. -- Wired renamed to Ethernet -- removed system/pin command, new commands in analogsensors -- system/info device-info split to name/version/brand -- exclude list uses short-names, possible flags for web/api/mqtt excludes, readonly and favorite (selection not yet implemented) -- thermostat clock formate date-time: dd.mm.yyyy hh:mm -- RC300 summermode as other thermostats `winter/summer` instead of `off/on` +- controller data in web-ui only for IVT [#522](https://github.com/emsesp/EMS-ESP32/issues/522) +- rename hidden `climate` to a more explaining name [#523](https://github.com/emsesp/EMS-ESP32/issues/523) ## **BREAKING CHANGES:** - -- Settings: - - order of Boolean Format has changed in Application Settings - check your settings - - Dallas Format setting removed. Now customize name of each Dallas sensor via the UI -- MQTT/API - - Boiler `wwheat` renamed to `ww3wayon` [#211](https://github.com/emsesp/EMS-ESP32/issues/211) - - Boiler `ww` tag renamed to `dhw`. Any custom Home Assistant lovelace dashboards will need updating. - - Renamed description of `wwtapactivated` to "turn on/off DHW". Otherwise would have looked like "boiler_dhw_turn_on_off_dhw" in HA. - - `/api/system/info` endpoint has updated keys. Now lowercase, no underscores and not capitalized. Replace "handlers" with "handlers received", "handlers fetched" and "handlers pending". From 2d50f18dcfa8176183d40a351d89ebe6055006e8 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Thu, 26 May 2022 13:11:13 +0200 Subject: [PATCH 14/38] changelog from 3.4.0 --- CHANGELOG.md | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bf8fd774f..080b6687e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,96 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +# [3.4.0] May 23 2022 + +## Added + +- WebUI optimizations, updated look&feel and better performance [#124](https://github.com/emsesp/EMS-ESP32/issues/124) +- Auto refresh of WebUI after successful firmware upload [#178](https://github.com/emsesp/EMS-ESP32/issues/178) +- New Customization Service in WebUI. First feature is the ability to enable/disabled Enitites (device values) from EMS devices [#206](https://github.com/emsesp/EMS-ESP32/issues/206) +- Option to disable Telnet Console [#209](https://github.com/emsesp/EMS-ESP32/issues/209) +- Added Hide SSID, Max Clients and Preferred Channel to Access Point +- Merged in MichaelDvP's changes like Fahrenheit conversion, publish single (for IOBroker) and a few other critical optimizations +- Enabled bi-directional read/write with Home Assistant, so values can be changed automatically from the UI without scripting [#265](https://github.com/emsesp/EMS-ESP32/issues/265) +- Added GC7000F Boiler [#270](https://github.com/emsesp/EMS-ESP32/issues/270) +- Revised LED flash sequence on boot up to show system health (1 flash=no ems, 2 flashes=no wifi) [#224](https://github.com/emsesp/EMS-ESP32/issues/224) +- Analog Sensor support [#271](https://github.com/emsesp/EMS-ESP32/issues/271) +- Solar cylinder priority [#247](https://github.com/emsesp/EMS-ESP32/issues/247) +- Read only mode in Settings, where EMS Tx/Write commands are blocked [#286](https://github.com/emsesp/EMS-ESP32/issues/286) +- Added 8700i Boiler device +- Added Cascade CM10 Controller device +- Add Olimex ESP32-POE-ISO to board profiles plus settings to customize Ethernet modules [#301](https://github.com/emsesp/EMS-ESP32/issues/301) +- Help text for string commands in WebUI [#320](https://github.com/emsesp/EMS-ESP32/issues/320) +- Germany translations (at compile time) +- #entities added to system/info` endpoint [#322](https://github.com/emsesp/EMS-ESP32/issues/322) +- analog outputs digital/pwm/dac +- remove MQTT retained configs if discovery is disabled +- timeout 10 min for MQTT-QoS wait +- Moduline 300 auto-temperatures T1-T4, RC300 romminfluencefactor +- RC35 parameters [#392](https://github.com/emsesp/EMS-ESP32/issues/392), [#398](https://github.com/emsesp/EMS-ESP32/issues/398) +- sync time with thermostat [#386](https://github.com/emsesp/EMS-ESP32/issues/386), [#408](https://github.com/emsesp/EMS-ESP32/issues/408) +- set mode has immediate effect [#395](https://github.com/emsesp/EMS-ESP32/issues/395) +- min/max in web value setting +- Extend customization to select if an entity is to be shown in the WebUI or forced as read-only [#317](https://github.com/emsesp/EMS-ESP32/issues/317) +- Added Moduline 400 installation parameters [PR #449 by @kwertie01](https://github.com/emsesp/EMS-ESP32/pull/449) +- Read time from IVT-controller [#439](https://github.com/emsesp/EMS-ESP32/issues/439) +- Hybrid Heatpump product-id 168 [#459](https://github.com/emsesp/EMS-ESP32/issues/459), thermostat settings +- Junkers ISM2 and IPM in warm water mode [#437](https://github.com/emsesp/EMS-ESP32/issues/437) +- Added Shower Alert trigger time and cold shot time [#436](https://github.com/emsesp/EMS-ESP32/issues/436) +- Improved Table layout in Web UI (searching, filtering, sorting, exporting to CSV) +- API fetch individual attributes from an entity [#462](https://github.com/emsesp/EMS-ESP32/issues/462) +- Option to disable mDNS +- Option for rendering booleans on dashboard [#456](https://github.com/emsesp/EMS-ESP32/issues/456) +- Upload customization settings from a file [#256](https://github.com/emsesp/EMS-ESP32/issues/256) + +## Fixed + +- lastcode broke MQTT JSON structure [#228](https://github.com/emsesp/EMS-ESP32/issues/228) +- fixed issue with overlapping while reading sequence of EMS1.0 telegrams +- fixed redundant telegram readings (because of offset overflow) +- added missing RC30/Moduline 400 [#243](https://github.com/emsesp/EMS-ESP32/issues/243) +- Correct modes for RC25 [#106](https://github.com/emsesp/EMS-ESP32/issues/106) +- Clean up old HA config's in MQTT before publishing data. This will prevent HA giving the 'dict' warnings [#229](https://github.com/emsesp/EMS-ESP32/issues/229) +- RC25 temperature setting [#272](https://github.com/emsesp/EMS-ESP32/issues/272) +- Buderus RC25 - "hc1 mode type" incorrect value [#273](https://github.com/emsesp/EMS-ESP32/issues/273) +- Increased number of Mixers and Heating Circuits [#294](https://github.com/emsesp/EMS-ESP32/issues/294) +- Check receive status before removing a telegram fetch [#268](https://github.com/emsesp/EMS-ESP32/issues/268), [#282](https://github.com/emsesp/EMS-ESP32/issues/282) +- Fix uploading firmware on OSX [#345](https://github.com/emsesp/EMS-ESP32/issues/345) +- Non-nested MQTT would corrupt the json [#354](https://github.com/emsesp/EMS-ESP32/issues/354) +- Burner selected max power can have a value higher than 100% [#314](https://github.com/emsesp/EMS-ESP32/issues/314) +- some missing fahrenheit calculations +- limited number of exclusions [#339](https://github.com/emsesp/EMS-ESP32/issues/339) +- MQTT sometimes would not reconnect after a WiFi outage + +## Changed + +- Use flash system to show system health (1 flash=no ems, 2 flashes=no wifi) [#224](https://github.com/emsesp/EMS-ESP32/issues/224) +- Renamed Dallas Sensor to Temperature Sensor in UI +- Dallas Format removed. Use the name to give each sensor an alias +- No longer MQTT subscribes to topic `/thermostat_hc` as it supports a path similar to the API endpoint construct +- Show Sensors quality in WebUI +- Controller not shown in WebUI dashboard +- renamed "Home Assistant Integration" to "MQTT Discovery" in MQTT Settings [#290](https://github.com/emsesp/EMS-ESP32/issues/290) +- Show ems tx reads and writes separately +- Show ems device handlers separated for received, fetched and pending handlers. +- Wired renamed to Ethernet +- removed system/pin command, new commands in analogsensors +- system/info device-info split to name/version/brand +- exclude list uses short-names, possible flags for web/api/mqtt excludes, readonly and favorite (selection not yet implemented) +- thermostat clock formate date-time: dd.mm.yyyy hh:mm +- RC300 summermode as other thermostats `winter/summer` instead of `off/on` + +## **BREAKING CHANGES:** + +- Settings: + - order of Boolean Format has changed in Application Settings - check your settings + - Dallas Format setting removed. Now customize name of each Dallas sensor via the UI +- MQTT/API + - Boiler `wwheat` renamed to `ww3wayon` [#211](https://github.com/emsesp/EMS-ESP32/issues/211) + - Boiler `ww` tag renamed to `dhw`. Any custom Home Assistant lovelace dashboards will need updating. + - Renamed description of `wwtapactivated` to "turn on/off DHW". Otherwise would have looked like "boiler_dhw_turn_on_off_dhw" in HA. + - `/api/system/info` endpoint has updated keys. Now lowercase, no underscores and not capitalized. Replace "handlers" with "handlers received", "handlers fetched" and "handlers pending". + # [3.3.1] January 20 2022 - lastcode broke MQTT JSON structure [#228](https://github.com/emsesp/EMS-ESP32/issues/228) From c4cfabfbaf510ddf5e3e7aec3f3d7baceef7a53a Mon Sep 17 00:00:00 2001 From: Proddy Date: Thu, 26 May 2022 17:46:51 +0200 Subject: [PATCH 15/38] update test data for customizations --- mock-api/server.js | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/mock-api/server.js b/mock-api/server.js index d6bc9fefc..5be39abe3 100644 --- a/mock-api/server.js +++ b/mock-api/server.js @@ -473,7 +473,7 @@ const emsesp_devicedata_1 = { const emsesp_devicedata_2 = { label: 'Boiler: Nefit GBx72/Trendline/Cerapur/Greenstar Si/27i', data: [ - { v: 0, u: 0, id: '08reset', c: 'reset', l: ['-', 'maintenance', 'error'] }, + { v: '', u: 0, id: '08reset', c: 'reset', l: ['-', 'maintenance', 'error'] }, { v: 'false', u: 0, id: '08heating active' }, { v: 'false', u: 0, id: '04tapwater active' }, { v: 5, u: 1, id: '04selected flow temperature', c: 'selflowtemp' }, @@ -590,6 +590,13 @@ const emsesp_deviceentities_1 = [ m: 0, w: false, }, + { + v: 'roomTemp', + id: 'hc1/HA climate config creation', + s: 'hc1/HA climate config creation', + m: 0, + w: false, + }, { v: 18.2, id: 'hc1 selected room temperature', @@ -614,10 +621,11 @@ const emsesp_deviceentities_1 = [ ] const emsesp_deviceentities_2 = [ - { v: false, id: 'heating active', s: 'heatingactive', m: 0, w: false }, - { v: false, id: 'tapwater active', s: 'tapwateractive', m: 0, w: false }, - { v: 5, id: 'selected flow temperature', s: 'selflowtemp', m: 0, w: true }, - { v: 0, id: 'burner selected max power', s: 'selburnpow', m: 0, w: true }, + { u: 0, id: 'reset', s: 'reset', m: 8, w: false }, + { v: false, id: 'heating active', s: 'heatingactive', m: 8, w: false }, + { v: false, id: 'tapwater active', s: 'tapwateractive', m: 4, w: false }, + { v: 5, id: 'selected flow temperature', s: 'selflowtemp', m: 4, w: true }, + { v: 0, id: 'burner selected max power', s: 'selburnpow', m: 14, w: true }, { v: 0, id: 'heating pump modulation', s: 'heatingpumpmod', m: 0, w: false }, { id: 'heating pump 2 modulation', s: 'heatingpump2mod', m: 0, w: false }, { id: 'outside temperature', s: 'outdoortemp', m: 0, w: false }, From 31627bb704838e3dc84f76fd635b719fd7e2734e Mon Sep 17 00:00:00 2001 From: Proddy Date: Thu, 26 May 2022 17:47:04 +0200 Subject: [PATCH 16/38] remove debug_flags --- pio_local.ini_example | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pio_local.ini_example b/pio_local.ini_example index 9d7c4cd8d..9c2db40f8 100644 --- a/pio_local.ini_example +++ b/pio_local.ini_example @@ -32,5 +32,5 @@ build_type = debug monitor_filters = esp32_exception_decoder debug_tool = esp-prog debug_init_break = tbreak setup -build_flags = ${factory_settings.build_flags} ${common.debug_flags} -DONEWIRE_CRC16=0 -DNO_GLOBAL_ARDUINOOTA -DARDUINOJSON_ENABLE_STD_STRING=1 -DESP32=1 -DARDUINO_ARCH_ESP32=1 +build_flags = ${factory_settings.build_flags} -DONEWIRE_CRC16=0 -DNO_GLOBAL_ARDUINOOTA -DARDUINOJSON_ENABLE_STD_STRING=1 -DESP32=1 -DARDUINO_ARCH_ESP32=1 extra_scripts = pre:scripts/build_interface.py From a9064baefc14a1ee26c17fd196eb5c534239f2b3 Mon Sep 17 00:00:00 2001 From: Proddy Date: Thu, 26 May 2022 17:47:15 +0200 Subject: [PATCH 17/38] 3.4.1b1 --- src/version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/version.h b/src/version.h index 7ab149645..46af4d0ea 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define EMSESP_APP_VERSION "3.4.1b0" +#define EMSESP_APP_VERSION "3.4.1b1" From cba081379ef0999ed37fe842b4aba727e33ee37b Mon Sep 17 00:00:00 2001 From: Proddy Date: Thu, 26 May 2022 17:48:01 +0200 Subject: [PATCH 18/38] rename generate_values_web_customization --- src/emsdevice.h | 2 +- src/test/test.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/emsdevice.h b/src/emsdevice.h index 567cfd8f8..603e353c8 100644 --- a/src/emsdevice.h +++ b/src/emsdevice.h @@ -200,7 +200,7 @@ class EMSdevice { enum OUTPUT_TARGET : uint8_t { API_VERBOSE, API_SHORTNAMES, MQTT, CONSOLE }; bool generate_values(JsonObject & output, const uint8_t tag_filter, const bool nested, const uint8_t output_target); void generate_values_web(JsonObject & output); - void generate_values_web_all(JsonArray & output); + void generate_values_web_customization(JsonArray & output); void register_device_value(uint8_t tag, void * value_p, diff --git a/src/test/test.cpp b/src/test/test.cpp index 3d320bb47..2b77622f1 100644 --- a/src/test/test.cpp +++ b/src/test/test.cpp @@ -418,7 +418,7 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & cmd, const // emsdevice->generate_values_web(root); JsonArray output = doc.to(); - emsdevice->generate_values_web_all(output); + emsdevice->generate_values_web_customization(output); Serial.print(COLOR_BRIGHT_MAGENTA); serializeJson(doc, Serial); From af7cd7b009c58c48527440cccfdda6bb6ca850a3 Mon Sep 17 00:00:00 2001 From: Proddy Date: Thu, 26 May 2022 17:48:10 +0200 Subject: [PATCH 19/38] rename generate_values_web_customization --- src/web/WebCustomizationService.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/web/WebCustomizationService.cpp b/src/web/WebCustomizationService.cpp index 2634030fd..9c9f16f20 100644 --- a/src/web/WebCustomizationService.cpp +++ b/src/web/WebCustomizationService.cpp @@ -196,7 +196,7 @@ void WebCustomizationService::device_entities(AsyncWebServerRequest * request, J if (emsdevice->unique_id() == json["id"]) { #ifndef EMSESP_STANDALONE JsonArray output = response->getRoot(); - emsdevice->generate_values_web_all(output); + emsdevice->generate_values_web_customization(output); #endif response->setLength(); request->send(response); From 2c468c7225a373c848d36bdd6130442b5d751e0a Mon Sep 17 00:00:00 2001 From: Proddy Date: Thu, 26 May 2022 17:48:18 +0200 Subject: [PATCH 20/38] formatting --- src/devices/controller.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/devices/controller.cpp b/src/devices/controller.cpp index a60912629..e8e7af228 100644 --- a/src/devices/controller.cpp +++ b/src/devices/controller.cpp @@ -37,7 +37,7 @@ void Controller::process_dateTime(std::shared_ptr telegram) { return; } char newdatetime[sizeof(dateTime_)]; - // publich as dd.mm.yyyy hh:mmF + // publish as dd.mm.yyyy hh:mmF snprintf(newdatetime, sizeof(dateTime_), "%02d.%02d.%04d %02d:%02d", @@ -49,5 +49,4 @@ void Controller::process_dateTime(std::shared_ptr telegram) { has_update(dateTime_, newdatetime, sizeof(dateTime_)); } - } // namespace emsesp \ No newline at end of file From 6ec67f741709fd031bfc793c39332ae3a3fadaf4 Mon Sep 17 00:00:00 2001 From: Proddy Date: Thu, 26 May 2022 17:48:34 +0200 Subject: [PATCH 21/38] rename ha_climate_config_creation --- src/locale_EN.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/locale_EN.h b/src/locale_EN.h index c6f0eb096..72ea00698 100644 --- a/src/locale_EN.h +++ b/src/locale_EN.h @@ -616,7 +616,7 @@ MAKE_PSTR_LIST(wwDailyHeating, F("wwdailyheating"), F("daily heating")) MAKE_PSTR_LIST(wwDailyHeatTime, F("wwdailyheattime"), F("daily heating time")) MAKE_PSTR_LIST(wwWhenModeOff, F("wwwhenmodeoff"), F("when thermostat mode off")) // thermostat hc -MAKE_PSTR_LIST(climate, F("ha_climate_config_creation")) // no full-name, hidden, only for creation +MAKE_PSTR_LIST(climate, F("HA climate config creation")) // no full-name, hidden, only for creation MAKE_PSTR_LIST(selRoomTemp, F("seltemp"), F("selected room temperature")) MAKE_PSTR_LIST(roomTemp, F("currtemp"), F("current room temperature")) MAKE_PSTR_LIST(mode, F("mode"), F("mode")) From be844a5184941798268b4e548c293c3db15884d6 Mon Sep 17 00:00:00 2001 From: Proddy Date: Thu, 26 May 2022 17:49:04 +0200 Subject: [PATCH 22/38] if no fullname, use shortname in customizations json --- src/emsdevice.cpp | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/emsdevice.cpp b/src/emsdevice.cpp index 29d2759a2..429190e0e 100644 --- a/src/emsdevice.cpp +++ b/src/emsdevice.cpp @@ -775,7 +775,7 @@ void EMSdevice::generate_values_web(JsonObject & output) { // as generate_values_web() but stripped down to only show all entities and their state // this is used only for WebCustomizationService::device_entities() -void EMSdevice::generate_values_web_all(JsonArray & output) { +void EMSdevice::generate_values_web_customization(JsonArray & output) { for (const auto & dv : devicevalues_) { // also show commands and entities that have an empty full name JsonObject obj = output.createNestedObject(); @@ -832,11 +832,19 @@ void EMSdevice::generate_values_web_all(JsonArray & output) { } } } else { - // must always have v for sorting to work in web - obj["v"] = ""; + obj["v"] = ""; // must always have v for sorting to work in web } - // add name, prefixing the tag if it exists as the id (key for table sorting) + // shortname + std::string shortname; + if (dv.tag >= DeviceValueTAG::TAG_HC1) { + shortname = tag_to_string(dv.tag) + "/" + read_flash_string(dv.short_name); + } else { + shortname = read_flash_string(dv.short_name); + } + obj["s"] = shortname; + + // id is the fullname, or the shortname (it must exist for the web table to work) if (dv.full_name) { if ((dv.tag == DeviceValueTAG::TAG_NONE) || tag_to_string(dv.tag).empty()) { obj["id"] = dv.full_name; @@ -846,14 +854,7 @@ void EMSdevice::generate_values_web_all(JsonArray & output) { obj["id"] = name; } } else { - obj["id"] = ""; - } - - // shortname - if (dv.tag >= DeviceValueTAG::TAG_HC1) { - obj["s"] = tag_to_string(dv.tag) + "/" + read_flash_string(dv.short_name); - } else { - obj["s"] = dv.short_name; + obj["id"] = shortname; // fullname/id is same as shortname } obj["m"] = dv.state >> 4; // send back the mask state. We're only interested in the high nibble From f8bf6b5cc8bda6c89a387073e6af9f530ed44737 Mon Sep 17 00:00:00 2001 From: Proddy Date: Thu, 26 May 2022 17:49:25 +0200 Subject: [PATCH 23/38] fix isCmdOnly() function for commands like reset --- interface/src/project/DashboardData.tsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/interface/src/project/DashboardData.tsx b/interface/src/project/DashboardData.tsx index 5b4bd827d..5d8ae278c 100644 --- a/interface/src/project/DashboardData.tsx +++ b/interface/src/project/DashboardData.tsx @@ -384,7 +384,10 @@ const DashboardData: FC = () => { const handleDownloadCsv = () => { const columns = [ { accessor: (dv: any) => dv.id.slice(2), name: 'Entity' }, - { accessor: (dv: any) => (typeof dv.v === 'number') ? new Intl.NumberFormat().format(dv.v) : dv.v, name: 'Value' }, + { + accessor: (dv: any) => (typeof dv.v === 'number' ? new Intl.NumberFormat().format(dv.v) : dv.v), + name: 'Value' + }, { accessor: (dv: any) => DeviceValueUOM_s[dv.u], name: 'UoM' } ]; downloadAsCsv( @@ -449,7 +452,7 @@ const DashboardData: FC = () => { } }; - const isCmdOnly = (dv: DeviceValue) => dv.v === undefined && dv.c; + const isCmdOnly = (dv: DeviceValue) => dv.v === '' && dv.c; function formatValue(value: any, uom: number) { if (value === undefined) { From 8824f4f3da0f04066ab57373360d8a08041f6442 Mon Sep 17 00:00:00 2001 From: Proddy Date: Thu, 26 May 2022 17:49:43 +0200 Subject: [PATCH 24/38] added formatName so hidden entities render nicely --- .../src/project/SettingsCustomization.tsx | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/interface/src/project/SettingsCustomization.tsx b/interface/src/project/SettingsCustomization.tsx index a5cac3aae..3a06e5f0d 100644 --- a/interface/src/project/SettingsCustomization.tsx +++ b/interface/src/project/SettingsCustomization.tsx @@ -199,6 +199,13 @@ const SettingsCustomization: FC = () => { return value; } + function formatName(de: DeviceEntity) { + if (de.id == de.s) { + return de.s; + } + return de.id + ' (' + de.s + ')'; + } + const getMaskNumber = (newMask: string[]) => { var new_mask = 0; for (let entry of newMask) { @@ -403,7 +410,7 @@ const SettingsCustomization: FC = () => { : - + - + @@ -471,16 +485,16 @@ const SettingsCustomization: FC = () => { setMasks(['']); }} > - + - + - + - + diff --git a/mock-api/server.js b/mock-api/server.js index bcecc0df7..b6e57ff3f 100644 --- a/mock-api/server.js +++ b/mock-api/server.js @@ -593,6 +593,13 @@ const emsesp_deviceentities_1 = [ m: 0, w: false, }, + { + v: 'test data', + n: 'test', + id: 'test', + m: 0, + w: false, + }, { v: 'roomTemp', id: 'hc1/HA climate config creation', From 55133b028a54e0d2a18df153945187d0d39faf30 Mon Sep 17 00:00:00 2001 From: Proddy Date: Fri, 27 May 2022 17:18:50 +0200 Subject: [PATCH 31/38] typo --- interface/src/project/SettingsCustomization.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/project/SettingsCustomization.tsx b/interface/src/project/SettingsCustomization.tsx index 2bcac3fa2..d7b2d2f23 100644 --- a/interface/src/project/SettingsCustomization.tsx +++ b/interface/src/project/SettingsCustomization.tsx @@ -322,7 +322,7 @@ const SettingsCustomization: FC = () => { =enable/disable write action   - =include/excluded from MQTT and API outputs   + =include/exclude from MQTT and API outputs   =show/hide from Web Dashboard From ab6893adeb9fa2683353c889241830be9ce456ab Mon Sep 17 00:00:00 2001 From: tp1de Date: Sat, 28 May 2022 13:16:40 +0200 Subject: [PATCH 32/38] corrections nofrostmode --- src/devices/thermostat.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index ada2f557f..3a6b956d8 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -2489,7 +2489,7 @@ bool Thermostat::set_vacreducemode(const char * value, const int8_t id) { return true; } -// sets the thermostat nofrost mode for RC35 +// sets the thermostat nofrost mode for RC35, RC300/RC310 bool Thermostat::set_nofrostmode(const char * value, const int8_t id) { uint8_t hc_num = (id == -1) ? AUTO_HEATING_CIRCUIT : id; std::shared_ptr hc = heating_circuit(hc_num); @@ -2498,12 +2498,12 @@ bool Thermostat::set_nofrostmode(const char * value, const int8_t id) { } uint8_t set = 0xFF; if (model() == EMS_DEVICE_FLAG_RC300) { - if (Helpers::value2enum(value, set, FL_(enum_controlmode1))) { + if (Helpers::value2enum(value, set, FL_(enum_nofrostmode1))) { write_command(curve_typeids[hc->hc()], 5, set + 1, curve_typeids[hc->hc()]); return true; } } else { - if (Helpers::value2enum(value, set, FL_(enum_controlmode))) { + if (Helpers::value2enum(value, set, FL_(enum_nofrostmode))) { write_command(set_typeids[hc->hc()], EMS_OFFSET_RC35Set_nofrostmode, set, set_typeids[hc->hc()]); return true; } From 356390c92baead4f080a306594fb54bf549d7ac9 Mon Sep 17 00:00:00 2001 From: Proddy Date: Sat, 28 May 2022 15:27:08 +0200 Subject: [PATCH 33/38] fix standalone server for handling customizations --- mock-api/server.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mock-api/server.js b/mock-api/server.js index b6e57ff3f..3acbe9f8f 100644 --- a/mock-api/server.js +++ b/mock-api/server.js @@ -929,13 +929,13 @@ rest_server.post(EMSESP_DEVICEENTITIES_ENDPOINT, (req, res) => { }) function updateMask(entity, de, dd) { - const name = entity.slice(2) + const shortname = entity.slice(2) const new_mask = parseInt(entity.slice(0, 2), 16) - objIndex = de.findIndex((obj) => obj.s == name) + objIndex = de.findIndex((obj) => obj.id == shortname) if (objIndex !== -1) { de[objIndex].m = new_mask - const fullname = de[objIndex].id + const fullname = de[objIndex].n objIndex = dd.data.findIndex((obj) => obj.id.slice(2) == fullname) if (objIndex !== -1) { // see if the mask has changed @@ -947,7 +947,7 @@ function updateMask(entity, de, dd) { } } } else { - console.log("can't locate record for id " + id) + console.log("can't locate record for name " + shortname) } } From e4447ee1b9e19a4f77eb3a642936b3e6d89ae990 Mon Sep 17 00:00:00 2001 From: Proddy Date: Sat, 28 May 2022 20:23:16 +0200 Subject: [PATCH 34/38] improved icon toggling --- interface/src/project/OptionIcon.tsx | 39 +++++++ .../src/project/SettingsCustomization.tsx | 103 ++++++++++-------- mock-api/server.js | 2 +- src/emsdevice.cpp | 2 + 4 files changed, 100 insertions(+), 46 deletions(-) create mode 100644 interface/src/project/OptionIcon.tsx diff --git a/interface/src/project/OptionIcon.tsx b/interface/src/project/OptionIcon.tsx new file mode 100644 index 000000000..71be44969 --- /dev/null +++ b/interface/src/project/OptionIcon.tsx @@ -0,0 +1,39 @@ +import { FC } from 'react'; +import { SvgIconProps } from '@mui/material'; + +import EditOutlinedIcon from '@mui/icons-material/EditOutlined'; +import EditOffOutlinedIcon from '@mui/icons-material/EditOffOutlined'; + +import StarIcon from '@mui/icons-material/Star'; +import StarOutlineIcon from '@mui/icons-material/StarOutline'; + +import VisibilityOffOutlinedIcon from '@mui/icons-material/VisibilityOffOutlined'; +import VisibilityOutlinedIcon from '@mui/icons-material/VisibilityOutlined'; + +import CommentsDisabledOutlinedIcon from '@mui/icons-material/CommentsDisabledOutlined'; +import InsertCommentOutlinedIcon from '@mui/icons-material/InsertCommentOutlined'; + +type OptionType = 'readonly' | 'web_exclude' | 'api_mqtt_exclude' | 'favorite'; + +const OPTION_ICONS: { [type in OptionType]: [React.ComponentType, React.ComponentType] } = { + readonly: [EditOffOutlinedIcon, EditOutlinedIcon], + web_exclude: [VisibilityOffOutlinedIcon, VisibilityOutlinedIcon], + api_mqtt_exclude: [CommentsDisabledOutlinedIcon, InsertCommentOutlinedIcon], + favorite: [StarIcon, StarOutlineIcon] +}; + +interface OptionIconProps { + type: OptionType; + isSet: boolean; +} + +const OptionIcon: FC = ({ type, isSet }) => { + const Icon = OPTION_ICONS[type][isSet ? 0 : 1]; + return isSet ? ( + + ) : ( + + ); +}; + +export default OptionIcon; diff --git a/interface/src/project/SettingsCustomization.tsx b/interface/src/project/SettingsCustomization.tsx index d7b2d2f23..f1527a6dc 100644 --- a/interface/src/project/SettingsCustomization.tsx +++ b/interface/src/project/SettingsCustomization.tsx @@ -25,10 +25,12 @@ import { useSnackbar } from 'notistack'; import SaveIcon from '@mui/icons-material/Save'; import CancelIcon from '@mui/icons-material/Cancel'; -import EditOffOutlinedIcon from '@mui/icons-material/EditOffOutlined'; -import StarIcon from '@mui/icons-material/Star'; -import VisibilityOffOutlinedIcon from '@mui/icons-material/VisibilityOffOutlined'; -import CommentsDisabledOutlinedIcon from '@mui/icons-material/CommentsDisabledOutlined'; + +// import EditOffOutlinedIcon from '@mui/icons-material/EditOffOutlined'; +// import StarIcon from '@mui/icons-material/Star'; +// import VisibilityOffOutlinedIcon from '@mui/icons-material/VisibilityOffOutlined'; +// import CommentsDisabledOutlinedIcon from '@mui/icons-material/CommentsDisabledOutlined'; + import SettingsBackupRestoreIcon from '@mui/icons-material/SettingsBackupRestore'; import KeyboardArrowUpOutlinedIcon from '@mui/icons-material/KeyboardArrowUpOutlined'; import KeyboardArrowDownOutlinedIcon from '@mui/icons-material/KeyboardArrowDownOutlined'; @@ -36,6 +38,8 @@ import UnfoldMoreOutlinedIcon from '@mui/icons-material/UnfoldMoreOutlined'; import SearchIcon from '@mui/icons-material/Search'; import FilterListIcon from '@mui/icons-material/FilterList'; +import OptionIcon from './OptionIcon'; + import { ButtonRow, FormLoader, ValidatedTextField, SectionContent } from '../components'; import * as EMSESP from './api'; @@ -202,14 +206,12 @@ const SettingsCustomization: FC = () => { function formatName(de: DeviceEntity) { if (de.n === undefined || de.n === de.id) { return de.id; + } else if (de.n === '') { + return 'Command: ' + de.id; } return de.n + ' (' + de.id + ')'; } - function isCmd(de: DeviceEntity) { - return de.n === undefined; - } - const getMaskNumber = (newMask: string[]) => { var new_mask = 0; for (let entry of newMask) { @@ -317,14 +319,14 @@ const SettingsCustomization: FC = () => { Select a device and customize each of its entities using the options: - - =mark/unmark as a favorite   - - =enable/disable write action   - - =include/exclude from MQTT and API outputs   - - =show/hide from Web Dashboard + + =mark as a favorite   + + =disable write action   + + =exclude from MQTT and API outputs   + + =hide from Web Dashboard { }} /> - - : - + + + : + + { }} > - - - + - - - + - - - + - - - + @@ -428,9 +424,9 @@ const SettingsCustomization: FC = () => { color="inherit" onClick={() => maskDisabled(false)} > - set  - - + set all  + + @@ -443,9 +439,9 @@ const SettingsCustomization: FC = () => { color="inherit" onClick={() => maskDisabled(true)} > - unset  - - + set all  + + @@ -479,23 +475,40 @@ const SettingsCustomization: FC = () => { value={getMaskString(de.m)} onChange={(event, mask) => { de.m = getMaskNumber(mask); + if (de.n === '' && de.m & DeviceEntityMask.DV_READONLY) { + de.m = de.m | DeviceEntityMask.DV_WEB_EXCLUDE; + } if (de.m & DeviceEntityMask.DV_WEB_EXCLUDE) { de.m = de.m & ~DeviceEntityMask.DV_FAVORITE; } setMasks(['']); }} > - - + + - - + + - - + + - - + + diff --git a/mock-api/server.js b/mock-api/server.js index 3acbe9f8f..0802ddcce 100644 --- a/mock-api/server.js +++ b/mock-api/server.js @@ -630,7 +630,7 @@ const emsesp_deviceentities_1 = [ ] const emsesp_deviceentities_2 = [ - { u: 0, id: 'reset', m: 8, w: false }, + { u: 0, n: '', id: 'reset', m: 8, w: false }, { v: false, n: 'heating active', id: 'heatingactive', m: 8, w: false }, { v: false, n: 'tapwater active', id: 'tapwateractive', m: 4, w: false }, { v: 5, n: 'selected flow temperature', id: 'selflowtemp', m: 4, w: true }, diff --git a/src/emsdevice.cpp b/src/emsdevice.cpp index a46ffe89f..92561391a 100644 --- a/src/emsdevice.cpp +++ b/src/emsdevice.cpp @@ -850,6 +850,8 @@ void EMSdevice::generate_values_web_customization(JsonArray & output) { obj["n"] = name; } } + } else { + obj["n"] = ""; } obj["m"] = dv.state >> 4; // send back the mask state. We're only interested in the high nibble From c693ef63079b4016ea2f3ca1105d648774272a0d Mon Sep 17 00:00:00 2001 From: Proddy Date: Sun, 29 May 2022 13:57:54 +0200 Subject: [PATCH 35/38] update packages --- interface/package-lock.json | 83 ++++++++++++++++++------------------- interface/package.json | 4 +- mock-api/package-lock.json | 14 +++---- mock-api/package.json | 2 +- 4 files changed, 51 insertions(+), 52 deletions(-) diff --git a/interface/package-lock.json b/interface/package-lock.json index 1f1e0d019..ec5446a98 100644 --- a/interface/package-lock.json +++ b/interface/package-lock.json @@ -13,9 +13,9 @@ "@msgpack/msgpack": "^2.7.2", "@mui/icons-material": "^5.8.0", "@mui/material": "^5.8.1", - "@table-library/react-table-library": "^3.1.2", + "@table-library/react-table-library": "^3.1.4", "@types/lodash": "^4.14.182", - "@types/node": "^17.0.35", + "@types/node": "^17.0.36", "@types/react": "^18.0.9", "@types/react-dom": "^18.0.5", "@types/react-router-dom": "^5.3.3", @@ -3689,16 +3689,15 @@ } }, "node_modules/@table-library/react-table-library": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@table-library/react-table-library/-/react-table-library-3.1.2.tgz", - "integrity": "sha512-zfjIvcEP114KFh5WyZzbPQHtaxiSr0LHHgm+A8El6YG/SQ7D+i88RUdwiBu3uuKXTY7OV+5v/GESEiioZo150w==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@table-library/react-table-library/-/react-table-library-3.1.4.tgz", + "integrity": "sha512-6JgQJLWgkMkdVzB/gGU/7BuMRGhQkkbg150YXiq+2U2ICyV773JPW5oxE5QaQJZUsDGlcS1FuaK/UFJVLZWs4A==", "dependencies": { "clsx": "1.1.1", "react-virtualized-auto-sizer": "1.0.6", - "react-window": "1.8.6" + "react-window": "1.8.7" }, "peerDependencies": { - "@emotion/react": ">= 11", "react": ">=16.8.0", "react-dom": ">=16.8.0" } @@ -3715,22 +3714,6 @@ "react-dom": "^15.3.0 || ^16.0.0-alpha || ^17.0.0" } }, - "node_modules/@table-library/react-table-library/node_modules/react-window": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/react-window/-/react-window-1.8.6.tgz", - "integrity": "sha512-8VwEEYyjz6DCnGBsd+MgkD0KJ2/OXFULyDtorIiTz+QzwoP94tBoA7CnbtyXMm+cCeAUER5KJcPtWl9cpKbOBg==", - "dependencies": { - "@babel/runtime": "^7.0.0", - "memoize-one": ">=3.1.1 <6" - }, - "engines": { - "node": ">8.0.0" - }, - "peerDependencies": { - "react": "^15.0.0 || ^16.0.0 || ^17.0.0", - "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, "node_modules/@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", @@ -3930,9 +3913,9 @@ "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" }, "node_modules/@types/node": { - "version": "17.0.35", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.35.tgz", - "integrity": "sha512-vu1SrqBjbbZ3J6vwY17jBs8Sr/BKA+/a/WtjRG+whKg1iuLFOosq872EXS0eXWILdO36DHQQeku/ZcL6hz2fpg==" + "version": "17.0.36", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.36.tgz", + "integrity": "sha512-V3orv+ggDsWVHP99K3JlwtH20R7J4IhI1Kksgc+64q5VxgfRkQG8Ws3MFm/FZOKDYGy9feGFlZ70/HpCNe9QaA==" }, "node_modules/@types/parse-json": { "version": "4.0.0", @@ -15026,6 +15009,22 @@ "react-dom": ">=16.6.0" } }, + "node_modules/react-window": { + "version": "1.8.7", + "resolved": "https://registry.npmjs.org/react-window/-/react-window-1.8.7.tgz", + "integrity": "sha512-JHEZbPXBpKMmoNO1bNhoXOOLg/ujhL/BU4IqVU9r8eQPcy5KQnGHIHDRkJ0ns9IM5+Aq5LNwt3j8t3tIrePQzA==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "memoize-one": ">=3.1.1 <6" + }, + "engines": { + "node": ">8.0.0" + }, + "peerDependencies": { + "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", @@ -20452,13 +20451,13 @@ } }, "@table-library/react-table-library": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@table-library/react-table-library/-/react-table-library-3.1.2.tgz", - "integrity": "sha512-zfjIvcEP114KFh5WyZzbPQHtaxiSr0LHHgm+A8El6YG/SQ7D+i88RUdwiBu3uuKXTY7OV+5v/GESEiioZo150w==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@table-library/react-table-library/-/react-table-library-3.1.4.tgz", + "integrity": "sha512-6JgQJLWgkMkdVzB/gGU/7BuMRGhQkkbg150YXiq+2U2ICyV773JPW5oxE5QaQJZUsDGlcS1FuaK/UFJVLZWs4A==", "requires": { "clsx": "1.1.1", "react-virtualized-auto-sizer": "1.0.6", - "react-window": "1.8.6" + "react-window": "1.8.7" }, "dependencies": { "react-virtualized-auto-sizer": { @@ -20466,15 +20465,6 @@ "resolved": "https://registry.npmjs.org/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.6.tgz", "integrity": "sha512-7tQ0BmZqfVF6YYEWcIGuoR3OdYe8I/ZFbNclFlGOC3pMqunkYF/oL30NCjSGl9sMEb17AnzixDz98Kqc3N76HQ==", "requires": {} - }, - "react-window": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/react-window/-/react-window-1.8.6.tgz", - "integrity": "sha512-8VwEEYyjz6DCnGBsd+MgkD0KJ2/OXFULyDtorIiTz+QzwoP94tBoA7CnbtyXMm+cCeAUER5KJcPtWl9cpKbOBg==", - "requires": { - "@babel/runtime": "^7.0.0", - "memoize-one": ">=3.1.1 <6" - } } } }, @@ -20671,9 +20661,9 @@ "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" }, "@types/node": { - "version": "17.0.35", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.35.tgz", - "integrity": "sha512-vu1SrqBjbbZ3J6vwY17jBs8Sr/BKA+/a/WtjRG+whKg1iuLFOosq872EXS0eXWILdO36DHQQeku/ZcL6hz2fpg==" + "version": "17.0.36", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.36.tgz", + "integrity": "sha512-V3orv+ggDsWVHP99K3JlwtH20R7J4IhI1Kksgc+64q5VxgfRkQG8Ws3MFm/FZOKDYGy9feGFlZ70/HpCNe9QaA==" }, "@types/parse-json": { "version": "4.0.0", @@ -28628,6 +28618,15 @@ "prop-types": "^15.6.2" } }, + "react-window": { + "version": "1.8.7", + "resolved": "https://registry.npmjs.org/react-window/-/react-window-1.8.7.tgz", + "integrity": "sha512-JHEZbPXBpKMmoNO1bNhoXOOLg/ujhL/BU4IqVU9r8eQPcy5KQnGHIHDRkJ0ns9IM5+Aq5LNwt3j8t3tIrePQzA==", + "requires": { + "@babel/runtime": "^7.0.0", + "memoize-one": ">=3.1.1 <6" + } + }, "read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", diff --git a/interface/package.json b/interface/package.json index b4bf9d9c3..bfee5c32d 100644 --- a/interface/package.json +++ b/interface/package.json @@ -9,9 +9,9 @@ "@msgpack/msgpack": "^2.7.2", "@mui/icons-material": "^5.8.0", "@mui/material": "^5.8.1", - "@table-library/react-table-library": "^3.1.2", + "@table-library/react-table-library": "^3.1.4", "@types/lodash": "^4.14.182", - "@types/node": "^17.0.35", + "@types/node": "^17.0.36", "@types/react": "^18.0.9", "@types/react-dom": "^18.0.5", "@types/react-router-dom": "^5.3.3", diff --git a/mock-api/package-lock.json b/mock-api/package-lock.json index e7dd05f0a..5620b6cf0 100644 --- a/mock-api/package-lock.json +++ b/mock-api/package-lock.json @@ -14,7 +14,7 @@ "express": "^4.18.1", "express-sse": "^0.5.3", "nodemon": "^2.0.16", - "ws": "^8.6.0" + "ws": "^8.7.0" } }, "node_modules/@msgpack/msgpack": { @@ -1811,9 +1811,9 @@ } }, "node_modules/ws": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.6.0.tgz", - "integrity": "sha512-AzmM3aH3gk0aX7/rZLYvjdvZooofDu3fFOzGqcSnQ1tOcTWwhM/o+q++E8mAyVVIyUdajrkzWUGftaVSDLn1bw==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.7.0.tgz", + "integrity": "sha512-c2gsP0PRwcLFzUiA8Mkr37/MI7ilIlHQxaEAtd0uNMbVMoy8puJyafRlm0bV9MbGSabUPeLrRRaqIBcFcA2Pqg==", "engines": { "node": ">=10.0.0" }, @@ -3169,9 +3169,9 @@ } }, "ws": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.6.0.tgz", - "integrity": "sha512-AzmM3aH3gk0aX7/rZLYvjdvZooofDu3fFOzGqcSnQ1tOcTWwhM/o+q++E8mAyVVIyUdajrkzWUGftaVSDLn1bw==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.7.0.tgz", + "integrity": "sha512-c2gsP0PRwcLFzUiA8Mkr37/MI7ilIlHQxaEAtd0uNMbVMoy8puJyafRlm0bV9MbGSabUPeLrRRaqIBcFcA2Pqg==", "requires": {} }, "xdg-basedir": { diff --git a/mock-api/package.json b/mock-api/package.json index bdc44b1c3..b41cb5039 100644 --- a/mock-api/package.json +++ b/mock-api/package.json @@ -16,6 +16,6 @@ "express": "^4.18.1", "express-sse": "^0.5.3", "nodemon": "^2.0.16", - "ws": "^8.6.0" + "ws": "^8.7.0" } } From 3e7b743dfaa76b6dcf9842b516650dab93ddd511 Mon Sep 17 00:00:00 2001 From: Proddy Date: Sun, 29 May 2022 13:58:01 +0200 Subject: [PATCH 36/38] updated changelog for 3.4.1 --- CHANGELOG_LATEST.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index cae9e2969..8be0d7d92 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -12,5 +12,6 @@ - controller data in web-ui only for IVT [#522](https://github.com/emsesp/EMS-ESP32/issues/522) - rename hidden `climate` to a more explaining name [#523](https://github.com/emsesp/EMS-ESP32/issues/523) +- Minor changes to the Customizations web page [#527](https://github.com/emsesp/EMS-ESP32/pull/527) ## **BREAKING CHANGES:** From 435218888a698e38057dba4579fcff51141eb875 Mon Sep 17 00:00:00 2001 From: Proddy Date: Sun, 29 May 2022 14:36:13 +0200 Subject: [PATCH 37/38] #513 --- .github/workflows/sonar_check.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/sonar_check.yml b/.github/workflows/sonar_check.yml index c0ea0e1bb..b638df864 100644 --- a/.github/workflows/sonar_check.yml +++ b/.github/workflows/sonar_check.yml @@ -9,9 +9,10 @@ jobs: build: name: Build runs-on: ubuntu-latest + if: github.repository_owner == 'emsesp' + # if: github.repository == 'emsesp/EMS-ESP32' env: # https://binaries.sonarsource.com/?prefix=Distribution/sonar-scanner-cli/ - # SONAR_SCANNER_VERSION: 4.6.1.2450 SONAR_SCANNER_VERSION: 4.7.0.2747 SONAR_SERVER_URL: "https://sonarcloud.io" BUILD_WRAPPER_OUT_DIR: build_wrapper_output_directory From 072fe526ea153e159cefab3bc4c8c2e1b28b27e9 Mon Sep 17 00:00:00 2001 From: Proddy Date: Sun, 29 May 2022 16:19:55 +0200 Subject: [PATCH 38/38] 3.4.2b2 --- CHANGELOG.md | 12 ++++++++++++ CHANGELOG_LATEST.md | 14 ++++---------- src/version.h | 2 +- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 080b6687e..e2c8260d3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,18 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +# [3.4.1] May 29 2022 + +## Fixed + +- Fix memory leak in api [#524](https://github.com/emsesp/EMS-ESP32/issues/524) + +## Changed + +- Controller data in web-ui only for IVT [#522](https://github.com/emsesp/EMS-ESP32/issues/522) +- Rename hidden `climate` to a more explaining name [#523](https://github.com/emsesp/EMS-ESP32/issues/523) +- Minor changes to the Customizations web page [#527](https://github.com/emsesp/EMS-ESP32/pull/527) + # [3.4.0] May 23 2022 ## Added diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index 8be0d7d92..3ae33a8ad 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -1,17 +1,11 @@ # Changelog -## [3.4.1] +# [3.4.2] -### Added +## Added -### Fixed +## Fixed -- fix memory leak in api [#524](https://github.com/emsesp/EMS-ESP32/issues/524) - -### Changed - -- controller data in web-ui only for IVT [#522](https://github.com/emsesp/EMS-ESP32/issues/522) -- rename hidden `climate` to a more explaining name [#523](https://github.com/emsesp/EMS-ESP32/issues/523) -- Minor changes to the Customizations web page [#527](https://github.com/emsesp/EMS-ESP32/pull/527) +## Changed ## **BREAKING CHANGES:** diff --git a/src/version.h b/src/version.h index 46af4d0ea..e56f315d3 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define EMSESP_APP_VERSION "3.4.1b1" +#define EMSESP_APP_VERSION "3.4.2b1"