X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=README.md;h=063c839d6d6ac599ec9bd83fa1930a41e99924dc;hb=HEAD;hp=675ac231a06d09bfab90935a42175a7df9ed244d;hpb=a997fb633645882785e12ea3362d428233476e7c;p=e-mobility-charging-stations-simulator.git diff --git a/README.md b/README.md index 675ac231..063c839d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,11 @@ +
-# [e-mobility charging stations simulator](https://github.com/sap/e-mobility-charging-stations-simulator) +# [e-Mobility charging stations simulator](https://github.com/sap/e-mobility-charging-stations-simulator) + +
+ +
[![GitHub Clones](https://img.shields.io/badge/dynamic/json?color=brightgreen&label=Clone&query=count&url=https://gist.githubusercontent.com/jerome-benoit/c7c669b881d5b27dc0b44a639504ff93/raw/clone.json&logo=github)](https://github.com/SAP/e-mobility-charging-stations-simulator/graphs/traffic) [![GitHub commit activity (main)](https://img.shields.io/github/commit-activity/m/SAP/e-mobility-charging-stations-simulator/main?color=brightgreen&logo=github)](https://github.com/SAP/e-mobility-charging-stations-simulator/graphs/commit-activity) @@ -8,15 +13,46 @@ [![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) [![Javascript Standard Style Guide]()](https://standardjs.com) -## Summary +
Simple [node.js](https://nodejs.org/) software to simulate and scale a set of charging stations based on the OCPP-J protocol as part of [SAP e-Mobility](https://www.sap.com/products/scm/e-mobility.html) solution. -## Prerequisites +## Table of contents + +- [Installation](#installation) + - [Prerequisites](#prerequisites) + - [Windows](#windows) + - [MacOSX](#macosx) + - [GNU/Linux](#gnulinux) + - [Dependencies](#dependencies) +- [Initial configuration](#initial-configuration) +- [Start simulator](#start-simulator) +- [Start Web UI](#start-web-ui) +- [Configuration files syntax](#configuration-files-syntax) + - [Charging stations simulator configuration](#charging-stations-simulator-configuration) + - [Charging station configuration template](#charging-station-configuration-template) + - [Charging station configuration](#charging-station-configuration) +- [Docker](#docker) +- [OCPP-J commands supported](#ocpp-j-commands-supported) + - [Version 1.6](#version-16) + - [Version 2.x.x](#version-2xx) +- [OCPP-J standard parameters supported](#ocpp-j-standard-parameters-supported) + - [Version 1.6](#version-16-1) + - [Version 2.x.x](#version-2xx-1) +- [UI Protocol](#ui-protocol) + - [Websocket Protocol](#websocket-protocol) + - [HTTP Protocol](#http-protocol) +- [Support, Feedback, Contributing](#support-feedback-contributing) +- [Code of Conduct](#code-of-conduct) +- [Licensing](#licensing) + +## Installation + +### Prerequisites Install the [node.js](https://nodejs.org/) current LTS or superior version runtime environment: -### Windows +#### Windows - [Chocolatey](https://chocolatey.org/): @@ -24,7 +60,7 @@ Install the [node.js](https://nodejs.org/) current LTS or superior version runti choco install -y nodejs ``` -### MacOSX +#### MacOSX - [Homebrew](https://brew.sh/): @@ -32,11 +68,11 @@ choco install -y nodejs brew install node ``` -### GNU/Linux +#### GNU/Linux - [NodeSource](https://github.com/nodesource/distributions) Node.js Binary Distributions for all supported versions. -## Installation +#### Dependencies Enable corepack if not already done and install latest pnpm version: @@ -56,11 +92,13 @@ pnpm install Copy the configuration template file [src/assets/config-template.json](./src/assets/config-template.json) to [src/assets/config.json](./src/assets/config.json). Copy the RFID tags template file [src/assets/idtags-template.json](./src/assets/idtags-template.json) to [src/assets/idtags.json](./src/assets/idtags.json). -Tweak them to your needs by following the section [configuration files syntax](./README.md#configuration-files-syntax): OCPP server supervision URL(s), charging station templates, etc. +Tweak them to your needs by following the section [configuration files syntax](#configuration-files-syntax): OCPP server supervision URL(s), charging station templates, etc. -## Start +## Start simulator -To start the program, run: `pnpm start`. +```shell +pnpm start +``` ## Start Web UI @@ -68,7 +106,7 @@ See Web UI [README.md](./ui/web/README.md) for more information. ## Configuration files syntax -All configuration files are in the JSON standard format. +All configuration files are using the JSON standard syntax. **Configuration files locations**: @@ -101,15 +139,15 @@ 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 strings array containing global connection URIs to OCPP-J servers | -| supervisionUrlDistribution | round-robin/random/charging-station-affinity | charging-station-affinity | string | supervision urls distribution policy to simulated charging stations | -| log | | {
"enabled": true,
"file": "logs/combined.log",
"errorFile": "logs/error.log",
"statisticsInterval": 60,
"level": "info",
"console": false,
"format": "simple",
"rotate": true
} | {
enabled?: boolean;
file?: string;
errorFile?: string;
statisticsInterval?: number;
level?: string;
console?: boolean;
format?: string;
rotate?: boolean;
maxFiles?: string \| number;
maxSize?: string \| number;
} | Log configuration section:
- _enabled_: enable logging
- _file_: log file relative path
- _errorFile_: error log file relative path
- _statisticsInterval_: seconds between charging stations statistics output in the logs
- _level_: emerg/alert/crit/error/warning/notice/info/debug [winston](https://github.com/winstonjs/winston) logging level
- _console_: output logs on the console
- _format_: [winston](https://github.com/winstonjs/winston) log format
- _rotate_: enable daily log files rotation
- _maxFiles_: maximum number of log files: https://github.com/winstonjs/winston-daily-rotate-file#options
- _maxSize_: maximum size of log files in bytes, or units of kb, mb, and gb: https://github.com/winstonjs/winston-daily-rotate-file#options | -| worker | | {
"processType": "workerSet",
"startDelay": 500,
"elementStartDelay": 0,
"elementsPerWorker": 'auto',
"poolMinSize": 4,
"poolMaxSize": 16
} | {
processType?: WorkerProcessType;
startDelay?: number;
elementStartDelay?: number;
elementsPerWorker?: number \| 'auto' \| 'all';
poolMinSize?: number;
poolMaxSize?: number;
resourceLimits?: ResourceLimits;
} | Worker configuration section:
- _processType_: worker threads process type (`workerSet`/`fixedPool`/`dynamicPool`)
- _startDelay_: milliseconds to wait at worker threads startup (only for `workerSet` worker threads process type)
- _elementStartDelay_: milliseconds to wait at charging station startup
- _elementsPerWorker_: number of charging stations per worker threads for the `workerSet` process type (`auto` means (number of stations) / (number of CPUs) \* 1.5 if (number of stations) > (number of CPUs), otherwise 1; `all` means a unique worker will run all charging stations)
- _poolMinSize_: worker threads pool minimum number of threads
- _poolMaxSize_: worker threads pool maximum number of threads
- _resourceLimits_: worker threads [resource limits](https://nodejs.org/api/worker_threads.html#new-workerfilename-options) object option | -| uiServer | | {
"enabled": false,
"type": "ws",
"version": "1.1",
"options": {
"host": "localhost",
"port": 8080
}
} | {
enabled?: boolean;
type?: ApplicationProtocol;
version?: ApplicationProtocolVersion;
options?: ServerOptions;
authentication?: {
enabled: boolean;
type: AuthenticationType;
username?: string;
password?: string;
}
} | UI server configuration section:
- _enabled_: enable UI server
- _type_: 'http' or 'ws'
- _version_: HTTP version '1.1' or '2.0'
- _options_: node.js net module [listen options](https://nodejs.org/api/net.html#serverlistenoptions-callback)
- _authentication_: authentication type configuration section | -| performanceStorage | | {
"enabled": true,
"type": "none",
} | {
enabled?: boolean;
type?: string;
uri?: string;
} | Performance storage configuration section:
- _enabled_: enable performance storage
- _type_: 'jsonfile', 'mongodb' or 'none'
- _uri_: storage URI | -| stationTemplateUrls | | {}[] | {
file: string;
numberOfStations: number;
}[] | array of charging station configuration templates URIs configuration section (charging station configuration template file name and number of stations) | +| Key | Value(s) | Default Value | Value type | Description | +| -------------------------- | -------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| supervisionUrls | | [] | string \| string[] | string or strings array containing global connection URIs to OCPP-J servers | +| supervisionUrlDistribution | round-robin/random/charging-station-affinity | charging-station-affinity | string | supervision urls distribution policy to simulated charging stations | +| log | | {
"enabled": true,
"file": "logs/combined.log",
"errorFile": "logs/error.log",
"statisticsInterval": 60,
"level": "info",
"console": false,
"format": "simple",
"rotate": true
} | {
enabled?: boolean;
file?: string;
errorFile?: string;
statisticsInterval?: number;
level?: string;
console?: boolean;
format?: string;
rotate?: boolean;
maxFiles?: string \| number;
maxSize?: string \| number;
} | Log configuration section:
- _enabled_: enable logging
- _file_: log file relative path
- _errorFile_: error log file relative path
- _statisticsInterval_: seconds between charging stations statistics output in the logs
- _level_: emerg/alert/crit/error/warning/notice/info/debug [winston](https://github.com/winstonjs/winston) logging level
- _console_: output logs on the console
- _format_: [winston](https://github.com/winstonjs/winston) log format
- _rotate_: enable daily log files rotation
- _maxFiles_: maximum number of log files: https://github.com/winstonjs/winston-daily-rotate-file#options
- _maxSize_: maximum size of log files in bytes, or units of kb, mb, and gb: https://github.com/winstonjs/winston-daily-rotate-file#options | +| worker | | {
"processType": "workerSet",
"startDelay": 500,
"elementAddDelay": 0,
"elementsPerWorker": 'auto',
"poolMinSize": 4,
"poolMaxSize": 16
} | {
processType?: WorkerProcessType;
startDelay?: number;
elementAddDelay?: number;
elementsPerWorker?: number \| 'auto' \| 'all';
poolMinSize?: number;
poolMaxSize?: number;
resourceLimits?: ResourceLimits;
} | Worker configuration section:
- _processType_: worker threads process type (`workerSet`/`fixedPool`/`dynamicPool`)
- _startDelay_: milliseconds to wait at worker threads startup (only for `workerSet` worker threads process type)
- _elementAddDelay_: milliseconds to wait between charging station add
- _elementsPerWorker_: number of charging stations per worker threads for the `workerSet` process type (`auto` means (number of stations) / (number of CPUs) \* 1.5 if (number of stations) > (number of CPUs), otherwise 1; `all` means a unique worker will run all charging stations)
- _poolMinSize_: worker threads pool minimum number of threads
- _poolMaxSize_: worker threads pool maximum number of threads
- _resourceLimits_: worker threads [resource limits](https://nodejs.org/api/worker_threads.html#new-workerfilename-options) object option | +| uiServer | | {
"enabled": false,
"type": "ws",
"version": "1.1",
"options": {
"host": "localhost",
"port": 8080
}
} | {
enabled?: boolean;
type?: ApplicationProtocol;
version?: ApplicationProtocolVersion;
options?: ServerOptions;
authentication?: {
enabled: boolean;
type: AuthenticationType;
username?: string;
password?: string;
}
} | UI server configuration section:
- _enabled_: enable UI server
- _type_: 'http' or 'ws'
- _version_: HTTP version '1.1' or '2.0'
- _options_: node.js net module [listen options](https://nodejs.org/api/net.html#serverlistenoptions-callback)
- _authentication_: authentication type configuration section | +| performanceStorage | | {
"enabled": true,
"type": "none",
} | {
enabled?: boolean;
type?: string;
uri?: string;
} | Performance storage configuration section:
- _enabled_: enable performance storage
- _type_: 'jsonfile', 'mongodb' or 'none'
- _uri_: storage URI | +| stationTemplateUrls | | {}[] | {
file: string;
numberOfStations: number;
provisionedNumberOfStations?: number;
}[] | array of charging station templates URIs configuration section:
- _file_: charging station configuration template file relative path
- _numberOfStations_: template number of stations at startup
- _provisionedNumberOfStations_: template provisioned number of stations after startup | #### Worker process model @@ -497,7 +535,7 @@ All kind of OCPP parameters are supported in charging station configuration or c ### Version 2.x.x -## UI protocol +## UI Protocol Protocol to control the simulator via a Websocket or HTTP server: @@ -505,7 +543,7 @@ Protocol to control the simulator via a Websocket or HTTP server: sequenceDiagram Client->>UI Server: request UI Server->>Client: response -Note over UI Server,Client: Transport protocol: HTTP, Websocket +Note over UI Server,Client: HTTP or Websocket ``` ### Websocket Protocol @@ -539,10 +577,11 @@ Set the Websocket header _Sec-Websocket-Protocol_ to `ui0.0.1`. - Response: `PDU`: { - `status`: 'success' | 'failure' + `status`: 'success' | 'failure', `state`: { - `version`: string - `started`: boolean + `version`: string, + `configuration`: ConfigurationData, + `started`: boolean, `templateStatistics`: Record } } @@ -601,7 +640,9 @@ Set the Websocket header _Sec-Websocket-Protocol_ to `ui0.0.1`. - Response: `PDU`: { - `status`: 'success' | 'failure' + `status`: 'success' | 'failure', + `hashIdsSucceeded`: charging station unique identifier strings array (optional), + `hashIdsFailed`: charging station unique identifier strings array (optional) } ###### Delete Charging Stations @@ -646,7 +687,7 @@ Set the Websocket header _Sec-Websocket-Protocol_ to `ui0.0.1`. - Response: `PDU`: { - `status`: 'success' | 'failure' + `status`: 'success' | 'failure', `performanceStatistics`: Statistics[] } @@ -838,7 +879,7 @@ Examples: - Request: `ProcedureName`: 'heartbeat' `PDU`: { - `hashIds`: charging station unique identifier strings array (optional, default: all charging stations), + `hashIds`: charging station unique identifier strings array (optional, default: all charging stations) } - Response: