Unify supervision urls setup and distribution to charging stations
[e-mobility-charging-stations-simulator.git] / README.md
index 71112238884c96bb04896c2cbf86f13cdbffbf27..9f1156e75fe46147311288736462254b850599e6 100644 (file)
--- a/README.md
+++ b/README.md
@@ -1,27 +1,56 @@
-# charging-stations-simulator
+# [charging-stations-simulator](https://github.com/jerome-benoit/charging-stations-simulator)
 
 ## Summary
 
 Simple [node.js](https://nodejs.org/) program to simulate a set of charging stations based on the OCPP-J 1.6 protocol.
 
+## Prerequisites
+
+### Windows
+
+* [Chocolatey](https://chocolatey.org/):
+
+```powershell
+choco install -y nodejs-lts
+```
+
+### MacOSX
+
+* [Homebrew](https://brew.sh/):
+
+```shell
+brew install node@14
+```
+
+### GNU/Linux: 
+
+* [NodeSource](https://github.com/nodesource/distributions) Node.js Binary Distributions for version 14.X
+
 ## Configuration syntax
 
 All configuration files are in the JSON standard format.  
 
-The program's global configuration parameters must be within the src/assets/config.json file. A configuration template file is available at [src/assets/config-template.json](src/assets/config-template.json).
+The charging stations simulator's main configuration parameters must be within the `src/assets/config.json` file. A configuration template file is available at [src/assets/config-template.json](src/assets/config-template.json).
 
 All charging station templates are in the directory [src/assets/station-templates](src/assets/station-templates).
 
-A list of RFID tags must be defined for the automatic transaction generator with the default location and name src/assets/authorization-tags.json. A template file is available at [src/assets/authorization-tags-template.json](src/assets/authorization-tags-template.json).
+A list of RFID tags must be defined for the automatic transaction generator with the default location and name `src/assets/authorization-tags.json`. A template file is available at [src/assets/authorization-tags-template.json](src/assets/authorization-tags-template.json).
+
+The charging stations simulator have an automatic configuration files reload feature at change for: 
+* main configuration;
+* charging station templates; 
+* authorization RFID tags.
 
-### Global configuration 
+But the modifications to test have to be done to the files in the build result directory [dist/assets](dist/assets). Once the modifications are finished, they have to be reported or copied to the matching files in the build source directory [src/assets](src/assets) to ensure they will be taken into account at next build. 
+
+### Main configuration 
 
 **src/assets/config.json**:
 
 Key | Value(s) | Default Value | Value type | Description 
 --- | -------| --------------| ---------- | ------------
-supervisionURLs | | [] | string[] |  array of connection URIs to OCPP-J servers
-distributeStationsToTenantsEqually | true/false | true | boolean | distribute charging stations uniformly to the OCPP-J servers
+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
 workerProcess | workerSet/staticPool/dynamicPool | workerSet | string | worker threads process type
 workerStartDelay | | 500 | integer | milliseconds to wait at charging station worker threads startup
 workerPoolMinSize | | 4 | integer | worker threads pool minimum number of threads
@@ -35,19 +64,34 @@ 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 
-performanceStorage | | { "enabled": false, "type": "jsonfile", "file:///performanceMeasurements.json" } | { enabled: string; type: string; URI: string; } | performance storage configuration section
-stationTemplateURLs | | {}[] | { file: string; numberOfStations: number; }[] | array of charging station templates URIs configuration section (template file name and number of stations)
+logErrorFile | | error.log | string | error log file relative path
+uiWebSocketServer | | { "enabled": true, "options": { "host: "localhost", "port": 8080 } } | { enabled: boolean; options: ServerOptions; } | UI WebSocket server configuration section 
+performanceStorage | | { "enabled": false, "type": "jsonfile", "file:///performanceRecords.json" } | { enabled: boolean; type: string; URI: string; } where type can be 'jsonfile' or 'mongodb' | performance storage configuration section
+stationTemplateUrls | | {}[] | { file: string; numberOfStations: number; }[] | array of charging station templates URIs configuration section (template file name and number of stations)
+
+#### Worker process model: 
+
+- **workerSet**:
+  Worker set executing each a static number (chargingStationsPerWorker) of simulated charging stations from the total
+
+- **staticPool**:
+  Statically sized worker pool executing a static total number of simulated charging stations    
+
+- **dynamicPool**:
+  Dynamically sized worker pool executing a static total number of simulated charging stations 
+
 ### Charging station template
 
 Key | Value(s) | Default Value | Value type | Description 
 --- | -------| --------------| ---------- | ------------
-supervisionURL | | '' | string | connection URI to OCPP-J server
+supervisionUrls | | '' | string \| string[] | string or array of connection URIs to OCPP-J servers. It has priority over the global configuration parameter
 supervisionUser | | '' | string | basic HTTP authentication user to OCPP-J server
 supervisionPassword | | '' | string | basic HTTP authentication password to OCPP-J server
+supervisionUrlOcppConfiguration | true/false | false | boolean | Allow supervision URL configuration via a vendor OCPP parameter key
+supervisionUrlOcppKey | | 'ConnectionUrl' | string | The vendor string that will be used as a vendor OCPP parameter key to set the supervision URL
 ocppVersion | 1.6 | 1.6 | string | OCPP version 
 ocppProtocol | json | json | string | OCPP protocol
+wsOptions | | {} | ClientOptions & ClientRequestArgs | [ws](https://github.com/websockets/ws) and node.js [http](https://nodejs.org/api/http.html) clients options intersection
 authorizationFile | | '' | string | RFID tags list file relative to src/assets path
 baseName | | '' | string | base name to build charging stations name
 nameSuffix | | '' | string | name suffix to build charging stations name
@@ -166,10 +210,10 @@ In the [docker](./docker) folder:
 make
 ```
 
-Or without the optional git submodules:
+Or with the optional git submodules:
 
 ```bash
-make SUBMODULES_INIT=false
+make SUBMODULES_INIT=true
 ```
 
 ## OCPP-J commands supported
@@ -198,7 +242,7 @@ make SUBMODULES_INIT=false
 #### Firmware Management Profile
 
 - :white_check_mark: GetDiagnostics
-- :x: DiagnosticsStatusNotification
+- :white_check_mark: DiagnosticsStatusNotification
 - :x: FirmwareStatusNotification
 - :x: UpdateFirmware
 
@@ -220,7 +264,7 @@ make SUBMODULES_INIT=false
 
 #### Remote Trigger Profile
 
-- :x: TriggerMessage
+- :white_check_mark: TriggerMessage
 
 ## OCPP-J standard parameters supported