Refine condition on CI jobs
[e-mobility-charging-stations-simulator.git] / README.md
index 563b2e31b93b1b6c02ee0c9ade597d8b607453da..a515a6c9256625cba48843a2a9684c4725fa7ff4 100644 (file)
--- a/README.md
+++ b/README.md
@@ -1,3 +1,5 @@
+<!-- markdownlint-disable-file MD033 MD024 -->
+
 # [e-mobility charging stations simulator](https://github.com/sap/e-mobility-charging-stations-simulator)
 
 [![REUSE status](https://api.reuse.software/badge/github.com/SAP/e-mobility-charging-stations-simulator)](https://api.reuse.software/info/github.com/SAP/e-mobility-charging-stations-simulator)
@@ -26,7 +28,7 @@ choco install -y nodejs-lts
 brew install node@16
 ```
 
-### GNU/Linux:
+### GNU/Linux
 
 - [NodeSource](https://github.com/nodesource/distributions) Node.js Binary Distributions for version >= 16.X
 
@@ -88,24 +90,24 @@ But the modifications to test have to be done to the files in the build target d
 
 **src/assets/config.json**:
 
-| Key                        | Value(s)                                         | Default Value                                                                                                                                                                                                  | Value type                                                                                                                                                                                                                          | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
-| -------------------------- | ------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| supervisionUrls            |                                                  | []                                                                                                                                                                                                             | string \| string[]                                                                                                                                                                                                                  | string or array of global connection URIs to OCPP-J servers                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
-| supervisionUrlDistribution | round-robin/random/sequential                    | round-robin                                                                                                                                                                                                    | boolean                                                                                                                                                                                                                             | supervision urls distribution policy to simulated charging stations                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
-| logStatisticsInterval      |                                                  | 60                                                                                                                                                                                                             | integer                                                                                                                                                                                                                             | seconds between charging stations statistics output in the logs                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
-| logConsole                 | true/false                                       | false                                                                                                                                                                                                          | boolean                                                                                                                                                                                                                             | output logs on the console                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
-| logFormat                  |                                                  | simple                                                                                                                                                                                                         | string                                                                                                                                                                                                                              | winston log format                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
-| logRotate                  | true/false                                       | true                                                                                                                                                                                                           | boolean                                                                                                                                                                                                                             | enable daily log files rotation                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
-| logMaxFiles                |                                                  | 7                                                                                                                                                                                                              | integer                                                                                                                                                                                                                             | maximum number of log files to keep                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
-| logLevel                   | emerg/alert/crit/error/warning/notice/info/debug | info                                                                                                                                                                                                           | string                                                                                                                                                                                                                              | winston logging level                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
-| logFile                    |                                                  | combined.log                                                                                                                                                                                                   | string                                                                                                                                                                                                                              | log file relative path                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
-| logErrorFile               |                                                  | error.log                                                                                                                                                                                                      | string                                                                                                                                                                                                                              | error log file relative path                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
-| worker                     |                                                  | {<br />"processType": "workerSet",<br />"startDelay": 500,<br />"elementStartDelay": 0,<br />"elementsPerWorker": 1,<br />"poolMinSize": 4,<br />"poolMaxSize": 16,<br />"poolStrategy": "ROUND_ROBBIN"<br />} | {<br />processType: WorkerProcessType;<br />startDelay: number;<br />elementStartDelay: number;<br />elementsPerWorker: number;<br />poolMinSize: number;<br />poolMaxSize: number;<br />poolStrategy: WorkerChoiceStrategy;<br />} | Worker configuration section:<br />- processType: worker threads process type (workerSet/staticPool/dynamicPool)<br />- startDelay: milliseconds to wait at worker threads startup (only for workerSet threads process type)<br />- elementStartDelay: milliseconds to wait at charging station startup<br />- elementsPerWorker: number of charging stations per worker threads for the `workerSet` process type<br />- poolMinSize: worker threads pool minimum number of threads</br >- poolMaxSize: worker threads pool maximum number of threads<br />- poolStrategy: worker threads pool [poolifier](https://github.com/poolifier/poolifier) worker choice strategy |
-| uiServer                   |                                                  | {<br />"enabled": true,<br />"options": {<br />"host: "localhost",<br />"port": 8080<br />}<br />}                                                                                                             | {<br />enabled: boolean;<br />options: ServerOptions;<br />}                                                                                                                                                                        | UI WebSocket server configuration section                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
-| performanceStorage         |                                                  | {<br />"enabled": false,<br />"type": "jsonfile",<br />"file:///performanceRecords.json"<br />}                                                                                                                | {<br />enabled: boolean;<br />type: string;<br />URI: string;<br />}<br />where type can be 'jsonfile' or 'mongodb'                                                                                                                 | performance storage configuration section                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
-| stationTemplateUrls        |                                                  | {}[]                                                                                                                                                                                                           | {<br />file: string;<br />numberOfStations: number;<br />}[]                                                                                                                                                                        | array of charging station configuration templates URIs configuration section (charging station configuration template file name and number of stations)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
-
-#### Worker process model:
+| Key                        | Value(s)                                         | Default Value                                                                                                                                                                                                | Value type                                                                                                                                                                                                                          | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
+| -------------------------- | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| supervisionUrls            |                                                  | []                                                                                                                                                                                                           | string \| string[]                                                                                                                                                                                                                  | string or array of global connection URIs to OCPP-J servers                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
+| supervisionUrlDistribution | round-robin/random/charging-station-affinity     | charging-station-affinity                                                                                                                                                                                    | boolean                                                                                                                                                                                                                             | supervision urls distribution policy to simulated charging stations                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
+| logStatisticsInterval      |                                                  | 60                                                                                                                                                                                                           | integer                                                                                                                                                                                                                             | seconds between charging stations statistics output in the logs                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
+| logConsole                 | true/false                                       | false                                                                                                                                                                                                        | boolean                                                                                                                                                                                                                             | output logs on the console                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
+| logFormat                  |                                                  | simple                                                                                                                                                                                                       | string                                                                                                                                                                                                                              | winston log format                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
+| logRotate                  | true/false                                       | true                                                                                                                                                                                                         | boolean                                                                                                                                                                                                                             | enable daily log files rotation                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
+| logMaxFiles                |                                                  | 7                                                                                                                                                                                                            | integer                                                                                                                                                                                                                             | maximum number of log files to keep                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
+| logLevel                   | emerg/alert/crit/error/warning/notice/info/debug | info                                                                                                                                                                                                         | string                                                                                                                                                                                                                              | winston logging level                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
+| logFile                    |                                                  | combined.log                                                                                                                                                                                                 | string                                                                                                                                                                                                                              | log file relative path                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
+| logErrorFile               |                                                  | error.log                                                                                                                                                                                                    | string                                                                                                                                                                                                                              | error log file relative path                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
+| worker                     |                                                  | {<br />"processType": "workerSet",<br />"startDelay": 500,<br />"elementStartDelay": 0,<br />"elementsPerWorker": 1,<br />"poolMinSize": 4,<br />"poolMaxSize": 16,<br />"poolStrategy": "FAIR_SHARE"<br />} | {<br />processType: WorkerProcessType;<br />startDelay: number;<br />elementStartDelay: number;<br />elementsPerWorker: number;<br />poolMinSize: number;<br />poolMaxSize: number;<br />poolStrategy: WorkerChoiceStrategy;<br />} | Worker configuration section:<br />- processType: worker threads process type (workerSet/staticPool/dynamicPool)<br />- startDelay: milliseconds to wait at worker threads startup (only for workerSet threads process type)<br />- elementStartDelay: milliseconds to wait at charging station startup<br />- elementsPerWorker: number of charging stations per worker threads for the `workerSet` process type<br />- poolMinSize: worker threads pool minimum number of threads</br >- poolMaxSize: worker threads pool maximum number of threads<br />- poolStrategy: worker threads pool [poolifier](https://github.com/poolifier/poolifier) worker choice strategy |
+| uiServer                   |                                                  | {<br />"enabled": true,<br />"type": "ws",<br />"options": {<br />"host": "localhost",<br />"port": 8080<br />}<br />}                                                                                       | {<br />enabled: boolean;<br />type: ApplicationProtocol;<br />options: ServerOptions;<br />authentication: {<br />enabled: boolean;<br />type: AuthenticationType;<br />username: string;<br />password: string;<br />}<br />}      | UI server configuration section                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
+| performanceStorage         |                                                  | {<br />"enabled": false,<br />"type": "jsonfile",<br />"file:///performanceRecords.json"<br />}                                                                                                              | {<br />enabled: boolean;<br />type: string;<br />URI: string;<br />}<br />where type can be 'jsonfile' or 'mongodb'                                                                                                                 | performance storage configuration section                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
+| stationTemplateUrls        |                                                  | {}[]                                                                                                                                                                                                         | {<br />file: string;<br />numberOfStations: number;<br />}[]                                                                                                                                                                        | array of charging station configuration templates URIs configuration section (charging station configuration template file name and number of stations)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
+
+#### Worker process model
 
 - **workerSet**:
   Worker set executing each a static number (elementsPerWorker) of simulated charging stations from the total
@@ -159,8 +161,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                                                                                                                                                    |
@@ -201,6 +203,25 @@ But the modifications to test have to be done to the files in the build target d
 
 #### AutomaticTransactionGenerator section
 
+Section type definition:
+
+```ts
+type AutomaticTransactionGeneratorConfiguration = {
+  enable: boolean;
+  minDuration: number;
+  maxDuration: number;
+  minDelayBetweenTwoTransactions: number;
+  maxDelayBetweenTwoTransactions: number;
+  probabilityOfStart: number;
+  stopAfterHours: number;
+  stopOnConnectionFailure: boolean;
+  requireAuthorize?: boolean;
+  idTagDistribution?: 'random' | 'round-robin' | 'connector-affinity';
+};
+```
+
+Section example:
+
 ```json
   "AutomaticTransactionGenerator": {
     "enable": false,
@@ -211,7 +232,8 @@ But the modifications to test have to be done to the files in the build target d
     "probabilityOfStart": 1,
     "stopAfterHours": 0.3,
     "stopOnConnectionFailure": true,
-    "requireAuthorize": true
+    "requireAuthorize": true,
+    "idTagDistribution": "random"
   }
 ```
 
@@ -384,147 +406,234 @@ 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.
+
+### HTTP Protocol
+
+To learn how to use the HTTP protocol to pilot the simulator, an [Insomnia](https://insomnia.rest/) requests collection is available in [src/assets/ui-protocol](./src/assets/ui-protocol) directory.
+
+### Websocket Protocol
+
+SRPC protocol over Websocket. PDU stands for 'Protocol Data Unit'.
+
+- Request:  
+  [`uuid`, `ProcedureName`, `PDU`]  
+  `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 parameters to requested procedure
+
+#### Version 0.0.1
+
+Set the Websocket header _Sec-Websocket-Protocol_ to `ui0.0.1`.
+
+##### Procedures
+
+###### Start Simulator
+
+- Request:  
+  `ProcedureName`: 'startSimulator'  
+  `PDU`: {}
+
+- Response:  
+  `PDU`: {  
+  `status`: 'success' | 'failure'  
+  }
+
+###### Stop Simulator
+
+- Request:  
+  `ProcedureName`: 'stopSimulator'  
+  `PDU`: {}
+
+- Response:  
+  `PDU`: {  
+  `status`: 'success' | 'failure'  
+  }
+
+###### List Charging Stations
 
-### Protocol
+- Request:  
+  `ProcedureName`: 'listChargingStations'  
+  `PDU`: {}
 
-PDU stands for Protocol Data Unit
+- Response:  
+  `PDU`: {  
+  `status`: 'success' | 'failure',  
+  `chargingStations`: ChargingStationData[]  
+  }
 
-Request:  
-[`uuid`, `ProcedureName`, `PDU`]
+###### Start Transaction
 
-`uuid`: String uniquely representing this request  
-`ProcedureName`: The procedure to run on the simulator  
-`PDU`: The parameters for said procedure
+- Request:  
+  `ProcedureName`: 'startTransaction'  
+  `PDU`: {  
+  `hashIds`: charging station unique identifier strings array (optional, default: all charging stations),  
+  `connectorId`: connector id integer,  
+  `idTag`: RFID tag string  
+  }
 
-Response:  
-[`uuid`, `PDU`]
+- Response:  
+  `PDU`: {  
+  `status`: 'success' | 'failure',  
+  `hashIdsSucceeded`: charging station unique identifier strings array,  
+  `hashIdsFailed`: charging station unique identifier strings array (optional),  
+  `responsesFailed`: failed responses payload array (optional)  
+  }
 
-`uuid`: String uniquely linking the response to the request  
-`PDU`: Response data to requested procedure
+###### Stop Transaction
 
-### Version 0.0.1
+- Request:  
+  `ProcedureName`: 'stopTransaction'  
+  `PDU`: {  
+  `hashIds`: charging station unique identifier strings array (optional, default: all charging stations),  
+  `transactionId`: transaction id integer  
+  }
 
-Set the HTTP header _Sec-Websocket-Protocol_ to `ui0.0.1`
+- Response:  
+  `PDU`: {  
+  `status`: 'success' | 'failure',  
+  `hashIdsSucceeded`: charging station unique identifier strings array,  
+  `hashIdsFailed`: charging station unique identifier strings array (optional),  
+  `responsesFailed`: failed responses payload array (optional)  
+  }
 
-#### Procedures
+###### Start Charging Station
 
-##### Start Simulator
+- Request:  
+  `ProcedureName`: 'startChargingStation'  
+  `PDU`: {  
+  `hashIds`: charging station unique identifier strings array (optional, default: all charging stations),  
+  `responsesFailed`: failed responses payload array (optional)  
+  }
 
-Request:  
-`ProcedureName`: 'startSimulator'  
-`PDU`: {}
+- Response:  
+  `PDU`: {  
+  `status`: 'success' | 'failure',  
+  `hashIdsSucceeded`: charging station unique identifier strings array,  
+  `hashIdsFailed`: charging station unique identifier strings array (optional)  
+  }
 
-Response:  
-`PDU`: {  
-`status`  
-}
+###### Stop Charging Station
 
-##### Stop Simulator
+- Request:  
+  `ProcedureName`: 'stopChargingStation'  
+  `PDU`: {  
+  `hashIds`: charging station unique identifier strings array (optional, default: all charging stations)  
+  }
 
-Request:  
-`ProcedureName`: 'stopSimulator'  
-`PDU`: {}
+- Response:  
+  `PDU`: {  
+  `status`: 'success' | 'failure',  
+  `hashIdsSucceeded`: charging station unique identifier strings array,  
+  `hashIdsFailed`: charging station unique identifier strings array (optional),  
+  `responsesFailed`: failed responses payload array (optional)  
+  }
 
-Response:  
-`PDU`: {  
-`status`  
-}
+###### Open Connection
+
+- Request:  
+  `ProcedureName`: 'openConnection'  
+  `PDU`: {  
+  `hashIds`: charging station unique identifier strings array (optional, default: all charging stations)  
+  }
 
-##### List Charging Stations
+- Response:  
+  `PDU`: {  
+  `status`: 'success' | 'failure',  
+  `hashIdsSucceeded`: charging station unique identifier strings array,  
+  `hashIdsFailed`: charging station unique identifier strings array (optional),  
+  `responsesFailed`: failed responses payload array (optional)  
+  }
 
-Request:  
-`ProcedureName`: 'listChargingStations'  
-`PDU`: {}
+###### Close Connection
 
-Response:  
-`PDU`: {  
-`status`,  
-`index`: ChargingStationData,  
-...  
-`index`: ChargingStationData  
-}
+- Request:  
+  `ProcedureName`: 'closeConnection'  
+  `PDU`: {  
+  `hashIds`: charging station unique identifier strings array (optional, default: all charging stations)  
+  }
 
-##### Start Transaction
+- Response:  
+  `PDU`: {  
+  `status`: 'success' | 'failure',  
+  `hashIdsSucceeded`: charging station unique identifier strings array,  
+  `hashIdsFailed`: charging station unique identifier strings array (optional),  
+  `responsesFailed`: failed responses payload array (optional)  
+  }
 
-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  
-}
+###### Start Automatic Transaction Generator
 
-Response:  
-`PDU`: {  
-`status`  
-}
+- Request:  
+  `ProcedureName`: 'startAutomaticTransactionGenerator'  
+  `PDU`: {  
+  `hashIds`: charging station unique identifier strings array (optional, default: all charging stations),  
+  `connectorIds`: connector id integer array (optional, default: all connectors)  
+  }
 
-##### Stop Transaction
+- Response:  
+  `PDU`: {  
+  `status`: 'success' | 'failure',  
+  `hashIdsSucceeded`: charging station unique identifier strings array,  
+  `hashIdsFailed`: charging station unique identifier strings array (optional),  
+  `responsesFailed`: failed responses payload array (optional)  
+  }
 
-Request:  
-`ProcedureName`: 'stopTransaction'  
-`PDU`: {  
-`hashId`: charging station unique identifier string (deprecated) | `hashIds`: charging station unique identifier strings array,  
-`transactionId`: transaction id integer  
-}
+###### Stop Automatic Transaction Generator
 
-Response:  
-`PDU`: {  
-`status`  
-}
+- Request:  
+  `ProcedureName`: 'stopAutomaticTransactionGenerator'  
+  `PDU`: {  
+  `hashIds`: charging station unique identifier strings array (optional, default: all charging stations),  
+  `connectorIds`: connector id integer array (optional, default: all connectors)  
+  }
 
-##### Start Charging Station
+- Response:  
+  `PDU`: {  
+  `status`: 'success' | 'failure',  
+  `hashIdsSucceeded`: charging station unique identifier strings array,  
+  `hashIdsFailed`: charging station unique identifier strings array (optional),  
+  `responsesFailed`: failed responses payload array (optional)  
+  }
 
-Request:  
-`ProcedureName`: 'startChargingStation'  
-`PDU`: {  
-`hashId`: charging station unique identifier string (deprecated) | `hashIds`: charging station unique identifier strings array
-}
+###### Status Notification
 
-Response:  
-`PDU`: {  
-`status`  
-}
+- Request:  
+  `ProcedureName`: 'StatusNotification'  
+  `PDU`: {  
+  `hashIds`: charging station unique identifier strings array (optional, default: all charging stations),  
+  `connectorId`: connector id integer,  
+  `errorCode`: connector error code,  
+  `status`: connector status  
+  }
 
-##### Stop Charging Station
+- Response:  
+  `PDU`: {  
+  `status`: 'success' | 'failure',  
+  `hashIdsSucceeded`: charging station unique identifier strings array,  
+  `hashIdsFailed`: charging station unique identifier strings array (optional),  
+  `responsesFailed`: failed responses payload array (optional)  
+  }
 
-Request:  
-`ProcedureName`: 'stopChargingStation'  
-`PDU`: {  
-`hashId`: charging station unique identifier string (deprecated) | `hashIds`: charging station unique identifier strings array  
-}
+###### Heartbeat
 
-Response:  
-`PDU`: {  
-`status`  
-}
+- Request:  
+  `ProcedureName`: 'Heartbeat'  
+  `PDU`: {  
+  `hashIds`: charging station unique identifier strings array (optional, default: all charging stations),  
+  }
 
-##### Open Connection
-
-Request:  
-`ProcedureName`: 'openConnection'  
-`PDU`: {  
-`hashId`: charging station unique identifier string (deprecated) | `hashIds`: charging station unique identifier strings array  
-}
-
-Response:  
-`PDU`: {  
-`status`  
-}
-
-##### Close Connection
-
-Request:  
-`ProcedureName`: 'closeConnection'  
-`PDU`: {  
-`hashId`: charging station unique identifier string (deprecated) | `hashIds`: charging station unique identifier strings array  
-}
-
-Response:  
-`PDU`: {  
-`status`  
-}
+- Response:  
+  `PDU`: {  
+  `status`: 'success' | 'failure',  
+  `hashIdsSucceeded`: charging station unique identifier strings array,  
+  `hashIdsFailed`: charging station unique identifier strings array (optional),  
+  `responsesFailed`: failed responses payload array (optional)  
+  }
 
 ## Support, Feedback, Contributing