To start the program, run: `npm start`.
-To start the program with a UI controller, run: `npm run start:server`.
-Then, start/stop the simulator by going to `https://<hostname:port>` in a browser. Localhost port will default to 8080. For Cloud Foundry, the port is assigned based on the `process.env.PORT` environment variable.
+## Start Web UI
+
+See Web UI [README.md](src/ui/web/README.md) for more information.
## Configuration files syntax
#### Worker process model:
- **workerSet**:
- Worker set executing each a static number (chargingStationsPerWorker) of simulated charging stations from the total
+ Worker set executing each a static number (elementsPerWorker) of simulated charging stations from the total
- **staticPool**:
Statically sized worker pool executing a static total number of simulated charging stations
| 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 |
| 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 |
| mainVoltageMeterValues | true/false | true | boolean | include charging stations main voltage MeterValues on three phased charging stations |
| phaseLineToLineVoltageMeterValues | true/false | true | boolean | include charging stations line to line voltage MeterValues on three phased charging stations |
| customValueLimitationMeterValues | true/false | true | boolean | enable limitation on custom fluctuated value in MeterValues |
-| commandsSupport | | {<br />"incomingCommands": {},<br />"outgoingCommands": {}<br />} | {<br /> incomingCommands: Record<IncomingRequestCommand, boolean>;<br />outgoingCommands?: Record<RequestCommand, boolean>;<br />} | Configuration section for OCPP commands support. Empty section means all implemented are supported support |
+| commandsSupport | | {<br />"incomingCommands": {},<br />"outgoingCommands": {}<br />} | {<br /> incomingCommands: Record<IncomingRequestCommand, boolean>;<br />outgoingCommands?: Record<RequestCommand, boolean>;<br />} | Configuration section for OCPP commands support. Empty section or subsections means all implemented commands are supported |
| Configuration | | | ChargingStationConfiguration | charging stations OCPP parameters configuration section |
| AutomaticTransactionGenerator | | | AutomaticTransactionGenerator | charging stations ATG configuration section |
| Connectors | | | Connectors | charging stations connectors configuration section |
- _none_
+## UI protocol
+
+Protocol to control the simulator via a Websocket
+
+### Protocol
+
+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 data to requested procedure
+
+### Version 0.0.1
+
+Set the HTTP header _Sec-Websocket-Protocol_ to `ui0.0.1`
+
+#### Procedures
+
+##### Start Simulator
+
+Request:
+`ProcedureName`: 'startSimulator'
+`PDU`: {}
+
+Response:
+`PDU`: {
+`status`
+}
+
+##### Stop Simulator
+
+Request:
+`ProcedureName`: 'stopSimulator'
+`PDU`: {}
+
+Response:
+`PDU`: {
+`status`
+}
+
+##### List Charging Stations
+
+Request:
+`ProcedureName`: 'listChargingStations'
+`PDU`: {}
+
+Response:
+`PDU`: {
+`status`,
+`index`: ChargingStationData,
+...
+`index`: ChargingStationData
+}
+
+##### Start Transaction
+
+Request:
+`ProcedureName`: 'startTransaction'
+`PDU`: {
+`hashId`: the unique identifier of a charging station
+`connectorId`: the id of the connector
+`idTag`: the RFID tag
+}
+
+Response:
+`PDU`: {
+`status`
+}
+
+##### Stop Transaction
+
+Request:
+`ProcedureName`: 'stopTransaction'
+`PDU`: {
+`hashId`: the unique identifier of a charging station
+`transactionId`: the id of the transaction
+}
+
+Response:
+`PDU`: {
+`status`
+}
+
+##### Start Charging Station
+
+Request:
+`ProcedureName`: 'startChargingStation'
+`PDU`: {
+`hashId`: the unique identifier of a charging station
+}
+
+Response:
+`PDU`: {
+`status`
+}
+
+##### Stop Charging Station
+
+Request:
+`ProcedureName`: 'stopChargingStation'
+`PDU`: {
+`hashId`: the unique identifier of a charging station
+}
+
+Response:
+`PDU`: {
+`status`
+}
+
+##### Open Connection
+
+Request:
+`ProcedureName`: 'openConnection'
+`PDU`: {
+`hashId`: the unique identifier of a charging station
+}
+
+Response:
+`PDU`: {
+`status`
+}
+
+##### Close Connection
+
+Request:
+`ProcedureName`: 'closeConnection'
+`PDU`: {
+`hashId`: the unique identifier of a charging station
+}
+
+Response:
+`PDU`: {
+`status`
+}
+
## Support, Feedback, Contributing
This project is open to feature requests/suggestions, bug reports etc. via [GitHub issues](https://github.com/SAP/e-mobility-charging-stations-simulator/issues). Contribution and feedback are encouraged and always welcome. For more information about how to contribute, the project structure, as well as additional contribution information, see our [Contribution Guidelines](CONTRIBUTING.md).