From cf28f69d0851c45824dcc8fb46723154c8a00938 Mon Sep 17 00:00:00 2001 From: Lukas Rieger <73471197+lukasrgr@users.noreply.github.com> Date: Fri, 24 Nov 2023 23:46:38 +0100 Subject: [PATCH] UI: refactor consumption history (#2218) * refactor consumption history * update chart to new genericChart standard phases and total popover, refactor to use two way binding --------- Co-authored-by: Stefan Feilmeier --- ui/.vscode/settings.json | 6 +- ui/angular.json | 5 + ui/package-lock.json | 2884 +++++------------ ui/src/app/app-routing.module.ts | 2 +- ui/src/app/edge/history/common/common.ts | 3 + .../history/common/consumption/Consumption.ts | 28 + .../common/consumption/chart/channels.spec.ts | 105 + .../consumption/chart/chart.constants.spec.ts | 17 + .../common/consumption/chart/chart.spec.ts | 89 + .../history/common/consumption/chart/chart.ts | 131 + .../history/common/consumption/flat/flat.html | 28 + .../history/common/consumption/flat/flat.ts | 61 + .../common/consumption/overview/overview.html | 5 + .../common/consumption/overview/overview.ts | 7 + .../history/common/energy/chart/chart.spec.ts | 16 +- .../history/common/grid/chart/chart.spec.ts | 4 +- .../consumptionchartoverview.component.html | 81 - .../consumptionchartoverview.component.ts | 56 - .../consumption/evcschart.component.ts | 116 - .../consumption/meterchart.component.ts | 120 - .../consumption/otherchart.component.ts | 152 - .../consumption/singlechart.component.ts | 222 -- .../consumption/totalchart.component.ts | 366 --- .../history/consumption/widget.component.html | 57 - .../history/consumption/widget.component.ts | 108 - .../app/edge/history/history.component.html | 2 +- ui/src/app/edge/history/history.module.ts | 14 - ui/src/app/edge/history/shared.ts | 2 +- .../consumption/modal/modal.constants.spec.ts | 5 +- .../common/consumption/modal/modal.spec.ts | 25 +- .../live/common/consumption/modal/modal.ts | 7 +- .../edge/live/common/grid/modal/modal.spec.ts | 8 +- .../common/storage/modal/modal.component.ts | 2 +- ui/src/app/shared/edge/edgeconfig.spec.ts | 301 +- ui/src/app/shared/service/utils.ts | 70 +- ui/src/assets/i18n/de.json | 2 +- 36 files changed, 1481 insertions(+), 3626 deletions(-) create mode 100644 ui/src/app/edge/history/common/consumption/Consumption.ts create mode 100644 ui/src/app/edge/history/common/consumption/chart/channels.spec.ts create mode 100644 ui/src/app/edge/history/common/consumption/chart/chart.constants.spec.ts create mode 100644 ui/src/app/edge/history/common/consumption/chart/chart.spec.ts create mode 100644 ui/src/app/edge/history/common/consumption/chart/chart.ts create mode 100644 ui/src/app/edge/history/common/consumption/flat/flat.html create mode 100644 ui/src/app/edge/history/common/consumption/flat/flat.ts create mode 100644 ui/src/app/edge/history/common/consumption/overview/overview.html create mode 100644 ui/src/app/edge/history/common/consumption/overview/overview.ts delete mode 100644 ui/src/app/edge/history/consumption/consumptionchartoverview/consumptionchartoverview.component.html delete mode 100644 ui/src/app/edge/history/consumption/consumptionchartoverview/consumptionchartoverview.component.ts delete mode 100644 ui/src/app/edge/history/consumption/evcschart.component.ts delete mode 100644 ui/src/app/edge/history/consumption/meterchart.component.ts delete mode 100644 ui/src/app/edge/history/consumption/otherchart.component.ts delete mode 100644 ui/src/app/edge/history/consumption/singlechart.component.ts delete mode 100644 ui/src/app/edge/history/consumption/totalchart.component.ts delete mode 100644 ui/src/app/edge/history/consumption/widget.component.html delete mode 100644 ui/src/app/edge/history/consumption/widget.component.ts diff --git a/ui/.vscode/settings.json b/ui/.vscode/settings.json index 532e17ab820..c73b531a797 100644 --- a/ui/.vscode/settings.json +++ b/ui/.vscode/settings.json @@ -18,5 +18,7 @@ "files.watcherExclude": { "**/.git/objects/**": true, "**/node_modules/**": true - } -} \ No newline at end of file + }, + "files.eol": "\n", + "files.insertFinalNewline": true +} diff --git a/ui/angular.json b/ui/angular.json index 5d950ca4654..2c19d7e9849 100644 --- a/ui/angular.json +++ b/ui/angular.json @@ -175,6 +175,11 @@ "tsConfig": "tsconfig.spec.json", "karmaConfig": "karma.conf.js", "scripts": [] + }, + "configurations": { + "local": { + "karmaConfig": "karma.conf.local.js" + } } } } diff --git a/ui/package-lock.json b/ui/package-lock.json index 9cc1a7f1c88..dbafc791ae6 100644 --- a/ui/package-lock.json +++ b/ui/package-lock.json @@ -572,18 +572,6 @@ "typescript": ">=4.8.2 <5.0" } }, - "node_modules/@angular/compiler-cli/node_modules/@babel/code-frame": { - "version": "7.22.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@angular/compiler-cli/node_modules/@babel/compat-data": { "version": "7.22.9", "dev": true, @@ -666,37 +654,6 @@ "semver": "bin/semver.js" } }, - "node_modules/@angular/compiler-cli/node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@angular/compiler-cli/node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@angular/compiler-cli/node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@angular/compiler-cli/node_modules/@babel/helper-module-imports": { "version": "7.22.15", "dev": true, @@ -748,22 +705,6 @@ "node": ">=6.9.0" } }, - "node_modules/@angular/compiler-cli/node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@angular/compiler-cli/node_modules/@babel/helper-validator-identifier": { - "version": "7.22.15", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@angular/compiler-cli/node_modules/@babel/helper-validator-option": { "version": "7.22.15", "dev": true, @@ -785,30 +726,6 @@ "node": ">=6.9.0" } }, - "node_modules/@angular/compiler-cli/node_modules/@babel/highlight": { - "version": "7.22.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@angular/compiler-cli/node_modules/@babel/parser": { - "version": "7.22.15", - "dev": true, - "license": "MIT", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@angular/compiler-cli/node_modules/@babel/template": { "version": "7.22.15", "dev": true, @@ -822,39 +739,6 @@ "node": ">=6.9.0" } }, - "node_modules/@angular/compiler-cli/node_modules/@babel/traverse": { - "version": "7.22.15", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.22.15", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@angular/compiler-cli/node_modules/@babel/types": { - "version": "7.22.15", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.15", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@angular/compiler-cli/node_modules/@jridgewell/gen-mapping": { "version": "0.3.3", "dev": true, @@ -912,11 +796,6 @@ "node": ">=6.9.0" } }, - "node_modules/@angular/compiler-cli/node_modules/js-tokens": { - "version": "4.0.0", - "dev": true, - "license": "MIT" - }, "node_modules/@angular/compiler-cli/node_modules/json5": { "version": "2.2.3", "dev": true, @@ -947,14 +826,6 @@ "node": ">=12" } }, - "node_modules/@angular/compiler-cli/node_modules/to-fast-properties": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/@angular/compiler-cli/node_modules/yallist": { "version": "3.1.1", "dev": true, @@ -1072,6 +943,19 @@ "dev": true, "license": "Apache-2.0" }, + "node_modules/@babel/code-frame": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.4.tgz", + "integrity": "sha512-r1IONyb6Ia+jYR2vvIDhdWdlTGhqbBoFqLTQidzZ4kepUFH15ejXvFHxCVbtl7BOXIudsIubf4E81xeA3h3IXA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/core": { "version": "7.20.12", "dev": true, @@ -1101,18 +985,6 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/@babel/code-frame": { - "version": "7.22.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/core/node_modules/@babel/compat-data": { "version": "7.22.9", "dev": true, @@ -1150,37 +1022,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/core/node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core/node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core/node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/core/node_modules/@babel/helper-module-imports": { "version": "7.22.15", "dev": true, @@ -1232,22 +1073,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/core/node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core/node_modules/@babel/helper-validator-identifier": { - "version": "7.22.15", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/core/node_modules/@babel/helper-validator-option": { "version": "7.22.15", "dev": true, @@ -1269,30 +1094,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/core/node_modules/@babel/highlight": { - "version": "7.22.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core/node_modules/@babel/parser": { - "version": "7.22.15", - "dev": true, - "license": "MIT", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@babel/core/node_modules/@babel/template": { "version": "7.22.15", "dev": true, @@ -1306,39 +1107,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/core/node_modules/@babel/traverse": { - "version": "7.22.15", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.22.15", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core/node_modules/@babel/types": { - "version": "7.22.15", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.15", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/core/node_modules/@jridgewell/gen-mapping": { "version": "0.3.3", "dev": true, @@ -1396,11 +1164,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/core/node_modules/js-tokens": { - "version": "4.0.0", - "dev": true, - "license": "MIT" - }, "node_modules/@babel/core/node_modules/json5": { "version": "2.2.3", "dev": true, @@ -1428,14 +1191,6 @@ "semver": "bin/semver.js" } }, - "node_modules/@babel/core/node_modules/to-fast-properties": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/core/node_modules/yallist": { "version": "3.1.1", "dev": true, @@ -1454,105 +1209,31 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/generator/node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/node_modules/@babel/helper-validator-identifier": { - "version": "7.22.15", + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", "dev": true, "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, "engines": { - "node": ">=6.9.0" + "node": ">=6.0.0" } }, - "node_modules/@babel/generator/node_modules/@babel/types": { - "version": "7.22.15", + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.18.6", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.15", - "to-fast-properties": "^2.0.0" + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/generator/node_modules/to-fast-properties": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure/node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure/node_modules/@babel/helper-validator-identifier": { - "version": "7.22.15", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure/node_modules/@babel/types": { - "version": "7.22.15", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.15", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure/node_modules/to-fast-properties": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { + "node_modules/@babel/helper-define-polyfill-provider": { "version": "0.3.3", "dev": true, "license": "MIT", @@ -1659,108 +1340,131 @@ "dev": true, "license": "ISC" }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-split-export-declaration/node_modules/@babel/helper-string-parser": { - "version": "7.22.5", + "node_modules/@babel/helper-function-name/node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, - "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-split-export-declaration/node_modules/@babel/helper-validator-identifier": { - "version": "7.22.15", + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, - "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-split-export-declaration/node_modules/@babel/types": { - "version": "7.22.15", + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.15", - "to-fast-properties": "^2.0.0" + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-split-export-declaration/node_modules/to-fast-properties": { - "version": "2.0.0", + "node_modules/@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", "dev": true, - "license": "MIT", "engines": { - "node": ">=4" + "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-async-generator-functions/node_modules/@babel/code-frame": { - "version": "7.22.13", + "node_modules/@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-proposal-async-generator-functions/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", + "node_modules/@babel/parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.4.tgz", + "integrity": "sha512-vf3Xna6UEprW+7t6EtOmFpHNAuxw3xqPZghy+brsnusscJRW5BMUzzHZc5ICjULee81WeUV2jjakG09MDglJXQ==", "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" + "bin": { + "parser": "bin/babel-parser.js" }, "engines": { - "node": ">=6.9.0" + "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-proposal-async-generator-functions/node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.7", "dev": true, "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-async-generator-functions/node_modules/@babel/helper-function-name": { + "node_modules/@babel/plugin-proposal-async-generator-functions/node_modules/@babel/helper-annotate-as-pure": { "version": "7.22.5", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.22.5", "@babel/types": "^7.22.5" }, "engines": { @@ -1791,22 +1495,6 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-proposal-async-generator-functions/node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions/node_modules/@babel/helper-validator-identifier": { - "version": "7.22.15", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-proposal-async-generator-functions/node_modules/@babel/helper-wrap-function": { "version": "7.22.10", "dev": true, @@ -1820,30 +1508,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-proposal-async-generator-functions/node_modules/@babel/highlight": { - "version": "7.22.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions/node_modules/@babel/parser": { - "version": "7.22.15", - "dev": true, - "license": "MIT", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@babel/plugin-proposal-async-generator-functions/node_modules/@babel/template": { "version": "7.22.15", "dev": true, @@ -1857,32 +1521,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-proposal-async-generator-functions/node_modules/@babel/types": { - "version": "7.22.15", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.15", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions/node_modules/js-tokens": { - "version": "4.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/plugin-proposal-async-generator-functions/node_modules/to-fast-properties": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/plugin-proposal-class-properties": { "version": "7.18.6", "dev": true, @@ -1898,18 +1536,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/code-frame": { - "version": "7.22.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-annotate-as-pure": { "version": "7.22.5", "dev": true, @@ -1943,26 +1569,6 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-member-expression-to-functions": { "version": "7.22.15", "dev": true, @@ -2031,141 +1637,62 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-string-parser": { - "version": "7.22.5", + "node_modules/@babel/plugin-proposal-class-properties/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", "dev": true, "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-validator-identifier": { - "version": "7.22.15", + "node_modules/@babel/plugin-proposal-dynamic-import/node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/highlight": { - "version": "7.22.13", + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/parser": { - "version": "7.22.15", + "node_modules/@babel/plugin-proposal-export-namespace-from/node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", "dev": true, "license": "MIT", - "bin": { - "parser": "bin/babel-parser.js" - }, "engines": { - "node": ">=6.0.0" + "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/template": { - "version": "7.22.15", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/types": { - "version": "7.22.15", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.15", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties/node_modules/js-tokens": { - "version": "4.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/plugin-proposal-class-properties/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/plugin-proposal-class-properties/node_modules/to-fast-properties": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import/node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from/node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.18.6", + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.18.6", "dev": true, "license": "MIT", "dependencies": { @@ -2271,18 +1798,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-private-methods/node_modules/@babel/code-frame": { - "version": "7.22.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-proposal-private-methods/node_modules/@babel/helper-annotate-as-pure": { "version": "7.22.5", "dev": true, @@ -2316,26 +1831,6 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-proposal-private-methods/node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods/node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-proposal-private-methods/node_modules/@babel/helper-member-expression-to-functions": { "version": "7.22.15", "dev": true, @@ -2404,77 +1899,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-proposal-private-methods/node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods/node_modules/@babel/helper-validator-identifier": { - "version": "7.22.15", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods/node_modules/@babel/highlight": { - "version": "7.22.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods/node_modules/@babel/parser": { - "version": "7.22.15", - "dev": true, - "license": "MIT", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods/node_modules/@babel/template": { - "version": "7.22.15", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods/node_modules/@babel/types": { - "version": "7.22.15", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.15", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods/node_modules/js-tokens": { - "version": "4.0.0", - "dev": true, - "license": "MIT" - }, "node_modules/@babel/plugin-proposal-private-methods/node_modules/semver": { "version": "6.3.1", "dev": true, @@ -2483,14 +1907,6 @@ "semver": "bin/semver.js" } }, - "node_modules/@babel/plugin-proposal-private-methods/node_modules/to-fast-properties": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/plugin-proposal-unicode-property-regex": { "version": "7.18.6", "dev": true, @@ -2541,35 +1957,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-proposal-unicode-property-regex/node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex/node_modules/@babel/helper-validator-identifier": { - "version": "7.22.15", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex/node_modules/@babel/types": { - "version": "7.22.15", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.15", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-proposal-unicode-property-regex/node_modules/regenerate-unicode-properties": { "version": "10.1.1", "dev": true, @@ -2605,14 +1992,6 @@ "semver": "bin/semver.js" } }, - "node_modules/@babel/plugin-proposal-unicode-property-regex/node_modules/to-fast-properties": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", "dev": true, @@ -2904,18 +2283,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-async-to-generator/node_modules/@babel/code-frame": { - "version": "7.22.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-async-to-generator/node_modules/@babel/helper-annotate-as-pure": { "version": "7.22.5", "dev": true, @@ -2927,26 +2294,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-async-to-generator/node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator/node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-async-to-generator/node_modules/@babel/helper-module-imports": { "version": "7.22.15", "dev": true, @@ -2982,22 +2329,6 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-transform-async-to-generator/node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator/node_modules/@babel/helper-validator-identifier": { - "version": "7.22.15", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-async-to-generator/node_modules/@babel/helper-wrap-function": { "version": "7.22.10", "dev": true, @@ -3011,32 +2342,8 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-async-to-generator/node_modules/@babel/highlight": { - "version": "7.22.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator/node_modules/@babel/parser": { - "version": "7.22.15", - "dev": true, - "license": "MIT", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator/node_modules/@babel/template": { - "version": "7.22.15", + "node_modules/@babel/plugin-transform-async-to-generator/node_modules/@babel/template": { + "version": "7.22.15", "dev": true, "license": "MIT", "dependencies": { @@ -3048,32 +2355,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-async-to-generator/node_modules/@babel/types": { - "version": "7.22.15", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.15", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator/node_modules/js-tokens": { - "version": "4.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/plugin-transform-async-to-generator/node_modules/to-fast-properties": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/plugin-transform-optional-chaining": { "version": "7.22.15", "dev": true, @@ -3109,43 +2390,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-optional-chaining/node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining/node_modules/@babel/helper-validator-identifier": { - "version": "7.22.15", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining/node_modules/@babel/types": { - "version": "7.22.15", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.15", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining/node_modules/to-fast-properties": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/plugin-transform-runtime": { "version": "7.19.6", "dev": true, @@ -3184,35 +2428,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-runtime/node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/@babel/helper-validator-identifier": { - "version": "7.22.15", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/@babel/types": { - "version": "7.22.15", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.15", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { "version": "6.3.1", "dev": true, @@ -3221,14 +2436,6 @@ "semver": "bin/semver.js" } }, - "node_modules/@babel/plugin-transform-runtime/node_modules/to-fast-properties": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/preset-env": { "version": "7.20.2", "dev": true, @@ -3317,18 +2524,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-env/node_modules/@babel/code-frame": { - "version": "7.22.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/preset-env/node_modules/@babel/compat-data": { "version": "7.22.9", "dev": true, @@ -3412,37 +2607,6 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/preset-env/node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/preset-env/node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/preset-env/node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/preset-env/node_modules/@babel/helper-member-expression-to-functions": { "version": "7.22.15", "dev": true, @@ -3551,22 +2715,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/preset-env/node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/preset-env/node_modules/@babel/helper-validator-identifier": { - "version": "7.22.15", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/preset-env/node_modules/@babel/helper-validator-option": { "version": "7.22.15", "dev": true, @@ -3575,30 +2723,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/preset-env/node_modules/@babel/highlight": { - "version": "7.22.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/preset-env/node_modules/@babel/parser": { - "version": "7.22.15", - "dev": true, - "license": "MIT", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@babel/preset-env/node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.22.15", "dev": true, @@ -4212,19 +3336,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/preset-env/node_modules/@babel/types": { - "version": "7.22.15", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.15", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/preset-env/node_modules/browserslist": { "version": "4.21.10", "dev": true, @@ -4268,11 +3379,6 @@ "url": "https://opencollective.com/core-js" } }, - "node_modules/@babel/preset-env/node_modules/js-tokens": { - "version": "4.0.0", - "dev": true, - "license": "MIT" - }, "node_modules/@babel/preset-env/node_modules/lru-cache": { "version": "5.1.1", "dev": true, @@ -4324,14 +3430,6 @@ "semver": "bin/semver.js" } }, - "node_modules/@babel/preset-env/node_modules/to-fast-properties": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/preset-env/node_modules/yallist": { "version": "3.1.1", "dev": true, @@ -4366,84 +3464,82 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/template/node_modules/@babel/code-frame": { - "version": "7.22.13", + "node_modules/@babel/traverse": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.4.tgz", + "integrity": "sha512-IYM8wSUwunWTB6tFC2dkKZhxbIjHoWemdK+3f8/wq8aKhbUscxD5MX72ubd90fxvFknaLPeGw5ycU84V1obHJg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" + "@babel/code-frame": "^7.23.4", + "@babel/generator": "^7.23.4", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.4", + "@babel/types": "^7.23.4", + "debug": "^4.1.0", + "globals": "^11.1.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/template/node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template/node_modules/@babel/helper-validator-identifier": { - "version": "7.22.15", + "node_modules/@babel/traverse/node_modules/@babel/generator": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.4.tgz", + "integrity": "sha512-esuS49Cga3HcThFNebGhlgsrVLkvhqvYDTzgjfFFlHJcIfLe5jFmRRfCQ1KuBfc4Jrtn3ndLgKWAKjBE+IraYQ==", "dev": true, - "license": "MIT", + "dependencies": { + "@babel/types": "^7.23.4", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/template/node_modules/@babel/highlight": { - "version": "7.22.13", + "node_modules/@babel/traverse/node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/template/node_modules/@babel/parser": { - "version": "7.22.15", + "node_modules/@babel/traverse/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dev": true, - "license": "MIT", - "bin": { - "parser": "bin/babel-parser.js" + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { "node": ">=6.0.0" } }, - "node_modules/@babel/template/node_modules/@babel/types": { - "version": "7.22.15", + "node_modules/@babel/types": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.4.tgz", + "integrity": "sha512-7uIFwVYpoplT5jp/kVv6EF93VaJ8H+Yn5IczYiaAi98ajzjfoZfslet/e0sLh+wVBjb2qqIut1b0S26VSafsSQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.15", + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/template/node_modules/js-tokens": { - "version": "4.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/template/node_modules/to-fast-properties": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/@colors/colors": { "version": "1.5.0", "dev": true, @@ -4580,11 +3676,6 @@ "dev": true, "license": "Python-2.0" }, - "node_modules/@eslint/eslintrc/node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "13.21.0", "dev": true, @@ -4610,19 +3701,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@eslint/eslintrc/node_modules/punycode": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/@eslint/eslintrc/node_modules/type-fest": { "version": "0.20.2", "dev": true, @@ -4634,14 +3712,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@eslint/eslintrc/node_modules/uri-js": { - "version": "4.4.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, "node_modules/@eslint/js": { "version": "8.52.0", "dev": true, @@ -4789,14 +3859,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@ionic/angular-toolkit/node_modules/punycode": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/@ionic/angular-toolkit/node_modules/require-from-string": { "version": "2.0.2", "dev": true, @@ -4805,14 +3867,6 @@ "node": ">=0.10.0" } }, - "node_modules/@ionic/angular-toolkit/node_modules/uri-js": { - "version": "4.4.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, "node_modules/@ionic/core": { "version": "6.7.5", "license": "MIT", @@ -5079,10 +4133,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@ngx-formly/schematics/node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "license": "MIT" - }, "node_modules/@ngx-formly/schematics/node_modules/json-schema-traverse": { "version": "1.0.0", "license": "MIT" @@ -5098,13 +4148,6 @@ "sourcemap-codec": "^1.4.4" } }, - "node_modules/@ngx-formly/schematics/node_modules/punycode": { - "version": "2.3.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/@ngx-formly/schematics/node_modules/require-from-string": { "version": "2.0.2", "license": "MIT", @@ -5123,13 +4166,6 @@ "version": "1.4.8", "license": "MIT" }, - "node_modules/@ngx-formly/schematics/node_modules/uri-js": { - "version": "4.4.1", - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, "node_modules/@ngx-translate/core": { "version": "14.0.0", "license": "MIT", @@ -5868,6 +4904,12 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/selenium-webdriver": { + "version": "3.0.26", + "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.26.tgz", + "integrity": "sha512-dyIGFKXfUFiwkMfNGn1+F6b80ZjR3uSYv1j6xVJSDlft5waZ2cwkHW4e7zNzvq7hiEackcgvBpmnXZrI1GltPg==", + "dev": true + }, "node_modules/@types/send": { "version": "0.17.1", "dev": true, @@ -6644,25 +5686,6 @@ "node": ">= 0.6" } }, - "node_modules/accepts/node_modules/mime-db": { - "version": "1.52.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-types": { - "version": "2.1.35", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/acorn": { "version": "8.11.2", "dev": true, @@ -6812,13 +5835,6 @@ "version": "1.0.0", "license": "MIT" }, - "node_modules/ajv/node_modules/punycode": { - "version": "2.3.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/ajv/node_modules/require-from-string": { "version": "2.0.2", "license": "MIT", @@ -6826,13 +5842,6 @@ "node": ">=0.10.0" } }, - "node_modules/ajv/node_modules/uri-js": { - "version": "4.4.1", - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, "node_modules/angular-mydatepicker": { "version": "0.11.5", "license": "MIT", @@ -6938,25 +5947,6 @@ "node": ">= 6" } }, - "node_modules/are-we-there-yet/node_modules/safe-buffer": { - "version": "5.2.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/are-we-there-yet/node_modules/string_decoder": { "version": "1.3.0", "dev": true, @@ -8490,29 +7480,27 @@ }, "node_modules/asn1": { "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", "dev": true, - "license": "MIT", "dependencies": { "safer-buffer": "~2.1.0" } }, - "node_modules/asn1/node_modules/safer-buffer": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, "node_modules/assert-plus": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8" } }, "node_modules/asynckit": { "version": "0.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true }, "node_modules/autoprefixer": { "version": "10.4.13", @@ -8582,6 +7570,12 @@ "node": "*" } }, + "node_modules/aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "dev": true + }, "node_modules/axobject-query": { "version": "3.1.1", "dev": true, @@ -9105,17 +8099,13 @@ }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "tweetnacl": "^0.14.3" } }, - "node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { - "version": "0.14.5", - "dev": true, - "license": "Unlicense" - }, "node_modules/big.js": { "version": "5.2.2", "dev": true, @@ -9157,24 +8147,6 @@ "node": ">= 6" } }, - "node_modules/bl/node_modules/safe-buffer": { - "version": "5.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/bl/node_modules/string_decoder": { "version": "1.3.0", "license": "MIT", @@ -9286,25 +8258,6 @@ "node": ">= 0.6" } }, - "node_modules/body-parser/node_modules/mime-db": { - "version": "1.52.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/body-parser/node_modules/mime-types": { - "version": "2.1.35", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", "dev": true, @@ -9335,11 +8288,6 @@ "node": ">= 0.8" } }, - "node_modules/body-parser/node_modules/safer-buffer": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, "node_modules/body-parser/node_modules/setprototypeof": { "version": "1.2.0", "dev": true, @@ -10144,14 +9092,6 @@ "node": ">= 0.6" } }, - "node_modules/compressible/node_modules/mime-db": { - "version": "1.52.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/compression": { "version": "1.7.4", "dev": true, @@ -10319,25 +9259,6 @@ "node": ">= 0.6" } }, - "node_modules/content-disposition/node_modules/safe-buffer": { - "version": "5.2.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/cookie": { "version": "0.4.2", "dev": true, @@ -10492,25 +9413,6 @@ "safe-buffer": "^5.1.0" } }, - "node_modules/copy-webpack-plugin/node_modules/safe-buffer": { - "version": "5.2.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/copy-webpack-plugin/node_modules/schema-utils": { "version": "4.2.0", "dev": true, @@ -10550,8 +9452,9 @@ }, "node_modules/core-util-is": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true }, "node_modules/cors": { "version": "2.8.5", @@ -11041,10 +9944,6 @@ "version": "1.3.3", "license": "BSD-3-Clause" }, - "node_modules/d3-dsv/node_modules/safer-buffer": { - "version": "2.1.2", - "license": "MIT" - }, "node_modules/d3-ease": { "version": "3.0.1", "license": "BSD-3-Clause", @@ -11238,8 +10137,9 @@ }, "node_modules/dashdash": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", "dev": true, - "license": "MIT", "dependencies": { "assert-plus": "^1.0.0" }, @@ -11550,11 +10450,6 @@ "void-elements": "^2.0.0" } }, - "node_modules/dom-serialize/node_modules/extend": { - "version": "3.0.2", - "dev": true, - "license": "MIT" - }, "node_modules/dom-serialize/node_modules/void-elements": { "version": "2.0.1", "dev": true, @@ -11621,23 +10516,14 @@ }, "node_modules/ecc-jsbn": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", "dev": true, - "license": "MIT", "dependencies": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" } }, - "node_modules/ecc-jsbn/node_modules/jsbn": { - "version": "0.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/ecc-jsbn/node_modules/safer-buffer": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, "node_modules/ee-first": { "version": "1.1.1", "dev": true, @@ -11690,12 +10576,6 @@ "node": ">=0.10.0" } }, - "node_modules/encoding/node_modules/safer-buffer": { - "version": "2.1.2", - "dev": true, - "license": "MIT", - "optional": true - }, "node_modules/ent": { "version": "2.2.0", "dev": true, @@ -12280,11 +11160,6 @@ "node": ">=4.0" } }, - "node_modules/eslint/node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, "node_modules/eslint/node_modules/find-up": { "version": "5.0.0", "dev": true, @@ -12352,19 +11227,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/eslint/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint/node_modules/punycode": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/eslint/node_modules/strip-ansi": { "version": "6.0.1", "dev": true, @@ -12398,14 +11260,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/uri-js": { - "version": "4.4.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, "node_modules/espree": { "version": "9.6.1", "dev": true, @@ -12688,25 +11542,6 @@ "node": ">= 0.6" } }, - "node_modules/express/node_modules/mime-db": { - "version": "1.52.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/mime-types": { - "version": "2.1.35", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/express/node_modules/ms": { "version": "2.0.0", "dev": true, @@ -12739,27 +11574,8 @@ "node": ">= 0.6" } }, - "node_modules/express/node_modules/safe-buffer": { - "version": "5.2.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/express/node_modules/setprototypeof": { - "version": "1.2.0", + "node_modules/express/node_modules/setprototypeof": { + "version": "1.2.0", "dev": true, "license": "ISC" }, @@ -12815,10 +11631,30 @@ "node": ">= 0.8" } }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "license": "MIT" }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, "node_modules/faye-websocket": { "version": "0.11.4", "dev": true, @@ -12991,6 +11827,29 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, "node_modules/forwarded": { "version": "0.2.0", "dev": true, @@ -13131,6 +11990,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, "node_modules/glob": { "version": "7.2.3", "dev": true, @@ -13348,6 +12216,45 @@ "dev": true, "license": "MIT" }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dev": true, + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/har-validator/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/has": { "version": "1.0.3", "dev": true, @@ -13613,6 +12520,21 @@ "dev": true, "license": "MIT" }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, "node_modules/https-proxy-agent": { "version": "5.0.1", "dev": true, @@ -13881,14 +12803,6 @@ "dev": true, "license": "ISC" }, - "node_modules/inquirer/node_modules/os-tmpdir": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/inquirer/node_modules/run-async": { "version": "2.4.1", "dev": true, @@ -13905,11 +12819,6 @@ "tslib": "^2.1.0" } }, - "node_modules/inquirer/node_modules/safer-buffer": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, "node_modules/inquirer/node_modules/string-width": { "version": "4.2.3", "dev": true, @@ -14188,6 +13097,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, "node_modules/is-weakmap": { "version": "2.0.1", "dev": true, @@ -14269,6 +13184,12 @@ "node": ">=0.10.0" } }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", "dev": true, @@ -14292,17 +13213,6 @@ "node": ">=8" } }, - "node_modules/istanbul-lib-instrument/node_modules/@babel/parser": { - "version": "7.22.15", - "dev": true, - "license": "MIT", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/istanbul-lib-instrument/node_modules/semver": { "version": "6.3.1", "dev": true, @@ -14408,6 +13318,12 @@ "colors": "1.4.0" } }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, "node_modules/js-yaml": { "version": "3.14.1", "dev": true, @@ -14420,6 +13336,12 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, "node_modules/jsdoc-type-pratt-parser": { "version": "4.0.0", "dev": true, @@ -14444,11 +13366,29 @@ "dev": true, "license": "MIT" }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "dev": true, "license": "MIT" }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, "node_modules/json5": { "version": "1.0.2", "dev": true, @@ -14480,6 +13420,21 @@ ], "license": "MIT" }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, "node_modules/jszip": { "version": "3.10.1", "dev": true, @@ -14998,25 +13953,6 @@ "node": ">=4.0.0" } }, - "node_modules/karma/node_modules/mime-db": { - "version": "1.52.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/karma/node_modules/mime-types": { - "version": "2.1.35", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/karma/node_modules/minimist": { "version": "1.2.8", "dev": true, @@ -15100,11 +14036,6 @@ "dev": true, "license": "MIT" }, - "node_modules/karma/node_modules/safer-buffer": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, "node_modules/karma/node_modules/setprototypeof": { "version": "1.2.0", "dev": true, @@ -15554,6 +14485,27 @@ "node": ">= 0.6" } }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/mini-css-extract-plugin": { "version": "2.7.2", "dev": true, @@ -15831,18 +14783,6 @@ "node": ">=0.10.0" } }, - "node_modules/needle/node_modules/safer-buffer": { - "version": "2.1.2", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/needle/node_modules/sax": { - "version": "1.2.4", - "dev": true, - "license": "ISC", - "optional": true - }, "node_modules/negotiator": { "version": "0.6.3", "dev": true, @@ -16118,6 +15058,15 @@ "dev": true, "license": "ISC" }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/object-assign": { "version": "4.1.1", "dev": true, @@ -16773,6 +15722,15 @@ "defaults": "^1.0.3" } }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/p-locate": { "version": "5.0.0", "dev": true, @@ -17173,44 +16131,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parse-json/node_modules/@babel/code-frame": { - "version": "7.22.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/parse-json/node_modules/@babel/helper-validator-identifier": { - "version": "7.22.15", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/parse-json/node_modules/@babel/highlight": { - "version": "7.22.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/parse-json/node_modules/js-tokens": { - "version": "4.0.0", - "dev": true, - "license": "MIT" - }, "node_modules/parse-json/node_modules/json-parse-even-better-errors": { "version": "2.3.1", "dev": true, @@ -17305,6 +16225,12 @@ "dev": true, "license": "MIT" }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true + }, "node_modules/pify": { "version": "2.3.0", "dev": true, @@ -17604,11 +16530,6 @@ "node": ">=10.13.x" } }, - "node_modules/protractor/node_modules/@types/selenium-webdriver": { - "version": "3.0.23", - "dev": true, - "license": "MIT" - }, "node_modules/protractor/node_modules/agent-base": { "version": "4.3.0", "dev": true, @@ -17771,14 +16692,6 @@ "node": ">= 6.9.x" } }, - "node_modules/protractor/node_modules/os-tmpdir": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/protractor/node_modules/q": { "version": "1.4.1", "dev": true, @@ -17801,17 +16714,6 @@ "dev": true, "license": "ISC" }, - "node_modules/protractor/node_modules/rimraf": { - "version": "2.7.1", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, "node_modules/protractor/node_modules/saucelabs": { "version": "1.5.0", "dev": true, @@ -17822,25 +16724,6 @@ "node": "*" } }, - "node_modules/protractor/node_modules/sax": { - "version": "1.2.4", - "dev": true, - "license": "ISC" - }, - "node_modules/protractor/node_modules/selenium-webdriver": { - "version": "3.6.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "jszip": "^3.1.3", - "rimraf": "^2.5.4", - "tmp": "0.0.30", - "xml2js": "^0.4.17" - }, - "engines": { - "node": ">= 6.9.0" - } - }, "node_modules/protractor/node_modules/set-blocking": { "version": "2.0.0", "dev": true, @@ -17913,29 +16796,6 @@ "node": ">=0.8.0" } }, - "node_modules/protractor/node_modules/tmp": { - "version": "0.0.30", - "dev": true, - "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.1" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/protractor/node_modules/webdriver-js-extender": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/selenium-webdriver": "^3.0.0", - "selenium-webdriver": "^3.0.1" - }, - "engines": { - "node": ">=6.9.x" - } - }, "node_modules/protractor/node_modules/which-module": { "version": "2.0.1", "dev": true, @@ -17987,26 +16847,6 @@ "node": ">=8" } }, - "node_modules/protractor/node_modules/xml2js": { - "version": "0.4.23", - "dev": true, - "license": "MIT", - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/protractor/node_modules/xmlbuilder": { - "version": "11.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.0" - } - }, "node_modules/protractor/node_modules/y18n": { "version": "4.0.3", "dev": true, @@ -18071,6 +16911,20 @@ "license": "MIT", "optional": true }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, "node_modules/qs": { "version": "6.11.0", "dev": true, @@ -18177,6 +17031,57 @@ "jsesc": "bin/jsesc" } }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/request/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, "node_modules/resolve": { "version": "1.22.1", "dev": true, @@ -18344,6 +17249,25 @@ "dev": true, "license": "MIT" }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/safe-regex-test": { "version": "1.0.0", "dev": true, @@ -18399,6 +17323,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, "node_modules/sass": { "version": "1.58.1", "dev": true, @@ -18478,11 +17407,44 @@ "node": ">=0.10.0" } }, + "node_modules/sax": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==", + "dev": true + }, "node_modules/select-hose": { "version": "2.0.0", "dev": true, "license": "MIT" }, + "node_modules/selenium-webdriver": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz", + "integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==", + "dev": true, + "dependencies": { + "jszip": "^3.1.3", + "rimraf": "^2.5.4", + "tmp": "0.0.30", + "xml2js": "^0.4.17" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "node_modules/selenium-webdriver/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, "node_modules/semver": { "version": "7.5.3", "dev": true, @@ -18672,25 +17634,6 @@ "dev": true, "license": "ISC" }, - "node_modules/serve-index/node_modules/mime-db": { - "version": "1.52.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/mime-types": { - "version": "2.1.35", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/serve-index/node_modules/ms": { "version": "2.0.0", "dev": true, @@ -18888,11 +17831,6 @@ "node": ">=0.10.0" } }, - "node_modules/source-map-loader/node_modules/safer-buffer": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, "node_modules/source-map-loader/node_modules/source-map-js": { "version": "1.0.2", "dev": true, @@ -18997,25 +17935,6 @@ "node": ">= 6" } }, - "node_modules/spdy-transport/node_modules/safe-buffer": { - "version": "5.2.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/spdy-transport/node_modules/string_decoder": { "version": "1.3.0", "dev": true, @@ -19029,6 +17948,31 @@ "dev": true, "license": "MIT" }, + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "dev": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/ssri": { "version": "10.0.5", "dev": true, @@ -19612,6 +18556,40 @@ "dev": true, "license": "MIT" }, + "node_modules/tmp": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", + "integrity": "sha512-HXdTB7lvMwcb55XFfrTM8CPr/IYREk4hVBFaQ4b/6nInrluSL86hfHm7vu0luYKCfyBZp2trCjpc8caC3vVM3w==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.1" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/tree-kill": { "version": "1.2.2", "dev": true, @@ -19704,6 +18682,24 @@ "version": "2.6.2", "license": "0BSD" }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, "node_modules/type-fest": { "version": "0.21.3", "dev": true, @@ -20240,6 +19236,14 @@ "dev": true, "license": "ISC" }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, "node_modules/uuid": { "version": "9.0.0", "license": "MIT", @@ -20272,6 +19276,20 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, "node_modules/watchpack": { "version": "2.4.0", "dev": true, @@ -20297,488 +19315,143 @@ "minimalistic-assert": "^1.0.0" } }, - "node_modules/webdriver-manager": { - "version": "12.1.9", - "dev": true, - "license": "MIT", - "dependencies": { - "adm-zip": "^0.5.2", - "chalk": "^1.1.1", - "del": "^2.2.0", - "glob": "^7.0.3", - "ini": "^1.3.4", - "minimist": "^1.2.0", - "q": "^1.4.1", - "request": "^2.87.0", - "rimraf": "^2.5.2", - "semver": "^5.3.0", - "xml2js": "^0.4.17" - }, - "bin": { - "webdriver-manager": "bin/webdriver-manager" - }, - "engines": { - "node": ">=6.9.x" - } - }, - "node_modules/webdriver-manager/node_modules/ajv": { - "version": "6.12.6", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webdriver-manager/node_modules/ansi-regex": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webdriver-manager/node_modules/ansi-styles": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webdriver-manager/node_modules/aws4": { - "version": "1.12.0", - "dev": true, - "license": "MIT" - }, - "node_modules/webdriver-manager/node_modules/chalk": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webdriver-manager/node_modules/extend": { - "version": "3.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/webdriver-manager/node_modules/extsprintf": { - "version": "1.3.0", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "license": "MIT" - }, - "node_modules/webdriver-manager/node_modules/fast-json-stable-stringify": { + "node_modules/webdriver-js-extender": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz", + "integrity": "sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ==", "dev": true, - "license": "MIT" - }, - "node_modules/webdriver-manager/node_modules/forever-agent": { - "version": "0.6.1", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "*" - } - }, - "node_modules/webdriver-manager/node_modules/form-data": { - "version": "2.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/webdriver-manager/node_modules/getpass": { - "version": "0.1.7", - "dev": true, - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/webdriver-manager/node_modules/har-schema": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=4" - } - }, - "node_modules/webdriver-manager/node_modules/har-validator": { - "version": "5.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webdriver-manager/node_modules/has-ansi": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webdriver-manager/node_modules/http-signature": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "node_modules/webdriver-manager/node_modules/ini": { - "version": "1.3.8", - "dev": true, - "license": "ISC" - }, - "node_modules/webdriver-manager/node_modules/is-typedarray": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/webdriver-manager/node_modules/isstream": { - "version": "0.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/webdriver-manager/node_modules/jsbn": { - "version": "0.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/webdriver-manager/node_modules/json-schema": { - "version": "0.4.0", - "dev": true, - "license": "(AFL-2.1 OR BSD-3-Clause)" - }, - "node_modules/webdriver-manager/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/webdriver-manager/node_modules/json-stringify-safe": { - "version": "5.0.1", - "dev": true, - "license": "ISC" - }, - "node_modules/webdriver-manager/node_modules/jsprim": { - "version": "1.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/webdriver-manager/node_modules/mime-db": { - "version": "1.52.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webdriver-manager/node_modules/mime-types": { - "version": "2.1.35", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webdriver-manager/node_modules/minimist": { - "version": "1.2.8", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/webdriver-manager/node_modules/oauth-sign": { - "version": "0.9.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "*" - } - }, - "node_modules/webdriver-manager/node_modules/performance-now": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/webdriver-manager/node_modules/psl": { - "version": "1.9.0", - "dev": true, - "license": "MIT" - }, - "node_modules/webdriver-manager/node_modules/punycode": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/webdriver-manager/node_modules/q": { - "version": "1.5.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/webdriver-manager/node_modules/qs": { - "version": "6.5.3", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/webdriver-manager/node_modules/request": { - "version": "2.88.2", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/webdriver-manager/node_modules/rimraf": { - "version": "2.7.1", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/webdriver-manager/node_modules/safe-buffer": { - "version": "5.2.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/webdriver-manager/node_modules/safer-buffer": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/webdriver-manager/node_modules/sax": { - "version": "1.2.4", - "dev": true, - "license": "ISC" - }, - "node_modules/webdriver-manager/node_modules/semver": { - "version": "5.7.2", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" + "dependencies": { + "@types/selenium-webdriver": "^3.0.0", + "selenium-webdriver": "^3.0.1" + }, + "engines": { + "node": ">=6.9.x" } }, - "node_modules/webdriver-manager/node_modules/sshpk": { - "version": "1.17.0", + "node_modules/webdriver-manager": { + "version": "12.1.9", "dev": true, "license": "MIT", "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" + "adm-zip": "^0.5.2", + "chalk": "^1.1.1", + "del": "^2.2.0", + "glob": "^7.0.3", + "ini": "^1.3.4", + "minimist": "^1.2.0", + "q": "^1.4.1", + "request": "^2.87.0", + "rimraf": "^2.5.2", + "semver": "^5.3.0", + "xml2js": "^0.4.17" }, "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" + "webdriver-manager": "bin/webdriver-manager" }, "engines": { - "node": ">=0.10.0" + "node": ">=6.9.x" } }, - "node_modules/webdriver-manager/node_modules/strip-ansi": { - "version": "3.0.1", + "node_modules/webdriver-manager/node_modules/ansi-regex": { + "version": "2.1.1", "dev": true, "license": "MIT", - "dependencies": { - "ansi-regex": "^2.0.0" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/webdriver-manager/node_modules/supports-color": { - "version": "2.0.0", + "node_modules/webdriver-manager/node_modules/ansi-styles": { + "version": "2.2.1", "dev": true, "license": "MIT", "engines": { - "node": ">=0.8.0" + "node": ">=0.10.0" } }, - "node_modules/webdriver-manager/node_modules/tough-cookie": { - "version": "2.5.0", + "node_modules/webdriver-manager/node_modules/chalk": { + "version": "1.1.3", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" }, "engines": { - "node": ">=0.8" + "node": ">=0.10.0" } }, - "node_modules/webdriver-manager/node_modules/tunnel-agent": { - "version": "0.6.0", + "node_modules/webdriver-manager/node_modules/has-ansi": { + "version": "2.0.0", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "safe-buffer": "^5.0.1" + "ansi-regex": "^2.0.0" }, "engines": { - "node": "*" + "node": ">=0.10.0" } }, - "node_modules/webdriver-manager/node_modules/tweetnacl": { - "version": "0.14.5", + "node_modules/webdriver-manager/node_modules/ini": { + "version": "1.3.8", "dev": true, - "license": "Unlicense" + "license": "ISC" }, - "node_modules/webdriver-manager/node_modules/uri-js": { - "version": "4.4.1", + "node_modules/webdriver-manager/node_modules/minimist": { + "version": "1.2.8", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/webdriver-manager/node_modules/uuid": { - "version": "3.4.0", + "node_modules/webdriver-manager/node_modules/q": { + "version": "1.5.1", "dev": true, "license": "MIT", - "bin": { - "uuid": "bin/uuid" + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" } }, - "node_modules/webdriver-manager/node_modules/verror": { - "version": "1.10.0", + "node_modules/webdriver-manager/node_modules/rimraf": { + "version": "2.7.1", "dev": true, - "engines": [ - "node >=0.6.0" - ], - "license": "MIT", + "license": "ISC", "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" } }, - "node_modules/webdriver-manager/node_modules/xml2js": { - "version": "0.4.23", + "node_modules/webdriver-manager/node_modules/semver": { + "version": "5.7.2", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/webdriver-manager/node_modules/strip-ansi": { + "version": "3.0.1", "dev": true, "license": "MIT", "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" + "ansi-regex": "^2.0.0" }, "engines": { - "node": ">=4.0.0" + "node": ">=0.10.0" } }, - "node_modules/webdriver-manager/node_modules/xmlbuilder": { - "version": "11.0.1", + "node_modules/webdriver-manager/node_modules/supports-color": { + "version": "2.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">=4.0" + "node": ">=0.8.0" } }, "node_modules/webpack": { @@ -20875,25 +19548,6 @@ "node": ">= 4.0.0" } }, - "node_modules/webpack-dev-middleware/node_modules/mime-db": { - "version": "1.52.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-middleware/node_modules/mime-types": { - "version": "2.1.35", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/webpack-dev-middleware/node_modules/range-parser": { "version": "1.2.1", "dev": true, @@ -21056,25 +19710,6 @@ "node": ">= 4.0.0" } }, - "node_modules/webpack-dev-server/node_modules/mime-db": { - "version": "1.52.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-server/node_modules/mime-types": { - "version": "2.1.35", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/webpack-dev-server/node_modules/range-parser": { "version": "1.2.1", "dev": true, @@ -21281,11 +19916,6 @@ "node": ">=10.13.0" } }, - "node_modules/webpack/node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, "node_modules/webpack/node_modules/graceful-fs": { "version": "4.2.11", "dev": true, @@ -21317,11 +19947,6 @@ "dev": true, "license": "MIT" }, - "node_modules/webpack/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, "node_modules/webpack/node_modules/loader-runner": { "version": "4.3.0", "dev": true, @@ -21335,38 +19960,11 @@ "dev": true, "license": "MIT" }, - "node_modules/webpack/node_modules/mime-db": { - "version": "1.52.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack/node_modules/mime-types": { - "version": "2.1.35", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/webpack/node_modules/neo-async": { "version": "2.6.2", "dev": true, "license": "MIT" }, - "node_modules/webpack/node_modules/punycode": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/webpack/node_modules/randombytes": { "version": "2.1.0", "dev": true, @@ -21375,25 +19973,6 @@ "safe-buffer": "^5.1.0" } }, - "node_modules/webpack/node_modules/safe-buffer": { - "version": "5.2.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/webpack/node_modules/schema-utils": { "version": "3.3.0", "dev": true, @@ -21491,14 +20070,6 @@ } } }, - "node_modules/webpack/node_modules/uri-js": { - "version": "4.4.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, "node_modules/webpack/node_modules/webpack-sources": { "version": "3.2.3", "dev": true, @@ -21520,25 +20091,6 @@ "node": ">=0.8.0" } }, - "node_modules/websocket-driver/node_modules/safe-buffer": { - "version": "5.2.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/websocket-extensions": { "version": "0.1.4", "dev": true, @@ -21695,6 +20247,28 @@ } } }, + "node_modules/xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "dev": true, + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, "node_modules/yallist": { "version": "4.0.0", "dev": true, diff --git a/ui/src/app/app-routing.module.ts b/ui/src/app/app-routing.module.ts index bab2fe48268..350f1bae1e2 100644 --- a/ui/src/app/app-routing.module.ts +++ b/ui/src/app/app-routing.module.ts @@ -9,7 +9,7 @@ import { OverviewComponent as AutarchyChartOverviewComponent } from './edge/hist import { OverviewComponent as GridChartOverviewComponent } from './edge/history/common/grid/overview/overview'; import { OverviewComponent as ProductionChartOverviewComponent } from './edge/history/common/production/overview/overview'; import { OverviewComponent as SelfconsumptionChartOverviewComponent } from './edge/history/common/selfconsumption/overview/overview'; -import { ConsumptionChartOverviewComponent } from './edge/history/consumption/consumptionchartoverview/consumptionchartoverview.component'; +import { OverviewComponent as ConsumptionChartOverviewComponent } from './edge/history/common/consumption/overview/overview'; import { DelayedSellToGridChartOverviewComponent } from './edge/history/delayedselltogrid/symmetricpeakshavingchartoverview/delayedselltogridchartoverview.component'; import { FixDigitalOutputChartOverviewComponent } from './edge/history/fixdigitaloutput/fixdigitaloutputchartoverview/fixdigitaloutputchartoverview.component'; import { GridOptimizedChargeChartOverviewComponent } from './edge/history/gridoptimizedcharge/gridoptimizedchargechartoverview/gridoptimizedchargechartoverview.component'; diff --git a/ui/src/app/edge/history/common/common.ts b/ui/src/app/edge/history/common/common.ts index 429c56a5d83..2dad8182fd7 100644 --- a/ui/src/app/edge/history/common/common.ts +++ b/ui/src/app/edge/history/common/common.ts @@ -5,10 +5,12 @@ import { CommonEnergyMonitor } from './energy/energy'; import { Common_Grid } from './grid/grid'; import { Common_Production } from './production/production'; import { Common_Selfconsumption } from './selfconsumption/SelfConsumption'; +import { Common_Consumption } from './consumption/Consumption'; @NgModule({ imports: [ Common_Autarchy, + Common_Consumption, CommonEnergyMonitor, Common_Grid, Common_Production, @@ -16,6 +18,7 @@ import { Common_Selfconsumption } from './selfconsumption/SelfConsumption'; ], exports: [ Common_Autarchy, + Common_Consumption, CommonEnergyMonitor, Common_Grid, Common_Production, diff --git a/ui/src/app/edge/history/common/consumption/Consumption.ts b/ui/src/app/edge/history/common/consumption/Consumption.ts new file mode 100644 index 00000000000..f98ecbae967 --- /dev/null +++ b/ui/src/app/edge/history/common/consumption/Consumption.ts @@ -0,0 +1,28 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { SharedModule } from 'src/app/shared/shared.module'; + +import { ChartComponent } from './chart/chart'; +import { FlatComponent } from './flat/flat'; +import { OverviewComponent } from './overview/overview'; + +@NgModule({ + imports: [ + BrowserModule, + SharedModule, + ], + entryComponents: [ + FlatComponent, + ], + declarations: [ + FlatComponent, + ChartComponent, + OverviewComponent, + ], + exports: [ + FlatComponent, + ChartComponent, + OverviewComponent, + ], +}) +export class Common_Consumption { } diff --git a/ui/src/app/edge/history/common/consumption/chart/channels.spec.ts b/ui/src/app/edge/history/common/consumption/chart/channels.spec.ts new file mode 100644 index 00000000000..0588b1fe66c --- /dev/null +++ b/ui/src/app/edge/history/common/consumption/chart/channels.spec.ts @@ -0,0 +1,105 @@ +import { OeTester } from "src/app/shared/genericComponents/shared/testing/common"; +import { QueryHistoricTimeseriesDataResponse } from "src/app/shared/jsonrpc/response/queryHistoricTimeseriesDataResponse"; +import { QueryHistoricTimeseriesEnergyPerPeriodResponse } from "src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyPerPeriodResponse"; +import { QueryHistoricTimeseriesEnergyResponse } from "src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyResponse"; + +export namespace History { + + /** + * up to 288 datapoints (5 min aggregated values) from a + * + * {@link Day.energyPerPeriodChannelWithValues} and {@link Day.dataChannelWithValues} + * */ + export const DAY: OeTester.Types.Channels = ({ + energyChannelWithValues: new QueryHistoricTimeseriesEnergyResponse("0", { + data: { + "_sum/ConsumptionActiveEnergy": 92989, + "_sum/ConsumptionActiveEnergyL1": 30996, + "_sum/ConsumptionActiveEnergyL2": 30996, + "_sum/ConsumptionActiveEnergyL3": 30996, + "evcs0/ActiveConsumptionEnergy": 13720, + "meter0/ActiveConsumptionEnergy": 15930, + }, + }), + dataChannelWithValues: new QueryHistoricTimeseriesDataResponse("0", { + data: { + '_sum/ConsumptionActivePower': [null, null, null, 565.8045977011494, 560.5148514851485, 561.425925925926, 573.2169811320755, 565.8080808080808, 587.9803921568628, 584.2389380530974, 607.4818181818182, 605.0275229357799, 595.6407766990292, 602.5294117647059, 578.1684210526316, 581.6813186813187, 649.5166666666667, 560.3, 567.0373831775701, 629.7672413793103, 568.8613861386139, 589.6039603960396, 634.5090909090909, 622.6633663366337, 617.7196261682243, 608.122641509434, 602.78, 650.8155339805825, 605.8877551020408, 594.3904761904762, 576.36, 565.066037735849, 587.495145631068, 626.375, 681.9428571428572, 650.4629629629629, 631.373831775701, 687.25, 560.2452830188679, 527.8952380952381, 620.2222222222222, 546.6355140186915, 587.8130841121496, 604, 616.295918367347, 578.940594059406, 594.3396226415094, 648.1078431372549, null, null, null, 565.2183908045977, 573.6481481481482, 536.5462962962963, 558.081081081081, 574.7543859649123, 574.3557692307693, 596.9047619047619, 654.072072072072, 615.21, 612.8045977011494, 636.11, 613.7948717948718, 538.8857142857142, 537.1157894736842, 551.1634615384615, 558.8809523809524, 559.1222222222223, 618.5576923076923, 654.3287671232877, 616.0574712643678, 588.9056603773585, 578.7096774193549, 583.0360360360361, 572.5700934579439, 595.2631578947369, 745.0888888888888, 820.7323943661971, 2651.1923076923076, 8063.131147540984, 6952.055555555556, 7413.41052631579, 6695.175, 6688.301075268817, 7135.544444444445, 6935.6125, 6768.398148148148, 6962.593220338983, 3449.51968503937, 677.4427860696518, 982.7305699481865, 858.2012987012987, 767.8924050632911, 761.950495049505, 682.1319796954315, 725.4198473282443, 702.1286549707602, 730.9484536082474, 739, 730.572864321608, 754.7467532467532, 657.373417721519, 640.9480519480519, 669.8156424581006, 787.6280991735537, 2931.229357798165, 1954.2808988764045, 777.5346534653465, 1098.538860103627, 1244.1524390243903, 2919.4913793103447, 2987.4188034188032, 3414.029411764706, 1355.2, 2714.2824427480914, 2657.8703703703704, 2873.892307692308, 6140.337078651685, 3966.560606060606, 3021.5789473684213, 1774.1875, 1076.46, 1426.8691588785048, 1261.0386740331492, 1019.3491124260355, 1194.960199004975, 1241.2878787878788, 3323, 3968.45625, 1468.0961538461538, 3630.4166666666665, 2269.5301204819275, 2554.391025641026, 1845.7888888888888, 1728.9767441860465, 2862.08, 2324.1241379310345, 1964.0169491525423, 1808.4, 3466.05035971223, 2297.4397590361446, 2530.0493827160494, 2439.3584905660377, 2007.9060773480662, 1751.5, 1416.3181818181818, 1429.2298850574712, 1452.0298507462687, 1489.720430107527, 1633.095238095238, 1826.2928571428572, 1610.1904761904761, 1680.9292929292928, 2881.743119266055, 3585.1634615384614, 3689.1666666666665, 3657.340277777778, 3643.5348837209303, 3714.8645833333335, 3731.375, 3744.79, 3636.2363636363634, 4273.113924050633, 3446.2, 3538.714285714286, 3790.6065573770493, 3527.675, 3467.671232876712, 3559.5, 3798.2, 5460.666666666667, 1309.4406779661017, 1535.7454545454545, 3423.8260869565215, 3382.3636363636365, 3400.6315789473683, 2950.75, 3386.731707317073, 2506, 1447.1666666666667, 1442.6, 946, 942.578947368421, 950.7142857142857, 947, 976.2857142857143, 1786.2857142857142, 1513.5777777777778, 1499.5625, 1338, 1327.8125, 1273.9175257731958, 1438.7457627118645, 1248.4186046511627, 1286.6693548387098, 1284.8934911242604, 1223.7952755905512, 748.09375, 871.7684210526315, 844.5338983050848, 791.675, 804.1932773109244, 730.3737373737374, 705.5024390243902, 687.2407407407408, 690.9939759036145, 751, 765.139344262295, 686.8717948717949, 669.7434210526316, 1767.8091603053435, 724.6764705882352, 748.2772277227723, 940.1142857142858, 750.368, 1366.0232558139535, 727.4137931034483, 710.719512195122, 689.8555555555556, 739.453488372093, 817.875, 730.4303797468355, 735.5890410958904, 738.2258064516129, 1906.9217391304348, 2290.785714285714, 1207.5072463768115, 1167.5890410958905, 1229.0208333333333, 1192.3777777777777, 1208.871794871795, 1367.715909090909, 1284.2233009708739, 1163.1739130434783, 1152.53, 1161.4545454545455, 1219.5681818181818, 1183.752808988764, 1197.778947368421, 1233.888888888889, 1275.070588235294, 1235.554054054054, 1207.83908045977, 1241.6184210526317, 1159.042735042735, 1138.2948717948718, 1106.9915966386554, 1171.4504504504505, 1223.822429906542, 1122.169642857143, 1018.8928571428571, 981.8285714285714, 998.8363636363637, 6056.572916666667, 7225.528846153846, 7193.834782608696, 7507.321100917431, 7588.695238095238, 7678.689189189189, 9469.633027522936, 10236.186046511628, 10106.608695652174, 9989.125, 9948.229357798165, 9796.030927835052, 9704.217391304348, 8454.028571428571, 6813.476190476191, 6706.782608695652, 6523.452173913043, 6661.553571428572, 5620.777777777777, 812.3142857142857, 809.5892857142857, 866.4786324786324, 877.8319327731092, 810.8141592920354, 815.7121212121212, 770.6470588235294, 763.3157894736842, 781.5151515151515, 807.5833333333334, 824.743119266055, 876.2151898734177, 882.424, 750.2213114754098, 675.9549549549549, 637.1222222222223], + '_sum/ConsumptionActivePowerL1': [null, null, null, 188.60153256704982, 186.83828382838283, 187.141975308642, 191.07232704402517, 188.60269360269362, 195.99346405228758, 194.7463126843658, 202.4939393939394, 201.6758409785933, 198.54692556634305, 200.84313725490196, 192.7228070175439, 193.89377289377288, 216.50555555555556, 186.76666666666665, 189.01246105919003, 209.92241379310346, 189.6204620462046, 196.53465346534654, 211.5030303030303, 207.55445544554456, 205.90654205607476, 202.7075471698113, 200.92666666666665, 216.93851132686083, 201.9625850340136, 198.13015873015874, 192.12, 188.35534591194968, 195.831715210356, 208.79166666666666, 227.31428571428572, 216.820987654321, 210.45794392523365, 229.08333333333334, 186.74842767295596, 175.9650793650794, 206.74074074074073, 182.21183800623052, 195.93769470404985, 201.33333333333334, 205.43197278911566, 192.98019801980197, 198.11320754716982, 216.0359477124183, null, null, null, 188.40613026819923, 191.21604938271605, 178.84876543209876, 186.027027027027, 191.58479532163744, 191.4519230769231, 198.96825396825398, 218.02402402402402, 205.07000000000002, 204.26819923371647, 212.03666666666666, 204.59829059829062, 179.6285714285714, 179.03859649122808, 183.72115384615384, 186.2936507936508, 186.3740740740741, 206.18589743589743, 218.1095890410959, 205.35249042145594, 196.30188679245282, 192.90322580645162, 194.34534534534535, 190.85669781931463, 198.42105263157896, 248.36296296296294, 273.57746478873236, 883.7307692307692, 2687.7103825136614, 2317.3518518518517, 2471.1368421052634, 2231.725, 2229.4336917562723, 2378.514814814815, 2311.8708333333334, 2256.1327160493825, 2320.864406779661, 1149.8398950131234, 225.81426202321725, 327.5768566493955, 286.06709956709955, 255.96413502109704, 253.983498349835, 227.37732656514382, 241.80661577608143, 234.04288499025338, 243.64948453608247, 246.33333333333334, 243.52428810720266, 251.58225108225108, 219.12447257383965, 213.64935064935062, 223.27188081936686, 262.5426997245179, 977.0764525993883, 651.4269662921348, 259.1782178217822, 366.1796200345423, 414.7174796747968, 973.1637931034483, 995.8062678062678, 1138.0098039215686, 451.73333333333335, 904.7608142493638, 885.9567901234568, 957.9641025641026, 2046.7790262172284, 1322.1868686868686, 1007.1929824561404, 591.3958333333334, 358.82, 475.6230529595016, 420.3462246777164, 339.78303747534517, 398.3200663349917, 413.76262626262627, 1107.6666666666667, 1322.8187500000001, 489.3653846153846, 1210.138888888889, 756.5100401606425, 851.4636752136753, 615.2629629629629, 576.3255813953489, 954.0266666666666, 774.7080459770115, 654.6723163841808, 602.8000000000001, 1155.3501199040768, 765.8132530120482, 843.3497942386831, 813.1194968553459, 669.3020257826887, 583.8333333333334, 472.10606060606057, 476.4099616858237, 484.00995024875624, 496.57347670250897, 544.3650793650794, 608.7642857142857, 536.7301587301587, 560.3097643097643, 960.5810397553518, 1195.054487179487, 1229.7222222222222, 1219.1134259259259, 1214.5116279069769, 1238.2881944444446, 1243.7916666666667, 1248.2633333333333, 1212.0787878787878, 1424.3713080168775, 1148.7333333333333, 1179.5714285714287, 1263.535519125683, 1175.8916666666667, 1155.890410958904, 1186.5, 1266.0666666666666, 1820.2222222222224, 436.48022598870057, 511.91515151515154, 1141.2753623188405, 1127.4545454545455, 1133.5438596491229, 983.5833333333334, 1128.910569105691, 835.3333333333334, 482.3888888888889, 480.8666666666666, 315.3333333333333, 314.1929824561403, 316.90476190476187, 315.6666666666667, 325.42857142857144, 595.4285714285714, 504.52592592592595, 499.8541666666667, 446, 442.6041666666667, 424.63917525773195, 479.5819209039548, 416.1395348837209, 428.8897849462366, 428.29783037475346, 407.93175853018374, 249.36458333333334, 290.58947368421053, 281.51129943502826, 263.89166666666665, 268.0644257703081, 243.45791245791247, 235.16747967479674, 229.08024691358025, 230.33132530120483, 250.33333333333334, 255.04644808743168, 228.95726495726498, 223.24780701754386, 589.2697201017812, 241.55882352941174, 249.42574257425744, 313.37142857142857, 250.12266666666667, 455.3410852713178, 242.47126436781608, 236.90650406504065, 229.95185185185187, 246.484496124031, 272.625, 243.47679324894514, 245.19634703196346, 246.07526881720432, 635.640579710145, 763.5952380952381, 402.50241545893715, 389.1963470319635, 409.6736111111111, 397.4592592592592, 402.95726495726495, 455.905303030303, 428.074433656958, 387.72463768115944, 384.1766666666667, 387.1515151515152, 406.52272727272725, 394.5842696629213, 399.25964912280705, 411.2962962962963, 425.0235294117647, 411.8513513513513, 402.61302681992333, 413.8728070175439, 386.34757834757835, 379.43162393162396, 368.99719887955183, 390.4834834834835, 407.94080996884736, 374.05654761904765, 339.63095238095235, 327.2761904761905, 332.94545454545454, 2018.857638888889, 2408.5096153846152, 2397.9449275362317, 2502.440366972477, 2529.5650793650793, 2559.563063063063, 3156.544342507645, 3412.062015503876, 3368.8695652173915, 3329.7083333333335, 3316.0764525993886, 3265.343642611684, 3234.7391304347825, 2818.0095238095237, 2271.15873015873, 2235.5942028985505, 2174.4840579710144, 2220.5178571428573, 1873.5925925925924, 270.77142857142854, 269.86309523809524, 288.8262108262108, 292.6106442577031, 270.27138643067843, 271.9040404040404, 256.88235294117646, 254.43859649122805, 260.5050505050505, 269.19444444444446, 274.914373088685, 292.07172995780587, 294.1413333333333, 250.0737704918033, 225.31831831831832, 212.3740740740741], + '_sum/ConsumptionActivePowerL2': [null, null, null, 188.60153256704982, 186.83828382838283, 187.141975308642, 191.07232704402517, 188.60269360269362, 195.99346405228758, 194.7463126843658, 202.4939393939394, 201.6758409785933, 198.54692556634305, 200.84313725490196, 192.7228070175439, 193.89377289377288, 216.50555555555556, 186.76666666666665, 189.01246105919003, 209.92241379310346, 189.6204620462046, 196.53465346534654, 211.5030303030303, 207.55445544554456, 205.90654205607476, 202.7075471698113, 200.92666666666665, 216.93851132686083, 201.9625850340136, 198.13015873015874, 192.12, 188.35534591194968, 195.831715210356, 208.79166666666666, 227.31428571428572, 216.820987654321, 210.45794392523365, 229.08333333333334, 186.74842767295596, 175.9650793650794, 206.74074074074073, 182.21183800623052, 195.93769470404985, 201.33333333333334, 205.43197278911566, 192.98019801980197, 198.11320754716982, 216.0359477124183, null, null, null, 188.40613026819923, 191.21604938271605, 178.84876543209876, 186.027027027027, 191.58479532163744, 191.4519230769231, 198.96825396825398, 218.02402402402402, 205.07000000000002, 204.26819923371647, 212.03666666666666, 204.59829059829062, 179.6285714285714, 179.03859649122808, 183.72115384615384, 186.2936507936508, 186.3740740740741, 206.18589743589743, 218.1095890410959, 205.35249042145594, 196.30188679245282, 192.90322580645162, 194.34534534534535, 190.85669781931463, 198.42105263157896, 248.36296296296294, 273.57746478873236, 883.7307692307692, 2687.7103825136614, 2317.3518518518517, 2471.1368421052634, 2231.725, 2229.4336917562723, 2378.514814814815, 2311.8708333333334, 2256.1327160493825, 2320.864406779661, 1149.8398950131234, 225.81426202321725, 327.5768566493955, 286.06709956709955, 255.96413502109704, 253.983498349835, 227.37732656514382, 241.80661577608143, 234.04288499025338, 243.64948453608247, 246.33333333333334, 243.52428810720266, 251.58225108225108, 219.12447257383965, 213.64935064935062, 223.27188081936686, 262.5426997245179, 977.0764525993883, 651.4269662921348, 259.1782178217822, 366.1796200345423, 414.7174796747968, 973.1637931034483, 995.8062678062678, 1138.0098039215686, 451.73333333333335, 904.7608142493638, 885.9567901234568, 957.9641025641026, 2046.7790262172284, 1322.1868686868686, 1007.1929824561404, 591.3958333333334, 358.82, 475.6230529595016, 420.3462246777164, 339.78303747534517, 398.3200663349917, 413.76262626262627, 1107.6666666666667, 1322.8187500000001, 489.3653846153846, 1210.138888888889, 756.5100401606425, 851.4636752136753, 615.2629629629629, 576.3255813953489, 954.0266666666666, 774.7080459770115, 654.6723163841808, 602.8000000000001, 1155.3501199040768, 765.8132530120482, 843.3497942386831, 813.1194968553459, 669.3020257826887, 583.8333333333334, 472.10606060606057, 476.4099616858237, 484.00995024875624, 496.57347670250897, 544.3650793650794, 608.7642857142857, 536.7301587301587, 560.3097643097643, 960.5810397553518, 1195.054487179487, 1229.7222222222222, 1219.1134259259259, 1214.5116279069769, 1238.2881944444446, 1243.7916666666667, 1248.2633333333333, 1212.0787878787878, 1424.3713080168775, 1148.7333333333333, 1179.5714285714287, 1263.535519125683, 1175.8916666666667, 1155.890410958904, 1186.5, 1266.0666666666666, 1820.2222222222224, 436.48022598870057, 511.91515151515154, 1141.2753623188405, 1127.4545454545455, 1133.5438596491229, 983.5833333333334, 1128.910569105691, 835.3333333333334, 482.3888888888889, 480.8666666666666, 315.3333333333333, 314.1929824561403, 316.90476190476187, 315.6666666666667, 325.42857142857144, 595.4285714285714, 504.52592592592595, 499.8541666666667, 446, 442.6041666666667, 424.63917525773195, 479.5819209039548, 416.1395348837209, 428.8897849462366, 428.29783037475346, 407.93175853018374, 249.36458333333334, 290.58947368421053, 281.51129943502826, 263.89166666666665, 268.0644257703081, 243.45791245791247, 235.16747967479674, 229.08024691358025, 230.33132530120483, 250.33333333333334, 255.04644808743168, 228.95726495726498, 223.24780701754386, 589.2697201017812, 241.55882352941174, 249.42574257425744, 313.37142857142857, 250.12266666666667, 455.3410852713178, 242.47126436781608, 236.90650406504065, 229.95185185185187, 246.484496124031, 272.625, 243.47679324894514, 245.19634703196346, 246.07526881720432, 635.640579710145, 763.5952380952381, 402.50241545893715, 389.1963470319635, 409.6736111111111, 397.4592592592592, 402.95726495726495, 455.905303030303, 428.074433656958, 387.72463768115944, 384.1766666666667, 387.1515151515152, 406.52272727272725, 394.5842696629213, 399.25964912280705, 411.2962962962963, 425.0235294117647, 411.8513513513513, 402.61302681992333, 413.8728070175439, 386.34757834757835, 379.43162393162396, 368.99719887955183, 390.4834834834835, 407.94080996884736, 374.05654761904765, 339.63095238095235, 327.2761904761905, 332.94545454545454, 2018.857638888889, 2408.5096153846152, 2397.9449275362317, 2502.440366972477, 2529.5650793650793, 2559.563063063063, 3156.544342507645, 3412.062015503876, 3368.8695652173915, 3329.7083333333335, 3316.0764525993886, 3265.343642611684, 3234.7391304347825, 2818.0095238095237, 2271.15873015873, 2235.5942028985505, 2174.4840579710144, 2220.5178571428573, 1873.5925925925924, 270.77142857142854, 269.86309523809524, 288.8262108262108, 292.6106442577031, 270.27138643067843, 271.9040404040404, 256.88235294117646, 254.43859649122805, 260.5050505050505, 269.19444444444446, 274.914373088685, 292.07172995780587, 294.1413333333333, 250.0737704918033, 225.31831831831832, 212.3740740740741], + '_sum/ConsumptionActivePowerL3': [null, null, null, 188.60153256704982, 186.83828382838283, 187.141975308642, 191.07232704402517, 188.60269360269362, 195.99346405228758, 194.7463126843658, 202.4939393939394, 201.6758409785933, 198.54692556634305, 200.84313725490196, 192.7228070175439, 193.89377289377288, 216.50555555555556, 186.76666666666665, 189.01246105919003, 209.92241379310346, 189.6204620462046, 196.53465346534654, 211.5030303030303, 207.55445544554456, 205.90654205607476, 202.7075471698113, 200.92666666666665, 216.93851132686083, 201.9625850340136, 198.13015873015874, 192.12, 188.35534591194968, 195.831715210356, 208.79166666666666, 227.31428571428572, 216.820987654321, 210.45794392523365, 229.08333333333334, 186.74842767295596, 175.9650793650794, 206.74074074074073, 182.21183800623052, 195.93769470404985, 201.33333333333334, 205.43197278911566, 192.98019801980197, 198.11320754716982, 216.0359477124183, null, null, null, 188.40613026819923, 191.21604938271605, 178.84876543209876, 186.027027027027, 191.58479532163744, 191.4519230769231, 198.96825396825398, 218.02402402402402, 205.07000000000002, 204.26819923371647, 212.03666666666666, 204.59829059829062, 179.6285714285714, 179.03859649122808, 183.72115384615384, 186.2936507936508, 186.3740740740741, 206.18589743589743, 218.1095890410959, 205.35249042145594, 196.30188679245282, 192.90322580645162, 194.34534534534535, 190.85669781931463, 198.42105263157896, 248.36296296296294, 273.57746478873236, 883.7307692307692, 2687.7103825136614, 2317.3518518518517, 2471.1368421052634, 2231.725, 2229.4336917562723, 2378.514814814815, 2311.8708333333334, 2256.1327160493825, 2320.864406779661, 1149.8398950131234, 225.81426202321725, 327.5768566493955, 286.06709956709955, 255.96413502109704, 253.983498349835, 227.37732656514382, 241.80661577608143, 234.04288499025338, 243.64948453608247, 246.33333333333334, 243.52428810720266, 251.58225108225108, 219.12447257383965, 213.64935064935062, 223.27188081936686, 262.5426997245179, 977.0764525993883, 651.4269662921348, 259.1782178217822, 366.1796200345423, 414.7174796747968, 973.1637931034483, 995.8062678062678, 1138.0098039215686, 451.73333333333335, 904.7608142493638, 885.9567901234568, 957.9641025641026, 2046.7790262172284, 1322.1868686868686, 1007.1929824561404, 591.3958333333334, 358.82, 475.6230529595016, 420.3462246777164, 339.78303747534517, 398.3200663349917, 413.76262626262627, 1107.6666666666667, 1322.8187500000001, 489.3653846153846, 1210.138888888889, 756.5100401606425, 851.4636752136753, 615.2629629629629, 576.3255813953489, 954.0266666666666, 774.7080459770115, 654.6723163841808, 602.8000000000001, 1155.3501199040768, 765.8132530120482, 843.3497942386831, 813.1194968553459, 669.3020257826887, 583.8333333333334, 472.10606060606057, 476.4099616858237, 484.00995024875624, 496.57347670250897, 544.3650793650794, 608.7642857142857, 536.7301587301587, 560.3097643097643, 960.5810397553518, 1195.054487179487, 1229.7222222222222, 1219.1134259259259, 1214.5116279069769, 1238.2881944444446, 1243.7916666666667, 1248.2633333333333, 1212.0787878787878, 1424.3713080168775, 1148.7333333333333, 1179.5714285714287, 1263.535519125683, 1175.8916666666667, 1155.890410958904, 1186.5, 1266.0666666666666, 1820.2222222222224, 436.48022598870057, 511.91515151515154, 1141.2753623188405, 1127.4545454545455, 1133.5438596491229, 983.5833333333334, 1128.910569105691, 835.3333333333334, 482.3888888888889, 480.8666666666666, 315.3333333333333, 314.1929824561403, 316.90476190476187, 315.6666666666667, 325.42857142857144, 595.4285714285714, 504.52592592592595, 499.8541666666667, 446, 442.6041666666667, 424.63917525773195, 479.5819209039548, 416.1395348837209, 428.8897849462366, 428.29783037475346, 407.93175853018374, 249.36458333333334, 290.58947368421053, 281.51129943502826, 263.89166666666665, 268.0644257703081, 243.45791245791247, 235.16747967479674, 229.08024691358025, 230.33132530120483, 250.33333333333334, 255.04644808743168, 228.95726495726498, 223.24780701754386, 589.2697201017812, 241.55882352941174, 249.42574257425744, 313.37142857142857, 250.12266666666667, 455.3410852713178, 242.47126436781608, 236.90650406504065, 229.95185185185187, 246.484496124031, 272.625, 243.47679324894514, 245.19634703196346, 246.07526881720432, 635.640579710145, 763.5952380952381, 402.50241545893715, 389.1963470319635, 409.6736111111111, 397.4592592592592, 402.95726495726495, 455.905303030303, 428.074433656958, 387.72463768115944, 384.1766666666667, 387.1515151515152, 406.52272727272725, 394.5842696629213, 399.25964912280705, 411.2962962962963, 425.0235294117647, 411.8513513513513, 402.61302681992333, 413.8728070175439, 386.34757834757835, 379.43162393162396, 368.99719887955183, 390.4834834834835, 407.94080996884736, 374.05654761904765, 339.63095238095235, 327.2761904761905, 332.94545454545454, 2018.857638888889, 2408.5096153846152, 2397.9449275362317, 2502.440366972477, 2529.5650793650793, 2559.563063063063, 3156.544342507645, 3412.062015503876, 3368.8695652173915, 3329.7083333333335, 3316.0764525993886, 3265.343642611684, 3234.7391304347825, 2818.0095238095237, 2271.15873015873, 2235.5942028985505, 2174.4840579710144, 2220.5178571428573, 1873.5925925925924, 270.77142857142854, 269.86309523809524, 288.8262108262108, 292.6106442577031, 270.27138643067843, 271.9040404040404, 256.88235294117646, 254.43859649122805, 260.5050505050505, 269.19444444444446, 274.914373088685, 292.07172995780587, 294.1413333333333, 250.0737704918033, 225.31831831831832, 212.3740740740741], + 'evcs0/ChargePower': [null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, null, 0, 4104.142857142857, 5829.969696969697, 5806.212121212121, 6195.333333333333, 5777.333333333333, 5786.25, 5789.727272727273, 5789.571428571428, 5783.0526315789475, 5772.657142857143, 4864.8421052631575, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, null, null, 0, null, null, 0, 0, null, 0, 0, null, 0, 0, null, 0, 0, 0, 0, 0, 0, null, 0, null, null, 0, 0, null, null, 0, 0, 0, null, 0, null, null, 0, 0, null, 0, null, null, null, null, 0, null, 0, 0, null, null, null, null, null, 0, null, null, null, null, null, 0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0, 0, null, 0, null, 0, 0, 0, 0, 0, 0, null, null, 0, 0, null, 0, 0, 0, null, null, 0, 0, null, 0, 0, null, null, null, 0, null, null, null, null, null, null, 0, 0, 0, null, 0, 0, 0, 0, null, 0, null, 0, null, 0, 0, 0, null, 0, 0, 0, 0, 0, 5213.0952380952385, 5787.580645161291, 5789.484848484848, 5790.818181818182, 5807.34375, 5820.136363636364, 5798.862068965517, 5809.041666666667, 5805.5625, 5794.346153846154, 5798, 5740.214285714285, 5727.242424242424, 5742.542857142857, 5753.424242424242, 5752.4, 5731.966666666666, 5734.323529411765, 5335.586206896552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null], + 'meter0/ActivePower': [124.28571428571429, 0, null, 0, 173.33333333333334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 110, 113.33333333333333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 113.33333333333333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 113.33333333333333, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 140, null, null, null, 2126.875, 175, 176, null, 180, 180, 185, 180, null, 185, 190, 180, 180, 176.25, 175.83333333333334, 170, 175, 170, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null], + }, + timestamps: ["2023-07-02T22:00:00Z", "2023-07-02T22:05:00Z", "2023-07-02T22:10:00Z", "2023-07-02T22:15:00Z", "2023-07-02T22:20:00Z", "2023-07-02T22:25:00Z", "2023-07-02T22:30:00Z", "2023-07-02T22:35:00Z", "2023-07-02T22:40:00Z", "2023-07-02T22:45:00Z", "2023-07-02T22:50:00Z", "2023-07-02T22:55:00Z", "2023-07-02T23:00:00Z", "2023-07-02T23:05:00Z", "2023-07-02T23:10:00Z", "2023-07-02T23:15:00Z", "2023-07-02T23:20:00Z", "2023-07-02T23:25:00Z", "2023-07-02T23:30:00Z", "2023-07-02T23:35:00Z", "2023-07-02T23:40:00Z", "2023-07-02T23:45:00Z", "2023-07-02T23:50:00Z", "2023-07-02T23:55:00Z", "2023-07-03T00:00:00Z", "2023-07-03T00:05:00Z", "2023-07-03T00:10:00Z", "2023-07-03T00:15:00Z", "2023-07-03T00:20:00Z", "2023-07-03T00:25:00Z", "2023-07-03T00:30:00Z", "2023-07-03T00:35:00Z", "2023-07-03T00:40:00Z", "2023-07-03T00:45:00Z", "2023-07-03T00:50:00Z", "2023-07-03T00:55:00Z", "2023-07-03T01:00:00Z", "2023-07-03T01:05:00Z", "2023-07-03T01:10:00Z", "2023-07-03T01:15:00Z", "2023-07-03T01:20:00Z", "2023-07-03T01:25:00Z", "2023-07-03T01:30:00Z", "2023-07-03T01:35:00Z", "2023-07-03T01:40:00Z", "2023-07-03T01:45:00Z", "2023-07-03T01:50:00Z", "2023-07-03T01:55:00Z", "2023-07-03T02:00:00Z", "2023-07-03T02:05:00Z", "2023-07-03T02:10:00Z", "2023-07-03T02:15:00Z", "2023-07-03T02:20:00Z", "2023-07-03T02:25:00Z", "2023-07-03T02:30:00Z", "2023-07-03T02:35:00Z", "2023-07-03T02:40:00Z", "2023-07-03T02:45:00Z", "2023-07-03T02:50:00Z", "2023-07-03T02:55:00Z", "2023-07-03T03:00:00Z", "2023-07-03T03:05:00Z", "2023-07-03T03:10:00Z", "2023-07-03T03:15:00Z", "2023-07-03T03:20:00Z", "2023-07-03T03:25:00Z", "2023-07-03T03:30:00Z", "2023-07-03T03:35:00Z", "2023-07-03T03:40:00Z", "2023-07-03T03:45:00Z", "2023-07-03T03:50:00Z", "2023-07-03T03:55:00Z", "2023-07-03T04:00:00Z", "2023-07-03T04:05:00Z", "2023-07-03T04:10:00Z", "2023-07-03T04:15:00Z", "2023-07-03T04:20:00Z", "2023-07-03T04:25:00Z", "2023-07-03T04:30:00Z", "2023-07-03T04:35:00Z", "2023-07-03T04:40:00Z", "2023-07-03T04:45:00Z", "2023-07-03T04:50:00Z", "2023-07-03T04:55:00Z", "2023-07-03T05:00:00Z", "2023-07-03T05:05:00Z", "2023-07-03T05:10:00Z", "2023-07-03T05:15:00Z", "2023-07-03T05:20:00Z", "2023-07-03T05:25:00Z", "2023-07-03T05:30:00Z", "2023-07-03T05:35:00Z", "2023-07-03T05:40:00Z", "2023-07-03T05:45:00Z", "2023-07-03T05:50:00Z", "2023-07-03T05:55:00Z", "2023-07-03T06:00:00Z", "2023-07-03T06:05:00Z", "2023-07-03T06:10:00Z", "2023-07-03T06:15:00Z", "2023-07-03T06:20:00Z", "2023-07-03T06:25:00Z", "2023-07-03T06:30:00Z", "2023-07-03T06:35:00Z", "2023-07-03T06:40:00Z", "2023-07-03T06:45:00Z", "2023-07-03T06:50:00Z", "2023-07-03T06:55:00Z", "2023-07-03T07:00:00Z", "2023-07-03T07:05:00Z", "2023-07-03T07:10:00Z", "2023-07-03T07:15:00Z", "2023-07-03T07:20:00Z", "2023-07-03T07:25:00Z", "2023-07-03T07:30:00Z", "2023-07-03T07:35:00Z", "2023-07-03T07:40:00Z", "2023-07-03T07:45:00Z", "2023-07-03T07:50:00Z", "2023-07-03T07:55:00Z", "2023-07-03T08:00:00Z", "2023-07-03T08:05:00Z", "2023-07-03T08:10:00Z", "2023-07-03T08:15:00Z", "2023-07-03T08:20:00Z", "2023-07-03T08:25:00Z", "2023-07-03T08:30:00Z", "2023-07-03T08:35:00Z", "2023-07-03T08:40:00Z", "2023-07-03T08:45:00Z", "2023-07-03T08:50:00Z", "2023-07-03T08:55:00Z", "2023-07-03T09:00:00Z", "2023-07-03T09:05:00Z", "2023-07-03T09:10:00Z", "2023-07-03T09:15:00Z", "2023-07-03T09:20:00Z", "2023-07-03T09:25:00Z", "2023-07-03T09:30:00Z", "2023-07-03T09:35:00Z", "2023-07-03T09:40:00Z", "2023-07-03T09:45:00Z", "2023-07-03T09:50:00Z", "2023-07-03T09:55:00Z", "2023-07-03T10:00:00Z", "2023-07-03T10:05:00Z", "2023-07-03T10:10:00Z", "2023-07-03T10:15:00Z", "2023-07-03T10:20:00Z", "2023-07-03T10:25:00Z", "2023-07-03T10:30:00Z", "2023-07-03T10:35:00Z", "2023-07-03T10:40:00Z", "2023-07-03T10:45:00Z", "2023-07-03T10:50:00Z", "2023-07-03T10:55:00Z", "2023-07-03T11:00:00Z", "2023-07-03T11:05:00Z", "2023-07-03T11:10:00Z", "2023-07-03T11:15:00Z", "2023-07-03T11:20:00Z", "2023-07-03T11:25:00Z", "2023-07-03T11:30:00Z", "2023-07-03T11:35:00Z", "2023-07-03T11:40:00Z", "2023-07-03T11:45:00Z", "2023-07-03T11:50:00Z", "2023-07-03T11:55:00Z", "2023-07-03T12:00:00Z", "2023-07-03T12:05:00Z", "2023-07-03T12:10:00Z", "2023-07-03T12:15:00Z", "2023-07-03T12:20:00Z", "2023-07-03T12:25:00Z", "2023-07-03T12:30:00Z", "2023-07-03T12:35:00Z", "2023-07-03T12:40:00Z", "2023-07-03T12:45:00Z", "2023-07-03T12:50:00Z", "2023-07-03T12:55:00Z", "2023-07-03T13:00:00Z", "2023-07-03T13:05:00Z", "2023-07-03T13:10:00Z", "2023-07-03T13:15:00Z", "2023-07-03T13:20:00Z", "2023-07-03T13:25:00Z", "2023-07-03T13:30:00Z", "2023-07-03T13:35:00Z", "2023-07-03T13:40:00Z", "2023-07-03T13:45:00Z", "2023-07-03T13:50:00Z", "2023-07-03T13:55:00Z", "2023-07-03T14:00:00Z", "2023-07-03T14:05:00Z", "2023-07-03T14:10:00Z", "2023-07-03T14:15:00Z", "2023-07-03T14:20:00Z", "2023-07-03T14:25:00Z", "2023-07-03T14:30:00Z", "2023-07-03T14:35:00Z", "2023-07-03T14:40:00Z", "2023-07-03T14:45:00Z", "2023-07-03T14:50:00Z", "2023-07-03T14:55:00Z", "2023-07-03T15:00:00Z", "2023-07-03T15:05:00Z", "2023-07-03T15:10:00Z", "2023-07-03T15:15:00Z", "2023-07-03T15:20:00Z", "2023-07-03T15:25:00Z", "2023-07-03T15:30:00Z", "2023-07-03T15:35:00Z", "2023-07-03T15:40:00Z", "2023-07-03T15:45:00Z", "2023-07-03T15:50:00Z", "2023-07-03T15:55:00Z", "2023-07-03T16:00:00Z", "2023-07-03T16:05:00Z", "2023-07-03T16:10:00Z", "2023-07-03T16:15:00Z", "2023-07-03T16:20:00Z", "2023-07-03T16:25:00Z", "2023-07-03T16:30:00Z", "2023-07-03T16:35:00Z", "2023-07-03T16:40:00Z", "2023-07-03T16:45:00Z", "2023-07-03T16:50:00Z", "2023-07-03T16:55:00Z", "2023-07-03T17:00:00Z", "2023-07-03T17:05:00Z", "2023-07-03T17:10:00Z", "2023-07-03T17:15:00Z", "2023-07-03T17:20:00Z", "2023-07-03T17:25:00Z", "2023-07-03T17:30:00Z", "2023-07-03T17:35:00Z", "2023-07-03T17:40:00Z", "2023-07-03T17:45:00Z", "2023-07-03T17:50:00Z", "2023-07-03T17:55:00Z", "2023-07-03T18:00:00Z", "2023-07-03T18:05:00Z", "2023-07-03T18:10:00Z", "2023-07-03T18:15:00Z", "2023-07-03T18:20:00Z", "2023-07-03T18:25:00Z", "2023-07-03T18:30:00Z", "2023-07-03T18:35:00Z", "2023-07-03T18:40:00Z", "2023-07-03T18:45:00Z", "2023-07-03T18:50:00Z", "2023-07-03T18:55:00Z", "2023-07-03T19:00:00Z", "2023-07-03T19:05:00Z", "2023-07-03T19:10:00Z", "2023-07-03T19:15:00Z", "2023-07-03T19:20:00Z", "2023-07-03T19:25:00Z", "2023-07-03T19:30:00Z", "2023-07-03T19:35:00Z", "2023-07-03T19:40:00Z", "2023-07-03T19:45:00Z", "2023-07-03T19:50:00Z", "2023-07-03T19:55:00Z", "2023-07-03T20:00:00Z", "2023-07-03T20:05:00Z", "2023-07-03T20:10:00Z", "2023-07-03T20:15:00Z", "2023-07-03T20:20:00Z", "2023-07-03T20:25:00Z", "2023-07-03T20:30:00Z", "2023-07-03T20:35:00Z", "2023-07-03T20:40:00Z", "2023-07-03T20:45:00Z", "2023-07-03T20:50:00Z", "2023-07-03T20:55:00Z", "2023-07-03T21:00:00Z", "2023-07-03T21:05:00Z", "2023-07-03T21:10:00Z", "2023-07-03T21:15:00Z", "2023-07-03T21:20:00Z", "2023-07-03T21:25:00Z", "2023-07-03T21:30:00Z", "2023-07-03T21:35:00Z", "2023-07-03T21:40:00Z", "2023-07-03T21:45:00Z", "2023-07-03T21:50:00Z", "2023-07-03T21:55:00Z"], + }), + }); + + /** + * up to 164 datapoints(1 hour values) from a {@link Day.energyPerPeriodChannelWithValues} and {@link Day.dataChannelWithValues} + * */ + export const WEEK: OeTester.Types.Channels = { + energyChannelWithValues: new QueryHistoricTimeseriesEnergyResponse("0", { + data: { + "_sum/ConsumptionActiveEnergy": 354079, + "evcs0/ActiveConsumptionEnergy": 157027, + "meter0/ActiveConsumptionEnergy": 100000, + }, + }), + dataChannelWithValues: new QueryHistoricTimeseriesDataResponse("0", { + data: { + '_sum/ConsumptionActivePower': [663.9876181166504, 937.5188284518829, 761.5839462743844, 599.7653758542141, 989.6435035552682, 666.2890016920473, 1054.177495462795, 1042.9070871481858, 661.1515631183221, 734.2340980187696, 845.5174603174603, 969.5830886670582, 591.8473777253978, 1960.0339449541284, 919.7469512195122, 1232.6632911392405, 562.9648946840522, 786.2627471383975, 931.422932330827, 837.381753312946, 1112.3010184835912, 902.5108194395176, 807.5094273743017, 988.311229946524, 614.0189035916824, 868.6555377207062, 906.9389035667107, 673.3970826580227, 827.6491228070175, 851.9108776685869, 852.9105374823197, 867.4681647940075, 1303.01722614841, 950.6813929313929, 1124.7157794676807, 908.7814790139906, 1554.5020215633424, 4743.944086021505, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null], + 'evcs0/ChargePower': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4586.923076923077, 4846.2192982456145, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null], + 'meter0/ActivePower': [27.956773446545736, 27.93238434163701, 28.003065134099618, 27.952205882352942, 27.998854961832063, 28.116988416988416, 27.987117552334944, 28.404306220095695, 22.10508757297748, 24.58289572393098, 25.521831735889243, 33.94027565084227, 66.40016920473774, 74.85995085995086, 56.30216802168022, 40.562390158172235, 42.72727272727273, 41.85823488533704, 29.56647864625302, 26.93582887700535, 29.227223427331886, 31.081920903954803, 29.50079575596817, 29.29895178197065, 27.74064837905237, 27.340638930163447, 27.272103350827614, 27.199391171993913, 26.97577592732778, 26.88116057233704, 27.04352806414662, 26.709154929577466, 24.765209940017137, 20.726594301221166, 24.283930058284763, 27.086363636363636, 47.70666666666666, 53.07067510548523, 52.73466476462197, 54.75776892430279, 50.23135033050047, 41.280141843971634, 31.509341199606688, 26.471978392977718, 31.050412465627865, 29.384710234278668, 27.95327604726101, 28.357904496986556, 25.56408588158751, null, 26.944094488188977, 27.036082474226806, 26.367164179104478, 25.185562632696392, 26.994444444444444, 25.911782850092536, 13.431970713849909, 24.309846431797652, 25.234712230215827, 26.126705653021443, 60.64339781328848, 39.96433289299868, 37.667578659370726, 50.66542750929368, 41.89218523878437, 29.88109495295124, 26.93968253968254, 25.741935483870968, 28.64, 31.331460674157302, 30.017262638717632, 28.636402753872634, 28.408956692913385, 28.14567233384853, 28.25509028044564, 28.12612966601179, 28.175675675675677, 27.409126063418405, 27.54943984413054, 27.246363209760677, 22.96663244353183, 21.65732959850607, 22.306306306306308, 25.892307692307693, 51.8, 52.903225806451616, 59.02597402597402, 39.35110294117647, 33.87375113533152, 29.98160073597056, 26.481973434535103, 29.473684210526315, 28.432854465958776, 29.162214983713355, 28.663861386138613, 28.23558082859464, 28.460033305578683, 29.076231430805315, 28.803389830508475, 28.62062404870624, 28.578023655093475, 28.370570107858242, 27.46546431312356, 27.873293515358363, 25.733505154639175, 26.357802874743328, 27.692853246044734, 24.205128205128204, null, 26.746031746031747, 23.178571428571427, 26.16861826697892, 28.333646616541355, 26.758232235701907, 23.993934142114384, 24.71902131018153, 28.23051948051948, 28.74572127139364, 28.485825458588103, 28.22232263895165, 28.392755392755394, 28.338354151359294, 27.164207340143776, 26.949324324324323, 26.942610652663166, 27.8092203898051, 27.980593607305938, 28.26596758817922, 29.656794425087107, 25.145056246299585, 25.203214100570243, 28.82728749323227, 32.22576966932725, 31.200444197667963, 30.594259988745076, 43.34990059642147, 46.15876288659794, 33.40802469135802, 27.489320388349515, 25.818808777429467, 27.95967741935484, 28.96995139195758, 27.5499557913351, 28.341370558375633, 28.25076053889613, 27.812838360402164, 28.10333080999243, 27.840314136125656, 27.800384615384615, 27.97958397534669, 27.235769230769233, 26.924960505529224, 29.03847980997625, 27.93128390596745, 34.10349373764008, 32.7387339055794, 29.509929906542055, 37.00855745721272, 32.240085744908896, 27.701363636363638, 30.787037037037038, 25.786028602860284, 29.997148966500358, 32.89406099518459, 35.328729281767956, 25.65564738292011, 27.46238030095759, 28.27226647356988], + }, + timestamps: ["2023-06-25T22:00:00Z", "2023-06-25T23:00:00Z", "2023-06-26T00:00:00Z", "2023-06-26T01:00:00Z", "2023-06-26T02:00:00Z", "2023-06-26T03:00:00Z", "2023-06-26T04:00:00Z", "2023-06-26T05:00:00Z", "2023-06-26T06:00:00Z", "2023-06-26T07:00:00Z", "2023-06-26T08:00:00Z", "2023-06-26T09:00:00Z", "2023-06-26T10:00:00Z", "2023-06-26T11:00:00Z", "2023-06-26T12:00:00Z", "2023-06-26T13:00:00Z", "2023-06-26T14:00:00Z", "2023-06-26T15:00:00Z", "2023-06-26T16:00:00Z", "2023-06-26T17:00:00Z", "2023-06-26T18:00:00Z", "2023-06-26T19:00:00Z", "2023-06-26T20:00:00Z", "2023-06-26T21:00:00Z", "2023-06-26T22:00:00Z", "2023-06-26T23:00:00Z", "2023-06-27T00:00:00Z", "2023-06-27T01:00:00Z", "2023-06-27T02:00:00Z", "2023-06-27T03:00:00Z", "2023-06-27T04:00:00Z", "2023-06-27T05:00:00Z", "2023-06-27T06:00:00Z", "2023-06-27T07:00:00Z", "2023-06-27T08:00:00Z", "2023-06-27T09:00:00Z", "2023-06-27T10:00:00Z", "2023-06-27T11:00:00Z", "2023-06-27T12:00:00Z", "2023-06-27T13:00:00Z", "2023-06-27T14:00:00Z", "2023-06-27T15:00:00Z", "2023-06-27T16:00:00Z", "2023-06-27T17:00:00Z", "2023-06-27T18:00:00Z", "2023-06-27T19:00:00Z", "2023-06-27T20:00:00Z", "2023-06-27T21:00:00Z", "2023-06-27T22:00:00Z", "2023-06-27T23:00:00Z", "2023-06-28T00:00:00Z", "2023-06-28T01:00:00Z", "2023-06-28T02:00:00Z", "2023-06-28T03:00:00Z", "2023-06-28T04:00:00Z", "2023-06-28T05:00:00Z", "2023-06-28T06:00:00Z", "2023-06-28T07:00:00Z", "2023-06-28T08:00:00Z", "2023-06-28T09:00:00Z", "2023-06-28T10:00:00Z", "2023-06-28T11:00:00Z", "2023-06-28T12:00:00Z", "2023-06-28T13:00:00Z", "2023-06-28T14:00:00Z", "2023-06-28T15:00:00Z", "2023-06-28T16:00:00Z", "2023-06-28T17:00:00Z", "2023-06-28T18:00:00Z", "2023-06-28T19:00:00Z", "2023-06-28T20:00:00Z", "2023-06-28T21:00:00Z", "2023-06-28T22:00:00Z", "2023-06-28T23:00:00Z", "2023-06-29T00:00:00Z", "2023-06-29T01:00:00Z", "2023-06-29T02:00:00Z", "2023-06-29T03:00:00Z", "2023-06-29T04:00:00Z", "2023-06-29T05:00:00Z", "2023-06-29T06:00:00Z", "2023-06-29T07:00:00Z", "2023-06-29T08:00:00Z", "2023-06-29T09:00:00Z", "2023-06-29T10:00:00Z", "2023-06-29T11:00:00Z", "2023-06-29T12:00:00Z", "2023-06-29T13:00:00Z", "2023-06-29T14:00:00Z", "2023-06-29T15:00:00Z", "2023-06-29T16:00:00Z", "2023-06-29T17:00:00Z", "2023-06-29T18:00:00Z", "2023-06-29T19:00:00Z", "2023-06-29T20:00:00Z", "2023-06-29T21:00:00Z", "2023-06-29T22:00:00Z", "2023-06-29T23:00:00Z", "2023-06-30T00:00:00Z", "2023-06-30T01:00:00Z", "2023-06-30T02:00:00Z", "2023-06-30T03:00:00Z", "2023-06-30T04:00:00Z", "2023-06-30T05:00:00Z", "2023-06-30T06:00:00Z", "2023-06-30T07:00:00Z", "2023-06-30T08:00:00Z", "2023-06-30T09:00:00Z", "2023-06-30T10:00:00Z", "2023-06-30T11:00:00Z", "2023-06-30T12:00:00Z", "2023-06-30T13:00:00Z", "2023-06-30T14:00:00Z", "2023-06-30T15:00:00Z", "2023-06-30T16:00:00Z", "2023-06-30T17:00:00Z", "2023-06-30T18:00:00Z", "2023-06-30T19:00:00Z", "2023-06-30T20:00:00Z", "2023-06-30T21:00:00Z", "2023-06-30T22:00:00Z", "2023-06-30T23:00:00Z", "2023-07-01T00:00:00Z", "2023-07-01T01:00:00Z", "2023-07-01T02:00:00Z", "2023-07-01T03:00:00Z", "2023-07-01T04:00:00Z", "2023-07-01T05:00:00Z", "2023-07-01T06:00:00Z", "2023-07-01T07:00:00Z", "2023-07-01T08:00:00Z", "2023-07-01T09:00:00Z", "2023-07-01T10:00:00Z", "2023-07-01T11:00:00Z", "2023-07-01T12:00:00Z", "2023-07-01T13:00:00Z", "2023-07-01T14:00:00Z", "2023-07-01T15:00:00Z", "2023-07-01T16:00:00Z", "2023-07-01T17:00:00Z", "2023-07-01T18:00:00Z", "2023-07-01T19:00:00Z", "2023-07-01T20:00:00Z", "2023-07-01T21:00:00Z", "2023-07-01T22:00:00Z", "2023-07-01T23:00:00Z", "2023-07-02T00:00:00Z", "2023-07-02T01:00:00Z", "2023-07-02T02:00:00Z", "2023-07-02T03:00:00Z", "2023-07-02T04:00:00Z", "2023-07-02T05:00:00Z", "2023-07-02T06:00:00Z", "2023-07-02T07:00:00Z", "2023-07-02T08:00:00Z", "2023-07-02T09:00:00Z", "2023-07-02T10:00:00Z", "2023-07-02T11:00:00Z", "2023-07-02T12:00:00Z", "2023-07-02T13:00:00Z", "2023-07-02T14:00:00Z", "2023-07-02T15:00:00Z", "2023-07-02T16:00:00Z", "2023-07-02T17:00:00Z", "2023-07-02T18:00:00Z", "2023-07-02T19:00:00Z", "2023-07-02T20:00:00Z", "2023-07-02T21:00:00Z"], + }), + }; + + /** + * up to 31 datapoints(1 day values) from a {@link Day.energyPerPeriodChannelWithValues} and {@link Day.dataChannelWithValues}*/ + export const MONTH: OeTester.Types.Channels = { + energyChannelWithValues: new QueryHistoricTimeseriesEnergyResponse("0", { + data: { + '_sum/ConsumptionActiveEnergy': 1033427, + "evcs0/ActiveConsumptionEnergy": 328451, + "meter0/ActiveConsumptionEnergy": 21649, + }, + }), + energyPerPeriodChannelWithValues: + new QueryHistoricTimeseriesEnergyPerPeriodResponse("0", { + data: { + '_sum/ConsumptionActiveEnergy': [1784.3478512581187, 955.1978135997077, 1604.9176251387696, 1821.5474663613152, 1204.011627189301, 1037.408900359932, 1287.891020875591, 1183.057735422114, 1027.8784377276404, 1412.783196754379, 737.2379614126091, 730.6143394985477, 1727.4568452231197, 2045.4827463867603, 1289.9867373938441, 1866.5731598778827, 896.448259060122, 1271.0485678635469, 1489.7323302960576, 1367.9696489029907, 2375.6092366846033, 2368.729102836224, 2686.60326649514, 1597.0390753045413, 972.6650191463931, 1774.233690168573, 2953.838257099637, 917.3087792235759, 1172.9800154902882, null, null], + "evcs0/ActiveConsumptionEnergy": [598.058461158158, 0, 607.3861225965935, 891.3491768679577, 269.6236843407865, 0, 306.41009901340226, 220.51407209843148, 50.15525733301707, 356.42246970726825, 0, 0, 880.0942036863182, 977.4033026217928, 210.23831546417276, 787.0712558876392, 0, 165.50743075023163, 513.2605942604259, 149.06825174512016, 883.6100586172083, 1203.117101530366, 1467.2314708234808, 553.6230686820822, 0, 714.8486366912176, 1836.7765179313803, 0, 300.374916784946, null, null], + "meter0/ActiveConsumptionEnergy": [15.53700680772126, 13.97856617670663, 16.22420643945345, 15.425155003970989, 16.41557086346929, 15.280936198647838, 15.028196655704793, 15.146427851947054, 15.567356482244767, 17.404197969735606, 17.635152684968116, 14.140394156739468, 16.107488806188936, 16.75001277671301, 15.512752420609466, 14.951999780788457, 13.733457057782298, 16.868671206682027, 14.770978996449593, 16.47697124898351, 16.772182319685665, 16.288562161254703, 15.417362341926745, 15.892028990939403, 13.811584043067414, 14.81782772305683, 14.165639305307824, 16.223347257543285, 14.495672387672808, null, null], + }, + timestamps: ["2023-05-31T22:00:00Z", "2023-06-01T22:00:00Z", "2023-06-02T22:00:00Z", "2023-06-03T22:00:00Z", "2023-06-04T22:00:00Z", "2023-06-05T22:00:00Z", "2023-06-06T22:00:00Z", "2023-06-07T22:00:00Z", "2023-06-08T22:00:00Z", "2023-06-09T22:00:00Z", "2023-06-10T22:00:00Z", "2023-06-11T22:00:00Z", "2023-06-12T22:00:00Z", "2023-06-13T22:00:00Z", "2023-06-14T22:00:00Z", "2023-06-15T22:00:00Z", "2023-06-16T22:00:00Z", "2023-06-17T22:00:00Z", "2023-06-18T22:00:00Z", "2023-06-19T22:00:00Z", "2023-06-20T22:00:00Z", "2023-06-21T22:00:00Z", "2023-06-22T22:00:00Z", "2023-06-23T22:00:00Z", "2023-06-24T22:00:00Z", "2023-06-25T22:00:00Z", "2023-06-26T22:00:00Z", "2023-06-27T22:00:00Z", "2023-06-28T22:00:00Z", "2023-06-29T22:00:00Z"], + }), + }; + + /** + * up to 12 datapoints(1 month values) from a {@link Day.energyPerPeriodChannelWithValues} and {@link Day.dataChannelWithValues}*/ + export const YEAR: OeTester.Types.Channels = { + energyChannelWithValues: new QueryHistoricTimeseriesEnergyResponse("0", { + data: { + '_sum/ConsumptionActiveEnergy': 14863655, + "_sum/ConsumptionActiveEnergyL1": 4954551, + "_sum/ConsumptionActiveEnergyL2": 4954551, + "_sum/ConsumptionActiveEnergyL3": 4954551, + 'evcs0/ActiveConsumptionEnergy': 2071139, + 'meter0/ActiveConsumptionEnergy': 1908650, + }, + }), + energyPerPeriodChannelWithValues: + new QueryHistoricTimeseriesEnergyPerPeriodResponse("0", { + data: { + '_sum/ConsumptionActiveEnergy': [1682941, 1834729, 1805222, 1934144, 1757577, 1511352, 2306988, 2029933, 0, 0, 0, 0], + '_sum/ConsumptionActiveEnergyL1': [560980.3333333334, 611576.3333333334, 601740.6666666666, 644714.6666666666, 585859, 503784, 768996, 676644.3333333334, 0, 0, 0, 0], + '_sum/ConsumptionActiveEnergyL2': [560980.3333333334, 611576.3333333334, 601740.6666666666, 644714.6666666666, 585859, 503784, 768996, 676644.3333333334, 0, 0, 0, 0], + '_sum/ConsumptionActiveEnergyL3': [560980.3333333334, 611576.3333333334, 601740.6666666666, 644714.6666666666, 585859, 503784, 768996, 676644.3333333334, 0, 0, 0, 0], + 'evcs0/ActiveConsumptionEnergy': [69104, 131703, 25773, 51085, 169943, 332522, 748189, 540740, 0, 0, 0, 0], + 'meter0/ActiveConsumptionEnergy': [338070, 312380, 298930, 317700, 200210, 151160, 145880, 144280, 0, 0, 0, 0], + }, + timestamps: ["2022-12-31T23:00:00Z", "2023-01-31T23:00:00Z", "2023-02-28T23:00:00Z", "2023-03-31T22:00:00Z", "2023-04-30T22:00:00Z", "2023-05-31T22:00:00Z", "2023-06-30T22:00:00Z", "2023-07-31T22:00:00Z", "2023-08-31T22:00:00Z", "2023-09-30T22:00:00Z", "2023-10-31T23:00:00Z", "2023-11-30T23:00:00Z"], + }), + }; +} diff --git a/ui/src/app/edge/history/common/consumption/chart/chart.constants.spec.ts b/ui/src/app/edge/history/common/consumption/chart/chart.constants.spec.ts new file mode 100644 index 00000000000..39e619fa3e4 --- /dev/null +++ b/ui/src/app/edge/history/common/consumption/chart/chart.constants.spec.ts @@ -0,0 +1,17 @@ +import { DummyConfig } from "src/app/shared/edge/edgeconfig.spec"; +import { EdgeConfig } from "src/app/shared/shared"; +import { removeFunctions, TestContext } from "src/app/shared/test/utils.spec"; + +import { ChartComponent } from "./chart"; +import { OeTester } from "src/app/shared/genericComponents/shared/testing/common"; +import { OeChartTester } from "src/app/shared/genericComponents/shared/testing/tester"; + +export function expectView(config: EdgeConfig, testContext: TestContext, chartType: 'line' | 'bar', channels: OeTester.Types.Channels, view: OeChartTester.View): void { + + expect(removeFunctions(OeChartTester + .apply(ChartComponent + .getChartData( + DummyConfig.convertDummyEdgeConfigToRealEdgeConfig(config), + testContext.translate), chartType, channels, testContext))) + .toEqual(removeFunctions(view)); +}; diff --git a/ui/src/app/edge/history/common/consumption/chart/chart.spec.ts b/ui/src/app/edge/history/common/consumption/chart/chart.spec.ts new file mode 100644 index 00000000000..e38ba109db9 --- /dev/null +++ b/ui/src/app/edge/history/common/consumption/chart/chart.spec.ts @@ -0,0 +1,89 @@ +import { ChartConfig, DummyConfig } from "src/app/shared/edge/edgeconfig.spec"; + +import { sharedSetup, TestContext } from "../../../../../shared/test/utils.spec"; +import { History } from "./channels.spec"; +import { expectView } from "./chart.constants.spec"; +import { DATA, LABELS } from "../../energy/chart/chart.constants.spec"; + +describe('History Consumption', () => { + const defaultEMS = DummyConfig.from( + DummyConfig.Component.SOCOMEC_CONSUMPTION_METER("meter0", "Whirlpool"), + DummyConfig.Component.EVCS_HARDY_BARTH("evcs0", "Charging Station"), + ); + + let TEST_CONTEXT: TestContext; + beforeEach(() => + TEST_CONTEXT = sharedSetup(), + ); + + it('#getChartData()', () => { + { + + // Line-Chart, phases + expectView(defaultEMS, TEST_CONTEXT, 'line', History.DAY, + { + datasets: { + data: [ + DATA('Gesamt: 93 kWh', [null, null, null, 0.5658045977011494, 0.5605148514851485, 0.561425925925926, 0.5732169811320755, 0.5658080808080809, 0.5879803921568627, 0.5842389380530973, 0.6074818181818182, 0.6050275229357799, 0.5956407766990292, 0.6025294117647059, 0.5781684210526317, 0.5816813186813187, 0.6495166666666666, 0.5602999999999999, 0.56703738317757, 0.6297672413793104, 0.5688613861386138, 0.5896039603960396, 0.6345090909090909, 0.6226633663366337, 0.6177196261682243, 0.608122641509434, 0.60278, 0.6508155339805825, 0.6058877551020408, 0.5943904761904762, 0.57636, 0.5650660377358491, 0.587495145631068, 0.626375, 0.6819428571428572, 0.6504629629629629, 0.6313738317757009, 0.68725, 0.5602452830188679, 0.5278952380952382, 0.6202222222222221, 0.5466355140186916, 0.5878130841121496, 0.604, 0.616295918367347, 0.5789405940594059, 0.5943396226415094, 0.6481078431372549, null, null, null, 0.5652183908045977, 0.5736481481481481, 0.5365462962962964, 0.558081081081081, 0.5747543859649124, 0.5743557692307693, 0.5969047619047619, 0.6540720720720721, 0.61521, 0.6128045977011494, 0.6361100000000001, 0.6137948717948718, 0.5388857142857142, 0.5371157894736842, 0.5511634615384615, 0.5588809523809524, 0.5591222222222223, 0.6185576923076923, 0.6543287671232877, 0.6160574712643678, 0.5889056603773585, 0.5787096774193549, 0.583036036036036, 0.572570093457944, 0.5952631578947368, 0.7450888888888888, 0.8207323943661972, 2.6511923076923076, 8.063131147540984, 6.952055555555556, 7.41341052631579, 6.695175, 6.688301075268817, 7.135544444444445, 6.9356125, 6.768398148148147, 6.962593220338983, 3.44951968503937, 0.6774427860696518, 0.9827305699481865, 0.8582012987012987, 0.7678924050632912, 0.761950495049505, 0.6821319796954315, 0.7254198473282443, 0.7021286549707602, 0.7309484536082475, 0.739, 0.730572864321608, 0.7547467532467532, 0.657373417721519, 0.6409480519480519, 0.6698156424581005, 0.7876280991735537, 2.931229357798165, 1.9542808988764044, 0.7775346534653466, 1.098538860103627, 1.2441524390243903, 2.9194913793103447, 2.9874188034188034, 3.4140294117647056, 1.3552, 2.7142824427480914, 2.6578703703703703, 2.8738923076923077, 6.140337078651685, 3.966560606060606, 3.0215789473684214, 1.7741875, 1.07646, 1.4268691588785047, 1.2610386740331492, 1.0193491124260354, 1.194960199004975, 1.2412878787878787, 3.323, 3.96845625, 1.4680961538461539, 3.6304166666666666, 2.2695301204819276, 2.554391025641026, 1.8457888888888887, 1.7289767441860464, 2.8620799999999997, 2.3241241379310345, 1.9640169491525423, 1.8084, 3.4660503597122303, 2.2974397590361444, 2.5300493827160495, 2.439358490566038, 2.0079060773480664, 1.7515, 1.4163181818181818, 1.4292298850574712, 1.4520298507462688, 1.4897204301075269, 1.6330952380952382, 1.8262928571428572, 1.6101904761904762, 1.680929292929293, 2.881743119266055, 3.5851634615384613, 3.6891666666666665, 3.6573402777777777, 3.6435348837209305, 3.7148645833333336, 3.731375, 3.74479, 3.6362363636363635, 4.273113924050633, 3.4461999999999997, 3.5387142857142857, 3.7906065573770493, 3.5276750000000003, 3.4676712328767123, 3.5595, 3.7982, 5.460666666666667, 1.3094406779661016, 1.5357454545454545, 3.4238260869565216, 3.3823636363636367, 3.4006315789473684, 2.95075, 3.386731707317073, 2.506, 1.4471666666666667, 1.4425999999999999, 0.946, 0.9425789473684211, 0.9507142857142856, 0.947, 0.9762857142857143, 1.7862857142857143, 1.5135777777777777, 1.4995625, 1.338, 1.3278125, 1.2739175257731958, 1.4387457627118645, 1.2484186046511627, 1.2866693548387098, 1.2848934911242604, 1.2237952755905512, 0.74809375, 0.8717684210526315, 0.8445338983050847, 0.7916749999999999, 0.8041932773109244, 0.7303737373737375, 0.7055024390243902, 0.6872407407407407, 0.6909939759036144, 0.751, 0.765139344262295, 0.686871794871795, 0.6697434210526315, 1.7678091603053436, 0.7246764705882353, 0.7482772277227723, 0.9401142857142858, 0.750368, 1.3660232558139536, 0.7274137931034482, 0.710719512195122, 0.6898555555555557, 0.739453488372093, 0.817875, 0.7304303797468354, 0.7355890410958904, 0.738225806451613, 1.906921739130435, 2.290785714285714, 1.2075072463768115, 1.1675890410958905, 1.2290208333333332, 1.1923777777777778, 1.2088717948717949, 1.367715909090909, 1.284223300970874, 1.1631739130434782, 1.15253, 1.1614545454545455, 1.2195681818181818, 1.183752808988764, 1.197778947368421, 1.2338888888888888, 1.275070588235294, 1.235554054054054, 1.20783908045977, 1.2416184210526318, 1.159042735042735, 1.1382948717948718, 1.1069915966386554, 1.1714504504504506, 1.223822429906542, 1.1221696428571428, 1.018892857142857, 0.9818285714285714, 0.9988363636363636, 6.056572916666667, 7.225528846153845, 7.193834782608696, 7.507321100917431, 7.588695238095238, 7.678689189189189, 9.469633027522935, 10.236186046511628, 10.106608695652174, 9.989125, 9.948229357798166, 9.796030927835051, 9.704217391304349, 8.454028571428571, 6.813476190476191, 6.706782608695652, 6.523452173913043, 6.661553571428572, 5.620777777777778, 0.8123142857142857, 0.8095892857142857, 0.8664786324786324, 0.8778319327731092, 0.8108141592920354, 0.8157121212121212, 0.7706470588235294, 0.7633157894736842, 0.7815151515151515, 0.8075833333333333, 0.824743119266055, 0.8762151898734176, 0.882424, 0.7502213114754098, 0.675954954954955, 0.6371222222222223]), + DATA('Charging Station: 13,7 kWh', [null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, null, 0, 4.104142857142857, 5.829969696969697, 5.806212121212121, 6.195333333333333, 5.777333333333333, 5.78625, 5.789727272727273, 5.789571428571429, 5.783052631578948, 5.772657142857144, 4.864842105263158, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, null, null, 0, null, null, 0, 0, null, 0, 0, null, 0, 0, null, 0, 0, 0, 0, 0, 0, null, 0, null, null, 0, 0, null, null, 0, 0, 0, null, 0, null, null, 0, 0, null, 0, null, null, null, null, 0, null, 0, 0, null, null, null, null, null, 0, null, null, null, null, null, 0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0, 0, null, 0, null, 0, 0, 0, 0, 0, 0, null, null, 0, 0, null, 0, 0, 0, null, null, 0, 0, null, 0, 0, null, null, null, 0, null, null, null, null, null, null, 0, 0, 0, null, 0, 0, 0, 0, null, 0, null, 0, null, 0, 0, 0, null, 0, 0, 0, 0, 0, 5.213095238095239, 5.787580645161291, 5.7894848484848485, 5.790818181818182, 5.80734375, 5.820136363636364, 5.7988620689655175, 5.809041666666667, 5.8055625, 5.7943461538461545, 5.798, 5.740214285714285, 5.727242424242424, 5.742542857142857, 5.753424242424242, 5.7524, 5.731966666666667, 5.734323529411765, 5.335586206896552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null]), + DATA('Whirlpool: 15,9 kWh', [0.12428571428571429, 0, null, 0, 0.17333333333333334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0.11, 0.11333333333333333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.145, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0.11333333333333333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 0.11333333333333333, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 0.13, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 0.14, null, null, null, 2.126875, 0.175, 0.176, null, 0.18, 0.18, 0.185, 0.18, null, 0.185, 0.19, 0.18, 0.18, 0.17625, 0.17583333333333334, 0.17, 0.175, 0.17, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]), + DATA('Sonstiger: 63,3 kWh', [null, null, null, 0.5658045977011494, 0.3871815181518151, 0.561425925925926, 0.5732169811320755, 0.5658080808080809, 0.5879803921568627, 0.5842389380530973, 0.6074818181818182, 0.6050275229357799, 0.5956407766990292, 0.6025294117647059, 0.5781684210526317, 0.5816813186813187, 0.6495166666666666, 0.5602999999999999, 0.56703738317757, 0.6297672413793104, 0.5688613861386138, 0.5896039603960396, 0.5245090909090909, 0.5093300330033004, 0.6177196261682243, 0.608122641509434, 0.60278, 0.6508155339805825, 0.6058877551020408, 0.5943904761904762, 0.57636, 0.5650660377358491, 0.587495145631068, 0.626375, 0.6819428571428572, 0.6504629629629629, 0.6313738317757009, 0.68725, 0.5602452830188679, 0.5278952380952382, 0.6202222222222221, 0.4016355140186916, 0.5878130841121496, 0.604, 0.616295918367347, 0.5789405940594059, 0.5943396226415094, 0.6481078431372549, null, null, null, 0.5652183908045977, 0.5736481481481481, 0.5365462962962964, 0.558081081081081, 0.5747543859649124, 0.5743557692307693, 0.5969047619047619, 0.6540720720720721, 0.5018766666666667, 0.6128045977011494, 0.6361100000000001, 0.6137948717948718, 0.5388857142857142, 0.5371157894736842, 0.5511634615384615, 0.5588809523809524, 0.5591222222222223, 0.6185576923076923, 0.6543287671232877, 0.6160574712643678, 0.5889056603773585, 0.5787096774193549, 0.583036036036036, 0.572570093457944, 0.5952631578947368, 0.7450888888888888, 0.7073990610328639, -1.452950549450549, 2.233161450571287, 1.1458434343434352, 1.2180771929824568, 0.9178416666666669, 0.9020510752688171, 1.3458171717171723, 1.1460410714285718, 0.9853455165691996, 1.189936077481839, -1.4153224202237875, 0.6774427860696518, 0.9827305699481865, 0.8582012987012987, 0.7678924050632912, 0.761950495049505, 0.6821319796954315, 0.5954198473282443, 0.7021286549707602, 0.7309484536082475, 0.739, 0.730572864321608, 0.7547467532467532, 0.657373417721519, 0.6409480519480519, 0.6698156424581005, 0.7876280991735537, 2.931229357798165, 1.9542808988764044, 0.7775346534653466, 1.098538860103627, 1.2441524390243903, 2.9194913793103447, 2.9874188034188034, 3.4140294117647056, 1.2151999999999998, 2.7142824427480914, 2.6578703703703703, 2.8738923076923077, 4.013462078651685, 3.791560606060606, 2.845578947368421, 1.7741875, 0.89646, 1.2468691588785048, 1.0760386740331491, 0.8393491124260355, 1.194960199004975, 1.0562878787878787, 3.133, 3.78845625, 1.288096153846154, 3.4541666666666666, 2.0936967871485943, 2.384391025641026, 1.6707888888888887, 1.5589767441860465, 2.8620799999999997, 2.3241241379310345, 1.9640169491525423, 1.8084, 3.4660503597122303, 2.2974397590361444, 2.5300493827160495, 2.439358490566038, 2.0079060773480664, 1.7515, 1.4163181818181818, 1.4292298850574712, 1.4520298507462688, 1.4897204301075269, 1.6330952380952382, 1.8262928571428572, 1.6101904761904762, 1.680929292929293, 2.881743119266055, 3.5851634615384613, 3.6891666666666665, 3.6573402777777777, 3.6435348837209305, 3.7148645833333336, 3.731375, 3.74479, 3.6362363636363635, 4.273113924050633, 3.4461999999999997, 3.5387142857142857, 3.7906065573770493, 3.5276750000000003, 3.4676712328767123, 3.5595, 3.7982, 5.460666666666667, 1.3094406779661016, 1.5357454545454545, 3.4238260869565216, 3.3823636363636367, 3.4006315789473684, 2.95075, 3.386731707317073, 2.506, 1.4471666666666667, 1.4425999999999999, 0.946, 0.9425789473684211, 0.9507142857142856, 0.947, 0.9762857142857143, 1.7862857142857143, 1.5135777777777777, 1.4995625, 1.338, 1.3278125, 1.2739175257731958, 1.4387457627118645, 1.2484186046511627, 1.2866693548387098, 1.2848934911242604, 1.2237952755905512, 0.74809375, 0.8717684210526315, 0.8445338983050847, 0.7916749999999999, 0.8041932773109244, 0.7303737373737375, 0.7055024390243902, 0.6872407407407407, 0.6909939759036144, 0.751, 0.765139344262295, 0.686871794871795, 0.6697434210526315, 1.7678091603053436, 0.7246764705882353, 0.7482772277227723, 0.9401142857142858, 0.750368, 1.3660232558139536, 0.7274137931034482, 0.710719512195122, 0.6898555555555557, 0.739453488372093, 0.817875, 0.7304303797468354, 0.7355890410958904, 0.738225806451613, 1.906921739130435, 2.290785714285714, 1.2075072463768115, 1.1675890410958905, 1.2290208333333332, 1.1923777777777778, 1.2088717948717949, 1.367715909090909, 1.284223300970874, 1.1631739130434782, 1.15253, 1.1614545454545455, 1.2195681818181818, 1.183752808988764, 1.197778947368421, 1.2338888888888888, 1.275070588235294, 1.235554054054054, 1.20783908045977, 1.2416184210526318, 1.159042735042735, 1.1382948717948718, 1.1069915966386554, 1.1714504504504506, 1.223822429906542, 1.1221696428571428, 1.018892857142857, 0.9818285714285714, 0.9988363636363636, 0.8434776785714284, 1.4379482009925546, 1.4043499341238475, 1.7165029190992493, 1.781351488095238, 1.8585528255528247, 3.6707709585574175, 4.427144379844961, 4.301046195652174, 4.194778846153845, 4.150229357798166, 4.055816642120766, 3.976974967061925, 2.711485714285714, 1.0600519480519486, 0.954382608695652, 0.7914855072463762, 0.9272300420168067, 0.28519157088122604, 0.8123142857142857, 0.8095892857142857, 0.8664786324786324, 0.8778319327731092, 0.8108141592920354, 0.8157121212121212, 0.7706470588235294, 0.7633157894736842, 0.7815151515151515, 0.8075833333333333, 0.824743119266055, 0.8762151898734176, 0.882424, 0.7502213114754098, 0.675954954954955, 0.6371222222222223]), + ], + labels: LABELS(History.DAY.dataChannelWithValues.result.timestamps), + options: ChartConfig.LINE_CHART_OPTIONS('hour'), + }, + }); + } + + { + // Line-Chart, no phases, no phasecolors + expectView(defaultEMS, TEST_CONTEXT, 'line', History.WEEK, + { + datasets: { + data: [ + DATA('Gesamt: 354,1 kWh', [0.6639876181166504, 0.9375188284518828, 0.7615839462743844, 0.5997653758542141, 0.9896435035552682, 0.6662890016920473, 1.054177495462795, 1.0429070871481858, 0.6611515631183221, 0.7342340980187696, 0.8455174603174603, 0.9695830886670582, 0.5918473777253977, 1.9600339449541284, 0.9197469512195122, 1.2326632911392406, 0.5629648946840522, 0.7862627471383975, 0.9314229323308271, 0.837381753312946, 1.112301018483591, 0.9025108194395176, 0.8075094273743018, 0.988311229946524, 0.6140189035916823, 0.8686555377207063, 0.9069389035667107, 0.6733970826580227, 0.8276491228070175, 0.8519108776685869, 0.8529105374823197, 0.8674681647940076, 1.3030172261484099, 0.9506813929313929, 1.1247157794676808, 0.9087814790139906, 1.5545020215633425, 4.743944086021505, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]), + DATA('Charging Station: 157 kWh', [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.586923076923077, 4.8462192982456145, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]), + DATA('Whirlpool: 100 kWh', [0.027956773446545735, 0.02793238434163701, 0.028003065134099617, 0.02795220588235294, 0.027998854961832062, 0.028116988416988415, 0.027987117552334944, 0.028404306220095696, 0.02210508757297748, 0.02458289572393098, 0.025521831735889244, 0.03394027565084227, 0.06640016920473774, 0.07485995085995086, 0.05630216802168022, 0.040562390158172236, 0.042727272727272725, 0.04185823488533704, 0.02956647864625302, 0.02693582887700535, 0.029227223427331885, 0.031081920903954802, 0.02950079575596817, 0.02929895178197065, 0.02774064837905237, 0.027340638930163447, 0.027272103350827612, 0.027199391171993912, 0.02697577592732778, 0.02688116057233704, 0.02704352806414662, 0.026709154929577466, 0.024765209940017137, 0.020726594301221167, 0.024283930058284765, 0.027086363636363638, 0.04770666666666666, 0.05307067510548523, 0.05273466476462197, 0.054757768924302785, 0.05023135033050047, 0.041280141843971635, 0.03150934119960669, 0.026471978392977717, 0.031050412465627866, 0.029384710234278667, 0.02795327604726101, 0.028357904496986556, 0.025564085881587508, null, 0.026944094488188977, 0.027036082474226807, 0.026367164179104476, 0.025185562632696393, 0.026994444444444442, 0.025911782850092536, 0.01343197071384991, 0.024309846431797653, 0.02523471223021583, 0.026126705653021443, 0.06064339781328848, 0.03996433289299867, 0.037667578659370725, 0.050665427509293676, 0.04189218523878437, 0.02988109495295124, 0.02693968253968254, 0.025741935483870968, 0.028640000000000002, 0.031331460674157305, 0.030017262638717634, 0.028636402753872633, 0.028408956692913385, 0.02814567233384853, 0.02825509028044564, 0.028126129666011787, 0.028175675675675676, 0.027409126063418405, 0.027549439844130538, 0.027246363209760677, 0.02296663244353183, 0.02165732959850607, 0.022306306306306308, 0.025892307692307694, 0.0518, 0.05290322580645162, 0.05902597402597402, 0.03935110294117647, 0.03387375113533152, 0.02998160073597056, 0.0264819734345351, 0.029473684210526315, 0.028432854465958775, 0.029162214983713356, 0.028663861386138613, 0.02823558082859464, 0.028460033305578683, 0.029076231430805316, 0.028803389830508477, 0.02862062404870624, 0.028578023655093474, 0.02837057010785824, 0.02746546431312356, 0.027873293515358364, 0.025733505154639177, 0.02635780287474333, 0.027692853246044733, 0.024205128205128205, null, 0.026746031746031747, 0.023178571428571427, 0.026168618266978923, 0.028333646616541353, 0.026758232235701906, 0.023993934142114384, 0.02471902131018153, 0.02823051948051948, 0.028745721271393642, 0.028485825458588104, 0.02822232263895165, 0.028392755392755393, 0.028338354151359293, 0.027164207340143777, 0.02694932432432432, 0.026942610652663165, 0.027809220389805097, 0.027980593607305936, 0.02826596758817922, 0.029656794425087108, 0.025145056246299584, 0.02520321410057024, 0.02882728749323227, 0.03222576966932725, 0.031200444197667963, 0.030594259988745078, 0.04334990059642147, 0.04615876288659794, 0.03340802469135802, 0.027489320388349517, 0.025818808777429467, 0.02795967741935484, 0.028969951391957578, 0.027549955791335103, 0.02834137055837563, 0.028250760538896132, 0.027812838360402166, 0.02810333080999243, 0.027840314136125657, 0.027800384615384616, 0.027979583975346688, 0.027235769230769234, 0.026924960505529224, 0.029038479809976248, 0.02793128390596745, 0.03410349373764008, 0.0327387339055794, 0.029509929906542054, 0.03700855745721272, 0.03224008574490889, 0.02770136363636364, 0.030787037037037036, 0.025786028602860285, 0.029997148966500357, 0.03289406099518459, 0.03532872928176795, 0.025655647382920112, 0.02746238030095759, 0.02827226647356988]), + DATA('Sonstiger: 97,1 kWh', [0.6360308446701046, 0.9095864441102458, 0.7335808811402847, 0.5718131699718612, 0.9616446485934361, 0.6381720132750589, 1.02619037791046, 1.0145027809280902, 0.6390464755453447, 0.7096512022948386, 0.819995628581571, 0.935642813016216, 0.5254472085206601, 1.8851739940941776, 0.863444783197832, 1.1921009009810684, 0.5202376219567795, 0.7444045122530605, 0.901856453684574, 0.8104459244359407, 1.0830737950562592, 0.8714288985355628, 0.7780086316183336, 0.9590122781645534, 0.58627825521263, 0.8413148987905428, 0.8796668002158831, 0.6461976914860288, 0.8006733468796897, 0.8250297170962498, 0.825867009418173, 0.8407590098644301, 1.2782520162083928, 0.9299547986301717, 1.100431849409396, 0.881695115377627, -3.0801277220264014, 0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]), + ], + labels: LABELS(History.WEEK.dataChannelWithValues.result.timestamps), + options: ChartConfig.LINE_CHART_OPTIONS('day'), + }, + }); + } + + { + // Bar-Chart, no phases, no phasecolors + expectView(defaultEMS, TEST_CONTEXT, 'bar', History.MONTH, + { + datasets: { + data: [ + DATA('Gesamt: 1.033,4 kWh', [1.7843478512581188, 0.9551978135997077, 1.6049176251387696, 1.8215474663613151, 1.2040116271893009, 1.037408900359932, 1.287891020875591, 1.1830577354221141, 1.0278784377276404, 1.4127831967543791, 0.7372379614126091, 0.7306143394985477, 1.7274568452231196, 2.04548274638676, 1.289986737393844, 1.8665731598778827, 0.896448259060122, 1.2710485678635468, 1.4897323302960577, 1.3679696489029907, 2.3756092366846033, 2.3687291028362236, 2.68660326649514, 1.5970390753045414, 0.9726650191463931, 1.7742336901685731, 2.953838257099637, 0.9173087792235759, 1.1729800154902883, null, null]), + DATA('Charging Station: 328,5 kWh', [0.598058461158158, 0, 0.6073861225965935, 0.8913491768679577, 0.2696236843407865, 0, 0.30641009901340227, 0.2205140720984315, 0.05015525733301707, 0.35642246970726826, 0, 0, 0.8800942036863182, 0.9774033026217929, 0.21023831546417276, 0.7870712558876392, 0, 0.16550743075023164, 0.5132605942604259, 0.14906825174512017, 0.8836100586172083, 1.2031171015303659, 1.4672314708234808, 0.5536230686820822, 0, 0.7148486366912177, 1.8367765179313804, 0, 0.300374916784946, null, null]), + DATA('Whirlpool: 21,6 kWh', [0.01553700680772126, 0.01397856617670663, 0.01622420643945345, 0.01542515500397099, 0.01641557086346929, 0.015280936198647838, 0.015028196655704793, 0.015146427851947055, 0.015567356482244768, 0.017404197969735604, 0.017635152684968115, 0.014140394156739467, 0.016107488806188935, 0.01675001277671301, 0.015512752420609467, 0.014951999780788457, 0.013733457057782297, 0.016868671206682027, 0.014770978996449592, 0.01647697124898351, 0.016772182319685667, 0.016288562161254704, 0.015417362341926746, 0.015892028990939402, 0.013811584043067414, 0.01481782772305683, 0.014165639305307825, 0.016223347257543284, 0.014495672387672808, null, null]), + DATA('Sonstiger: 683,3 kWh', [1.1707523832922395, 0.941219247423001, 0.9813072961027226, 0.9147731344893865, 0.9179723719850451, 1.0221279641612842, 0.966452725206484, 0.9473972354717355, 0.9621558239123786, 1.0389565290773752, 0.719602808727641, 0.7164739453418082, 0.8312551527306125, 1.0513294309882544, 1.0642356695090618, 1.064549904209455, 0.8827148020023398, 1.0886724659066331, 0.9617007570391821, 1.2024244259088868, 1.4752269957477093, 1.149323439144603, 1.2039544333297325, 1.0275239776315197, 0.9588534351033258, 1.0445672257542986, 1.1028960998629487, 0.9010854319660326, 0.8581094263176695, null, null]), + ], + labels: LABELS(History.MONTH.energyPerPeriodChannelWithValues.result.timestamps), + options: ChartConfig.BAR_CHART_OPTIONS('day'), + }, + }); + } + + { + // Bar-Chart, phases + expectView(defaultEMS, TEST_CONTEXT, 'bar', History.YEAR, + { + datasets: { + data: [ + DATA('Gesamt: 14.863,7 kWh', [1682.941, 1834.729, 1805.222, 1934.144, 1757.577, 1511.352, 2306.988, 2029.933, 0, 0, 0, 0]), + DATA('Charging Station: 2.071,1 kWh', [69.104, 131.703, 25.773, 51.085, 169.943, 332.522, 748.189, 540.74, 0, 0, 0, 0]), + DATA('Whirlpool: 1.908,7 kWh', [338.07, 312.38, 298.93, 317.7, 200.21, 151.16, 145.88, 144.28, 0, 0, 0, 0]), + DATA('Sonstiger: 10.883,9 kWh', [1275.767, 1390.6460000000002, 1480.519, 1565.359, 1387.424, 1027.67, 1412.9189999999999, 1344.913, 0, 0, 0, 0]), + ], + labels: LABELS(History.YEAR.energyPerPeriodChannelWithValues.result.timestamps), + options: ChartConfig.BAR_CHART_OPTIONS('month'), + }, + }); + } + }); +}); diff --git a/ui/src/app/edge/history/common/consumption/chart/chart.ts b/ui/src/app/edge/history/common/consumption/chart/chart.ts new file mode 100644 index 00000000000..254496e4aa0 --- /dev/null +++ b/ui/src/app/edge/history/common/consumption/chart/chart.ts @@ -0,0 +1,131 @@ +import { Component } from '@angular/core'; +import { TranslateService } from '@ngx-translate/core'; +import { AbstractHistoryChart } from 'src/app/shared/genericComponents/chart/abstracthistorychart'; +import { QueryHistoricTimeseriesEnergyResponse } from 'src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyResponse'; +import { ChartAxis, HistoryUtils, YAxisTitle } from 'src/app/shared/service/utils'; +import { ChannelAddress, EdgeConfig, Utils } from 'src/app/shared/shared'; + +@Component({ + selector: 'consumptionchart', + templateUrl: '../../../../../shared/genericComponents/chart/abstracthistorychart.html', +}) +export class ChartComponent extends AbstractHistoryChart { + + protected override getChartData() { + return ChartComponent.getChartData(this.config, this.translate); + } + + public static getChartData(config: EdgeConfig, translate: TranslateService): HistoryUtils.ChartData { + + const inputChannel: HistoryUtils.InputChannel[] = [{ + name: 'ConsumptionActivePower', + powerChannel: ChannelAddress.fromString('_sum/ConsumptionActivePower'), + energyChannel: ChannelAddress.fromString('_sum/ConsumptionActiveEnergy'), + }]; + + const evcsComponents: EdgeConfig.Component[] = config.getComponentsImplementingNature("io.openems.edge.evcs.api.Evcs") + .filter(component => !( + component.factoryId == 'Evcs.Cluster' || + component.factoryId == 'Evcs.Cluster.PeakShaving' || + component.factoryId == 'Evcs.Cluster.SelfConsumption')); + + const consumptionMeters: EdgeConfig.Component[] = config.getComponentsImplementingNature("io.openems.edge.meter.api.ElectricityMeter") + .filter(component => component.isEnabled && config.isTypeConsumptionMetered(component)); + + evcsComponents.forEach(component => { + inputChannel.push({ + name: component.id + '/ChargePower', + powerChannel: ChannelAddress.fromString(component.id + '/ChargePower'), + energyChannel: ChannelAddress.fromString(component.id + '/ActiveConsumptionEnergy'), + }); + }); + + consumptionMeters.forEach(meter => { + inputChannel.push({ + name: meter.id + '/ActivePower', + powerChannel: ChannelAddress.fromString(meter.id + '/ActivePower'), + energyChannel: ChannelAddress.fromString(meter.id + '/ActiveConsumptionEnergy'), + }); + }); + + return { + input: + [ + ...inputChannel, + ], + output: (data: HistoryUtils.ChannelData) => { + const datasets: HistoryUtils.DisplayValues[] = []; + datasets.push({ + name: translate.instant('General.TOTAL'), + nameSuffix: (energyValues: QueryHistoricTimeseriesEnergyResponse) => { + return energyValues?.result.data['_sum/ConsumptionActiveEnergy']; + }, + converter: () => { + return data['ConsumptionActivePower'] ?? null; + }, + color: 'rgb(253,197,7)', + stack: 0, + hiddenOnInit: true, + noStrokeThroughLegendIfHidden: false, + }); + + const evcsComponentColors: string[] = ['rgb(0,223,0)', 'rgb(0,178,0)', 'rgb(0,201,0)', 'rgb(0,134,0)', 'rgb(0,156,0)']; + evcsComponents.forEach((component, index) => { + datasets.push({ + name: component.alias, + nameSuffix: (energyValues: QueryHistoricTimeseriesEnergyResponse) => { + return energyValues?.result.data[component.id + '/ActiveConsumptionEnergy']; + }, + converter: () => { + return data[component.id + '/ChargePower'] ?? null; + }, + color: evcsComponentColors[Math.min(index, (evcsComponentColors.length - 1))], + stack: 1, + }); + }); + + const consumptionMeterColors: string[] = ['rgb(220,20,60)', 'rgb(202, 158, 6', 'rgb(228, 177, 6)', 'rgb(177, 138, 5)', 'rgb(152, 118, 4)']; + consumptionMeters.forEach((meter, index) => { + datasets.push({ + name: meter.alias, + nameSuffix: (energyValues: QueryHistoricTimeseriesEnergyResponse) => { + return energyValues?.result.data[meter.id + '/ActiveConsumptionEnergy']; + }, + converter: () => { + return data[meter.id + '/ActivePower'] ?? null; + }, + color: consumptionMeterColors[Math.min(index, (consumptionMeterColors.length - 1))], + stack: 1, + }); + }); + + // other consumption + if (consumptionMeters.length > 0 || evcsComponents.length > 0) { + datasets.push({ + name: translate.instant('General.otherConsumption'), + nameSuffix: (energyValues: QueryHistoricTimeseriesEnergyResponse) => { + return Utils.calculateOtherConsumptionTotal(energyValues, evcsComponents, consumptionMeters); + }, + converter: () => { + + return Utils.calculateOtherConsumption(data, evcsComponents, consumptionMeters); + }, + color: 'rgb(0,0,0)', + stack: 1, + }); + } + + return datasets; + }, + tooltip: { + formatNumber: '1.0-2', + }, + yAxes: [ + { + unit: YAxisTitle.ENERGY, + position: 'left', + yAxisId: ChartAxis.LEFT, + }], + }; + } +} diff --git a/ui/src/app/edge/history/common/consumption/flat/flat.html b/ui/src/app/edge/history/common/consumption/flat/flat.html new file mode 100644 index 00000000000..05eab4f6128 --- /dev/null +++ b/ui/src/app/edge/history/common/consumption/flat/flat.html @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ui/src/app/edge/history/common/consumption/flat/flat.ts b/ui/src/app/edge/history/common/consumption/flat/flat.ts new file mode 100644 index 00000000000..fd25eb1706c --- /dev/null +++ b/ui/src/app/edge/history/common/consumption/flat/flat.ts @@ -0,0 +1,61 @@ +import { Component } from '@angular/core'; +import { AbstractFlatWidget } from 'src/app/shared/genericComponents/flat/abstract-flat-widget'; +import { ChannelAddress, CurrentData, EdgeConfig } from '../../../../../shared/shared'; + +@Component({ + selector: 'consumptionWidget', + templateUrl: './flat.html', +}) +export class FlatComponent extends AbstractFlatWidget { + + protected evcsComponents: EdgeConfig.Component[] = []; + protected consumptionMeterComponents: EdgeConfig.Component[] = []; + protected totalOtherEnergy: number; + + protected override getChannelAddresses(): ChannelAddress[] { + + this.evcsComponents = this.config?.getComponentsImplementingNature("io.openems.edge.evcs.api.Evcs") + .filter(component => + !(component.factoryId === 'Evcs.Cluster.SelfConsumption') && + !(component.factoryId === 'Evcs.Cluster.PeakShaving') && + !component.isEnabled === false); + + this.consumptionMeterComponents = this.config?.getComponentsImplementingNature("io.openems.edge.meter.api.ElectricityMeter") + .filter(component => component.isEnabled && this.config.isTypeConsumptionMetered(component)); + + const channels: ChannelAddress[] = [new ChannelAddress('_sum', 'ConsumptionActiveEnergy')]; + + this.evcsComponents.forEach((component) => { + channels.push(new ChannelAddress(component.id, 'ActiveConsumptionEnergy')); + }); + + this.consumptionMeterComponents.forEach((component) => { + channels.push(new ChannelAddress(component.id, 'ActiveProductionEnergy')); + }); + + + return channels; + } + + protected override onCurrentData(currentData: CurrentData): void { + this.totalOtherEnergy = this.getTotalOtherEnergy(currentData); + } + + /** + * Gets the totalOtherEnergy + * + * @param currentData the current data + * @returns the total other Energy + */ + private getTotalOtherEnergy(currentData: CurrentData): number { + let otherEnergy: number = 0; + this.evcsComponents.forEach(component => { + otherEnergy += currentData.allComponents[component.id + '/ActiveConsumptionEnergy'] ?? 0; + }); + this.consumptionMeterComponents.forEach(component => { + otherEnergy += currentData.allComponents[component.id + '/ActiveProductionEnergy'] ?? 0; + }); + return currentData.allComponents["_sum/ConsumptionActiveEnergy"] - otherEnergy; + } +} + diff --git a/ui/src/app/edge/history/common/consumption/overview/overview.html b/ui/src/app/edge/history/common/consumption/overview/overview.html new file mode 100644 index 00000000000..f8dc45ca420 --- /dev/null +++ b/ui/src/app/edge/history/common/consumption/overview/overview.html @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/ui/src/app/edge/history/common/consumption/overview/overview.ts b/ui/src/app/edge/history/common/consumption/overview/overview.ts new file mode 100644 index 00000000000..b96752777d6 --- /dev/null +++ b/ui/src/app/edge/history/common/consumption/overview/overview.ts @@ -0,0 +1,7 @@ +import { Component } from '@angular/core'; +import { AbstractHistoryChartOverview } from 'src/app/shared/genericComponents/chart/abstractHistoryChartOverview'; + +@Component({ + templateUrl: './overview.html', +}) +export class OverviewComponent extends AbstractHistoryChartOverview { } diff --git a/ui/src/app/edge/history/common/energy/chart/chart.spec.ts b/ui/src/app/edge/history/common/energy/chart/chart.spec.ts index 1699987a630..62a2b264b05 100644 --- a/ui/src/app/edge/history/common/energy/chart/chart.spec.ts +++ b/ui/src/app/edge/history/common/energy/chart/chart.spec.ts @@ -1,14 +1,14 @@ import { History } from "src/app/edge/history/common/energy/chart/channels.spec"; -import { DummyConfig, ESS_GENERIC_MANAGEDSYMMETRIC, SOCOMEC_GRID_METER, SOLAR_EDGE_PV_INVERTER } from "src/app/shared/edge/edgeconfig.spec"; +import { DummyConfig } from "src/app/shared/edge/edgeconfig.spec"; import { sharedSetup, TestContext } from "../../../../../shared/test/utils.spec"; import { DATA, expectView, LABELS } from "./chart.constants.spec"; describe('History EnergyMonitor', () => { const defaultEMS = DummyConfig.from( - SOCOMEC_GRID_METER("meter0", "Netzzähler"), - ESS_GENERIC_MANAGEDSYMMETRIC("ess0"), - SOLAR_EDGE_PV_INVERTER("meter1", "Pv inverter"), + DummyConfig.Component.SOCOMEC_GRID_METER("meter0", "Netzzähler"), + DummyConfig.Component.ESS_GENERIC_MANAGEDSYMMETRIC("ess0"), + DummyConfig.Component.SOLAR_EDGE_PV_INVERTER("meter1", "Pv inverter"), ); let TEST_CONTEXT: TestContext; @@ -119,8 +119,8 @@ describe('History EnergyMonitor', () => { { // Bar-Chart: no productionMeter const EMS = DummyConfig.from( - SOCOMEC_GRID_METER("meter0", "Netzzähler"), - ESS_GENERIC_MANAGEDSYMMETRIC("ess0"), + DummyConfig.Component.SOCOMEC_GRID_METER("meter0", "Netzzähler"), + DummyConfig.Component.ESS_GENERIC_MANAGEDSYMMETRIC("ess0"), ); expectView(EMS, TEST_CONTEXT, 'bar', History.YEAR, @@ -143,7 +143,7 @@ describe('History EnergyMonitor', () => { // Bar-Chart: only gridMeter const EMS = DummyConfig.from( - SOCOMEC_GRID_METER("meter0", "Netzzähler"), + DummyConfig.Component.SOCOMEC_GRID_METER("meter0", "Netzzähler"), ); expectView(EMS, TEST_CONTEXT, 'bar', History.YEAR, @@ -163,7 +163,7 @@ describe('History EnergyMonitor', () => { // Bar-Chart: only ess const EMS = DummyConfig.from( - ESS_GENERIC_MANAGEDSYMMETRIC("ess0"), + DummyConfig.Component.ESS_GENERIC_MANAGEDSYMMETRIC("ess0"), ); expectView(EMS, TEST_CONTEXT, 'bar', History.YEAR, diff --git a/ui/src/app/edge/history/common/grid/chart/chart.spec.ts b/ui/src/app/edge/history/common/grid/chart/chart.spec.ts index 784467f1436..71c46867002 100644 --- a/ui/src/app/edge/history/common/grid/chart/chart.spec.ts +++ b/ui/src/app/edge/history/common/grid/chart/chart.spec.ts @@ -1,5 +1,5 @@ import { History } from "src/app/edge/history/common/energy/chart/channels.spec"; -import { DummyConfig, SOCOMEC_GRID_METER } from "src/app/shared/edge/edgeconfig.spec"; +import { DummyConfig } from "src/app/shared/edge/edgeconfig.spec"; import { OeTester } from "src/app/shared/genericComponents/shared/testing/common"; import { sharedSetup, TestContext } from "src/app/shared/test/utils.spec"; @@ -8,7 +8,7 @@ import { expectView } from "./chart.constants.spec"; describe('History Grid', () => { const defaultEMS = DummyConfig.from( - SOCOMEC_GRID_METER("meter0", "Netzzähler"), + DummyConfig.Component.SOCOMEC_GRID_METER("meter0", "Netzzähler"), ); let TEST_CONTEXT: TestContext; diff --git a/ui/src/app/edge/history/consumption/consumptionchartoverview/consumptionchartoverview.component.html b/ui/src/app/edge/history/consumption/consumptionchartoverview/consumptionchartoverview.component.html deleted file mode 100644 index 6f9a846a1f3..00000000000 --- a/ui/src/app/edge/history/consumption/consumptionchartoverview/consumptionchartoverview.component.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - General.consumption - - - - - - - - - - - - - - - - - - - - - - -
General.TOTAL
- - -
-
- - - - - - -
General.TOTAL
- - -
- - - - - - -
- {{ evcsComponent.alias }} -
- - -
-
- - - - - - -
- {{meterComponent.alias}} -
- - -
-
- - - - - -
General.otherConsumption
- - -
-
-
-
\ No newline at end of file diff --git a/ui/src/app/edge/history/consumption/consumptionchartoverview/consumptionchartoverview.component.ts b/ui/src/app/edge/history/consumption/consumptionchartoverview/consumptionchartoverview.component.ts deleted file mode 100644 index 697d9c42937..00000000000 --- a/ui/src/app/edge/history/consumption/consumptionchartoverview/consumptionchartoverview.component.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; -import { Edge, EdgeConfig, Service } from '../../../../shared/shared'; - -@Component({ - selector: ConsumptionChartOverviewComponent.SELECTOR, - templateUrl: './consumptionchartoverview.component.html', -}) -export class ConsumptionChartOverviewComponent implements OnInit { - - private static readonly SELECTOR = "consumption-chart-overview"; - - public edge: Edge = null; - - public evcsComponents: EdgeConfig.Component[] = []; - public consumptionMeterComponents: EdgeConfig.Component[] = []; - public showPhases: boolean = false; - public showTotal: boolean = false; - public isOnlyChart: boolean = false; - - constructor( - public service: Service, - private route: ActivatedRoute, - ) { } - - ngOnInit() { - this.service.setCurrentComponent('', this.route).then(edge => { - this.service.getConfig().then(config => { - this.edge = edge; - this.evcsComponents = config.getComponentsImplementingNature("io.openems.edge.evcs.api.Evcs") - .filter(component => - !(component.factoryId == 'Evcs.Cluster' - || component.factoryId == 'Evcs.Cluster.PeakShaving' - || component.factoryId == 'Evcs.Cluster.SelfConsumption')); - this.consumptionMeterComponents = config.getComponentsImplementingNature("io.openems.edge.meter.api.ElectricityMeter") - .filter(component => config.isTypeConsumptionMetered(component)); - // determine if singlechart is the only chart that is shown - // disable total option to choose for chartoptions component - if (this.evcsComponents.length > 0 || this.consumptionMeterComponents.length > 0) { - this.showTotal = true; - this.isOnlyChart = false; - } else { - this.isOnlyChart = true; - } - }); - }); - } - - onNotifyPhases(showPhases: boolean): void { - this.showPhases = showPhases; - } - - onNotifyTotal(showTotal: boolean): void { - this.showTotal = showTotal; - } -} diff --git a/ui/src/app/edge/history/consumption/evcschart.component.ts b/ui/src/app/edge/history/consumption/evcschart.component.ts deleted file mode 100644 index f9909a6a79b..00000000000 --- a/ui/src/app/edge/history/consumption/evcschart.component.ts +++ /dev/null @@ -1,116 +0,0 @@ -import { formatNumber } from '@angular/common'; -import { Component, Input, OnChanges, OnDestroy, OnInit } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; -import { TranslateService } from '@ngx-translate/core'; -import { QueryHistoricTimeseriesDataResponse } from 'src/app/shared/jsonrpc/response/queryHistoricTimeseriesDataResponse'; -import { DefaultTypes } from 'src/app/shared/service/defaulttypes'; - -import { ChannelAddress, Service } from '../../../shared/shared'; -import { AbstractHistoryChart } from '../abstracthistorychart'; -import { Data, TooltipItem } from '../shared'; - -@Component({ - selector: 'consumptionEvcsChart', - templateUrl: '../abstracthistorychart.html', -}) -export class ConsumptionEvcsChartComponent extends AbstractHistoryChart implements OnInit, OnChanges, OnDestroy { - - @Input() public period: DefaultTypes.HistoryPeriod; - @Input() public componentId: string; - - public ngOnChanges() { - this.updateChart(); - }; - - constructor( - protected override service: Service, - protected override translate: TranslateService, - private route: ActivatedRoute, - ) { - super("consumption-evcs-chart", service, translate); - } - - - public ngOnInit() { - this.startSpinner(); - this.service.setCurrentComponent('', this.route); - } - - public ngOnDestroy() { - this.unsubscribeChartRefresh(); - } - - protected updateChart() { - this.autoSubscribeChartRefresh(); - this.startSpinner(); - this.loading = true; - this.queryHistoricTimeseriesData(this.period.from, this.period.to).then(response => { - this.colors = []; - let result = (response as QueryHistoricTimeseriesDataResponse).result; - - // convert labels - let labels: Date[] = []; - for (let timestamp of result.timestamps) { - labels.push(new Date(timestamp)); - } - this.labels = labels; - - // convert datasets - let datasets = []; - - Object.keys(result.data).forEach((channel) => { - let address = ChannelAddress.fromString(channel); - let chargeData = result.data[channel].map(value => { - if (value == null) { - return null; - } else { - return value / 1000; // convert to kW - } - }); - if (address.channelId == "ChargePower") { - datasets.push({ - label: this.translate.instant('General.consumption'), - data: chargeData, - hidden: false, - }); - this.colors.push({ - backgroundColor: 'rgba(253,197,7,0.05)', - borderColor: 'rgba(253,197,7,1)', - }); - } - }); - this.datasets = datasets; - this.loading = false; - this.stopSpinner(); - - }).catch(reason => { - console.error(reason); // TODO error message - this.initializeChart(); - return; - }); - } - - protected getChannelAddresses(): Promise { - return new Promise((resolve) => { - let result: ChannelAddress[] = [ - new ChannelAddress(this.componentId, 'ChargePower'), - ]; - resolve(result); - }); - } - - protected setLabel() { - let options = this.createDefaultChartOptions(); - options.scales.yAxes[0].scaleLabel.labelString = "kW"; - options.tooltips.callbacks.label = function (tooltipItem: TooltipItem, data: Data) { - let label = data.datasets[tooltipItem.datasetIndex].label; - let value = tooltipItem.yLabel; - return label + ": " + formatNumber(value, 'de', '1.0-2') + " kW"; - }; - this.options = options; - } - - public getChartHeight(): number { - return window.innerHeight / 21 * 9; - } -} diff --git a/ui/src/app/edge/history/consumption/meterchart.component.ts b/ui/src/app/edge/history/consumption/meterchart.component.ts deleted file mode 100644 index 3aa52c7aecf..00000000000 --- a/ui/src/app/edge/history/consumption/meterchart.component.ts +++ /dev/null @@ -1,120 +0,0 @@ -import { formatNumber } from '@angular/common'; -import { Component, Input, OnChanges, OnDestroy, OnInit } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; -import { TranslateService } from '@ngx-translate/core'; -import { QueryHistoricTimeseriesDataResponse } from 'src/app/shared/jsonrpc/response/queryHistoricTimeseriesDataResponse'; -import { DefaultTypes } from 'src/app/shared/service/defaulttypes'; - -import { ChannelAddress, Edge, EdgeConfig, Service } from '../../../shared/shared'; -import { AbstractHistoryChart } from '../abstracthistorychart'; -import { Data, TooltipItem } from '../shared'; - -@Component({ - selector: 'consumptionMeterChart', - templateUrl: '../abstracthistorychart.html', -}) -export class ConsumptionMeterChartComponent extends AbstractHistoryChart implements OnInit, OnChanges, OnDestroy { - - @Input() public period: DefaultTypes.HistoryPeriod; - @Input() public componentId: string; - - ngOnChanges() { - this.updateChart(); - }; - - constructor( - protected override service: Service, - protected override translate: TranslateService, - private route: ActivatedRoute, - ) { - super("consumption-meter-chart", service, translate); - } - - ngOnInit() { - this.startSpinner(); - this.service.setCurrentComponent('', this.route); - } - - ngOnDestroy() { - this.unsubscribeChartRefresh(); - } - - protected updateChart() { - this.autoSubscribeChartRefresh(); - this.startSpinner(); - this.loading = true; - this.queryHistoricTimeseriesData(this.period.from, this.period.to).then(response => { - this.colors = []; - let result = (response as QueryHistoricTimeseriesDataResponse).result; - - // convert labels - let labels: Date[] = []; - for (let timestamp of result.timestamps) { - labels.push(new Date(timestamp)); - } - this.labels = labels; - - // convert datasets - let datasets = []; - - Object.keys(result.data).forEach((channel) => { - let address = ChannelAddress.fromString(channel); - let activePowerData = result.data[channel].map(value => { - if (value == null) { - return null; - } else { - return value / 1000; // convert to kW - } - }); - if (address.channelId == "ActivePower" && address.componentId == this.componentId) { - datasets.push({ - label: this.translate.instant('General.consumption'), - data: activePowerData, - hidden: false, - }); - this.colors.push({ - backgroundColor: 'rgba(253,197,7,0.05)', - borderColor: 'rgba(253,197,7,1)', - }); - } - }); - this.datasets = datasets; - this.loading = false; - this.stopSpinner(); - - }).catch(reason => { - console.error(reason); // TODO error message - this.initializeChart(); - return; - }); - } - - protected getChannelAddresses(edge: Edge, config: EdgeConfig): Promise { - return new Promise((resolve) => { - let result: ChannelAddress[] = [ - new ChannelAddress(this.componentId, 'ActivePower'), - ]; - let consumptionMeters = config.getComponentsImplementingNature("io.openems.edge.meter.api.ElectricityMeter") - .filter(component => component.isEnabled && config.isTypeConsumptionMetered(component)); - for (let meter of consumptionMeters) { - result.push(new ChannelAddress(meter.id, 'ActivePower')); - } - resolve(result); - }); - } - - protected setLabel() { - let options = this.createDefaultChartOptions(); - options.scales.yAxes[0].scaleLabel.labelString = "kW"; - options.tooltips.callbacks.label = function (tooltipItem: TooltipItem, data: Data) { - let label = data.datasets[tooltipItem.datasetIndex].label; - let value = tooltipItem.yLabel; - return label + ": " + formatNumber(value, 'de', '1.0-2') + " kW"; - }; - this.options = options; - } - - public getChartHeight(): number { - return window.innerHeight / 21 * 9; - } -} diff --git a/ui/src/app/edge/history/consumption/otherchart.component.ts b/ui/src/app/edge/history/consumption/otherchart.component.ts deleted file mode 100644 index 7a790f76b41..00000000000 --- a/ui/src/app/edge/history/consumption/otherchart.component.ts +++ /dev/null @@ -1,152 +0,0 @@ -import { formatNumber } from '@angular/common'; -import { Component, Input, OnChanges, OnDestroy, OnInit } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; -import { TranslateService } from '@ngx-translate/core'; -import { QueryHistoricTimeseriesDataResponse } from 'src/app/shared/jsonrpc/response/queryHistoricTimeseriesDataResponse'; -import { DefaultTypes } from 'src/app/shared/service/defaulttypes'; - -import { ChannelAddress, Edge, EdgeConfig, Service, Utils } from '../../../shared/shared'; -import { AbstractHistoryChart } from '../abstracthistorychart'; -import { Data, TooltipItem } from '../shared'; - -@Component({ - selector: 'consumptionOtherChart', - templateUrl: '../abstracthistorychart.html', -}) -export class ConsumptionOtherChartComponent extends AbstractHistoryChart implements OnInit, OnChanges, OnDestroy { - - @Input() public period: DefaultTypes.HistoryPeriod; - - ngOnChanges() { - this.updateChart(); - }; - - constructor( - protected override service: Service, - protected override translate: TranslateService, - private route: ActivatedRoute, - ) { - super("consumption-other-chart", service, translate); - } - - ngOnInit() { - this.startSpinner(); - this.service.setCurrentComponent('', this.route); - } - - ngOnDestroy() { - this.unsubscribeChartRefresh(); - } - - protected updateChart() { - this.autoSubscribeChartRefresh(); - this.startSpinner(); - this.loading = true; - this.queryHistoricTimeseriesData(this.period.from, this.period.to).then(response => { - this.service.getConfig().then(config => { - this.colors = []; - let result = (response as QueryHistoricTimeseriesDataResponse).result; - // convert labels - let labels: Date[] = []; - for (let timestamp of result.timestamps) { - labels.push(new Date(timestamp)); - } - this.labels = labels; - - // convert datasets - let datasets = []; - - // gather EVCS consumption - let totalEvcsConsumption: number[] = []; - config.getComponentsImplementingNature("io.openems.edge.evcs.api.Evcs") - .filter(component => !( - component.factoryId == 'Evcs.Cluster' || - component.factoryId == 'Evcs.Cluster.PeakShaving' || - component.factoryId == 'Evcs.Cluster.SelfConsumption'), - ).forEach(component => { - if (result.data[component.id + '/ChargePower']) { - totalEvcsConsumption = result.data[component.id + '/ChargePower'].map((value, index) => { - return Utils.addSafely(totalEvcsConsumption[index], value / 1000); - }); - } - }); - - let totalMeteredConsumption: number[] = []; - config.getComponentsImplementingNature("io.openems.edge.meter.api.ElectricityMeter") - .filter(component => component.isEnabled && config.isTypeConsumptionMetered(component)) - .forEach(component => { - if (result.data[component.id + "/ActivePower"]) { - totalMeteredConsumption = result.data[component.id + "/ActivePower"].map((value, index) => { - return Utils.addSafely(totalMeteredConsumption[index], value / 1000); - }); - } - }); - - // gather other Consumption (Total - EVCS - consumptionMetered) - let otherConsumption: number[] = []; - otherConsumption = result.data['_sum/ConsumptionActivePower'].map((value, index) => { - if (value != null) { - // Check if either totalEvcsConsumption or totalMeteredConsumption is not null and the endValue not below 0 - return Utils.roundSlightlyNegativeValues(Utils.subtractSafely(Utils.subtractSafely(value / 1000, totalEvcsConsumption[index]), totalMeteredConsumption[index])); - } - }); - - // show other consumption if at least one of the arrays is not empty - if (totalEvcsConsumption.length > 0 || totalMeteredConsumption.length > 0) { - datasets.push({ - label: this.translate.instant('General.consumption'), - data: otherConsumption, - hidden: false, - }); - this.colors.push({ - backgroundColor: 'rgba(253,197,7,0.05)', - borderColor: 'rgba(253,197,7,1)', - }); - } - this.datasets = datasets; - this.loading = false; - this.stopSpinner(); - }).catch(reason => { - console.error(reason); // TODO error message - this.initializeChart(); - return; - }); - }).catch(reason => { - console.error(reason); // TODO error message - this.initializeChart(); - return; - }); - } - - protected getChannelAddresses(edge: Edge, config: EdgeConfig): Promise { - return new Promise((resolve) => { - let result: ChannelAddress[] = [ - new ChannelAddress('_sum', 'ConsumptionActivePower'), - ]; - config.getComponentsImplementingNature("io.openems.edge.evcs.api.Evcs").filter(component => !(component.factoryId == 'Evcs.Cluster')).forEach(component => { - result.push(new ChannelAddress(component.id, 'ChargePower')); - }); - config.getComponentsImplementingNature("io.openems.edge.meter.api.ElectricityMeter") - .filter(component => component.isEnabled && config.isTypeConsumptionMetered(component)) - .forEach(component => { - result.push(new ChannelAddress(component.id, "ActivePower")); - }); - resolve(result); - }); - } - - protected setLabel() { - let options = this.createDefaultChartOptions(); - options.scales.yAxes[0].scaleLabel.labelString = "kW"; - options.tooltips.callbacks.label = function (tooltipItem: TooltipItem, data: Data) { - let label = data.datasets[tooltipItem.datasetIndex].label; - let value = tooltipItem.yLabel; - return label + ": " + formatNumber(value, 'de', '1.0-2') + " kW"; - }; - this.options = options; - } - - public getChartHeight(): number { - return window.innerHeight / 21 * 9; - } -} diff --git a/ui/src/app/edge/history/consumption/singlechart.component.ts b/ui/src/app/edge/history/consumption/singlechart.component.ts deleted file mode 100644 index 908790e9921..00000000000 --- a/ui/src/app/edge/history/consumption/singlechart.component.ts +++ /dev/null @@ -1,222 +0,0 @@ -import { formatNumber } from '@angular/common'; -import { Component, Input, OnChanges, OnDestroy, OnInit } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; -import { TranslateService } from '@ngx-translate/core'; -import { QueryHistoricTimeseriesDataResponse } from 'src/app/shared/jsonrpc/response/queryHistoricTimeseriesDataResponse'; -import { DefaultTypes } from 'src/app/shared/service/defaulttypes'; - -import { ChannelAddress, Edge, EdgeConfig, Service } from '../../../shared/shared'; -import { AbstractHistoryChart } from '../abstracthistorychart'; -import { Data, TooltipItem } from '../shared'; - -@Component({ - selector: 'consumptionSingleChart', - templateUrl: '../abstracthistorychart.html', -}) -export class ConsumptionSingleChartComponent extends AbstractHistoryChart implements OnInit, OnChanges, OnDestroy { - - @Input() public period: DefaultTypes.HistoryPeriod; - @Input() public showPhases: boolean; - @Input() public isOnlyChart: boolean; - - ngOnChanges() { - this.updateChart(); - }; - - constructor( - protected override service: Service, - protected override translate: TranslateService, - private route: ActivatedRoute, - ) { - super("consumption-single-chart", service, translate); - } - - ngOnInit() { - this.startSpinner(); - this.service.setCurrentComponent('', this.route); - } - - ngOnDestroy() { - this.unsubscribeChartRefresh(); - } - - protected updateChart() { - this.autoSubscribeChartRefresh(); - this.startSpinner(); - this.loading = true; - this.queryHistoricTimeseriesData(this.period.from, this.period.to).then(response => { - this.service.getCurrentEdge().then(edge => { - this.service.getConfig().then(config => { - this.colors = []; - let result = (response as QueryHistoricTimeseriesDataResponse).result; - - // convert labels - let labels: Date[] = []; - for (let timestamp of result.timestamps) { - labels.push(new Date(timestamp)); - } - this.labels = labels; - - // convert datasets - let datasets = []; - this.getChannelAddresses(edge, config).then(channelAddresses => { - channelAddresses.forEach(channelAddress => { - if (!Object.keys(result.data).includes(channelAddress.toString())) { - result.data[channelAddress.toString()] = [].fill(null); - } - let component = config.getComponent(channelAddress.componentId); - let data = result.data[channelAddress.toString()].map(value => { - if (value == null) { - return null; - } else { - return value / 1000; - } - }); - if (!data) { - return; - } else { - if (channelAddress.channelId == 'ConsumptionActivePower') { - datasets.push({ - label: this.translate.instant('General.consumption'), - data: data, - hidden: false, - }); - this.colors.push({ - backgroundColor: 'rgba(253,197,7,0.05)', - borderColor: 'rgba(253,197,7,1)', - }); - } - - // ConsumptionMeter - if (channelAddress.channelId == 'ActivePower') { - datasets.push({ - label: component.alias, - data: data, - }); - this.colors.push({ - backgroundColor: 'rgba(255,64,64,0.1)', - borderColor: 'rgba(255,64,64,1)', - }); - } - - if (this.showPhases == true) { - if (channelAddress.channelId == 'ConsumptionActivePowerL1') { - datasets.push({ - label: this.translate.instant('General.phase') + ' ' + 'L1', - data: data, - }); - this.colors.push(this.phase1Color); - } - if (channelAddress.channelId == 'ConsumptionActivePowerL2') { - datasets.push({ - label: this.translate.instant('General.phase') + ' ' + 'L2', - data: data, - }); - this.colors.push(this.phase2Color); - } - if (channelAddress.channelId == 'ConsumptionActivePowerL3') { - datasets.push({ - label: this.translate.instant('General.phase') + ' ' + 'L3', - data: data, - }); - this.colors.push(this.phase3Color); - } - - // Meter Phases - if (channelAddress.channelId == 'ActivePowerL1') { - datasets.push({ - label: component.alias + ' Phase ' + 'L1', - data: data, - }); - this.colors.push({ - backgroundColor: 'rgba(255,193,193,0.1)', - borderColor: 'rgba(139,35,35,1)', - }); - } - if (channelAddress.channelId == 'ActivePowerL2') { - datasets.push({ - label: component.alias + ' Phase ' + 'L2', - data: data, - }); - this.colors.push({ - backgroundColor: 'rgba(198,226,255,0.1)', - borderColor: 'rgba(198,226,255,1)', - }); - } - if (channelAddress.channelId == 'ActivePowerL3') { - datasets.push({ - label: component.alias + ' Phase ' + 'L3', - data: data, - }); - this.colors.push({ - backgroundColor: 'rgba(121,205,205,0.1)', - borderColor: 'rgba(121,205,205,1)', - }); - } - } - } - }); - }); - this.datasets = datasets; - this.loading = false; - this.stopSpinner(); - - }).catch(reason => { - console.error(reason); // TODO error message - this.initializeChart(); - return; - }); - - }).catch(reason => { - console.error(reason); // TODO error message - this.initializeChart(); - return; - }); - - }).catch(reason => { - console.error(reason); // TODO error message - this.initializeChart(); - return; - }); - } - - protected getChannelAddresses(edge: Edge, config: EdgeConfig): Promise { - return new Promise((resolve) => { - let result: ChannelAddress[] = [ - new ChannelAddress('_sum', 'ConsumptionActivePower'), - new ChannelAddress('_sum', 'ConsumptionActivePowerL1'), - new ChannelAddress('_sum', 'ConsumptionActivePowerL2'), - new ChannelAddress('_sum', 'ConsumptionActivePowerL3'), - ]; - - let consumptionMeters = config.getComponentsImplementingNature("io.openems.edge.meter.api.ElectricityMeter") - .filter(component => component.isEnabled && config.isTypeConsumptionMetered(component)); - for (let meter of consumptionMeters) { - result.push(new ChannelAddress(meter.id, 'ActivePower')); - result.push(new ChannelAddress(meter.id, 'ActivePowerL1')); - result.push(new ChannelAddress(meter.id, 'ActivePowerL2')); - result.push(new ChannelAddress(meter.id, 'ActivePowerL3')); - } - resolve(result); - }); - } - - protected setLabel() { - let options = this.createDefaultChartOptions(); - options.scales.yAxes[0].scaleLabel.labelString = "kW"; - options.tooltips.callbacks.label = function (tooltipItem: TooltipItem, data: Data) { - let label = data.datasets[tooltipItem.datasetIndex].label; - let value = tooltipItem.yLabel; - return label + ": " + formatNumber(value, 'de', '1.0-2') + " kW"; - }; - this.options = options; - } - - public getChartHeight(): number { - if (this.isOnlyChart == true) { - return window.innerHeight / 1.3; - } else { - return window.innerHeight / 21 * 9; - } - } -} diff --git a/ui/src/app/edge/history/consumption/totalchart.component.ts b/ui/src/app/edge/history/consumption/totalchart.component.ts deleted file mode 100644 index 8cf844c48be..00000000000 --- a/ui/src/app/edge/history/consumption/totalchart.component.ts +++ /dev/null @@ -1,366 +0,0 @@ -import { formatNumber } from '@angular/common'; -import { Component, Input, OnChanges, OnDestroy, OnInit } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; -import { TranslateService } from '@ngx-translate/core'; -import { QueryHistoricTimeseriesDataResponse } from 'src/app/shared/jsonrpc/response/queryHistoricTimeseriesDataResponse'; -import { DefaultTypes } from 'src/app/shared/service/defaulttypes'; - -import { ChannelAddress, Edge, EdgeConfig, Service, Utils } from '../../../shared/shared'; -import { AbstractHistoryChart } from '../abstracthistorychart'; -import { Data, TooltipItem } from '../shared'; - -@Component({ - selector: 'consumptionTotalChart', - templateUrl: '../abstracthistorychart.html', -}) -export class ConsumptionTotalChartComponent extends AbstractHistoryChart implements OnInit, OnChanges, OnDestroy { - - @Input() public period: DefaultTypes.HistoryPeriod; - @Input() public showPhases: boolean; - - // reference to the Utils method to access via html - public isLastElement = Utils.isLastElement; - - public ngOnChanges() { - this.updateChart(); - }; - - constructor( - protected override service: Service, - protected override translate: TranslateService, - private route: ActivatedRoute, - ) { - super("consumption-total-chart", service, translate); - } - - public ngOnInit() { - this.startSpinner(); - this.service.setCurrentComponent('', this.route); - this.setLabel(); - } - - public ngOnDestroy() { - this.unsubscribeChartRefresh(); - } - - protected updateChart() { - this.autoSubscribeChartRefresh(); - this.startSpinner(); - this.loading = true; - this.queryHistoricTimeseriesData(this.period.from, this.period.to).then(response => { - this.service.getCurrentEdge().then(edge => { - this.service.getConfig().then(config => { - this.colors = []; - let result = (response as QueryHistoricTimeseriesDataResponse).result; - - // convert labels - let labels: Date[] = []; - for (let timestamp of result.timestamps) { - labels.push(new Date(timestamp)); - } - this.labels = labels; - - // gather EVCS consumption - let totalEvcsConsumption: number[] = []; - config.getComponentsImplementingNature("io.openems.edge.evcs.api.Evcs") - .filter(component => !( - component.factoryId == 'Evcs.Cluster' || - component.factoryId == 'Evcs.Cluster.PeakShaving' || - component.factoryId == 'Evcs.Cluster.SelfConsumption')) - .forEach(component => { - if (result.data[component.id + '/ChargePower']) { - totalEvcsConsumption = result.data[component.id + '/ChargePower'].map((value, index) => { - return Utils.addSafely(totalEvcsConsumption[index], value / 1000); - }); - } - }); - - // gather consumptionMetered consumption - let totalMeteredConsumption: number[] = []; - config.getComponentsImplementingNature("io.openems.edge.meter.api.ElectricityMeter") - .filter(component => component.isEnabled && config.isTypeConsumptionMetered(component)) - .forEach(component => { - if (result.data[component.id + '/ActivePower']) { - totalMeteredConsumption = result.data[component.id + "/ActivePower"].map((value, index) => { - return Utils.addSafely(totalMeteredConsumption[index], value / 1000); - }); - } - }); - - // gather other Consumption (Total - EVCS - consumptionMetered) - let otherConsumption: number[] = []; - otherConsumption = result.data['_sum/ConsumptionActivePower'].map((value, index) => { - - if (value != null) { - // Check if either totalEvcsConsumption or totalMeteredConsumption is not null and the endValue not below 0 - return Utils.roundSlightlyNegativeValues(Utils.subtractSafely(Utils.subtractSafely(value / 1000, totalEvcsConsumption[index]), totalMeteredConsumption[index])); - } - }); - // convert datasets - let datasets = []; - - //RGB Colors for evcs' - let evcsRedColor = 255; - let evcsGreenColor = 255; - let evcsBlueColor = 255; - let evcsIndex = 0; - - //EVCS Component Array - let regularEvcsComponents = config.getComponentsImplementingNature("io.openems.edge.evcs.api.Evcs") - .filter(component => !( - component.factoryId == 'Evcs.Cluster' || - component.factoryId == 'Evcs.Cluster.PeakShaving' - || component.factoryId == 'Evcs.Cluster.SelfConsumption' - )); - - this.getChannelAddresses(edge, config).then(channelAddresses => { - channelAddresses.forEach((channelAddress, index) => { - if (!Object.keys(result.data).includes(channelAddress.toString())) { - result.data[channelAddress.toString()] = [].fill(null); - } - let component = config.getComponent(channelAddress.componentId); - let data = result.data[channelAddress.toString()].map(value => { - if (value == null) { - return null; - } else { - return value / 1000; - } - }); - if (!data) { - return; - } else { - if (channelAddress.channelId == 'ConsumptionActivePower') { - datasets.push({ - label: this.translate.instant('General.TOTAL'), - data: data, - hidden: false, - }); - this.colors.push({ - backgroundColor: 'rgba(253,197,7,0.05)', - borderColor: 'rgba(253,197,7,1)', - }); - } - - // Phases View is shown - if (this.showPhases == true) { - if (channelAddress.channelId == 'ConsumptionActivePowerL1') { - datasets.push({ - label: this.translate.instant('General.phase') + ' ' + 'L1', - data: data, - }); - this.colors.push(this.phase1Color); - } - if (channelAddress.channelId == 'ConsumptionActivePowerL2') { - datasets.push({ - label: this.translate.instant('General.phase') + ' ' + 'L2', - data: data, - }); - this.colors.push(this.phase2Color); - } - if (channelAddress.channelId == 'ConsumptionActivePowerL3') { - datasets.push({ - label: this.translate.instant('General.phase') + ' ' + 'L3', - data: data, - }); - this.colors.push(this.phase3Color); - } - - // consumptionMeter Phases - if (channelAddress.channelId == 'ActivePowerL1') { - datasets.push({ - label: component.alias + ' Phase ' + 'L1', - data: data, - }); - this.colors.push({ - backgroundColor: 'rgba(255,193,193,0.1)', - borderColor: 'rgba(139,35,35,1)', - }); - } - if (channelAddress.channelId == 'ActivePowerL2') { - datasets.push({ - label: component.alias + ' Phase ' + 'L2', - data: data, - }); - this.colors.push({ - backgroundColor: 'rgba(198,226,255,0.1)', - borderColor: 'rgba(198,226,255,1)', - }); - } - if (channelAddress.channelId == 'ActivePowerL3') { - datasets.push({ - label: component.alias + ' Phase ' + 'L3', - data: data, - }); - this.colors.push({ - backgroundColor: 'rgba(121,205,205,0.1)', - borderColor: 'rgba(121,205,205,1)', - }); - } - } - - if (regularEvcsComponents.length > 1 && totalEvcsConsumption.length != 0) { - if (!this.translate.instant('Edge.Index.Widgets.EVCS.chargingStation') + ' (' + this.translate.instant('General.TOTAL') + ')' in datasets) { - datasets.push({ - label: this.translate.instant('Edge.Index.Widgets.EVCS.chargingStation') + ' (' + this.translate.instant('General.TOTAL') + ')', - data: totalEvcsConsumption, - hidden: false, - }); - this.colors.push({ - backgroundColor: 'rgba(45,143,171,0.05)', - borderColor: 'rgba(45,143,171,1)', - }); - } - if (channelAddress.channelId == "ChargePower") { - if (evcsIndex == 0) { - evcsRedColor = 0; - evcsGreenColor = 153; - evcsBlueColor = 153; - } else if (evcsIndex == regularEvcsComponents.length - 1) { - evcsRedColor = 204; - evcsGreenColor = 0; - evcsBlueColor = 0; - } else { - evcsRedColor = (evcsIndex + 1) % 3 == 0 ? 255 : 204 / (evcsIndex + 1); - evcsGreenColor = 0; - evcsBlueColor = (evcsIndex + 1) % 3 == 0 ? 127 : 408 / (evcsIndex + 1); - } - evcsIndex += 1; - datasets.push({ - label: component.alias, - data: data, - hidden: false, - }); - this.colors.push({ - backgroundColor: 'rgba(' + evcsRedColor.toString() + ',' + evcsGreenColor.toString() + ',' + evcsBlueColor.toString() + ',0.05)', - borderColor: 'rgba(' + evcsRedColor.toString() + ',' + evcsGreenColor.toString() + ',' + evcsBlueColor.toString() + ',1)', - }); - } - } else if (regularEvcsComponents.length == 1) { - if (channelAddress.channelId == "ChargePower") { - datasets.push({ - label: (component.id == component.alias ? component.id : component.alias), - data: data, - hidden: false, - }); - this.colors.push({ - backgroundColor: 'rgba(45,143,171,0.05)', - borderColor: 'rgba(45,143,171,1)', - }); - } - } - - if (totalMeteredConsumption.length != 0) { - if (channelAddress.channelId == "ActivePower") { - datasets.push({ - label: (component.id == component.alias ? component.id : component.alias), - data: data, - hidden: false, - }); - this.colors.push({ - backgroundColor: 'rgba(220,20,60,0.05)', - borderColor: 'rgba(220,20,60,1)', - }); - } - } - - // show OtherConsumption - if (Utils.isLastElement(channelAddress, channelAddresses) && ( - - // Check if Evcs is in config - config.getComponentsImplementingNature("io.openems.edge.evcs.api.Evcs") - .filter(component => !( - component.factoryId == 'Evcs.Cluster' || - component.factoryId == 'Evcs.Cluster.PeakShaving' || - component.factoryId == 'Evcs.Cluster.SelfConsumption' - )).length > 0 - || - - // Check if ElectricityMeter is in config - config.getComponentsImplementingNature("io.openems.edge.meter.api.ElectricityMeter") - .filter(component => - component.isEnabled && - config.isTypeConsumptionMetered(component), - ).length > 0 - )) { - datasets.push({ - label: this.translate.instant('General.otherConsumption'), - data: otherConsumption, - hidden: false, - }); - this.colors.push({ - backgroundColor: 'rgba(0,223,0,0.00)', - borderColor: 'rgba(0,223,0,05)', - }); - } - } - }); - }); - this.datasets = datasets; - this.loading = false; - this.stopSpinner(); - - }).catch(reason => { - console.error(reason); // TODO error message - this.initializeChart(); - return; - }); - - }).catch(reason => { - console.error(reason); // TODO error message - this.initializeChart(); - return; - }); - - }).catch(reason => { - console.error(reason); // TODO error message - this.initializeChart(); - return; - }); - - } - - protected getChannelAddresses(edge: Edge, config: EdgeConfig): Promise { - return new Promise((resolve) => { - let result: ChannelAddress[] = [ - new ChannelAddress('_sum', 'ConsumptionActivePower'), - new ChannelAddress('_sum', 'ConsumptionActivePowerL1'), - new ChannelAddress('_sum', 'ConsumptionActivePowerL2'), - new ChannelAddress('_sum', 'ConsumptionActivePowerL3'), - ]; - config.getComponentsImplementingNature("io.openems.edge.evcs.api.Evcs") - .filter(component => !( - component.factoryId == 'Evcs.Cluster' || - component.factoryId == 'Evcs.Cluster.PeakShaving' || - component.factoryId == 'Evcs.Cluster.SelfConsumption')) - .forEach(component => { - result.push(new ChannelAddress(component.id, 'ChargePower')); - }); - - let consumptionMeters = config.getComponentsImplementingNature("io.openems.edge.meter.api.ElectricityMeter") - .filter(component => component.isEnabled && config.isTypeConsumptionMetered(component)); - - for (let meter of consumptionMeters) { - result.push(new ChannelAddress(meter.id, 'ActivePower')); - result.push(new ChannelAddress(meter.id, 'ActivePowerL1')); - result.push(new ChannelAddress(meter.id, 'ActivePowerL2')); - result.push(new ChannelAddress(meter.id, 'ActivePowerL3')); - } - resolve(result); - }); - } - - protected setLabel() { - let options = this.createDefaultChartOptions(); - options.scales.yAxes[0].scaleLabel.labelString = "kW"; - options.tooltips.callbacks.label = function (tooltipItem: TooltipItem, data: Data) { - let label = data.datasets[tooltipItem.datasetIndex].label; - let value = tooltipItem.yLabel; - return label + ": " + formatNumber(value, 'de', '1.0-2') + " kW"; - }; - this.options = options; - } - - public getChartHeight(): number { - return window.innerHeight / 1.3; - } -} diff --git a/ui/src/app/edge/history/consumption/widget.component.html b/ui/src/app/edge/history/consumption/widget.component.html deleted file mode 100644 index bec130e1e05..00000000000 --- a/ui/src/app/edge/history/consumption/widget.component.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - General.consumption - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- {{ data["_sum/ConsumptionActiveEnergy"] | unitvalue:'kWh' }} -
{{ component.alias }} - - {{ data[component.id + "/ActiveConsumptionEnergy"] ?? 0 | unitvalue:'kWh' }} -
{{ component.alias }} - {{ (data[component.id + "/ActiveProductionEnergy"]| unitvalue:'kWh') ?? "-" }} -
General.otherConsumption - {{ totalOtherEnergy ?? 0 | unitvalue:'kWh' }} -
-   -
-
-
\ No newline at end of file diff --git a/ui/src/app/edge/history/consumption/widget.component.ts b/ui/src/app/edge/history/consumption/widget.component.ts deleted file mode 100644 index fa1df88e659..00000000000 --- a/ui/src/app/edge/history/consumption/widget.component.ts +++ /dev/null @@ -1,108 +0,0 @@ -import { Component, Input, OnChanges, OnDestroy, OnInit } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; -import { Cumulated } from 'src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyResponse'; -import { DefaultTypes } from 'src/app/shared/service/defaulttypes'; - -import { ChannelAddress, Edge, EdgeConfig, Service } from '../../../shared/shared'; -import { AbstractHistoryWidget } from '../abstracthistorywidget'; - -@Component({ - selector: ConsumptionComponent.SELECTOR, - templateUrl: './widget.component.html', -}) -export class ConsumptionComponent extends AbstractHistoryWidget implements OnInit, OnChanges, OnDestroy { - - @Input() public period: DefaultTypes.HistoryPeriod; - - private static readonly SELECTOR = "consumptionWidget"; - - public data: Cumulated = null; - public edge: Edge = null; - public evcsComponents: EdgeConfig.Component[] = []; - public consumptionMeterComponents: EdgeConfig.Component[] = []; - public totalOtherEnergy: number | null = null; - - constructor( - public override service: Service, - private route: ActivatedRoute, - ) { - super(service); - } - - ngOnInit() { - this.service.setCurrentComponent('', this.route).then(response => { - this.edge = response; - }); - } - - ngOnDestroy() { - this.unsubscribeWidgetRefresh(); - } - - ngOnChanges() { - this.updateValues(); - }; - - protected updateValues() { - this.service.getConfig().then(config => { - this.getChannelAddresses(this.edge, config).then(channels => { - this.service.queryEnergy(this.period.from, this.period.to, channels).then(response => { - this.data = response.result.data; - //calculate other power - let otherEnergy: number = 0; - this.evcsComponents.forEach(component => { - otherEnergy += this.data[component.id + '/ActiveConsumptionEnergy'] ?? 0; - }); - - this.consumptionMeterComponents.forEach(component => { - otherEnergy += (this.data[component.id + '/ActiveProductionEnergy'] ?? 0); - }); - this.totalOtherEnergy = response.result.data["_sum/ConsumptionActiveEnergy"] - otherEnergy; - }).catch(() => { - this.data = null; - }); - }); - }); - } - - protected getChannelAddresses(edge: Edge, config: EdgeConfig): Promise { - return new Promise((resolve) => { - - let channels: ChannelAddress[] = [ - new ChannelAddress('_sum', 'ConsumptionActiveEnergy'), - ]; - - this.evcsComponents = config.getComponentsImplementingNature("io.openems.edge.evcs.api.Evcs") - .filter(component => - !(component.factoryId == 'Evcs.Cluster.SelfConsumption') && - !(component.factoryId == 'Evcs.Cluster.PeakShaving') && - !component.isEnabled == false); - for (let component of this.evcsComponents) { - channels.push( - new ChannelAddress(component.id, 'ActiveConsumptionEnergy'), - ); - } - - this.consumptionMeterComponents = config.getComponentsImplementingNature("io.openems.edge.meter.api.ElectricityMeter") - .filter(component => component.isEnabled && config.isTypeConsumptionMetered(component)); - for (let component of this.consumptionMeterComponents) { - channels.push( - new ChannelAddress(component.id, 'ActiveProductionEnergy'), - ); - } - resolve(channels); - }); - } - - public getTotalOtherEnergy(): number { - let otherEnergy: number = 0; - this.evcsComponents.forEach(component => { - otherEnergy += this.data[component.id + '/ActiveConsumptionEnergy']; - }); - this.consumptionMeterComponents.forEach(component => { - otherEnergy += this.data[component.id + '/ActiveConsumptionEnergy']; - }); - return this.data["_sum/ConsumptionActiveEnergy"] - otherEnergy; - } -} - diff --git a/ui/src/app/edge/history/history.component.html b/ui/src/app/edge/history/history.component.html index 3ad5487528b..ec04458f622 100644 --- a/ui/src/app/edge/history/history.component.html +++ b/ui/src/app/edge/history/history.component.html @@ -21,7 +21,7 @@ - + diff --git a/ui/src/app/edge/history/history.module.ts b/ui/src/app/edge/history/history.module.ts index 0a0af5282aa..4de4ee54e36 100644 --- a/ui/src/app/edge/history/history.module.ts +++ b/ui/src/app/edge/history/history.module.ts @@ -8,13 +8,6 @@ import { ChannelthresholdWidgetComponent } from './channelthreshold/widget.compo import { ChpSocChartComponent } from './chpsoc/chart.component'; import { ChpSocWidgetComponent } from './chpsoc/widget.component'; import { Common } from './common/common'; -import { ConsumptionChartOverviewComponent } from './consumption/consumptionchartoverview/consumptionchartoverview.component'; -import { ConsumptionEvcsChartComponent } from './consumption/evcschart.component'; -import { ConsumptionMeterChartComponent } from './consumption/meterchart.component'; -import { ConsumptionOtherChartComponent } from './consumption/otherchart.component'; -import { ConsumptionSingleChartComponent } from './consumption/singlechart.component'; -import { ConsumptionTotalChartComponent } from './consumption/totalchart.component'; -import { ConsumptionComponent } from './consumption/widget.component'; import { DelayedSellToGridChartComponent } from './delayedselltogrid/chart.component'; import { DelayedSellToGridChartOverviewComponent } from './delayedselltogrid/symmetricpeakshavingchartoverview/delayedselltogridchartoverview.component'; import { DelayedSellToGridWidgetComponent } from './delayedselltogrid/widget.component'; @@ -73,13 +66,6 @@ import { TimeOfUseTariffDischargeWidgetComponent } from './timeofusetariffdischa ChannelthresholdWidgetComponent, ChpSocChartComponent, ChpSocWidgetComponent, - ConsumptionChartOverviewComponent, - ConsumptionComponent, - ConsumptionEvcsChartComponent, - ConsumptionMeterChartComponent, - ConsumptionOtherChartComponent, - ConsumptionSingleChartComponent, - ConsumptionTotalChartComponent, DelayedSellToGridChartComponent, DelayedSellToGridChartOverviewComponent, DelayedSellToGridWidgetComponent, diff --git a/ui/src/app/edge/history/shared.ts b/ui/src/app/edge/history/shared.ts index 58c17b7c7c7..b5d847fb1fa 100644 --- a/ui/src/app/edge/history/shared.ts +++ b/ui/src/app/edge/history/shared.ts @@ -334,7 +334,7 @@ export function calculateResolution(service: Service, fromDate: Date, toDate: Da } /** - * Returns true if Chart Label should be visible. Defaults to to true. + * Returns true if Chart Label should be visible. Defaults to true. * * Compares only the first part of the label string - without a value or unit. * diff --git a/ui/src/app/edge/live/common/consumption/modal/modal.constants.spec.ts b/ui/src/app/edge/live/common/consumption/modal/modal.constants.spec.ts index ce73735a835..9909b58d850 100644 --- a/ui/src/app/edge/live/common/consumption/modal/modal.constants.spec.ts +++ b/ui/src/app/edge/live/common/consumption/modal/modal.constants.spec.ts @@ -1,14 +1,13 @@ import { DummyConfig } from "src/app/shared/edge/edgeconfig.spec"; import { EdgeConfig } from "src/app/shared/shared"; import { TestContext } from "src/app/shared/test/utils.spec"; -import { Role } from "src/app/shared/type/role"; import { OeFormlyViewTester } from "../../../../../shared/genericComponents/shared/testing/tester"; import { ModalComponent } from "./modal"; -export function expectView(config: EdgeConfig, role: Role, viewContext: OeFormlyViewTester.Context, testContext: TestContext, view: OeFormlyViewTester.View): void { +export function expectView(config: EdgeConfig, viewContext: OeFormlyViewTester.Context, testContext: TestContext, view: OeFormlyViewTester.View): void { - const generatedView = OeFormlyViewTester.apply(ModalComponent.generateView(DummyConfig.convertDummyEdgeConfigToRealEdgeConfig(config), role, testContext.translate), viewContext); + const generatedView = OeFormlyViewTester.apply(ModalComponent.generateView(DummyConfig.convertDummyEdgeConfigToRealEdgeConfig(config), testContext.translate), viewContext); expect(generatedView).toEqual(view); }; diff --git a/ui/src/app/edge/live/common/consumption/modal/modal.spec.ts b/ui/src/app/edge/live/common/consumption/modal/modal.spec.ts index f81d853ce10..726d839f24b 100644 --- a/ui/src/app/edge/live/common/consumption/modal/modal.spec.ts +++ b/ui/src/app/edge/live/common/consumption/modal/modal.spec.ts @@ -1,8 +1,7 @@ -import { CHANNEL_LINE, DummyConfig, EVCS_KEBA_KECONTACT, LINE_HORIZONTAL, LINE_INFO_PHASES_DE, SOCOMEC_CONSUMPTION_METER, VALUE_FROM_CHANNELS_LINE } from "src/app/shared/edge/edgeconfig.spec"; +import { CHANNEL_LINE, DummyConfig, LINE_HORIZONTAL, LINE_INFO_PHASES_DE, VALUE_FROM_CHANNELS_LINE } from "src/app/shared/edge/edgeconfig.spec"; import { TextIndentation } from "src/app/shared/genericComponents/modal/modal-line/modal-line"; import { OeFormlyViewTester } from "src/app/shared/genericComponents/shared/testing/tester"; import { sharedSetup } from "src/app/shared/test/utils.spec"; -import { Role } from "src/app/shared/type/role"; import { expectView } from "./modal.constants.spec"; @@ -22,7 +21,7 @@ describe('Consumption - Modal', () => { }; const EMS = DummyConfig.from(); - expectView(EMS, Role.ADMIN, VIEW_CONTEXT, TEST_CONTEXT, { + expectView(EMS, VIEW_CONTEXT, TEST_CONTEXT, { title: "Verbrauch", lines: [ CHANNEL_LINE("Gesamt", "0 W"), @@ -39,11 +38,11 @@ describe('Consumption - Modal', () => { // two evcs and two consumptionMeter, negative consumptionMeter phase { const EMS = DummyConfig.from( - SOCOMEC_CONSUMPTION_METER("meter0", "Waermepumpe"), - SOCOMEC_CONSUMPTION_METER("meter1", "Heizung"), - EVCS_KEBA_KECONTACT("evcs0", "Evcs"), - EVCS_KEBA_KECONTACT("evcs1", "Evcs 2"), - EVCS_KEBA_KECONTACT("evcs2", "Evcs 3"), + DummyConfig.Component.SOCOMEC_CONSUMPTION_METER("meter0", "Waermepumpe"), + DummyConfig.Component.SOCOMEC_CONSUMPTION_METER("meter1", "Heizung"), + DummyConfig.Component.EVCS_KEBA_KECONTACT("evcs0", "Evcs"), + DummyConfig.Component.EVCS_KEBA_KECONTACT("evcs1", "Evcs 2"), + DummyConfig.Component.EVCS_KEBA_KECONTACT("evcs2", "Evcs 3"), ); const VIEW_CONTEXT: OeFormlyViewTester.Context = { '_sum/ConsumptionActivePower': 1000, @@ -63,7 +62,7 @@ describe('Consumption - Modal', () => { 'evcs2/ChargePower': null, }; - expectView(EMS, Role.ADMIN, VIEW_CONTEXT, TEST_CONTEXT, { + expectView(EMS, VIEW_CONTEXT, TEST_CONTEXT, { title: "Verbrauch", lines: [ CHANNEL_LINE("Gesamt", "1.000 W"), @@ -96,7 +95,7 @@ describe('Consumption - Modal', () => { // No consumptionMeter, one evcs { const EMS = DummyConfig.from( - EVCS_KEBA_KECONTACT("evcs0", "Evcs"), + DummyConfig.Component.EVCS_KEBA_KECONTACT("evcs0", "Evcs"), ); const VIEW_CONTEXT: OeFormlyViewTester.Context = { '_sum/ConsumptionActivePower': 1000, @@ -106,7 +105,7 @@ describe('Consumption - Modal', () => { 'evcs0/ChargePower': 1000, }; - expectView(EMS, Role.ADMIN, VIEW_CONTEXT, TEST_CONTEXT, { + expectView(EMS, VIEW_CONTEXT, TEST_CONTEXT, { title: "Verbrauch", lines: [ CHANNEL_LINE("Gesamt", "1.000 W"), @@ -125,7 +124,7 @@ describe('Consumption - Modal', () => { // One consumptionMeter, no evcs { const EMS = DummyConfig.from( - SOCOMEC_CONSUMPTION_METER("meter0", "Waermepumpe"), + DummyConfig.Component.SOCOMEC_CONSUMPTION_METER("meter0", "Waermepumpe"), ); const VIEW_CONTEXT: OeFormlyViewTester.Context = { '_sum/ConsumptionActivePower': 1000, @@ -138,7 +137,7 @@ describe('Consumption - Modal', () => { 'meter0/ActivePowerL3': 1000, }; - expectView(EMS, Role.ADMIN, VIEW_CONTEXT, TEST_CONTEXT, { + expectView(EMS, VIEW_CONTEXT, TEST_CONTEXT, { title: "Verbrauch", lines: [ CHANNEL_LINE("Gesamt", "1.000 W"), diff --git a/ui/src/app/edge/live/common/consumption/modal/modal.ts b/ui/src/app/edge/live/common/consumption/modal/modal.ts index 18321507909..2ca55aba40e 100644 --- a/ui/src/app/edge/live/common/consumption/modal/modal.ts +++ b/ui/src/app/edge/live/common/consumption/modal/modal.ts @@ -5,7 +5,6 @@ import { Converter } from 'src/app/shared/genericComponents/shared/converter'; import { Name } from 'src/app/shared/genericComponents/shared/name'; import { AbstractFormlyComponent, OeFormlyField, OeFormlyView } from 'src/app/shared/genericComponents/shared/oe-formly-component'; import { Phase } from 'src/app/shared/genericComponents/shared/phase'; -import { Role } from 'src/app/shared/type/role'; import { ChannelAddress, CurrentData, EdgeConfig } from '../../../../../shared/shared'; @@ -14,11 +13,11 @@ import { ChannelAddress, CurrentData, EdgeConfig } from '../../../../../shared/s }) export class ModalComponent extends AbstractFormlyComponent { - protected override generateView(config: EdgeConfig, role: Role): OeFormlyView { - return ModalComponent.generateView(config, role, this.translate); + protected override generateView(config: EdgeConfig): OeFormlyView { + return ModalComponent.generateView(config, this.translate); } - public static generateView(config: EdgeConfig, role: Role, translate: TranslateService): OeFormlyView { + public static generateView(config: EdgeConfig, translate: TranslateService): OeFormlyView { const evcss: EdgeConfig.Component[] | null = config.getComponentsImplementingNature("io.openems.edge.evcs.api.Evcs") .filter(component => !(component.factoryId == 'Evcs.Cluster.SelfConsumption') && diff --git a/ui/src/app/edge/live/common/grid/modal/modal.spec.ts b/ui/src/app/edge/live/common/grid/modal/modal.spec.ts index cf4d2651b84..77b4aad58b8 100644 --- a/ui/src/app/edge/live/common/grid/modal/modal.spec.ts +++ b/ui/src/app/edge/live/common/grid/modal/modal.spec.ts @@ -1,4 +1,4 @@ -import { CHANNEL_LINE, DummyConfig, LINE_HORIZONTAL, LINE_INFO_PHASES_DE, PHASE_ADMIN, PHASE_GUEST, SOCOMEC_GRID_METER } from "src/app/shared/edge/edgeconfig.spec"; +import { CHANNEL_LINE, DummyConfig, LINE_HORIZONTAL, LINE_INFO_PHASES_DE, PHASE_ADMIN, PHASE_GUEST } from "src/app/shared/edge/edgeconfig.spec"; import { OeFormlyViewTester } from "src/app/shared/genericComponents/shared/testing/tester"; import { GridMode } from "src/app/shared/shared"; import { sharedSetup, TestContext } from "src/app/shared/test/utils.spec"; @@ -36,7 +36,7 @@ describe('Grid - Modal', () => { { // Single Meter const EMS = DummyConfig.from( - SOCOMEC_GRID_METER("meter0", "Netzzähler"), + DummyConfig.Component.SOCOMEC_GRID_METER("meter0", "Netzzähler"), ); // Admin and Installer @@ -90,8 +90,8 @@ describe('Grid - Modal', () => { { // Two Meters const EMS = DummyConfig.from( - SOCOMEC_GRID_METER("meter10"), - SOCOMEC_GRID_METER("meter11"), + DummyConfig.Component.SOCOMEC_GRID_METER("meter10"), + DummyConfig.Component.SOCOMEC_GRID_METER("meter11"), ); // Admin and Installer -> two meters diff --git a/ui/src/app/edge/live/common/storage/modal/modal.component.ts b/ui/src/app/edge/live/common/storage/modal/modal.component.ts index 674c4723645..b7afc296161 100644 --- a/ui/src/app/edge/live/common/storage/modal/modal.component.ts +++ b/ui/src/app/edge/live/common/storage/modal/modal.component.ts @@ -38,7 +38,7 @@ export class StorageModalComponent implements OnInit, OnDestroy { ngOnInit() { - // Future Work: Remove when all fems are at least at this version + // Future Work: Remove when all ems are at least at this version this.controllerIsRequiredEdgeVersion = this.edge.isVersionAtLeast('2023.2.5'); this.isAtLeastInstaller = this.edge.roleIsAtLeast(Role.INSTALLER); diff --git a/ui/src/app/shared/edge/edgeconfig.spec.ts b/ui/src/app/shared/edge/edgeconfig.spec.ts index d418a1746b3..3d885c512e8 100644 --- a/ui/src/app/shared/edge/edgeconfig.spec.ts +++ b/ui/src/app/shared/edge/edgeconfig.spec.ts @@ -1,6 +1,6 @@ import { SumState } from "src/app/index/shared/sumState"; import { TextIndentation } from "../genericComponents/modal/modal-line/modal-line"; -import { OeFormlyViewTester } from "../genericComponents/shared/testing/tester"; +import { OeChartTester, OeFormlyViewTester } from "../genericComponents/shared/testing/tester"; import { Role } from "../type/role"; import { Edge } from "./edge"; import { EdgeConfig } from "./edgeconfig"; @@ -41,75 +41,173 @@ export namespace DummyConfig { factories: factories, }); } -} -/** - * Factories. - */ -type Factory = { - id: string -}; + namespace Factory { -namespace Factory { + export const METER_SOCOMEC_THREEPHASE = { + id: "Meter.Socomec.Threephase", + natureIds: [ + "io.openems.edge.common.component.OpenemsComponent", + "io.openems.edge.bridge.modbus.api.ModbusComponent", + "io.openems.edge.common.modbusslave.ModbusSlave", + "io.openems.edge.meter.api.ElectricityMeter", + "io.openems.edge.meter.socomec.SocomecMeter", + "io.openems.edge.meter.socomec.threephase.SocomecMeterThreephase", + ], + }; - export const METER_SOCOMEC_THREEPHASE = { - id: "Meter.Socomec.Threephase", - natureIds: [ - "io.openems.edge.common.component.OpenemsComponent", - "io.openems.edge.bridge.modbus.api.ModbusComponent", - "io.openems.edge.common.modbusslave.ModbusSlave", - "io.openems.edge.meter.api.ElectricityMeter", - "io.openems.edge.meter.socomec.SocomecMeter", - "io.openems.edge.meter.socomec.threephase.SocomecMeterThreephase", - ], - }; + export const METER_GOODWE_GRID = { + id: "GoodWe.Grid-Meter", + natureIds: [ + "io.openems.edge.goodwe.gridmeter.GoodWeGridMeter", + "io.openems.edge.meter.api.ElectricityMeter", + "io.openems.edge.bridge.modbus.api.ModbusComponent", + "io.openems.edge.common.modbusslave.ModbusSlave", + "io.openems.edge.common.component.OpenemsComponent", + "io.openems.edge.timedata.api.TimedataProvider", + ], + }; - export const METER_GOODWE_GRID = { - id: "GoodWe.Grid-Meter", - natureIds: [ - "io.openems.edge.goodwe.gridmeter.GoodWeGridMeter", - "io.openems.edge.meter.api.ElectricityMeter", - "io.openems.edge.bridge.modbus.api.ModbusComponent", - "io.openems.edge.common.modbusslave.ModbusSlave", - "io.openems.edge.common.component.OpenemsComponent", - "io.openems.edge.timedata.api.TimedataProvider", - ], - }; + export const EVCS_KEBA_KECONTACT = { + id: "Evcs.Keba.KeContact", + natureIds: [ + "io.openems.edge.evcs.keba.kecontact.EvcsKebaKeContact", + "io.openems.edge.common.modbusslave.ModbusSlave", + "io.openems.edge.common.component.OpenemsComponent", + "io.openems.edge.evcs.api.ManagedEvcs", + "io.openems.edge.evcs.api.Evcs", + ], + }; - export const EVCS_KEBA_KECONTACT = { - id: "Evcs.Keba.KeContact", - natureIds: [ - "io.openems.edge.evcs.keba.kecontact.EvcsKebaKeContact", - "io.openems.edge.common.modbusslave.ModbusSlave", - "io.openems.edge.common.component.OpenemsComponent", - "io.openems.edge.evcs.api.ManagedEvcs", - "io.openems.edge.evcs.api.Evcs", - ], - }; + export const ESS_GENERIC_MANAGEDSYMMETRIC = { + id: "Ess.Generic.ManagedSymmetric", + natureIds: [ + "io.openems.edge.goodwe.common.GoodWe", + "io.openems.edge.bridge.modbus.api.ModbusComponent", + "io.openems.edge.common.modbusslave.ModbusSlave", + "io.openems.edge.ess.api.SymmetricEss", + "io.openems.edge.common.component.OpenemsComponent", + "io.openems.edge.ess.api.HybridEss", + "io.openems.edge.goodwe.ess.GoodWeEss", + "io.openems.edge.ess.api.ManagedSymmetricEss", + "io.openems.edge.timedata.api.TimedataProvider", + ], + }; - export const ESS_GENERIC_MANAGEDSYMMETRIC = { - id: "Ess.Generic.ManagedSymmetric", - natureIds: [ - "io.openems.edge.goodwe.common.GoodWe", - "io.openems.edge.bridge.modbus.api.ModbusComponent", - "io.openems.edge.common.modbusslave.ModbusSlave", - "io.openems.edge.ess.api.SymmetricEss", - "io.openems.edge.common.component.OpenemsComponent", - "io.openems.edge.ess.api.HybridEss", - "io.openems.edge.goodwe.ess.GoodWeEss", - "io.openems.edge.ess.api.ManagedSymmetricEss", - "io.openems.edge.timedata.api.TimedataProvider", - ], - }; + export const SOLAR_EDGE_PV_INVERTER = { + id: "SolarEdge.PV-Inverter", + natureIds: [ + "io.openems.edge.pvinverter.sunspec.SunSpecPvInverter", "io.openems.edge.meter.api.AsymmetricMeter", "io.openems.edge.meter.api.SymmetricMeter", "io.openems.edge.bridge.modbus.api.ModbusComponent", "io.openems.edge.common.modbusslave.ModbusSlave", "io.openems.edge.pvinverter.api.ManagedSymmetricPvInverter", "io.openems.edge.common.component.OpenemsComponent", + ], + }; + export const EVCS_HARDY_BARTH = { + id: "Evcs.HardyBarth", + natureIds: [ + "io.openems.edge.common.component.OpenemsComponent", + "io.openems.edge.evcs.hardybarth.EvcsHardyBarth", + "io.openems.edge.evcs.api.ManagedEvcs", + "io.openems.edge.evcs.api.Evcs", + ], + }; + } - export const SOLAR_EDGE_PV_INVERTER = { - id: "SolarEdge.PV-Inverter", - natureIds: [ - "io.openems.edge.pvinverter.sunspec.SunSpecPvInverter", "io.openems.edge.meter.api.AsymmetricMeter", "io.openems.edge.meter.api.SymmetricMeter", "io.openems.edge.bridge.modbus.api.ModbusComponent", "io.openems.edge.common.modbusslave.ModbusSlave", "io.openems.edge.pvinverter.api.ManagedSymmetricPvInverter", "io.openems.edge.common.component.OpenemsComponent", - ], - }; + export namespace Component { + + export const EVCS_HARDY_BARTH = (id: string, alias?: string): Component => ({ + id: id, + alias: alias ?? id, + factoryId: 'Evcs.HardyBarth', + factory: Factory.EVCS_HARDY_BARTH, + properties: { + enabled: "true", + }, + channels: {}, + }); + + export const SOCOMEC_GRID_METER = (id: string, alias?: string): Component => ({ + id: id, + alias: alias ?? id, + factoryId: 'Meter.Socomec.Threephase', + factory: Factory.METER_SOCOMEC_THREEPHASE, + properties: { + invert: false, + modbusUnitId: 5, + type: "GRID", + }, + channels: {}, + }); + + export const SOCOMEC_CONSUMPTION_METER = (id: string, alias?: string): Component => ({ + id: id, + alias: alias ?? id, + factory: Factory.METER_SOCOMEC_THREEPHASE, + factoryId: Factory.METER_SOCOMEC_THREEPHASE.id, + properties: { + invert: false, + modbusUnitId: 5, + type: "CONSUMPTION_METERED", + }, + channels: {}, + }); + export const GOODWE_GRID_METER = (id: string, alias?: string): Component => ({ + id: id, + alias: alias, + factory: Factory.METER_GOODWE_GRID, + properties: { + invert: false, + modbusUnitId: 5, + type: "PRODUCTION", + }, + channels: {}, + }); + + export const SOLAR_EDGE_PV_INVERTER = (id: string, alias?: string): Component => ({ + id: id, + alias: alias, + factoryId: 'SolarEdge.PV-Inverter', + factory: Factory.SOLAR_EDGE_PV_INVERTER, + properties: { + invert: false, + modbusUnitId: 5, + type: "PRODUCTION", + }, + channels: {}, + }); + + export const ESS_GENERIC_MANAGEDSYMMETRIC = (id: string, alias?: string): Component => ({ + id: id, + alias: alias ?? id, + factoryId: 'Ess.Generic.ManagedSymmetric', + factory: Factory.ESS_GENERIC_MANAGEDSYMMETRIC, + properties: { + invert: false, + modbusUnitId: 5, + }, + channels: {}, + }); + + export const EVCS_KEBA_KECONTACT = (id: string, alias?: string): Component => ({ + id: id, + alias: alias ?? id, + factory: Factory.EVCS_KEBA_KECONTACT, + properties: { + invert: false, + modbusUnitId: 5, + // TODO + type: "CONSUMPTION_METERED", + }, + channels: {}, + }); + } } +/** + * Factories. + */ +type Factory = { + id: string +}; + /** * Components */ @@ -122,82 +220,6 @@ type Component = { channels?: {} }; -export const SOCOMEC_GRID_METER = (id: string, alias?: string): Component => ({ - id: id, - alias: alias ?? id, - factoryId: 'Meter.Socomec.Threephase', - factory: Factory.METER_SOCOMEC_THREEPHASE, - properties: { - invert: false, - modbusUnitId: 5, - type: "GRID", - }, - channels: {}, -}); - -export const SOCOMEC_CONSUMPTION_METER = (id: string, alias?: string): Component => ({ - id: id, - alias: alias ?? id, - factory: Factory.METER_SOCOMEC_THREEPHASE, - factoryId: Factory.METER_SOCOMEC_THREEPHASE.id, - properties: { - invert: false, - modbusUnitId: 5, - type: "CONSUMPTION_METERED", - }, - channels: {}, -}); -export const GOODWE_GRID_METER = (id: string, alias?: string): Component => ({ - id: id, - alias: alias, - factory: Factory.METER_GOODWE_GRID, - properties: { - invert: false, - modbusUnitId: 5, - type: "PRODUCTION", - }, - channels: {}, -}); - -export const SOLAR_EDGE_PV_INVERTER = (id: string, alias?: string): Component => ({ - id: id, - alias: alias, - factoryId: 'SolarEdge.PV-Inverter', - factory: Factory.SOLAR_EDGE_PV_INVERTER, - properties: { - invert: false, - modbusUnitId: 5, - type: "PRODUCTION", - }, - channels: {}, -}); - -export const ESS_GENERIC_MANAGEDSYMMETRIC = (id: string, alias?: string): Component => ({ - id: id, - alias: alias ?? id, - factoryId: 'Ess.Generic.ManagedSymmetric', - factory: Factory.ESS_GENERIC_MANAGEDSYMMETRIC, - properties: { - invert: false, - modbusUnitId: 5, - }, - channels: {}, -}); - -export const EVCS_KEBA_KECONTACT = (id: string, alias?: string): Component => ({ - id: id, - alias: alias ?? id, - factory: Factory.EVCS_KEBA_KECONTACT, - properties: { - invert: false, - modbusUnitId: 5, - // TODO - type: "CONSUMPTION_METERED", - }, - channels: {}, -}); - - export const CHANNEL_LINE = (name: string, value: string, indentation?: TextIndentation): OeFormlyViewTester.Field => ({ type: "channel-line", name: name, @@ -257,3 +279,8 @@ export const LINE_INFO = (text: string): OeFormlyViewTester.Field => ({ type: "info-line", name: text, }); + +export namespace ChartConfig { + export const LINE_CHART_OPTIONS = (period: string, labelString?: string): OeChartTester.Dataset.Option => ({ type: 'option', options: { "maintainAspectRatio": false, "legend": { "labels": {}, "position": "bottom" }, "elements": { "point": { "radius": 0, "hitRadius": 0, "hoverRadius": 0 }, "line": { "borderWidth": 2, "tension": 0.1 }, "rectangle": { "borderWidth": 2 } }, "hover": { "mode": "point", "intersect": true }, "scales": { "yAxes": [{ "id": "left", "position": "left", "scaleLabel": { "display": true, "labelString": labelString ?? "kW", "padding": 5, "fontSize": 11 }, "gridLines": { "display": true }, "ticks": { "beginAtZero": false } }], "xAxes": [{ "ticks": {}, "stacked": false, "type": "time", "time": { "minUnit": "hour", "displayFormats": { "millisecond": "SSS [ms]", "second": "HH:mm:ss a", "minute": "HH:mm", "hour": "HH:[00]", "day": "DD", "week": "ll", "month": "MM", "quarter": "[Q]Q - YYYY", "year": "YYYY" }, "unit": period }, "bounds": "ticks" }] }, "tooltips": { "mode": "index", "intersect": false, "axis": "x", "callbacks": {} }, "responsive": true } }); + export const BAR_CHART_OPTIONS = (period: string, labelString?: string): OeChartTester.Dataset.Option => ({ type: 'option', options: { "maintainAspectRatio": false, "legend": { "labels": {}, "position": "bottom" }, "elements": { "point": { "radius": 0, "hitRadius": 0, "hoverRadius": 0 }, "line": { "borderWidth": 2, "tension": 0.1 }, "rectangle": { "borderWidth": 2 } }, "hover": { "mode": "point", "intersect": true }, "scales": { "yAxes": [{ "id": "left", "position": "left", "scaleLabel": { "display": true, "labelString": labelString ?? "kWh", "padding": 5, "fontSize": 11 }, "gridLines": { "display": true }, "ticks": { "beginAtZero": false }, "stacked": true }], "xAxes": [{ "ticks": { "maxTicksLimit": 12, "source": "data" }, "stacked": true, "type": "time", "time": { "minUnit": "hour", "displayFormats": { "millisecond": "SSS [ms]", "second": "HH:mm:ss a", "minute": "HH:mm", "hour": "HH:[00]", "day": "DD", "week": "ll", "month": "MM", "quarter": "[Q]Q - YYYY", "year": "YYYY" }, "unit": period }, "offset": true, "bounds": "ticks" }] }, "tooltips": { "mode": "x", "intersect": false, "axis": "x", "callbacks": {} }, "responsive": true } }); +} diff --git a/ui/src/app/shared/service/utils.ts b/ui/src/app/shared/service/utils.ts index dfee4f33aad..e335f6dbe7d 100644 --- a/ui/src/app/shared/service/utils.ts +++ b/ui/src/app/shared/service/utils.ts @@ -7,7 +7,7 @@ import { DefaultTypes } from 'src/app/shared/service/defaulttypes'; import { JsonrpcResponseSuccess } from '../jsonrpc/base'; import { Base64PayloadResponse } from '../jsonrpc/response/base64PayloadResponse'; import { QueryHistoricTimeseriesEnergyResponse } from '../jsonrpc/response/queryHistoricTimeseriesEnergyResponse'; -import { ChannelAddress } from '../shared'; +import { ChannelAddress, EdgeConfig } from '../shared'; export class Utils { @@ -556,6 +556,74 @@ export class Utils { return Math.round(price * 10000) / 10000.0; } } + + /** + * Calculates the total other consumption. + * other consumption = total Consumption - (total evcs consumption) - (total consumptionMeter consumption) + * + * @param energyValues the energyValues, retrieved from {@link QueryHistoricTimeseriesEnergyRequest} + * @param evcsComponents the evcsComponents + * @param consumptionMeterComponents the consumptionMeterComponents + * @returns the other consumption + */ + public static calculateOtherConsumptionTotal(energyValues: QueryHistoricTimeseriesEnergyResponse, evcsComponents: EdgeConfig.Component[], consumptionMeterComponents: EdgeConfig.Component[]): number { + + let totalEvcsConsumption: number = 0; + let totalMeteredConsumption: number = 0; + evcsComponents.forEach(component => { + totalEvcsConsumption = this.addSafely(totalEvcsConsumption, energyValues.result.data[component.id + '/ActiveConsumptionEnergy']); + }); + + consumptionMeterComponents.forEach(meter => { + totalMeteredConsumption = this.addSafely(totalMeteredConsumption, energyValues.result.data[meter.id + '/ActiveConsumptionEnergy']); + }); + + return Utils.roundSlightlyNegativeValues( + Utils.subtractSafely( + Utils.subtractSafely( + energyValues.result.data['_sum/ConsumptionActiveEnergy'], totalEvcsConsumption), + totalMeteredConsumption)); + } + + /** + * Calculates the other consumption. + * + * other consumption = total Consumption - (total evcs consumption) - (total consumptionMeter consumption) + * + * @param channelData the channelData, retrieved from {@link QueryHistoricTimeseriesDataRequest} or {@link QueryHistoricTimeseriesEnergyPerPeriodRequest} + * @param evcsComponents the evcsComponents + * @param consumptionMeterComponents the consumptionMeterComponents + * @returns the other consumption + */ + public static calculateOtherConsumption(channelData: HistoryUtils.ChannelData, evcsComponents: EdgeConfig.Component[], consumptionMeterComponents: EdgeConfig.Component[]): number[] { + + let totalEvcsConsumption: number[] = []; + let totalMeteredConsumption: number[] = []; + + evcsComponents.forEach(component => { + channelData[component.id + '/ChargePower']?.forEach((value, index) => { + totalEvcsConsumption[index] = value; + }); + }); + + consumptionMeterComponents.forEach(meter => { + channelData[meter.id + '/ActivePower']?.forEach((value, index) => { + totalMeteredConsumption[index] = value; + }); + }); + + return channelData['ConsumptionActivePower']?.map((value, index) => { + + if (value == null) { + return null; + } + return Utils.roundSlightlyNegativeValues( + Utils.subtractSafely( + Utils.subtractSafely( + value, totalEvcsConsumption[index]), + totalMeteredConsumption[index])); + }); + } } export enum YAxisTitle { diff --git a/ui/src/assets/i18n/de.json b/ui/src/assets/i18n/de.json index f00ea255fcb..2cd01b43de9 100644 --- a/ui/src/assets/i18n/de.json +++ b/ui/src/assets/i18n/de.json @@ -941,4 +941,4 @@ "MORE_CHANNELS": "Weitere Kanäle hinzufügen", "CHANNEL": "Kanal" } -} \ No newline at end of file +}