Giter VIP home page Giter VIP logo

ev-simulator's Introduction

charging-stations-simulator

Summary

Simple node.js program to simulate a set of charging stations based on the OCPP-J 1.6 protocol.

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.

All charging station templates are in the directory 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.

Global 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
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
workerPoolMaxSize 16 integer worker threads pool maximum number of threads
workerPoolStrategy ROUND_ROBIN/LESS_RECENTLY_USED/... poolifier default: ROUND_ROBBIN string worker threads pool poolifier worker choice strategy
chargingStationsPerWorker 1 integer number of charging stations per worker threads for the workerSet process type
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
performanceStorage { "enabled": false, "type": "jsonfile", "file:///performanceMeasurements.json" } { enabled: string; type: string; URI: string; } where type can be 'jsonfile', 'mysql', 'mariadb', 'sqlite' 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
supervisionUser '' string basic HTTP authentication user to OCPP-J server
supervisionPassword '' string basic HTTP authentication password to OCPP-J server
ocppVersion 1.6 1.6 string OCPP version
ocppProtocol json json string OCPP protocol
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
fixedName true/false false boolean use the baseName as the charging stations unique name
chargePointModel '' string charging stations model
chargePointVendor '' string charging stations vendor
chargeBoxSerialNumberPrefix '' string charging stations serial number prefix
firmwareVersion '' string charging stations firmware version
power float|float[] charging stations maximum power value(s)
powerSharedByConnectors true/false false boolean charging stations power shared by its connectors
powerUnit W/kW W string charging stations power unit
currentOutType AC/DC AC string charging stations current out type
voltageOut AC:230/DC:400 integer charging stations voltage out
numberOfPhases 0/1/3 AC:3/DC:0 integer charging stations number of phase(s)
numberOfConnectors integer|integer[] charging stations number of connector(s)
useConnectorId0 true/false true boolean use connector id 0 definition from the template
randomConnectors true/false false boolean randomize runtime connector id affectation from the connector id definition in template
resetTime 60 integer seconds to wait before the charging stations come back at reset
autoRegister true/false false boolean set the charging station as registered at boot notification for testing purpose
autoReconnectMaxRetries -1 (unlimited) integer connection retries to the OCPP-J server
reconnectExponentialDelay true/false false boolean connection delay retry to the OCPP-J server
registrationMaxRetries -1 (unlimited) integer charging stations boot notification retries
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
beginEndMeterValues true/false false boolean enable Transaction.{Begin,End} MeterValues
outOfOrderEndMeterValues true/false false boolean send Transaction.End MeterValues out of order
meteringPerTransaction true/false true boolean enable metering history on a per transaction basis
transactionDataMeterValues true/false false boolean enable transaction data MeterValues at stop transaction
mainVoltageMeterValues true/false true boolean include charging station main voltage MeterValues on three phased charging stations
phaseLineToLineVoltageMeterValues true/false true boolean include charging station line to line voltage MeterValues on three phased charging stations
Configuration ChargingStationConfiguration charging stations OCPP parameters configuration section
AutomaticTransactionGenerator AutomaticTransactionGenerator charging stations ATG configuration section
Connectors Connectors charging stations connectors configuration section

Configuration section

  "Configuration": {
    "configurationKey": [
       ...
       {
        "key": "StandardKey",
        "readonly": false,
        "value": "StandardValue",
        "visible": true,
        "reboot": false
      },
      ...
      {
        "key": "VendorKey",
        "readonly": false,
        "value": "VendorValue",
        "visible": false,
        "reboot": true
      },
      ...
    ]
  }

AutomaticTransactionGenerator section

  "AutomaticTransactionGenerator": {
    "enable": false,
    "minDuration": 60,
    "maxDuration": 80,
    "minDelayBetweenTwoTransactions": 15,
    "maxDelayBetweenTwoTransactions": 30,
    "probabilityOfStart": 1,
    "stopAfterHours": 0.3,
    "stopOnConnectionFailure": true,
    "requireAuthorize": true
  }

Connectors section

  "Connectors": {
    "0": {},
    "1": {
      "bootStatus": "Available",
      "MeterValues": [
        ...
        {
          "unit": "W",
          "measurand": "Power.Active.Import",
          "phase": "L1-N",
          "value": "5000",
          "fluctuationPercent": "10"
        },
        ...
        {
          "unit": "A",
          "measurand": "Current.Import"
        },
        ...
        {
          "unit": "Wh"
        },
        ...
      ]
    }
  },

Start

To start the program, run: npm start.

Docker

In the docker folder:

make

Or without the optional git submodules:

make SUBMODULES_INIT=false

OCPP-J commands supported

Version 1.6

Core Profile

  • ✅ Authorize
  • ✅ BootNotification
  • ✅ ChangeAvailability
  • ✅ ChangeConfiguration
  • ✅ ClearCache
  • ❌ DataTransfer
  • ✅ GetConfiguration
  • ✅ Heartbeat
  • ✅ MeterValues
  • ✅ RemoteStartTransaction
  • ✅ RemoteStopTransaction
  • ✅ Reset
  • ✅ StartTransaction
  • ✅ StatusNotification
  • ✅ StopTransaction
  • ✅ UnlockConnector

Firmware Management Profile

  • ✅ GetDiagnostics
  • ❌ DiagnosticsStatusNotification
  • ❌ FirmwareStatusNotification
  • ❌ UpdateFirmware

Local Auth List Management Profile

  • ❌ GetLocalListVersion
  • ❌ SendLocalList

Reservation Profile

  • ❌ CancelReservation
  • ❌ ReserveNow

Smart Charging Profile

  • ✅ ClearChargingProfile
  • ✅ GetCompositeSchedule
  • ✅ SetChargingProfile

Remote Trigger Profile

  • ❌ TriggerMessage

OCPP-J standard parameters supported

All kind of OCPP parameters are supported in a charging station template. The list here mention the standard ones also handled automatically in the simulator.

Version 1.6

Core Profile

  • ✅ AuthorizeRemoteTxRequests (type: boolean) (units: -)
  • ❌ ClockAlignedDataInterval (type: integer) (units: seconds)
  • ✅ ConnectionTimeOut (type: integer) (units: seconds)
  • ❌ GetConfigurationMaxKeys (type: integer) (units: -)
  • ✅ HeartbeatInterval (type: integer) (units: seconds)
  • ❌ LocalAuthorizeOffline (type: boolean) (units: -)
  • ❌ LocalPreAuthorize (type: boolean) (units: -)
  • ❌ MeterValuesAlignedData (type: CSL) (units: -)
  • ✅ MeterValuesSampledData (type: CSL) (units: -)
  • ✅ MeterValueSampleInterval (type: integer) (units: seconds)
  • ✅ NumberOfConnectors (type: integer) (units: -)
  • ❌ ResetRetries (type: integer) (units: times)
  • ✅ ConnectorPhaseRotation (type: CSL) (units: -)
  • ❌ StopTransactionOnEVSideDisconnect (type: boolean) (units: -)
  • ❌ StopTransactionOnInvalidId (type: boolean) (units: -)
  • ❌ StopTxnAlignedData (type: CSL) (units: -)
  • ❌ StopTxnSampledData (type: CSL) (units: -)
  • ✅ SupportedFeatureProfiles (type: CSL) (units: -)
  • ❌ TransactionMessageAttempts (type: integer) (units: times)
  • ❌ TransactionMessageRetryInterval (type: integer) (units: seconds)
  • ❌ UnlockConnectorOnEVSideDisconnect (type: boolean) (units: -)
  • ✅ WebSocketPingInterval (type: integer) (units: seconds)

Firmware Management Profile

  • none

Local Auth List Management Profile

  • ✅ LocalAuthListEnabled (type: boolean) (units: -)
  • ❌ LocalAuthListMaxLength (type: integer) (units: -)
  • ❌ SendLocalListMaxLength (type: integer) (units: -)

Reservation Profile

  • none

Smart Charging Profile

  • ❌ ChargeProfileMaxStackLevel (type: integer) (units: -)
  • ❌ ChargingScheduleAllowedChargingRateUnit (type: CSL) (units: -)
  • ❌ ChargingScheduleMaxPeriods (type: integer) (units: -)
  • ❌ MaxChargingProfilesInstalled (type: integer) (units: -)

Remote Trigger Profile

  • none

License

This file and all other files in this repository are licensed under the Apache Software License, v.2 and copyrighted under the copyright in NOTICE file, except as noted otherwise in the LICENSE file or the code source file header.

Please note that Docker images can contain other software which may be licensed under different licenses. This LICENSE and NOTICE files are also included in the Docker image. For any usage of built Docker images please make sure to check the licenses of the artifacts contained in the images.

ev-simulator's People

Contributors

ccatsapdotcom avatar dependabot[bot] avatar jakob8 avatar jerome-benoit avatar lucasbrazi06 avatar rmangin-fr avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.