# Changelog
-## [v1.2.25](https://github.com/sap/e-mobility-charging-stations-simulator/compare/v1.2.24...v1.2.25)
+## [v1.2.26](https://github.com/sap/e-mobility-charging-stations-simulator/compare/v1.2.25...v1.2.26)
+
+- fix(simulator): buffer OCPP payload at sending error [`#156`](https://github.com/sap/e-mobility-charging-stations-simulator/issues/156)
+- build(deps-dev): apply updates [`4a0329e`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/4a0329e11a89061df3af60db199fc11763748f8d)
+- build(deps-dev): apply updates [`5ca3b55`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/5ca3b55883ae9fe6e27587ee878b0281fe5fe5ba)
+- fix: make stationInfo attributes writable again [`33276ba`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/33276ba6a447f0beb92b934d2b8d5cb08eababb4)
+- refactor: stricter type checking in conditions [`4e3b1d6`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/4e3b1d6bdc767ec63949b998f0375fe2b5bc2b28)
+- feat: add message buffer flush interval [`1cee001`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/1cee0015ac704be480535c7228103525cc3c8cc2)
+- fix: add getter/setter on some station info attributes [`9fe79a1`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/9fe79a139245f48ce0b6b05a90e601a749c37507)
+- refactor: improve OCPP error defaults and usage [`7375968`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/7375968c99fc22707e16e5e7923ca130c824ce5b)
+- build(deps-dev): apply updates [`8e3118b`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/8e3118bd3b575d372ed39222424833e38193f794)
+- fix: do not log twice OCPP request sending error [`3febbc9`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/3febbc9f6498f7f5a6dc754a5fa687d112cc2c9b)
+- fix: fix configuration loading from file [`7878689`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/78786898ff255379a312fc2d9724515b9219b27c)
+- refactor: remove unneeded max power getter [`7ffc143`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/7ffc14365e06809bde30fff5fd03fb022d7483f5)
+- fix: ensure updated CS event is emitted on all possible changes [`8baae8e`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/8baae8ee55048e93af74e94a2a806675d738e3bb)
+- refactor: remove unneeded encapsulation in arrow function [`b7ee97c`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/b7ee97c15b5c634db6d1aa05f8c52dc2e25715fd)
+- refactor: remove unneeded registration status getter [`05e2446`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/05e2446f43d2fb81bfdfe43684186acdeb490085)
+- fix: ensure the message buffer is flushed once accepted state is reached [`6ccd865`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/6ccd865d6381ce21115dbe4c9271f64e5c8048c5)
+- refactor: explicit condition check in OCPP stack [`9aa1a33`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/9aa1a33f94dfe5b96a4715f87fb630a63b3250a6)
+- perf(ui): only build WS payload if connection is opened [`3133b91`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/3133b91cd6761645ddeabac18e6db8d34a10356e)
+- fix: ensure configuration keys are saved with the right data structure [`755a76d`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/755a76d5aeb7164b82c392048c11d401f99aad81)
+- refactor: cleanup persistent stationInfo tunable handling [`15af2fe`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/15af2feb2facd029a64f005074db43cdb175e69c)
+- build: bump volta node version [`3216379`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/321637937e652701db0aefb5b994ee46eff2080a)
+- build: remove now uneeded ESM workaround for esbuil [`f01a4e6`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/f01a4e61a5ba423fbb9636747de36505cbf0e5bd)
+- refactor: refine type casting in OCPP stack [`e3fd8f6`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/e3fd8f6dce61f4b723e18b524c50fd00c864c82d)
+- refactor: refine OCPP stack log message [`42b8cf5`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/42b8cf5cdca8eaab1e7442f7c92c2a5ed97434f6)
+- refactor: cleanup types signature namespace [`8b75cab`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/8b75cab6a9906ba8a0a571c07cc80489c761dc15)
+- refactor: more stricter type checking in condition [`bc0f4d8`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/bc0f4d8f4973f36baa3f468848fe4d7af25c9a9c)
+- refactor: add error name in worker set worker startup error reporting [`7cd4006`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/7cd4006c7ba46b245fe2e14e9ad336f6a8a0d7f0)
+
+## [v1.2.25](https://github.com/sap/e-mobility-charging-stations-simulator/compare/v1.2.24...v1.2.25) (2023-11-20)
- build(deps-dev): apply udpates [`793a8ff`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/793a8ffcbc424b3552482f59f865e1adc25e4f23)
- build(deps-dev): apply updates [`464d3e1`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/464d3e1aec162bc71f36399f575060cfa098dcbf)
- refactor: factor out WS error handling code [`3c80de9`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/3c80de96aa61159bf5551c816264e878f2b84e35)
- feat: ensure measurand min value are taken into account [`d71ce3f`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/d71ce3fa734fcefeb3dce31d78968b847c625c92)
- fix: fix OCPP message sending promise leak [`9d7b5fa`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/9d7b5fa3591b5cbdfbfb44d7c2721b2050399664)
+- chore: version 1.2.25 [`3b50f6e`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/3b50f6e861c26b56e46a4a21f83883d7063b5752)
- fix: remove incorrect promise race usage at stopping charging stations [`5b2721d`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/5b2721dbc4fa0b5ee6e48241a5077091a7b1c342)
- build(deps-dev): apply updates [`42de5c9`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/42de5c96eddd902024485230d337a9047c4edaea)
- refactor: strong type data sent to worker [`d769e04`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/d769e04a20f93f2b11eacccc48c555236a65bf65)
/**
* Check if the current node version match the required engines version.
*/
-export function checkNodeVersion() {
+export const checkNodeVersion = () => {
const enginesNodeVersion = packageJson.engines.node;
if (semVer.satisfies(version, enginesNodeVersion) === false) {
console.error(
// eslint-disable-next-line n/no-process-exit
exit(1);
}
-}
+};
checkNodeVersion();
{
"$schema": "https://json.schemastore.org/package",
"name": "e-mobility-charging-stations-simulator",
- "version": "1.2.25",
+ "version": "1.2.26",
"engines": {
"node": ">=18.18.0",
"pnpm": ">=8.6.0"
},
"volta": {
"node": "20.10.0",
- "pnpm": "8.10.5"
+ "pnpm": "8.11.0"
},
"repository": {
"type": "git",
"logform": "^2.6.0",
"mnemonist": "^0.39.5",
"mongodb": "^6.3.0",
- "poolifier": "^3.0.5",
+ "poolifier": "^3.0.9",
"tar": "^6.2.0",
"tslib": "^2.6.2",
"winston": "^3.11.0",
"@commitlint/config-conventional": "^18.4.3",
"@mikro-orm/cli": "^5.9.4",
"@release-it/bumper": "^6.0.1",
- "@types/node": "^20.9.4",
+ "@types/node": "^20.10.0",
"@types/tar": "^6.1.10",
"@types/ws": "^8.5.10",
"@typescript-eslint/eslint-plugin": "^6.12.0",
"c8": "^8.0.1",
"clinic": "^13.0.0",
"cross-env": "^7.0.3",
- "esbuild": "^0.19.7",
+ "esbuild": "^0.19.8",
"esbuild-plugin-clean": "^1.0.1",
"esbuild-plugin-copy": "^2.1.1",
"eslint": "^8.54.0",
"release-it": "^17.0.0",
"rimraf": "^5.0.5",
"semver": "^7.5.4",
- "tsx": "^4.4.0",
+ "tsx": "^4.5.0",
"typescript": "~5.3.2"
}
}
specifier: ^6.3.0
version: 6.3.0
poolifier:
- specifier: ^3.0.5
- version: 3.0.5
+ specifier: ^3.0.9
+ version: 3.0.9
tar:
specifier: ^6.2.0
version: 6.2.0
specifier: ^6.0.1
version: 6.0.1(release-it@17.0.0)
'@types/node':
- specifier: ^20.9.4
- version: 20.9.4
+ specifier: ^20.10.0
+ version: 20.10.0
'@types/tar':
specifier: ^6.1.10
version: 6.1.10
specifier: ^7.0.3
version: 7.0.3
esbuild:
- specifier: ^0.19.7
- version: 0.19.7
+ specifier: ^0.19.8
+ version: 0.19.8
esbuild-plugin-clean:
specifier: ^1.0.1
- version: 1.0.1(esbuild@0.19.7)
+ version: 1.0.1(esbuild@0.19.8)
esbuild-plugin-copy:
specifier: ^2.1.1
- version: 2.1.1(esbuild@0.19.7)
+ version: 2.1.1(esbuild@0.19.8)
eslint:
specifier: ^8.54.0
version: 8.54.0
specifier: ^7.5.3
version: 7.5.4
tsx:
- specifier: ^4.4.0
- version: 4.4.0
+ specifier: ^4.5.0
+ version: 4.5.0
typescript:
specifier: ~5.3.2
version: 5.3.2
'@commitlint/execute-rule': 18.4.3
'@commitlint/resolve-extends': 18.4.3
'@commitlint/types': 18.4.3
- '@types/node': 18.18.12
+ '@types/node': 18.18.13
chalk: 4.1.2
cosmiconfig: 8.3.6(typescript@5.3.2)
- cosmiconfig-typescript-loader: 5.0.0(@types/node@18.18.12)(cosmiconfig@8.3.6)(typescript@5.3.2)
+ cosmiconfig-typescript-loader: 5.0.0(@types/node@18.18.13)(cosmiconfig@8.3.6)(typescript@5.3.2)
lodash.isplainobject: 4.0.6
lodash.merge: 4.6.2
lodash.uniq: 4.5.0
dev: true
optional: true
- /@esbuild/android-arm64@0.19.7:
- resolution: {integrity: sha512-YEDcw5IT7hW3sFKZBkCAQaOCJQLONVcD4bOyTXMZz5fr66pTHnAet46XAtbXAkJRfIn2YVhdC6R9g4xa27jQ1w==}
+ /@esbuild/android-arm64@0.19.8:
+ resolution: {integrity: sha512-B8JbS61bEunhfx8kasogFENgQfr/dIp+ggYXwTqdbMAgGDhRa3AaPpQMuQU0rNxDLECj6FhDzk1cF9WHMVwrtA==}
engines: {node: '>=12'}
cpu: [arm64]
os: [android]
dev: true
optional: true
- /@esbuild/android-arm@0.19.7:
- resolution: {integrity: sha512-YGSPnndkcLo4PmVl2tKatEn+0mlVMr3yEpOOT0BeMria87PhvoJb5dg5f5Ft9fbCVgtAz4pWMzZVgSEGpDAlww==}
+ /@esbuild/android-arm@0.19.8:
+ resolution: {integrity: sha512-31E2lxlGM1KEfivQl8Yf5aYU/mflz9g06H6S15ITUFQueMFtFjESRMoDSkvMo8thYvLBax+VKTPlpnx+sPicOA==}
engines: {node: '>=12'}
cpu: [arm]
os: [android]
dev: true
optional: true
- /@esbuild/android-x64@0.19.7:
- resolution: {integrity: sha512-jhINx8DEjz68cChFvM72YzrqfwJuFbfvSxZAk4bebpngGfNNRm+zRl4rtT9oAX6N9b6gBcFaJHFew5Blf6CvUw==}
+ /@esbuild/android-x64@0.19.8:
+ resolution: {integrity: sha512-rdqqYfRIn4jWOp+lzQttYMa2Xar3OK9Yt2fhOhzFXqg0rVWEfSclJvZq5fZslnz6ypHvVf3CT7qyf0A5pM682A==}
engines: {node: '>=12'}
cpu: [x64]
os: [android]
dev: true
optional: true
- /@esbuild/darwin-arm64@0.19.7:
- resolution: {integrity: sha512-dr81gbmWN//3ZnBIm6YNCl4p3pjnabg1/ZVOgz2fJoUO1a3mq9WQ/1iuEluMs7mCL+Zwv7AY5e3g1hjXqQZ9Iw==}
+ /@esbuild/darwin-arm64@0.19.8:
+ resolution: {integrity: sha512-RQw9DemMbIq35Bprbboyf8SmOr4UXsRVxJ97LgB55VKKeJOOdvsIPy0nFyF2l8U+h4PtBx/1kRf0BelOYCiQcw==}
engines: {node: '>=12'}
cpu: [arm64]
os: [darwin]
dev: true
optional: true
- /@esbuild/darwin-x64@0.19.7:
- resolution: {integrity: sha512-Lc0q5HouGlzQEwLkgEKnWcSazqr9l9OdV2HhVasWJzLKeOt0PLhHaUHuzb8s/UIya38DJDoUm74GToZ6Wc7NGQ==}
+ /@esbuild/darwin-x64@0.19.8:
+ resolution: {integrity: sha512-3sur80OT9YdeZwIVgERAysAbwncom7b4bCI2XKLjMfPymTud7e/oY4y+ci1XVp5TfQp/bppn7xLw1n/oSQY3/Q==}
engines: {node: '>=12'}
cpu: [x64]
os: [darwin]
dev: true
optional: true
- /@esbuild/freebsd-arm64@0.19.7:
- resolution: {integrity: sha512-+y2YsUr0CxDFF7GWiegWjGtTUF6gac2zFasfFkRJPkMAuMy9O7+2EH550VlqVdpEEchWMynkdhC9ZjtnMiHImQ==}
+ /@esbuild/freebsd-arm64@0.19.8:
+ resolution: {integrity: sha512-WAnPJSDattvS/XtPCTj1tPoTxERjcTpH6HsMr6ujTT+X6rylVe8ggxk8pVxzf5U1wh5sPODpawNicF5ta/9Tmw==}
engines: {node: '>=12'}
cpu: [arm64]
os: [freebsd]
dev: true
optional: true
- /@esbuild/freebsd-x64@0.19.7:
- resolution: {integrity: sha512-CdXOxIbIzPJmJhrpmJTLx+o35NoiKBIgOvmvT+jeSadYiWJn0vFKsl+0bSG/5lwjNHoIDEyMYc/GAPR9jxusTA==}
+ /@esbuild/freebsd-x64@0.19.8:
+ resolution: {integrity: sha512-ICvZyOplIjmmhjd6mxi+zxSdpPTKFfyPPQMQTK/w+8eNK6WV01AjIztJALDtwNNfFhfZLux0tZLC+U9nSyA5Zg==}
engines: {node: '>=12'}
cpu: [x64]
os: [freebsd]
dev: true
optional: true
- /@esbuild/linux-arm64@0.19.7:
- resolution: {integrity: sha512-inHqdOVCkUhHNvuQPT1oCB7cWz9qQ/Cz46xmVe0b7UXcuIJU3166aqSunsqkgSGMtUCWOZw3+KMwI6otINuC9g==}
+ /@esbuild/linux-arm64@0.19.8:
+ resolution: {integrity: sha512-z1zMZivxDLHWnyGOctT9JP70h0beY54xDDDJt4VpTX+iwA77IFsE1vCXWmprajJGa+ZYSqkSbRQ4eyLCpCmiCQ==}
engines: {node: '>=12'}
cpu: [arm64]
os: [linux]
dev: true
optional: true
- /@esbuild/linux-arm@0.19.7:
- resolution: {integrity: sha512-Y+SCmWxsJOdQtjcBxoacn/pGW9HDZpwsoof0ttL+2vGcHokFlfqV666JpfLCSP2xLxFpF1lj7T3Ox3sr95YXww==}
+ /@esbuild/linux-arm@0.19.8:
+ resolution: {integrity: sha512-H4vmI5PYqSvosPaTJuEppU9oz1dq2A7Mr2vyg5TF9Ga+3+MGgBdGzcyBP7qK9MrwFQZlvNyJrvz6GuCaj3OukQ==}
engines: {node: '>=12'}
cpu: [arm]
os: [linux]
dev: true
optional: true
- /@esbuild/linux-ia32@0.19.7:
- resolution: {integrity: sha512-2BbiL7nLS5ZO96bxTQkdO0euGZIUQEUXMTrqLxKUmk/Y5pmrWU84f+CMJpM8+EHaBPfFSPnomEaQiG/+Gmh61g==}
+ /@esbuild/linux-ia32@0.19.8:
+ resolution: {integrity: sha512-1a8suQiFJmZz1khm/rDglOc8lavtzEMRo0v6WhPgxkrjcU0LkHj+TwBrALwoz/OtMExvsqbbMI0ChyelKabSvQ==}
engines: {node: '>=12'}
cpu: [ia32]
os: [linux]
dev: true
optional: true
- /@esbuild/linux-loong64@0.19.7:
- resolution: {integrity: sha512-BVFQla72KXv3yyTFCQXF7MORvpTo4uTA8FVFgmwVrqbB/4DsBFWilUm1i2Oq6zN36DOZKSVUTb16jbjedhfSHw==}
+ /@esbuild/linux-loong64@0.19.8:
+ resolution: {integrity: sha512-fHZWS2JJxnXt1uYJsDv9+b60WCc2RlvVAy1F76qOLtXRO+H4mjt3Tr6MJ5l7Q78X8KgCFudnTuiQRBhULUyBKQ==}
engines: {node: '>=12'}
cpu: [loong64]
os: [linux]
dev: true
optional: true
- /@esbuild/linux-mips64el@0.19.7:
- resolution: {integrity: sha512-DzAYckIaK+pS31Q/rGpvUKu7M+5/t+jI+cdleDgUwbU7KdG2eC3SUbZHlo6Q4P1CfVKZ1lUERRFP8+q0ob9i2w==}
+ /@esbuild/linux-mips64el@0.19.8:
+ resolution: {integrity: sha512-Wy/z0EL5qZYLX66dVnEg9riiwls5IYnziwuju2oUiuxVc+/edvqXa04qNtbrs0Ukatg5HEzqT94Zs7J207dN5Q==}
engines: {node: '>=12'}
cpu: [mips64el]
os: [linux]
dev: true
optional: true
- /@esbuild/linux-ppc64@0.19.7:
- resolution: {integrity: sha512-JQ1p0SmUteNdUaaiRtyS59GkkfTW0Edo+e0O2sihnY4FoZLz5glpWUQEKMSzMhA430ctkylkS7+vn8ziuhUugQ==}
+ /@esbuild/linux-ppc64@0.19.8:
+ resolution: {integrity: sha512-ETaW6245wK23YIEufhMQ3HSeHO7NgsLx8gygBVldRHKhOlD1oNeNy/P67mIh1zPn2Hr2HLieQrt6tWrVwuqrxg==}
engines: {node: '>=12'}
cpu: [ppc64]
os: [linux]
dev: true
optional: true
- /@esbuild/linux-riscv64@0.19.7:
- resolution: {integrity: sha512-xGwVJ7eGhkprY/nB7L7MXysHduqjpzUl40+XoYDGC4UPLbnG+gsyS1wQPJ9lFPcxYAaDXbdRXd1ACs9AE9lxuw==}
+ /@esbuild/linux-riscv64@0.19.8:
+ resolution: {integrity: sha512-T2DRQk55SgoleTP+DtPlMrxi/5r9AeFgkhkZ/B0ap99zmxtxdOixOMI570VjdRCs9pE4Wdkz7JYrsPvsl7eESg==}
engines: {node: '>=12'}
cpu: [riscv64]
os: [linux]
dev: true
optional: true
- /@esbuild/linux-s390x@0.19.7:
- resolution: {integrity: sha512-U8Rhki5PVU0L0nvk+E8FjkV8r4Lh4hVEb9duR6Zl21eIEYEwXz8RScj4LZWA2i3V70V4UHVgiqMpszXvG0Yqhg==}
+ /@esbuild/linux-s390x@0.19.8:
+ resolution: {integrity: sha512-NPxbdmmo3Bk7mbNeHmcCd7R7fptJaczPYBaELk6NcXxy7HLNyWwCyDJ/Xx+/YcNH7Im5dHdx9gZ5xIwyliQCbg==}
engines: {node: '>=12'}
cpu: [s390x]
os: [linux]
dev: true
optional: true
- /@esbuild/linux-x64@0.19.7:
- resolution: {integrity: sha512-ZYZopyLhm4mcoZXjFt25itRlocKlcazDVkB4AhioiL9hOWhDldU9n38g62fhOI4Pth6vp+Mrd5rFKxD0/S+7aQ==}
+ /@esbuild/linux-x64@0.19.8:
+ resolution: {integrity: sha512-lytMAVOM3b1gPypL2TRmZ5rnXl7+6IIk8uB3eLsV1JwcizuolblXRrc5ShPrO9ls/b+RTp+E6gbsuLWHWi2zGg==}
engines: {node: '>=12'}
cpu: [x64]
os: [linux]
dev: true
optional: true
- /@esbuild/netbsd-x64@0.19.7:
- resolution: {integrity: sha512-/yfjlsYmT1O3cum3J6cmGG16Fd5tqKMcg5D+sBYLaOQExheAJhqr8xOAEIuLo8JYkevmjM5zFD9rVs3VBcsjtQ==}
+ /@esbuild/netbsd-x64@0.19.8:
+ resolution: {integrity: sha512-hvWVo2VsXz/8NVt1UhLzxwAfo5sioj92uo0bCfLibB0xlOmimU/DeAEsQILlBQvkhrGjamP0/el5HU76HAitGw==}
engines: {node: '>=12'}
cpu: [x64]
os: [netbsd]
dev: true
optional: true
- /@esbuild/openbsd-x64@0.19.7:
- resolution: {integrity: sha512-MYDFyV0EW1cTP46IgUJ38OnEY5TaXxjoDmwiTXPjezahQgZd+j3T55Ht8/Q9YXBM0+T9HJygrSRGV5QNF/YVDQ==}
+ /@esbuild/openbsd-x64@0.19.8:
+ resolution: {integrity: sha512-/7Y7u77rdvmGTxR83PgaSvSBJCC2L3Kb1M/+dmSIvRvQPXXCuC97QAwMugBNG0yGcbEGfFBH7ojPzAOxfGNkwQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [openbsd]
dev: true
optional: true
- /@esbuild/sunos-x64@0.19.7:
- resolution: {integrity: sha512-JcPvgzf2NN/y6X3UUSqP6jSS06V0DZAV/8q0PjsZyGSXsIGcG110XsdmuWiHM+pno7/mJF6fjH5/vhUz/vA9fw==}
+ /@esbuild/sunos-x64@0.19.8:
+ resolution: {integrity: sha512-9Lc4s7Oi98GqFA4HzA/W2JHIYfnXbUYgekUP/Sm4BG9sfLjyv6GKKHKKVs83SMicBF2JwAX6A1PuOLMqpD001w==}
engines: {node: '>=12'}
cpu: [x64]
os: [sunos]
dev: true
optional: true
- /@esbuild/win32-arm64@0.19.7:
- resolution: {integrity: sha512-ZA0KSYti5w5toax5FpmfcAgu3ZNJxYSRm0AW/Dao5up0YV1hDVof1NvwLomjEN+3/GMtaWDI+CIyJOMTRSTdMw==}
+ /@esbuild/win32-arm64@0.19.8:
+ resolution: {integrity: sha512-rq6WzBGjSzihI9deW3fC2Gqiak68+b7qo5/3kmB6Gvbh/NYPA0sJhrnp7wgV4bNwjqM+R2AApXGxMO7ZoGhIJg==}
engines: {node: '>=12'}
cpu: [arm64]
os: [win32]
dev: true
optional: true
- /@esbuild/win32-ia32@0.19.7:
- resolution: {integrity: sha512-CTOnijBKc5Jpk6/W9hQMMvJnsSYRYgveN6O75DTACCY18RA2nqka8dTZR+x/JqXCRiKk84+5+bRKXUSbbwsS0A==}
+ /@esbuild/win32-ia32@0.19.8:
+ resolution: {integrity: sha512-AIAbverbg5jMvJznYiGhrd3sumfwWs8572mIJL5NQjJa06P8KfCPWZQ0NwZbPQnbQi9OWSZhFVSUWjjIrn4hSw==}
engines: {node: '>=12'}
cpu: [ia32]
os: [win32]
dev: true
optional: true
- /@esbuild/win32-x64@0.19.7:
- resolution: {integrity: sha512-gRaP2sk6hc98N734luX4VpF318l3w+ofrtTu9j5L8EQXF+FzQKV6alCOHMVoJJHvVK/mGbwBXfOL1HETQu9IGQ==}
+ /@esbuild/win32-x64@0.19.8:
+ resolution: {integrity: sha512-bfZ0cQ1uZs2PqpulNL5j/3w+GDhP36k1K5c38QdQg+Swy51jFZWWeIkteNsufkQxp986wnqRRsb/bHbY1WQ7TA==}
engines: {node: '>=12'}
cpu: [x64]
os: [win32]
'@jest/schemas': 29.6.3
'@types/istanbul-lib-coverage': 2.0.6
'@types/istanbul-reports': 3.0.4
- '@types/node': 20.9.4
+ '@types/node': 20.10.0
'@types/yargs': 17.0.32
chalk: 4.1.2
dev: true
universal-user-agent: 6.0.1
dev: true
- /@octokit/endpoint@9.0.2:
- resolution: {integrity: sha512-qhKW8YLIi+Kmc92FQUFGr++DYtkx/1fBv+Thua6baqnjnOsgBYJDCvWZR1YcINuHGOEQt416WOfE+A/oG60NBQ==}
+ /@octokit/endpoint@9.0.3:
+ resolution: {integrity: sha512-TXVX57fJV7SA6LvRkeXPIOBr8AKvKDlhwNVBP/26O9DjIFi+CkYZGFLP9WtPdVOicRIhqGHxBCC6Fdj5AWWGgQ==}
engines: {node: '>= 18'}
dependencies:
'@octokit/types': 12.3.0
- is-plain-object: 5.0.0
universal-user-agent: 6.0.1
dev: true
resolution: {integrity: sha512-YhPaGml3ncZC1NfXpP3WZ7iliL1ap6tLkAp6MvbK2fTTPytzVUyUesBBogcdMm86uRYO5rHaM1xIWxigWZ17MQ==}
engines: {node: '>= 18'}
dependencies:
- '@octokit/endpoint': 9.0.2
+ '@octokit/endpoint': 9.0.3
'@octokit/request-error': 5.0.1
'@octokit/types': 12.3.0
universal-user-agent: 6.0.1
/@types/node@17.0.45:
resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==}
- /@types/node@18.18.12:
- resolution: {integrity: sha512-G7slVfkwOm7g8VqcEF1/5SXiMjP3Tbt+pXDU3r/qhlM2KkGm786DUD4xyMA2QzEElFrv/KZV9gjygv4LnkpbMQ==}
+ /@types/node@18.18.13:
+ resolution: {integrity: sha512-vXYZGRrSCreZmq1rEjMRLXJhiy8MrIeVasx+PCVlP414N7CJLHnMf+juVvjdprHyH+XRy3zKZLHeNueOpJCn0g==}
dependencies:
undici-types: 5.26.5
dev: true
- /@types/node@20.9.4:
- resolution: {integrity: sha512-wmyg8HUhcn6ACjsn8oKYjkN/zUzQeNtMy44weTJSM6p4MMzEOuKbA3OjJ267uPCOW7Xex9dyrNTful8XTQYoDA==}
+ /@types/node@20.10.0:
+ resolution: {integrity: sha512-D0WfRmU9TQ8I9PFx9Yc+EBHw+vSpIub4IDvQivcp26PtPrdMGAq5SDcpXEo/epqa/DXotVpekHiLNTg3iaKXBQ==}
dependencies:
undici-types: 5.26.5
dev: true
/@types/tar@6.1.10:
resolution: {integrity: sha512-60ZO+W0tRKJ3ggdzJKp75xKVlNogKYMqGvr2bMH/+k3T0BagfYTnbmVDFMJB1BFttz6yRgP5MDGP27eh7brrqw==}
dependencies:
- '@types/node': 20.9.4
+ '@types/node': 20.10.0
minipass: 4.2.8
dev: true
/@types/ws@8.5.10:
resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==}
dependencies:
- '@types/node': 20.9.4
+ '@types/node': 20.10.0
dev: true
/@types/yargs-parser@21.0.3:
- encoding
dev: true
- /autocannon@7.12.0:
- resolution: {integrity: sha512-SZwtwykFZaoz5pKg7WY7gw1Dayqv9buXSjvc99sSzZIfguUc4FmFEFJr3INtfXJ7o9Xyn5bJM093wxipVV59ZA==}
+ /autocannon@7.14.0:
+ resolution: {integrity: sha512-lusP43BAwrTwQhihLjKwy7LceyX01eKSvFJUsBktASGqcR1g1ySYSPxCoCGDX08uLEs9oaqEKBBUFMenK3B3lQ==}
hasBin: true
dependencies:
chalk: 4.1.2
engines: {node: '>=6.14.2'}
requiresBuild: true
dependencies:
- node-gyp-build: 4.7.0
+ node-gyp-build: 4.7.1
dev: false
/builtin-modules@3.3.0:
restore-cursor: 4.0.0
dev: true
- /cli-spinners@2.9.1:
- resolution: {integrity: sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==}
+ /cli-spinners@2.9.2:
+ resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
engines: {node: '>=6'}
dev: true
'@clinic/heap-profiler': 5.0.0
any-shell-escape: 0.1.1
async: 3.2.5
- autocannon: 7.12.0
+ autocannon: 7.14.0
commist: 1.1.0
cross-argv: 1.0.0
dargs: 7.0.0
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
dev: true
- /cosmiconfig-typescript-loader@5.0.0(@types/node@18.18.12)(cosmiconfig@8.3.6)(typescript@5.3.2):
+ /cosmiconfig-typescript-loader@5.0.0(@types/node@18.18.13)(cosmiconfig@8.3.6)(typescript@5.3.2):
resolution: {integrity: sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA==}
engines: {node: '>=v16'}
peerDependencies:
cosmiconfig: '>=8.2'
typescript: '>=4'
dependencies:
- '@types/node': 18.18.12
+ '@types/node': 18.18.13
cosmiconfig: 8.3.6(typescript@5.3.2)
jiti: 1.21.0
typescript: 5.3.2
ext: 1.7.0
dev: true
- /esbuild-plugin-clean@1.0.1(esbuild@0.19.7):
+ /esbuild-plugin-clean@1.0.1(esbuild@0.19.8):
resolution: {integrity: sha512-ul606g0wX6oeobBgi3EqpZtCBCwNwCDivvnshsNS5pUsRylKoxUnDqK0ZIyPinlMbP6s8Opc9y2zOeY1Plhe8Q==}
peerDependencies:
esbuild: '>= 0.14.0'
dependencies:
chalk: 4.1.2
del: 6.1.1
- esbuild: 0.19.7
+ esbuild: 0.19.8
dev: true
- /esbuild-plugin-copy@2.1.1(esbuild@0.19.7):
+ /esbuild-plugin-copy@2.1.1(esbuild@0.19.8):
resolution: {integrity: sha512-Bk66jpevTcV8KMFzZI1P7MZKZ+uDcrZm2G2egZ2jNIvVnivDpodZI+/KnpL3Jnap0PBdIHU7HwFGB8r+vV5CVw==}
peerDependencies:
esbuild: '>= 0.14.0'
dependencies:
chalk: 4.1.2
chokidar: 3.5.3
- esbuild: 0.19.7
+ esbuild: 0.19.8
fs-extra: 10.1.0
globby: 11.1.0
dev: true
'@esbuild/win32-x64': 0.18.20
dev: true
- /esbuild@0.19.7:
- resolution: {integrity: sha512-6brbTZVqxhqgbpqBR5MzErImcpA0SQdoKOkcWK/U30HtQxnokIpG3TX2r0IJqbFUzqLjhU/zC1S5ndgakObVCQ==}
+ /esbuild@0.19.8:
+ resolution: {integrity: sha512-l7iffQpT2OrZfH2rXIp7/FkmaeZM0vxbxN9KfiCwGYuZqzMg/JdvX26R31Zxn/Pxvsrg3Y9N6XTcnknqDyyv4w==}
engines: {node: '>=12'}
hasBin: true
requiresBuild: true
optionalDependencies:
- '@esbuild/android-arm': 0.19.7
- '@esbuild/android-arm64': 0.19.7
- '@esbuild/android-x64': 0.19.7
- '@esbuild/darwin-arm64': 0.19.7
- '@esbuild/darwin-x64': 0.19.7
- '@esbuild/freebsd-arm64': 0.19.7
- '@esbuild/freebsd-x64': 0.19.7
- '@esbuild/linux-arm': 0.19.7
- '@esbuild/linux-arm64': 0.19.7
- '@esbuild/linux-ia32': 0.19.7
- '@esbuild/linux-loong64': 0.19.7
- '@esbuild/linux-mips64el': 0.19.7
- '@esbuild/linux-ppc64': 0.19.7
- '@esbuild/linux-riscv64': 0.19.7
- '@esbuild/linux-s390x': 0.19.7
- '@esbuild/linux-x64': 0.19.7
- '@esbuild/netbsd-x64': 0.19.7
- '@esbuild/openbsd-x64': 0.19.7
- '@esbuild/sunos-x64': 0.19.7
- '@esbuild/win32-arm64': 0.19.7
- '@esbuild/win32-ia32': 0.19.7
- '@esbuild/win32-x64': 0.19.7
+ '@esbuild/android-arm': 0.19.8
+ '@esbuild/android-arm64': 0.19.8
+ '@esbuild/android-x64': 0.19.8
+ '@esbuild/darwin-arm64': 0.19.8
+ '@esbuild/darwin-x64': 0.19.8
+ '@esbuild/freebsd-arm64': 0.19.8
+ '@esbuild/freebsd-x64': 0.19.8
+ '@esbuild/linux-arm': 0.19.8
+ '@esbuild/linux-arm64': 0.19.8
+ '@esbuild/linux-ia32': 0.19.8
+ '@esbuild/linux-loong64': 0.19.8
+ '@esbuild/linux-mips64el': 0.19.8
+ '@esbuild/linux-ppc64': 0.19.8
+ '@esbuild/linux-riscv64': 0.19.8
+ '@esbuild/linux-s390x': 0.19.8
+ '@esbuild/linux-x64': 0.19.8
+ '@esbuild/netbsd-x64': 0.19.8
+ '@esbuild/openbsd-x64': 0.19.8
+ '@esbuild/sunos-x64': 0.19.8
+ '@esbuild/win32-arm64': 0.19.8
+ '@esbuild/win32-ia32': 0.19.8
+ '@esbuild/win32-x64': 0.19.8
dev: true
/escalade@3.1.1:
engines: {node: '>=0.10.0'}
dev: true
- /is-plain-object@5.0.0:
- resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==}
- engines: {node: '>=0.10.0'}
- dev: true
-
/is-property@1.0.2:
resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==}
dev: true
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@jest/types': 29.6.3
- '@types/node': 20.9.4
+ '@types/node': 20.10.0
chalk: 4.1.2
ci-info: 3.9.0
graceful-fs: 4.2.11
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
dev: true
- /lru-cache@10.0.3:
- resolution: {integrity: sha512-B7gr+F6MkqB3uzINHXNctGieGsRTMwIBgxkp0yq/5BwcuDzD4A8wQpHQW6vDAm1uKSLQghmRdD9sKqf2vJ1cEg==}
+ /lru-cache@10.1.0:
+ resolution: {integrity: sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==}
engines: {node: 14 || >=16.14}
dev: true
formdata-polyfill: 4.0.10
dev: true
- /node-gyp-build@4.7.0:
- resolution: {integrity: sha512-PbZERfeFdrHQOOXiAKOY0VPbykZy90ndPKk0d+CFDegTKmWp1VgOTz2xACVbr1BjCWxrQp68CXtvNsveFhqDJg==}
+ /node-gyp-build@4.7.1:
+ resolution: {integrity: sha512-wTSrZ+8lsRRa3I3H8Xr65dLWSgCvY2l4AOnaeKdPA9TB/WYMPaTcrzf3rXvFoVvjKNVnu0CcWSx54qq9GKRUYg==}
hasBin: true
requiresBuild: true
dev: false
bl: 4.1.0
chalk: 4.1.2
cli-cursor: 3.1.0
- cli-spinners: 2.9.1
+ cli-spinners: 2.9.2
is-interactive: 1.0.0
is-unicode-supported: 0.1.0
log-symbols: 4.1.0
dependencies:
chalk: 5.3.0
cli-cursor: 4.0.0
- cli-spinners: 2.9.1
+ cli-spinners: 2.9.2
is-interactive: 2.0.0
is-unicode-supported: 1.3.0
log-symbols: 5.1.0
resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==}
engines: {node: '>=16 || 14 >=14.17'}
dependencies:
- lru-cache: 10.0.3
+ lru-cache: 10.1.0
minipass: 7.0.4
dev: true
dependencies:
semver-compare: 1.0.0
- /poolifier@3.0.5:
- resolution: {integrity: sha512-nz8ya6Pr7dCumZku2Y76cqMZ4jw1hVL+udefecuGO1UycuizZpBE1d4u0XZt8NH0YqJ57eVQf95lErD0+bif3A==}
+ /poolifier@3.0.9:
+ resolution: {integrity: sha512-Ky6KC8D8h6xn8z1AsgAdw8n8bra6i6uzT7bJ5jsUauW0VSZatk3SV3Rm/qi710V8Dkbg2p0qg4aRI1a+BDp1MA==}
engines: {node: '>=18.0.0', pnpm: '>=8.6.0'}
requiresBuild: true
dev: false
/tslib@2.6.2:
resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
- /tsx@4.4.0:
- resolution: {integrity: sha512-4fwcEjRUxW20ciSaMB8zkpGwCPxuRGnadDuj/pBk5S9uT29zvWz15PK36GrKJo45mSJomDxVejZ73c6lr3811Q==}
+ /tsx@4.5.0:
+ resolution: {integrity: sha512-hgxdziy9KLaHh9KE+a6tIZFP6kb0MLq/1D0sJVifbGP4QVEYhy6+2FNn7MyCm1pMc63p9CW/L1OzdqTNPxs6rg==}
engines: {node: '>=18.0.0'}
hasBin: true
dependencies:
engines: {node: '>=6.14.2'}
requiresBuild: true
dependencies:
- node-gyp-build: 4.7.0
+ node-gyp-build: 4.7.1
dev: false
/util-deprecate@1.0.2:
# This is the name and version displayed in the SonarCloud UI.
sonar.projectName=e-mobility-charging-stations-simulator
-sonar.projectVersion=1.2.25
+sonar.projectVersion=1.2.26
# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
sonar.sources=src
getMaxNumberOfEvses,
getNumberOfReservableConnectors,
getPhaseRotationValue,
- hasFeatureProfile,
hasReservationExpired,
initializeConnectorsMapStatus,
propagateSerialNumber,
- removeExpiredReservations,
stationTemplateToStationInfo,
warnTemplateKeysDeprecation,
} from './Helpers';
export class ChargingStation extends EventEmitter {
public readonly index: number;
public readonly templateFile: string;
+ public stationInfo!: ChargingStationInfo;
public started: boolean;
public starting: boolean;
public idTagsCache: IdTagsCache;
public bootNotificationRequest!: BootNotificationRequest;
public bootNotificationResponse!: BootNotificationResponse | undefined;
public powerDivider!: number;
- private internalStationInfo!: ChargingStationInfo;
private stopping: boolean;
private configurationFile!: string;
private configurationFileHash!: string;
private readonly sharedLRUCache: SharedLRUCache;
private webSocketPingSetInterval?: NodeJS.Timeout;
private readonly chargingStationWorkerBroadcastChannel: ChargingStationWorkerBroadcastChannel;
- private reservationExpirationSetInterval?: NodeJS.Timeout;
+ private flushMessageBufferSetInterval?: NodeJS.Timeout;
constructor(index: number, templateFile: string) {
super();
return this.connectors.size === 0 && this.evses.size > 0;
}
- public get stationInfo(): ChargingStationInfo {
- return {
- ...{
- enableStatistics: false,
- remoteAuthorization: true,
- currentOutType: CurrentType.AC,
- mainVoltageMeterValues: true,
- phaseLineToLineVoltageMeterValues: false,
- customValueLimitationMeterValues: true,
- ocppStrictCompliance: true,
- outOfOrderEndMeterValues: false,
- beginEndMeterValues: false,
- meteringPerTransaction: true,
- transactionDataMeterValues: false,
- supervisionUrlOcppConfiguration: false,
- supervisionUrlOcppKey: VendorParametersKey.ConnectionUrl,
- ocppVersion: OCPPVersion.VERSION_16,
- ocppPersistentConfiguration: true,
- stationInfoPersistentConfiguration: true,
- automaticTransactionGeneratorPersistentConfiguration: true,
- autoReconnectMaxRetries: -1,
- registrationMaxRetries: -1,
- reconnectExponentialDelay: false,
- stopTransactionsOnStopped: true,
- },
- ...this.internalStationInfo,
- };
- }
-
private get wsConnectionUrl(): URL {
return new URL(
`${
}
public logPrefix = (): string => {
- return logPrefix(
- ` ${
- (isNotEmptyString(this?.stationInfo?.chargingStationId)
- ? this?.stationInfo?.chargingStationId
- : getChargingStationId(this.index, this.getTemplateFromFile()!)) ??
- 'Error at building log prefix'
- } |`,
- );
+ if (isNotEmptyString(this?.stationInfo?.chargingStationId)) {
+ return logPrefix(` ${this?.stationInfo?.chargingStationId} |`);
+ }
+ let stationTemplate: ChargingStationTemplate | undefined;
+ try {
+ stationTemplate = JSON.parse(
+ readFileSync(this.templateFile, 'utf8'),
+ ) as ChargingStationTemplate;
+ } catch {
+ stationTemplate = undefined;
+ }
+ return logPrefix(` ${getChargingStationId(this.index, stationTemplate)} |`);
};
public hasIdTags(): boolean {
return this?.wsConnection?.readyState === WebSocket.OPEN;
}
- public getRegistrationStatus(): RegistrationStatusEnumType | undefined {
- return this?.bootNotificationResponse?.status;
- }
-
public inUnknownState(): boolean {
return isNullOrUndefined(this?.bootNotificationResponse?.status);
}
if (this.stationInfo?.enableStatistics === true) {
this.performanceStatistics?.start();
}
- if (hasFeatureProfile(this, SupportedFeatureProfiles.Reservation)) {
- this.startReservationExpirationSetInterval();
- }
this.openWSConnection();
// Monitor charging station template file
this.templateFileWatcher = watchJsonFile(
if (this.stationInfo?.enableStatistics === true) {
this.performanceStatistics?.stop();
}
- if (hasFeatureProfile(this, SupportedFeatureProfiles.Reservation)) {
- this.stopReservationExpirationSetInterval();
- }
this.sharedLRUCache.deleteChargingStationConfiguration(this.configurationFileHash);
this.templateFileWatcher?.close();
this.sharedLRUCache.deleteChargingStationTemplate(this.templateFileHash);
public bufferMessage(message: string): void {
this.messageBuffer.add(message);
+ if (this.flushMessageBufferSetInterval === undefined) {
+ this.flushMessageBufferSetInterval = setInterval(() => {
+ if (this.isWebSocketConnectionOpened() === true && this.inAcceptedState() === true) {
+ this.flushMessageBuffer();
+ }
+ if (this.flushMessageBufferSetInterval !== undefined && this.messageBuffer.size === 0) {
+ clearInterval(this.flushMessageBufferSetInterval);
+ delete this.flushMessageBufferSetInterval;
+ }
+ }, Constants.DEFAULT_MESSAGE_BUFFER_FLUSH_INTERVAL);
+ }
}
public openWSConnection(
return false;
}
- private startReservationExpirationSetInterval(customInterval?: number): void {
- const interval = customInterval ?? Constants.DEFAULT_RESERVATION_EXPIRATION_INTERVAL;
- if (interval > 0) {
- logger.info(
- `${this.logPrefix()} Reservation expiration date checks started every ${formatDurationMilliSeconds(
- interval,
- )}`,
- );
- this.reservationExpirationSetInterval = setInterval((): void => {
- removeExpiredReservations(this).catch(Constants.EMPTY_FUNCTION);
- }, interval);
- }
- }
-
- private stopReservationExpirationSetInterval(): void {
- if (!isNullOrUndefined(this.reservationExpirationSetInterval)) {
- clearInterval(this.reservationExpirationSetInterval);
- }
- }
-
- // private restartReservationExpiryDateSetInterval(): void {
- // this.stopReservationExpirationSetInterval();
- // this.startReservationExpirationSetInterval();
- // }
-
private getNumberOfReservableConnectors(): number {
let numberOfReservableConnectors = 0;
if (this.hasEvses) {
return stationInfo;
}
- private getStationInfoFromFile(): ChargingStationInfo | undefined {
+ private getStationInfoFromFile(
+ stationInfoPersistentConfiguration = true,
+ ): ChargingStationInfo | undefined {
let stationInfo: ChargingStationInfo | undefined;
- if (this.stationInfo?.stationInfoPersistentConfiguration === true) {
+ if (stationInfoPersistentConfiguration === true) {
stationInfo = this.getConfigurationFromFile()?.stationInfo;
if (stationInfo) {
delete stationInfo?.infoHash;
}
private getStationInfo(): ChargingStationInfo {
+ const defaultStationInfo: Partial<ChargingStationInfo> = {
+ enableStatistics: false,
+ remoteAuthorization: true,
+ currentOutType: CurrentType.AC,
+ mainVoltageMeterValues: true,
+ phaseLineToLineVoltageMeterValues: false,
+ customValueLimitationMeterValues: true,
+ ocppStrictCompliance: true,
+ outOfOrderEndMeterValues: false,
+ beginEndMeterValues: false,
+ meteringPerTransaction: true,
+ transactionDataMeterValues: false,
+ supervisionUrlOcppConfiguration: false,
+ supervisionUrlOcppKey: VendorParametersKey.ConnectionUrl,
+ ocppVersion: OCPPVersion.VERSION_16,
+ ocppPersistentConfiguration: true,
+ stationInfoPersistentConfiguration: true,
+ automaticTransactionGeneratorPersistentConfiguration: true,
+ autoReconnectMaxRetries: -1,
+ registrationMaxRetries: -1,
+ reconnectExponentialDelay: false,
+ stopTransactionsOnStopped: true,
+ };
const stationInfoFromTemplate: ChargingStationInfo = this.getStationInfoFromTemplate();
- const stationInfoFromFile: ChargingStationInfo | undefined = this.getStationInfoFromFile();
+ const stationInfoFromFile: ChargingStationInfo | undefined = this.getStationInfoFromFile(
+ stationInfoFromTemplate?.stationInfoPersistentConfiguration,
+ );
// Priority:
// 1. charging station info from template
// 2. charging station info from configuration file
if (stationInfoFromFile?.templateHash === stationInfoFromTemplate.templateHash) {
- return stationInfoFromFile!;
+ return { ...defaultStationInfo, ...stationInfoFromFile! };
}
stationInfoFromFile &&
propagateSerialNumber(
stationInfoFromFile,
stationInfoFromTemplate,
);
- return stationInfoFromTemplate;
+ return { ...defaultStationInfo, ...stationInfoFromTemplate };
}
private saveStationInfo(): void {
} else {
this.initializeConnectorsOrEvsesFromTemplate(stationTemplate);
}
- this.internalStationInfo = this.getStationInfo();
+ this.stationInfo = this.getStationInfo();
if (
this.stationInfo.firmwareStatus === FirmwareStatus.Installing &&
isNotEmptyString(this.stationInfo.firmwareVersion) &&
}
if (
this.stationInfo?.ocppPersistentConfiguration === true &&
- this.ocppConfiguration?.configurationKey
+ Array.isArray(this.ocppConfiguration?.configurationKey)
) {
- configurationData.configurationKey = this.ocppConfiguration.configurationKey;
+ configurationData.configurationKey = this.ocppConfiguration?.configurationKey;
} else {
delete configurationData.configurationKey;
}
private getOcppConfigurationFromFile(): ChargingStationOcppConfiguration | undefined {
const configurationKey = this.getConfigurationFromFile()?.configurationKey;
- if (this.stationInfo?.ocppPersistentConfiguration === true && configurationKey) {
+ if (this.stationInfo?.ocppPersistentConfiguration === true && Array.isArray(configurationKey)) {
return { configurationKey };
}
return undefined;
return powerDivider;
}
- private getMaximumAmperage(stationInfo: ChargingStationInfo): number | undefined {
- const maximumPower = this.getMaximumPower(stationInfo);
+ private getMaximumAmperage(stationInfo?: ChargingStationInfo): number | undefined {
+ const maximumPower = (stationInfo ?? this.stationInfo).maximumPower!;
switch (this.getCurrentOutType(stationInfo)) {
case CurrentType.AC:
return ACElectricUtils.amperagePerPhaseFromPower(
}
}
- private getMaximumPower(stationInfo?: ChargingStationInfo): number {
- return (stationInfo ?? this.stationInfo).maximumPower!;
- }
-
private getCurrentOutType(stationInfo?: ChargingStationInfo): CurrentType {
return (stationInfo ?? this.stationInfo).currentOutType ?? CurrentType.AC;
}
}
}
}
- if (this.stationInfo?.firmwareStatus === FirmwareStatus.Installing) {
+ if (this.stationInfo.firmwareStatus === FirmwareStatus.Installing) {
await this.ocppRequestService.requestHandler<
FirmwareStatusNotificationRequest,
FirmwareStatusNotificationResponse
getConfigurationKey(this, StandardParametersKey.WebSocketPingInterval)?.value,
)
: 0;
- if (webSocketPingInterval > 0 && !this.webSocketPingSetInterval) {
+ if (webSocketPingInterval > 0 && this.webSocketPingSetInterval === undefined) {
this.webSocketPingSetInterval = setInterval(() => {
if (this.isWebSocketConnectionOpened() === true) {
this.wsConnection?.ping();
webSocketPingInterval,
)}`,
);
- } else if (this.webSocketPingSetInterval) {
+ } else if (this.webSocketPingSetInterval !== undefined) {
logger.info(
`${this.logPrefix()} WebSocket ping already started every ${formatDurationSeconds(
webSocketPingInterval,
}
private stopWebSocketPing(): void {
- if (this.webSocketPingSetInterval) {
+ if (this.webSocketPingSetInterval !== undefined) {
clearInterval(this.webSocketPingSetInterval);
delete this.webSocketPingSetInterval;
}
export const getChargingStationId = (
index: number,
- stationTemplate: ChargingStationTemplate,
+ stationTemplate: ChargingStationTemplate | undefined,
): string => {
+ if (stationTemplate === undefined) {
+ return "Unknown 'chargingStationId'";
+ }
// In case of multiple instances: add instance index to charging station id
const instanceIndex = env.CF_INSTANCE_INDEX ?? 0;
const idSuffix = stationTemplate?.nameSuffix ?? '';
}
throw new OCPPError(
ErrorType.SECURITY_ERROR,
- `Cannot send command ${commandName} PDU when the charging station is in ${chargingStation.getRegistrationStatus()} state on the central server`,
+ `Cannot send command ${commandName} PDU when the charging station is in ${chargingStation?.bootNotificationResponse?.status} state on the central server`,
commandName,
);
}
/* This is intentional */
});
- static readonly DEFAULT_RESERVATION_EXPIRATION_INTERVAL = 60000; // Ms
+ static readonly DEFAULT_MESSAGE_BUFFER_FLUSH_INTERVAL = 60000; // Ms
private constructor() {
// This is intentional
# Web UI
+The Web UI code and configuration is in the repository directory [ui/web](./../../ui/web/). Commands execution is relative to that directory.
+
## Project setup
```shell
},
```
-See [here](../../README.md#charging-stations-simulator-configuration) for more details.
+See [here](./../../README.md#charging-stations-simulator-configuration) for more details.
### Run
},
"volta": {
"node": "20.10.0",
- "pnpm": "8.10.5"
+ "pnpm": "8.11.0"
},
"pnpm": {
"overrides": {
"dependencies": {
"finalhandler": "^1.2.0",
"serve-static": "^1.15.0",
- "vue": "^3.3.8",
+ "vue": "^3.3.9",
"vue-router": "^4.2.5"
},
"devDependencies": {
"@tsconfig/node20": "^20.1.2",
"@types/jsdom": "^21.1.6",
- "@types/node": "^20.9.4",
+ "@types/node": "^20.10.0",
"@typescript-eslint/eslint-plugin": "^6.12.0",
"@typescript-eslint/parser": "^6.12.0",
"@vitejs/plugin-vue": "^4.5.0",
specifier: ^1.15.0
version: 1.15.0
vue:
- specifier: ^3.3.8
- version: 3.3.8(typescript@5.3.2)
+ specifier: ^3.3.9
+ version: 3.3.9(typescript@5.3.2)
vue-router:
specifier: ^4.2.5
- version: 4.2.5(vue@3.3.8)
+ version: 4.2.5(vue@3.3.9)
devDependencies:
'@tsconfig/node20':
specifier: ^21.1.6
version: 21.1.6
'@types/node':
- specifier: ^20.9.4
- version: 20.9.4
+ specifier: ^20.10.0
+ version: 20.10.0
'@typescript-eslint/eslint-plugin':
specifier: ^6.12.0
version: 6.12.0(@typescript-eslint/parser@6.12.0)(eslint@8.54.0)(typescript@5.3.2)
version: 6.12.0(eslint@8.54.0)(typescript@5.3.2)
'@vitejs/plugin-vue':
specifier: ^4.5.0
- version: 4.5.0(vite@5.0.2)(vue@3.3.8)
+ version: 4.5.0(vite@5.0.2)(vue@3.3.9)
'@vitejs/plugin-vue-jsx':
specifier: ^3.1.0
- version: 3.1.0(vite@5.0.2)(vue@3.3.8)
+ version: 3.1.0(vite@5.0.2)(vue@3.3.9)
'@vitest/coverage-v8':
specifier: ^0.34.6
version: 0.34.6(vitest@0.34.6)
version: 12.0.0(eslint-plugin-vue@9.18.1)(eslint@8.54.0)(typescript@5.3.2)
'@vue/test-utils':
specifier: ^2.4.2
- version: 2.4.2(vue@3.3.8)
+ version: 2.4.2(vue@3.3.9)
'@vue/tsconfig':
specifier: ^0.4.0
version: 0.4.0
version: 5.3.2
vite:
specifier: ^5.0.2
- version: 5.0.2(@types/node@20.9.4)
+ version: 5.0.2(@types/node@20.10.0)
vitest:
specifier: ^0.34.6
version: 0.34.6(jsdom@22.1.0)
tslib: 2.6.2
dev: true
- /@rollup/rollup-android-arm-eabi@4.5.1:
- resolution: {integrity: sha512-YaN43wTyEBaMqLDYeze+gQ4ZrW5RbTEGtT5o1GVDkhpdNcsLTnLRcLccvwy3E9wiDKWg9RIhuoy3JQKDRBfaZA==}
+ /@rollup/rollup-android-arm-eabi@4.5.2:
+ resolution: {integrity: sha512-ee7BudTwwrglFYSc3UnqInDDjCLWHKrFmGNi4aK7jlEyg4CyPa1DCMrZfsN1O13YT76UFEqXz2CoN7BCGpUlJw==}
cpu: [arm]
os: [android]
requiresBuild: true
dev: true
optional: true
- /@rollup/rollup-android-arm64@4.5.1:
- resolution: {integrity: sha512-n1bX+LCGlQVuPlCofO0zOKe1b2XkFozAVRoczT+yxWZPGnkEAKTTYVOGZz8N4sKuBnKMxDbfhUsB1uwYdup/sw==}
+ /@rollup/rollup-android-arm64@4.5.2:
+ resolution: {integrity: sha512-xOuhj9HHtn8128ir8veoQsBbAUBasDbHIBniYTEx02pAmu9EXL+ZjJqngnNEy6ZgZ4h1JwL33GMNu3yJL5Mzow==}
cpu: [arm64]
os: [android]
requiresBuild: true
dev: true
optional: true
- /@rollup/rollup-darwin-arm64@4.5.1:
- resolution: {integrity: sha512-QqJBumdvfBqBBmyGHlKxje+iowZwrHna7pokj/Go3dV1PJekSKfmjKrjKQ/e6ESTGhkfPNLq3VXdYLAc+UtAQw==}
+ /@rollup/rollup-darwin-arm64@4.5.2:
+ resolution: {integrity: sha512-NTGJWoL8bKyqyWFn9/RzSv4hQ4wTbaAv0lHHRwf4OnpiiP4P8W0jiXbm8Nc5BCXKmWAwuvJY82mcIU2TayC20g==}
cpu: [arm64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
- /@rollup/rollup-darwin-x64@4.5.1:
- resolution: {integrity: sha512-RrkDNkR/P5AEQSPkxQPmd2ri8WTjSl0RYmuFOiEABkEY/FSg0a4riihWQGKDJ4LnV9gigWZlTMx2DtFGzUrYQw==}
+ /@rollup/rollup-darwin-x64@4.5.2:
+ resolution: {integrity: sha512-hlKqj7bpPvU15sZo4za14u185lpMzdwWLMc9raMqPK4wywt0wR23y1CaVQ4oAFXat3b5/gmRntyfpwWTKl+vvA==}
cpu: [x64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
- /@rollup/rollup-linux-arm-gnueabihf@4.5.1:
- resolution: {integrity: sha512-ZFPxvUZmE+fkB/8D9y/SWl/XaDzNSaxd1TJUSE27XAKlRpQ2VNce/86bGd9mEUgL3qrvjJ9XTGwoX0BrJkYK/A==}
+ /@rollup/rollup-linux-arm-gnueabihf@4.5.2:
+ resolution: {integrity: sha512-7ZIZx8c3u+pfI0ohQsft/GywrXez0uR6dUP0JhBuCK3sFO5TfdLn/YApnVkvPxuTv3+YKPIZend9Mt7Cz6sS3Q==}
cpu: [arm]
os: [linux]
requiresBuild: true
dev: true
optional: true
- /@rollup/rollup-linux-arm64-gnu@4.5.1:
- resolution: {integrity: sha512-FEuAjzVIld5WVhu+M2OewLmjmbXWd3q7Zcx+Rwy4QObQCqfblriDMMS7p7+pwgjZoo9BLkP3wa9uglQXzsB9ww==}
+ /@rollup/rollup-linux-arm64-gnu@4.5.2:
+ resolution: {integrity: sha512-7Pk/5mO11JW/cH+a8lL/i0ZxmRGrbpYqN0VwO2DHhU+SJWWOH2zE1RAcPaj8KqiwC8DCDIJOSxjV9+9lLb6aeA==}
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: true
optional: true
- /@rollup/rollup-linux-arm64-musl@4.5.1:
- resolution: {integrity: sha512-f5Gs8WQixqGRtI0Iq/cMqvFYmgFzMinuJO24KRfnv7Ohi/HQclwrBCYkzQu1XfLEEt3DZyvveq9HWo4bLJf1Lw==}
+ /@rollup/rollup-linux-arm64-musl@4.5.2:
+ resolution: {integrity: sha512-KrRnuG5phJx756e62wxvWH2e+TK84MP2IVuPwfge+GBvWqIUfVzFRn09TKruuQBXzZp52Vyma7FjMDkwlA9xpg==}
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: true
optional: true
- /@rollup/rollup-linux-x64-gnu@4.5.1:
- resolution: {integrity: sha512-CWPkPGrFfN2vj3mw+S7A/4ZaU3rTV7AkXUr08W9lNP+UzOvKLVf34tWCqrKrfwQ0NTk5GFqUr2XGpeR2p6R4gw==}
+ /@rollup/rollup-linux-x64-gnu@4.5.2:
+ resolution: {integrity: sha512-My+53GasPa2D2tU5dXiyHYwrELAUouSfkNlZ3bUKpI7btaztO5vpALEs3mvFjM7aKTvEbc7GQckuXeXIDKQ0fg==}
cpu: [x64]
os: [linux]
requiresBuild: true
dev: true
optional: true
- /@rollup/rollup-linux-x64-musl@4.5.1:
- resolution: {integrity: sha512-ZRETMFA0uVukUC9u31Ed1nx++29073goCxZtmZARwk5aF/ltuENaeTtRVsSQzFlzdd4J6L3qUm+EW8cbGt0CKQ==}
+ /@rollup/rollup-linux-x64-musl@4.5.2:
+ resolution: {integrity: sha512-/f0Q6Sc+Vw54Ws6N8fxaEe4R7at3b8pFyv+O/F2VaQ4hODUJcRUcCBJh6zuqtgQQt7w845VTkGLFgWZkP3tUoQ==}
cpu: [x64]
os: [linux]
requiresBuild: true
dev: true
optional: true
- /@rollup/rollup-win32-arm64-msvc@4.5.1:
- resolution: {integrity: sha512-ihqfNJNb2XtoZMSCPeoo0cYMgU04ksyFIoOw5S0JUVbOhafLot+KD82vpKXOurE2+9o/awrqIxku9MRR9hozHQ==}
+ /@rollup/rollup-win32-arm64-msvc@4.5.2:
+ resolution: {integrity: sha512-NCKuuZWLht6zj7s6EIFef4BxCRX1GMr83S2W4HPCA0RnJ4iHE4FS1695q6Ewoa6A9nFjJe1//yUu0kgBU07Edw==}
cpu: [arm64]
os: [win32]
requiresBuild: true
dev: true
optional: true
- /@rollup/rollup-win32-ia32-msvc@4.5.1:
- resolution: {integrity: sha512-zK9MRpC8946lQ9ypFn4gLpdwr5a01aQ/odiIJeL9EbgZDMgbZjjT/XzTqJvDfTmnE1kHdbG20sAeNlpc91/wbg==}
+ /@rollup/rollup-win32-ia32-msvc@4.5.2:
+ resolution: {integrity: sha512-J5zL3riR4AOyU/J3M/i4k/zZ8eP1yT+nTmAKztCXJtnI36jYH0eepvob22mAQ/kLwfsK2TB6dbyVY1F8c/0H5A==}
cpu: [ia32]
os: [win32]
requiresBuild: true
dev: true
optional: true
- /@rollup/rollup-win32-x64-msvc@4.5.1:
- resolution: {integrity: sha512-5I3Nz4Sb9TYOtkRwlH0ow+BhMH2vnh38tZ4J4mggE48M/YyJyp/0sPSxhw1UeS1+oBgQ8q7maFtSeKpeRJu41Q==}
+ /@rollup/rollup-win32-x64-msvc@4.5.2:
+ resolution: {integrity: sha512-pL0RXRHuuGLhvs7ayX/SAHph1hrDPXOM5anyYUQXWJEENxw3nfHkzv8FfVlEVcLyKPAEgDRkd6RKZq2SMqS/yg==}
cpu: [x64]
os: [win32]
requiresBuild: true
/@types/jsdom@21.1.6:
resolution: {integrity: sha512-/7kkMsC+/kMs7gAYmmBR9P0vGTnOoLhQhyhQJSlXGI5bzTHp6xdo0TtKWQAsz6pmSAeVqKSbqeyP6hytqr9FDw==}
dependencies:
- '@types/node': 20.9.4
+ '@types/node': 20.10.0
'@types/tough-cookie': 4.0.5
parse5: 7.1.2
dev: true
resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
dev: true
- /@types/node@20.9.4:
- resolution: {integrity: sha512-wmyg8HUhcn6ACjsn8oKYjkN/zUzQeNtMy44weTJSM6p4MMzEOuKbA3OjJ267uPCOW7Xex9dyrNTful8XTQYoDA==}
+ /@types/node@20.10.0:
+ resolution: {integrity: sha512-D0WfRmU9TQ8I9PFx9Yc+EBHw+vSpIub4IDvQivcp26PtPrdMGAq5SDcpXEo/epqa/DXotVpekHiLNTg3iaKXBQ==}
dependencies:
undici-types: 5.26.5
dev: true
resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
dev: true
- /@vitejs/plugin-vue-jsx@3.1.0(vite@5.0.2)(vue@3.3.8):
+ /@vitejs/plugin-vue-jsx@3.1.0(vite@5.0.2)(vue@3.3.9):
resolution: {integrity: sha512-w9M6F3LSEU5kszVb9An2/MmXNxocAnUb3WhRr8bHlimhDrXNt6n6D2nJQR3UXpGlZHh/EsgouOHCsM8V3Ln+WA==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
'@babel/core': 7.23.3
'@babel/plugin-transform-typescript': 7.23.4(@babel/core@7.23.3)
'@vue/babel-plugin-jsx': 1.1.5(@babel/core@7.23.3)
- vite: 5.0.2(@types/node@20.9.4)
- vue: 3.3.8(typescript@5.3.2)
+ vite: 5.0.2(@types/node@20.10.0)
+ vue: 3.3.9(typescript@5.3.2)
transitivePeerDependencies:
- supports-color
dev: true
- /@vitejs/plugin-vue@4.5.0(vite@5.0.2)(vue@3.3.8):
+ /@vitejs/plugin-vue@4.5.0(vite@5.0.2)(vue@3.3.9):
resolution: {integrity: sha512-a2WSpP8X8HTEww/U00bU4mX1QpLINNuz/2KMNpLsdu3BzOpak3AGI1CJYBTXcc4SPhaD0eNRUp7IyQK405L5dQ==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
vite: ^4.0.0 || ^5.0.0
vue: ^3.2.25
dependencies:
- vite: 5.0.2(@types/node@20.9.4)
- vue: 3.3.8(typescript@5.3.2)
+ vite: 5.0.2(@types/node@20.10.0)
+ vue: 3.3.9(typescript@5.3.2)
dev: true
/@vitest/coverage-v8@0.34.6(vitest@0.34.6):
- supports-color
dev: true
- /@vue/compiler-core@3.3.8:
- resolution: {integrity: sha512-hN/NNBUECw8SusQvDSqqcVv6gWq8L6iAktUR0UF3vGu2OhzRqcOiAno0FmBJWwxhYEXRlQJT5XnoKsVq1WZx4g==}
+ /@vue/compiler-core@3.3.9:
+ resolution: {integrity: sha512-+/Lf68Vr/nFBA6ol4xOtJrW+BQWv3QWKfRwGSm70jtXwfhZNF4R/eRgyVJYoxFRhdCTk/F6g99BP0ffPgZihfQ==}
dependencies:
'@babel/parser': 7.23.4
- '@vue/shared': 3.3.8
+ '@vue/shared': 3.3.9
estree-walker: 2.0.2
source-map-js: 1.0.2
- /@vue/compiler-dom@3.3.8:
- resolution: {integrity: sha512-+PPtv+p/nWDd0AvJu3w8HS0RIm/C6VGBIRe24b9hSyNWOAPEUosFZ5diwawwP8ip5sJ8n0Pe87TNNNHnvjs0FQ==}
+ /@vue/compiler-dom@3.3.9:
+ resolution: {integrity: sha512-nfWubTtLXuT4iBeDSZ5J3m218MjOy42Vp2pmKVuBKo2/BLcrFUX8nCSr/bKRFiJ32R8qbdnnnBgRn9AdU5v0Sg==}
dependencies:
- '@vue/compiler-core': 3.3.8
- '@vue/shared': 3.3.8
+ '@vue/compiler-core': 3.3.9
+ '@vue/shared': 3.3.9
- /@vue/compiler-sfc@3.3.8:
- resolution: {integrity: sha512-WMzbUrlTjfYF8joyT84HfwwXo+8WPALuPxhy+BZ6R4Aafls+jDBnSz8PDz60uFhuqFbl3HxRfxvDzrUf3THwpA==}
+ /@vue/compiler-sfc@3.3.9:
+ resolution: {integrity: sha512-wy0CNc8z4ihoDzjASCOCsQuzW0A/HP27+0MDSSICMjVIFzk/rFViezkR3dzH+miS2NDEz8ywMdbjO5ylhOLI2A==}
dependencies:
'@babel/parser': 7.23.4
- '@vue/compiler-core': 3.3.8
- '@vue/compiler-dom': 3.3.8
- '@vue/compiler-ssr': 3.3.8
- '@vue/reactivity-transform': 3.3.8
- '@vue/shared': 3.3.8
+ '@vue/compiler-core': 3.3.9
+ '@vue/compiler-dom': 3.3.9
+ '@vue/compiler-ssr': 3.3.9
+ '@vue/reactivity-transform': 3.3.9
+ '@vue/shared': 3.3.9
estree-walker: 2.0.2
magic-string: 0.30.5
postcss: 8.4.31
source-map-js: 1.0.2
- /@vue/compiler-ssr@3.3.8:
- resolution: {integrity: sha512-hXCqQL/15kMVDBuoBYpUnSYT8doDNwsjvm3jTefnXr+ytn294ySnT8NlsFHmTgKNjwpuFy7XVV8yTeLtNl/P6w==}
+ /@vue/compiler-ssr@3.3.9:
+ resolution: {integrity: sha512-NO5oobAw78R0G4SODY5A502MGnDNiDjf6qvhn7zD7TJGc8XDeIEw4fg6JU705jZ/YhuokBKz0A5a/FL/XZU73g==}
dependencies:
- '@vue/compiler-dom': 3.3.8
- '@vue/shared': 3.3.8
+ '@vue/compiler-dom': 3.3.9
+ '@vue/shared': 3.3.9
/@vue/devtools-api@6.5.1:
resolution: {integrity: sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==}
- supports-color
dev: true
- /@vue/reactivity-transform@3.3.8:
- resolution: {integrity: sha512-49CvBzmZNtcHua0XJ7GdGifM8GOXoUMOX4dD40Y5DxI3R8OUhMlvf2nvgUAcPxaXiV5MQQ1Nwy09ADpnLQUqRw==}
+ /@vue/reactivity-transform@3.3.9:
+ resolution: {integrity: sha512-HnUFm7Ry6dFa4Lp63DAxTixUp8opMtQr6RxQCpDI1vlh12rkGIeYqMvJtK+IKyEfEOa2I9oCkD1mmsPdaGpdVg==}
dependencies:
'@babel/parser': 7.23.4
- '@vue/compiler-core': 3.3.8
- '@vue/shared': 3.3.8
+ '@vue/compiler-core': 3.3.9
+ '@vue/shared': 3.3.9
estree-walker: 2.0.2
magic-string: 0.30.5
- /@vue/reactivity@3.3.8:
- resolution: {integrity: sha512-ctLWitmFBu6mtddPyOKpHg8+5ahouoTCRtmAHZAXmolDtuZXfjL2T3OJ6DL6ezBPQB1SmMnpzjiWjCiMYmpIuw==}
+ /@vue/reactivity@3.3.9:
+ resolution: {integrity: sha512-VmpIqlNp+aYDg2X0xQhJqHx9YguOmz2UxuUJDckBdQCNkipJvfk9yA75woLWElCa0Jtyec3lAAt49GO0izsphw==}
dependencies:
- '@vue/shared': 3.3.8
+ '@vue/shared': 3.3.9
- /@vue/runtime-core@3.3.8:
- resolution: {integrity: sha512-qurzOlb6q26KWQ/8IShHkMDOuJkQnQcTIp1sdP4I9MbCf9FJeGVRXJFr2mF+6bXh/3Zjr9TDgURXrsCr9bfjUw==}
+ /@vue/runtime-core@3.3.9:
+ resolution: {integrity: sha512-xxaG9KvPm3GTRuM4ZyU8Tc+pMVzcu6eeoSRQJ9IE7NmCcClW6z4B3Ij6L4EDl80sxe/arTtQ6YmgiO4UZqRc+w==}
dependencies:
- '@vue/reactivity': 3.3.8
- '@vue/shared': 3.3.8
+ '@vue/reactivity': 3.3.9
+ '@vue/shared': 3.3.9
- /@vue/runtime-dom@3.3.8:
- resolution: {integrity: sha512-Noy5yM5UIf9UeFoowBVgghyGGPIDPy1Qlqt0yVsUdAVbqI8eeMSsTqBtauaEoT2UFXUk5S64aWVNJN4MJ2vRdA==}
+ /@vue/runtime-dom@3.3.9:
+ resolution: {integrity: sha512-e7LIfcxYSWbV6BK1wQv9qJyxprC75EvSqF/kQKe6bdZEDNValzeRXEVgiX7AHI6hZ59HA4h7WT5CGvm69vzJTQ==}
dependencies:
- '@vue/runtime-core': 3.3.8
- '@vue/shared': 3.3.8
+ '@vue/runtime-core': 3.3.9
+ '@vue/shared': 3.3.9
csstype: 3.1.2
- /@vue/server-renderer@3.3.8(vue@3.3.8):
- resolution: {integrity: sha512-zVCUw7RFskvPuNlPn/8xISbrf0zTWsTSdYTsUTN1ERGGZGVnRxM2QZ3x1OR32+vwkkCm0IW6HmJ49IsPm7ilLg==}
+ /@vue/server-renderer@3.3.9(vue@3.3.9):
+ resolution: {integrity: sha512-w0zT/s5l3Oa3ZjtLW88eO4uV6AQFqU8X5GOgzq7SkQQu6vVr+8tfm+OI2kDBplS/W/XgCBuFXiPw6T5EdwXP0A==}
peerDependencies:
- vue: 3.3.8
+ vue: 3.3.9
dependencies:
- '@vue/compiler-ssr': 3.3.8
- '@vue/shared': 3.3.8
- vue: 3.3.8(typescript@5.3.2)
+ '@vue/compiler-ssr': 3.3.9
+ '@vue/shared': 3.3.9
+ vue: 3.3.9(typescript@5.3.2)
- /@vue/shared@3.3.8:
- resolution: {integrity: sha512-8PGwybFwM4x8pcfgqEQFy70NaQxASvOC5DJwLQfpArw1UDfUXrJkdxD3BhVTMS+0Lef/TU7YO0Jvr0jJY8T+mw==}
+ /@vue/shared@3.3.9:
+ resolution: {integrity: sha512-ZE0VTIR0LmYgeyhurPTpy4KzKsuDyQbMSdM49eKkMnT5X4VfFBLysMzjIZhLEFQYjjOVVfbvUDHckwjDFiO2eA==}
- /@vue/test-utils@2.4.2(vue@3.3.8):
+ /@vue/test-utils@2.4.2(vue@3.3.9):
resolution: {integrity: sha512-07lLjpG1o9tEBoWQfVOFhDT7+WFCdDeECoeSdzOuVgIi6nxb2JDLGNNOV6+3crPpyg/jMlIocj96UROcgomiGg==}
peerDependencies:
'@vue/server-renderer': ^3.0.1
optional: true
dependencies:
js-beautify: 1.14.11
- vue: 3.3.8(typescript@5.3.2)
+ vue: 3.3.9(typescript@5.3.2)
vue-component-type-helpers: 1.8.22
dev: true
hasBin: true
dependencies:
caniuse-lite: 1.0.30001564
- electron-to-chromium: 1.4.590
+ electron-to-chromium: 1.4.594
node-releases: 2.0.13
update-browserslist-db: 1.0.13(browserslist@4.22.1)
dev: true
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
dev: false
- /electron-to-chromium@1.4.590:
- resolution: {integrity: sha512-hohItzsQcG7/FBsviCYMtQwUSWvVF7NVqPOnJCErWsAshsP/CR2LAXdmq276RbESNdhxiAq5/vRo1g2pxGXVww==}
+ /electron-to-chromium@1.4.594:
+ resolution: {integrity: sha512-xT1HVAu5xFn7bDfkjGQi9dNpMqGchUkebwf1GL7cZN32NSwwlHRPMSDJ1KN6HkS0bWUtndbSQZqvpQftKG2uFQ==}
dev: true
/emoji-regex@8.0.0:
get-func-name: 2.0.2
dev: true
- /lru-cache@10.0.3:
- resolution: {integrity: sha512-B7gr+F6MkqB3uzINHXNctGieGsRTMwIBgxkp0yq/5BwcuDzD4A8wQpHQW6vDAm1uKSLQghmRdD9sKqf2vJ1cEg==}
+ /lru-cache@10.1.0:
+ resolution: {integrity: sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==}
engines: {node: 14 || >=16.14}
dev: true
resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==}
engines: {node: '>=16 || 14 >=14.17'}
dependencies:
- lru-cache: 10.0.3
+ lru-cache: 10.1.0
minipass: 7.0.4
dev: true
glob: 10.3.10
dev: true
- /rollup@4.5.1:
- resolution: {integrity: sha512-0EQribZoPKpb5z1NW/QYm3XSR//Xr8BeEXU49Lc/mQmpmVVG5jPUVrpc2iptup/0WMrY9mzas0fxH+TjYvG2CA==}
+ /rollup@4.5.2:
+ resolution: {integrity: sha512-CRK1uoROBfkcqrZKyaFcqCcZWNsvJ6yVYZkqTlRocZhO2s5yER6Z3f/QaYtO8RGyloPnmhwgzuPQpNGeK210xQ==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.5.1
- '@rollup/rollup-android-arm64': 4.5.1
- '@rollup/rollup-darwin-arm64': 4.5.1
- '@rollup/rollup-darwin-x64': 4.5.1
- '@rollup/rollup-linux-arm-gnueabihf': 4.5.1
- '@rollup/rollup-linux-arm64-gnu': 4.5.1
- '@rollup/rollup-linux-arm64-musl': 4.5.1
- '@rollup/rollup-linux-x64-gnu': 4.5.1
- '@rollup/rollup-linux-x64-musl': 4.5.1
- '@rollup/rollup-win32-arm64-msvc': 4.5.1
- '@rollup/rollup-win32-ia32-msvc': 4.5.1
- '@rollup/rollup-win32-x64-msvc': 4.5.1
+ '@rollup/rollup-android-arm-eabi': 4.5.2
+ '@rollup/rollup-android-arm64': 4.5.2
+ '@rollup/rollup-darwin-arm64': 4.5.2
+ '@rollup/rollup-darwin-x64': 4.5.2
+ '@rollup/rollup-linux-arm-gnueabihf': 4.5.2
+ '@rollup/rollup-linux-arm64-gnu': 4.5.2
+ '@rollup/rollup-linux-arm64-musl': 4.5.2
+ '@rollup/rollup-linux-x64-gnu': 4.5.2
+ '@rollup/rollup-linux-x64-musl': 4.5.2
+ '@rollup/rollup-win32-arm64-msvc': 4.5.2
+ '@rollup/rollup-win32-ia32-msvc': 4.5.2
+ '@rollup/rollup-win32-x64-msvc': 4.5.2
fsevents: 2.3.3
dev: true
convert-source-map: 2.0.0
dev: true
- /vite-node@0.34.6(@types/node@20.9.4):
+ /vite-node@0.34.6(@types/node@20.10.0):
resolution: {integrity: sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==}
engines: {node: '>=v14.18.0'}
hasBin: true
mlly: 1.4.2
pathe: 1.1.1
picocolors: 1.0.0
- vite: 5.0.2(@types/node@20.9.4)
+ vite: 5.0.2(@types/node@20.10.0)
transitivePeerDependencies:
- '@types/node'
- less
- terser
dev: true
- /vite@5.0.2(@types/node@20.9.4):
+ /vite@5.0.2(@types/node@20.10.0):
resolution: {integrity: sha512-6CCq1CAJCNM1ya2ZZA7+jS2KgnhbzvxakmlIjN24cF/PXhRMzpM/z8QgsVJA/Dm5fWUWnVEsmtBoMhmerPxT0g==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
terser:
optional: true
dependencies:
- '@types/node': 20.9.4
+ '@types/node': 20.10.0
esbuild: 0.19.7
postcss: 8.4.31
- rollup: 4.5.1
+ rollup: 4.5.2
optionalDependencies:
fsevents: 2.3.3
dev: true
dependencies:
'@types/chai': 4.3.11
'@types/chai-subset': 1.3.5
- '@types/node': 20.9.4
+ '@types/node': 20.10.0
'@vitest/expect': 0.34.6
'@vitest/runner': 0.34.6
'@vitest/snapshot': 0.34.6
strip-literal: 1.3.0
tinybench: 2.5.1
tinypool: 0.7.0
- vite: 5.0.2(@types/node@20.9.4)
- vite-node: 0.34.6(@types/node@20.9.4)
+ vite: 5.0.2(@types/node@20.10.0)
+ vite-node: 0.34.6(@types/node@20.10.0)
why-is-node-running: 2.2.2
transitivePeerDependencies:
- less
- supports-color
dev: true
- /vue-router@4.2.5(vue@3.3.8):
+ /vue-router@4.2.5(vue@3.3.9):
resolution: {integrity: sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==}
peerDependencies:
vue: ^3.2.0
dependencies:
'@vue/devtools-api': 6.5.1
- vue: 3.3.8(typescript@5.3.2)
+ vue: 3.3.9(typescript@5.3.2)
dev: false
- /vue@3.3.8(typescript@5.3.2):
- resolution: {integrity: sha512-5VSX/3DabBikOXMsxzlW8JyfeLKlG9mzqnWgLQLty88vdZL7ZJgrdgBOmrArwxiLtmS+lNNpPcBYqrhE6TQW5w==}
+ /vue@3.3.9(typescript@5.3.2):
+ resolution: {integrity: sha512-sy5sLCTR8m6tvUk1/ijri3Yqzgpdsmxgj6n6yl7GXXCXqVbmW2RCXe9atE4cEI6Iv7L89v5f35fZRRr5dChP9w==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
dependencies:
- '@vue/compiler-dom': 3.3.8
- '@vue/compiler-sfc': 3.3.8
- '@vue/runtime-dom': 3.3.8
- '@vue/server-renderer': 3.3.8(vue@3.3.8)
- '@vue/shared': 3.3.8
+ '@vue/compiler-dom': 3.3.9
+ '@vue/compiler-sfc': 3.3.9
+ '@vue/runtime-dom': 3.3.9
+ '@vue/server-renderer': 3.3.9(vue@3.3.9)
+ '@vue/shared': 3.3.9
typescript: 5.3.2
/w3c-xmlserializer@4.0.0:
automaticTransactionGenerator?: Status[];
};
+export enum OCPP16FirmwareStatus {
+ Downloaded = 'Downloaded',
+ DownloadFailed = 'DownloadFailed',
+ Downloading = 'Downloading',
+ Idle = 'Idle',
+ InstallationFailed = 'InstallationFailed',
+ Installing = 'Installing',
+ Installed = 'Installed',
+}
+
+export const FirmwareStatus = {
+ ...OCPP16FirmwareStatus,
+} as const;
+export type FirmwareStatus = OCPP16FirmwareStatus;
+
export type ChargingStationInfo = {
hashId: string;
chargingStationId?: string;
chargePointVendor: string;
firmwareVersionPattern?: string;
firmwareVersion?: string;
+ firmwareStatus?: FirmwareStatus;
numberOfConnectors?: number | number[];
baseName: string;
templateHash?: string;
connectors?: ConnectorStatus[];
};
-export type AvailabilityType = OCPP16AvailabilityType;
-
export enum OCPP16AvailabilityType {
INOPERATIVE = 'Inoperative',
OPERATIVE = 'Operative',
}
-
-export type ChargePointStatus = OCPP16ChargePointStatus;
+export type AvailabilityType = OCPP16AvailabilityType;
export enum OCPP16ChargePointStatus {
AVAILABLE = 'Available',
UNAVAILABLE = 'Unavailable',
FAULTED = 'Faulted',
}
+export type ChargePointStatus = OCPP16ChargePointStatus;
export type Status = {
start?: boolean;