### Charging station template
-| Key | Value(s) | Default Value | Value type | Description |
-| --------------------------------- | ---------- | --------------- | --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
-| 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 |
-| ocppStrictCompliance | true/false | false | boolean | strict adherence to the OCPP version and protocol specifications |
-| ocppPersistentConfiguration | true/false | true | boolean | enable persistent OCPP parameters by charging station autogenerated name. The persistency is ensured by JSON files in dist/assets/configurations |
-| 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 |
-| 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. Need to relax OCPP specifications strict compliance ('ocppStrictCompliance' parameter) |
-| 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 |
+| Key | Value(s) | Default Value | Value type | Description |
+| --------------------------------- | ---------- | --------------- | --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
+| 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 |
+| ocppStrictCompliance | true/false | false | boolean | strict adherence to the OCPP version and protocol specifications |
+| ocppPersistentConfiguration | true/false | true | boolean | enable persistent OCPP parameters by charging station hashId. The persistency is ensured by JSON files in dist/assets/configurations |
+| 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 |
+| 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. Need to relax OCPP specifications strict compliance ('ocppStrictCompliance' parameter) |
+| 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
import path from 'path';
export default class ChargingStation {
- public readonly id: string;
+ public hashId!: string;
public readonly stationTemplateFile: string;
public authorizedTags: string[];
public stationInfo!: ChargingStationInfo;
private webSocketPingSetInterval!: NodeJS.Timeout;
constructor(index: number, stationTemplateFile: string) {
- this.id = Utils.generateUUID();
this.index = index;
this.stationTemplateFile = stationTemplateFile;
this.stopped = false;
private initialize(): void {
this.stationInfo = this.buildStationInfo();
- this.configurationFile = path.join(
- path.resolve(__dirname, '../'),
- 'assets/configurations',
- this.stationInfo.chargingStationId + '.json'
- );
- this.configuration = this.getConfiguration();
- delete this.stationInfo.Configuration;
this.bootNotificationRequest = {
chargePointModel: this.stationInfo.chargePointModel,
chargePointVendor: this.stationInfo.chargePointVendor,
...(!Utils.isUndefined(this.stationInfo.firmwareVersion) && {
firmwareVersion: this.stationInfo.firmwareVersion,
}),
+ ...(Utils.isUndefined(this.stationInfo.iccid) && { iccid: this.stationInfo.iccid }),
+ ...(Utils.isUndefined(this.stationInfo.imsi) && { imsi: this.stationInfo.imsi }),
+ ...(Utils.isUndefined(this.stationInfo.meterSerialNumber) && {
+ meterSerialNumber: this.stationInfo.meterSerialNumber,
+ }),
+ ...(Utils.isUndefined(this.stationInfo.meterType) && {
+ meterType: this.stationInfo.meterType,
+ }),
};
+
+ this.hashId = crypto
+ .createHash(Constants.DEFAULT_HASH_ALGORITHM)
+ .update(JSON.stringify(this.bootNotificationRequest) + this.stationInfo.chargingStationId)
+ .digest('hex');
+ logger.info(`${this.logPrefix()} Charging station hashId '${this.hashId}'`);
+ this.configurationFile = path.join(
+ path.resolve(__dirname, '../'),
+ 'assets',
+ 'configurations',
+ this.hashId + '.json'
+ );
+ this.configuration = this.getConfiguration();
+ delete this.stationInfo.Configuration;
// Build connectors if needed
const maxConnectors = this.getMaxNumberOfConnectors();
if (maxConnectors <= 0) {
this.stationInfo.randomConnectors = true;
}
const connectorsConfigHash = crypto
- .createHash('sha256')
+ .createHash(Constants.DEFAULT_HASH_ALGORITHM)
.update(JSON.stringify(this.stationInfo.Connectors) + maxConnectors.toString())
.digest('hex');
const connectorsConfigChanged =
this.wsConfiguredConnectionUrl = new URL(
this.getConfiguredSupervisionUrl().href + '/' + this.stationInfo.chargingStationId
);
+ // OCPP parameters
+ this.initOcppParameters();
switch (this.getOcppVersion()) {
case OCPPVersion.VERSION_16:
this.ocppIncomingRequestService =
this.handleUnsupportedVersion(this.getOcppVersion());
break;
}
- // OCPP parameters
- this.initOcppParameters();
if (this.stationInfo.autoRegister) {
this.bootNotificationResponse = {
currentTime: new Date().toISOString(),
this.stationInfo.powerDivider = this.getPowerDivider();
if (this.getEnableStatistics()) {
this.performanceStatistics = PerformanceStatistics.getInstance(
- this.id,
+ this.hashId,
this.stationInfo.chargingStationId,
this.wsConnectionUrl
);