From 03ebf4c1db6ba11903b42e56692ed3d8538ba1d3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Sun, 28 Aug 2022 23:10:37 +0200 Subject: [PATCH] Refine UI protocol documentation MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérôme Benoit --- .editorconfig | 1 - README.md | 198 +++++++++--------- src/charging-station/ChargingStation.ts | 4 +- .../ocpp/1.6/OCPP16IncomingRequestService.ts | 2 +- .../ocpp/1.6/OCPP16ResponseService.ts | 2 +- src/types/ChargingStationTemplate.ts | 2 +- src/ui/web/.editorconfig | 21 ++ src/ui/web/src/types/ChargingStationType.ts | 2 +- 8 files changed, 127 insertions(+), 105 deletions(-) create mode 100644 src/ui/web/.editorconfig diff --git a/.editorconfig b/.editorconfig index f5e7a604..be65bb51 100644 --- a/.editorconfig +++ b/.editorconfig @@ -3,7 +3,6 @@ root = true [*] indent_style = space indent_size = 2 -tab_width = 2 charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true diff --git a/README.md b/README.md index edc08c6c..c61910c9 100644 --- a/README.md +++ b/README.md @@ -159,8 +159,8 @@ But the modifications to test have to be done to the files in the build target d | amperageLimitationOcppKey | | undefined | string | charging stations OCPP parameter key used to set the amperage limit, per phase for each connector on AC and global for DC | | amperageLimitationUnit | A/cA/dA/mA | A | string | charging stations amperage limit unit | | enableStatistics | true/false | true | boolean | enable charging stations statistics | -| mayAuthorizeAtRemoteStart | true/false | true | boolean | always send authorize at remote start transaction when AuthorizeRemoteTxRequests is enabled | -| payloadSchemaValidation | true/false | true | boolean | validate OCPP commands PDU against OCA JSON schemas | +| mustAuthorizeAtRemoteStart | true/false | true | boolean | always send authorize at remote start transaction when AuthorizeRemoteTxRequests is enabled | +| payloadSchemaValidation | true/false | true | boolean | validate OCPP commands PDU against [OCA](https://www.openchargealliance.org/) JSON schemas | | beginEndMeterValues | true/false | false | boolean | enable Transaction.{Begin,End} MeterValues | | outOfOrderEndMeterValues | true/false | false | boolean | send Transaction.End MeterValues out of order. Need to relax OCPP specifications strict compliance ('ocppStrictCompliance' parameter) | | meteringPerTransaction | true/false | true | boolean | enable metering history on a per transaction basis | @@ -384,147 +384,149 @@ All kind of OCPP parameters are supported in a charging station configuration or ## UI protocol -Protocol to control the simulator via a Websocket +Protocol to control the simulator via a Websocket or HTTP server. -### Protocol +### WebSocket Protocol -PDU stands for Protocol Data Unit +PDU stands for Protocol Data Unit. -Request: -[`uuid`, `ProcedureName`, `PDU`] +- Request: + [`uuid`, `ProcedureName`, `PDU`] + `uuid`: String uniquely representing this request + `ProcedureName`: The procedure to run on the simulator + `PDU`: The parameters for said procedure -`uuid`: String uniquely representing this request -`ProcedureName`: The procedure to run on the simulator -`PDU`: The parameters for said procedure - -Response: -[`uuid`, `PDU`] - -`uuid`: String uniquely linking the response to the request -`PDU`: Response data to requested procedure +- Response: + [`uuid`, `PDU`] + `uuid`: String uniquely linking the response to the request + `PDU`: Response data to requested procedure ### Version 0.0.1 -Set the HTTP header _Sec-Websocket-Protocol_ to `ui0.0.1` +Set the WebSocket header _Sec-Websocket-Protocol_ to `ui0.0.1`. #### Procedures ##### Start Simulator -Request: -`ProcedureName`: 'startSimulator' -`PDU`: {} +- Request: + `ProcedureName`: 'startSimulator' + `PDU`: {} -Response: -`PDU`: { -`status` -} +- Response: + `PDU`: { + `status` + } ##### Stop Simulator -Request: -`ProcedureName`: 'stopSimulator' -`PDU`: {} +- Request: + `ProcedureName`: 'stopSimulator' + `PDU`: {} -Response: -`PDU`: { -`status` -} +- Response: + `PDU`: { + `status` + } ##### List Charging Stations -Request: -`ProcedureName`: 'listChargingStations' -`PDU`: {} +- Request: + `ProcedureName`: 'listChargingStations' + `PDU`: {} -Response: -`PDU`: { -`status`, -`index`: ChargingStationData, -... -`index`: ChargingStationData -} +- Response: + `PDU`: { + `status`, + `index`: ChargingStationData, + ... + `index`: ChargingStationData + } ##### Start Transaction -Request: -`ProcedureName`: 'startTransaction' -`PDU`: { -`hashId`: charging station unique identifier string (deprecated) | `hashIds`: charging station unique identifier strings array, -`connectorId`: connector id integer, -`idTag`: RFID tag string -} +- Request: + `ProcedureName`: 'startTransaction' + `PDU`: { + `hashId`: charging station unique identifier string (deprecated) | `hashIds`: charging station unique identifier strings array, + `connectorId`: connector id integer, + `idTag`: RFID tag string + } -Response: -`PDU`: { -`status` -} +- Response: + `PDU`: { + `status` + } ##### Stop Transaction -Request: -`ProcedureName`: 'stopTransaction' -`PDU`: { -`hashId`: charging station unique identifier string (deprecated) | `hashIds`: charging station unique identifier strings array, -`transactionId`: transaction id integer -} +- Request: + `ProcedureName`: 'stopTransaction' + `PDU`: { + `hashId`: charging station unique identifier string (deprecated) | `hashIds`: charging station unique identifier strings array, + `transactionId`: transaction id integer + } -Response: -`PDU`: { -`status` -} +- Response: + `PDU`: { + `status` + } ##### Start Charging Station -Request: -`ProcedureName`: 'startChargingStation' -`PDU`: { -`hashId`: charging station unique identifier string (deprecated) | `hashIds`: charging station unique identifier strings array -} +- Request: + `ProcedureName`: 'startChargingStation' + `PDU`: { + `hashId`: charging station unique identifier string (deprecated) | `hashIds`: charging station unique identifier strings array + } -Response: -`PDU`: { -`status` -} +- Response: + `PDU`: { + `status` + } ##### Stop Charging Station -Request: -`ProcedureName`: 'stopChargingStation' -`PDU`: { -`hashId`: charging station unique identifier string (deprecated) | `hashIds`: charging station unique identifier strings array -} +- Request: + `ProcedureName`: 'stopChargingStation' + `PDU`: { + `hashId`: charging station unique identifier string (deprecated) | `hashIds`: charging station unique identifier strings array + } -Response: -`PDU`: { -`status` -} +- Response: + `PDU`: { + `status` + } ##### Open Connection -Request: -`ProcedureName`: 'openConnection' -`PDU`: { -`hashId`: charging station unique identifier string (deprecated) | `hashIds`: charging station unique identifier strings array -} +- Request: + `ProcedureName`: 'openConnection' + `PDU`: { + `hashId`: charging station unique identifier string (deprecated) | `hashIds`: charging station unique identifier strings array + } -Response: -`PDU`: { -`status` -} +- Response: + `PDU`: { + `status` + } ##### Close Connection -Request: -`ProcedureName`: 'closeConnection' -`PDU`: { -`hashId`: charging station unique identifier string (deprecated) | `hashIds`: charging station unique identifier strings array -} +- Request: + `ProcedureName`: 'closeConnection' + `PDU`: { + `hashId`: charging station unique identifier string (deprecated) | `hashIds`: charging station unique identifier strings array + } + +- Response: + `PDU`: { + `status` + } + +### HTTP Protocol -Response: -`PDU`: { -`status` -} +A Postman or Advanced REST client collection to learn how to use the HTTP protocol to pilot the simulator is available. ## Support, Feedback, Contributing diff --git a/src/charging-station/ChargingStation.ts b/src/charging-station/ChargingStation.ts index ff3b2601..d771ebe0 100644 --- a/src/charging-station/ChargingStation.ts +++ b/src/charging-station/ChargingStation.ts @@ -178,8 +178,8 @@ export default class ChargingStation { : true; } - public getMayAuthorizeAtRemoteStart(): boolean | undefined { - return this.stationInfo.mayAuthorizeAtRemoteStart ?? true; + public getMustAuthorizeAtRemoteStart(): boolean | undefined { + return this.stationInfo.mustAuthorizeAtRemoteStart ?? true; } public getPayloadSchemaValidation(): boolean | undefined { diff --git a/src/charging-station/ocpp/1.6/OCPP16IncomingRequestService.ts b/src/charging-station/ocpp/1.6/OCPP16IncomingRequestService.ts index f069cdf6..c35b3e6f 100644 --- a/src/charging-station/ocpp/1.6/OCPP16IncomingRequestService.ts +++ b/src/charging-station/ocpp/1.6/OCPP16IncomingRequestService.ts @@ -796,7 +796,7 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer connectorStatus.localAuthorizeIdTag = commandPayload.idTag; connectorStatus.idTagLocalAuthorized = true; authorized = true; - } else if (chargingStation.getMayAuthorizeAtRemoteStart()) { + } else if (chargingStation.getMustAuthorizeAtRemoteStart()) { connectorStatus.authorizeIdTag = commandPayload.idTag; const authorizeResponse: OCPP16AuthorizeResponse = await chargingStation.ocppRequestService.requestHandler< diff --git a/src/charging-station/ocpp/1.6/OCPP16ResponseService.ts b/src/charging-station/ocpp/1.6/OCPP16ResponseService.ts index c7ab237a..9e4dfd08 100644 --- a/src/charging-station/ocpp/1.6/OCPP16ResponseService.ts +++ b/src/charging-station/ocpp/1.6/OCPP16ResponseService.ts @@ -349,7 +349,7 @@ export default class OCPP16ResponseService extends OCPPResponseService { if ( chargingStation.getConnectorStatus(connectorId).transactionRemoteStarted && chargingStation.getAuthorizeRemoteTxRequests() && - chargingStation.getMayAuthorizeAtRemoteStart() && + chargingStation.getMustAuthorizeAtRemoteStart() && !chargingStation.getConnectorStatus(connectorId).idTagLocalAuthorized && !chargingStation.getConnectorStatus(connectorId).idTagAuthorized ) { diff --git a/src/types/ChargingStationTemplate.ts b/src/types/ChargingStationTemplate.ts index 9251909c..1c68743d 100644 --- a/src/types/ChargingStationTemplate.ts +++ b/src/types/ChargingStationTemplate.ts @@ -81,7 +81,7 @@ export default interface ChargingStationTemplate { reconnectExponentialDelay?: boolean; registrationMaxRetries?: number; enableStatistics?: boolean; - mayAuthorizeAtRemoteStart?: boolean; + mustAuthorizeAtRemoteStart?: boolean; payloadSchemaValidation?: boolean; amperageLimitationOcppKey?: string; amperageLimitationUnit?: AmpereUnits; diff --git a/src/ui/web/.editorconfig b/src/ui/web/.editorconfig new file mode 100644 index 00000000..be65bb51 --- /dev/null +++ b/src/ui/web/.editorconfig @@ -0,0 +1,21 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true +end_of_line = lf +max_line_length = 100 + +[*.ts{,x}] +quote_type = single + +[*.md] +max_line_length = off +trim_trailing_whitespace = false + +[{Makefile,**.mk}] +# Use tabs for indentation (Makefiles require tabs) +indent_style = tab diff --git a/src/ui/web/src/types/ChargingStationType.ts b/src/ui/web/src/types/ChargingStationType.ts index dc485451..4d4a7a4d 100644 --- a/src/ui/web/src/types/ChargingStationType.ts +++ b/src/ui/web/src/types/ChargingStationType.ts @@ -50,7 +50,7 @@ export type ChargingStationInfo = { reconnectExponentialDelay?: boolean; registrationMaxRetries?: number; enableStatistics?: boolean; - mayAuthorizeAtRemoteStart?: boolean; + mustAuthorizeAtRemoteStart?: boolean; amperageLimitationOcppKey?: string; amperageLimitationUnit?: AmpereUnits; beginEndMeterValues?: boolean; -- 2.34.1