X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2FChargingStation.ts;h=457e3468704553150fb6527f80dabf6cd07a480d;hb=45df3874f855f883ba8b56238973966b455555eb;hp=90bba2efd58b6a83d64a492d025445221f382f37;hpb=9383b2b1e4f256645b787d674bbd7a44b85dd3eb;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/ChargingStation.ts b/src/charging-station/ChargingStation.ts index 90bba2ef..457e3468 100644 --- a/src/charging-station/ChargingStation.ts +++ b/src/charging-station/ChargingStation.ts @@ -85,6 +85,7 @@ import type OCPPRequestService from './ocpp/OCPPRequestService'; import SharedLRUCache from './SharedLRUCache'; export default class ChargingStation { + public readonly index: number; public readonly templateFile: string; public stationInfo!: ChargingStationInfo; public started: boolean; @@ -102,13 +103,13 @@ export default class ChargingStation { public powerDivider!: number; private starting: boolean; private stopping: boolean; - private readonly index: number; private configurationFile!: string; private configurationFileHash!: string; private connectorsConfigurationHash!: string; private ocppIncomingRequestService!: OCPPIncomingRequestService; private readonly messageBuffer: Set; private configuredSupervisionUrl!: URL; + private configuredSupervisionUrlIndex!: number; private wsConnectionRestarted: boolean; private autoReconnectRetryCount: number; private templateFileWatcher!: fs.FSWatcher; @@ -156,14 +157,6 @@ export default class ChargingStation { ); } - public getRandomIdTag(): string { - const authorizationFile = ChargingStationUtils.getAuthorizationFile(this.stationInfo); - const index = Math.floor( - Utils.secureRandom() * this.authorizedTagsCache.getAuthorizedTags(authorizationFile).length - ); - return this.authorizedTagsCache.getAuthorizedTags(authorizationFile)[index]; - } - public hasAuthorizedTags(): boolean { return !Utils.isEmptyArray( this.authorizedTagsCache.getAuthorizedTags( @@ -718,13 +711,15 @@ export default class ChargingStation { } } - public startAutomaticTransactionGenerator(connectorIds?: number[]): void { - if (!this.automaticTransactionGenerator) { - this.automaticTransactionGenerator = AutomaticTransactionGenerator.getInstance( + public startAutomaticTransactionGenerator( + connectorIds?: number[], + automaticTransactionGeneratorConfiguration?: AutomaticTransactionGeneratorConfiguration + ): void { + this.automaticTransactionGenerator = AutomaticTransactionGenerator.getInstance( + automaticTransactionGeneratorConfiguration ?? this.getAutomaticTransactionGeneratorConfigurationFromTemplate(), - this - ); - } + this + ); if (!Utils.isEmptyArray(connectorIds)) { for (const connectorId of connectorIds) { this.automaticTransactionGenerator.startConnector(connectorId); @@ -880,10 +875,8 @@ export default class ChargingStation { stationInfo.resetTime = stationTemplate.resetTime ? stationTemplate.resetTime * 1000 : Constants.CHARGING_STATION_DEFAULT_RESET_TIME; - const configuredMaxConnectors = ChargingStationUtils.getConfiguredNumberOfConnectors( - this.index, - stationTemplate - ); + const configuredMaxConnectors = + ChargingStationUtils.getConfiguredNumberOfConnectors(stationTemplate); ChargingStationUtils.checkConfiguredMaxConnectors( configuredMaxConnectors, this.templateFile, @@ -1496,7 +1489,7 @@ export default class ChargingStation { } logger.debug( `${this.logPrefix()} << Command '${ - requestCommandName ?? 'unknown' + requestCommandName ?? Constants.UNKNOWN_COMMAND }' received response payload: ${JSON.stringify(request)}` ); responseCallback(commandPayload, requestPayload); @@ -1526,7 +1519,7 @@ export default class ChargingStation { } logger.debug( `${this.logPrefix()} << Command '${ - requestCommandName ?? 'unknown' + requestCommandName ?? Constants.UNKNOWN_COMMAND }' received error payload: ${JSON.stringify(request)}` ); errorCallback(new OCPPError(errorType, errorMessage, requestCommandName, errorDetails)); @@ -1548,7 +1541,7 @@ export default class ChargingStation { // Log logger.error( `${this.logPrefix()} Incoming OCPP command '${ - commandName ?? requestCommandName ?? null + commandName ?? requestCommandName ?? Constants.UNKNOWN_COMMAND }' message '${data.toString()}'${ messageType !== MessageType.CALL_MESSAGE ? ` matching cached request '${JSON.stringify(this.requests.get(messageId))}'` @@ -1559,7 +1552,7 @@ export default class ChargingStation { if (error instanceof OCPPError === false) { logger.warn( `${this.logPrefix()} Error thrown at incoming OCPP command '${ - commandName ?? requestCommandName ?? null + commandName ?? requestCommandName ?? Constants.UNKNOWN_COMMAND }' message '${data.toString()}' handling is not an OCPPError:`, error ); @@ -1645,7 +1638,7 @@ export default class ChargingStation { } // 0 for disabling - private getConnectionTimeout(): number | undefined { + private getConnectionTimeout(): number { if ( ChargingStationConfigurationUtils.getConfigurationKey( this, @@ -1665,7 +1658,7 @@ export default class ChargingStation { } // -1 for unlimited, 0 for disabling - private getAutoReconnectMaxRetries(): number | undefined { + private getAutoReconnectMaxRetries(): number { if (!Utils.isUndefined(this.stationInfo.autoReconnectMaxRetries)) { return this.stationInfo.autoReconnectMaxRetries; } @@ -1676,7 +1669,7 @@ export default class ChargingStation { } // 0 for disabling - private getRegistrationMaxRetries(): number | undefined { + private getRegistrationMaxRetries(): number { if (!Utils.isUndefined(this.stationInfo.registrationMaxRetries)) { return this.stationInfo.registrationMaxRetries; } @@ -1928,39 +1921,34 @@ export default class ChargingStation { this.stationInfo.supervisionUrls ?? Configuration.getSupervisionUrls() ); if (!Utils.isEmptyArray(supervisionUrls)) { - let urlIndex = 0; switch (Configuration.getSupervisionUrlDistribution()) { case SupervisionUrlDistribution.ROUND_ROBIN: - urlIndex = (this.index - 1) % supervisionUrls.length; + // FIXME + this.configuredSupervisionUrlIndex = (this.index - 1) % supervisionUrls.length; break; case SupervisionUrlDistribution.RANDOM: - // Get a random url - urlIndex = Math.floor(Utils.secureRandom() * supervisionUrls.length); + this.configuredSupervisionUrlIndex = Math.floor( + Utils.secureRandom() * supervisionUrls.length + ); break; - case SupervisionUrlDistribution.SEQUENTIAL: - if (this.index <= supervisionUrls.length) { - urlIndex = this.index - 1; - } else { - logger.warn( - `${this.logPrefix()} No more configured supervision urls available, using the first one` - ); - } + case SupervisionUrlDistribution.CHARGING_STATION_AFFINITY: + this.configuredSupervisionUrlIndex = (this.index - 1) % supervisionUrls.length; break; default: logger.error( `${this.logPrefix()} Unknown supervision url distribution '${Configuration.getSupervisionUrlDistribution()}' from values '${SupervisionUrlDistribution.toString()}', defaulting to ${ - SupervisionUrlDistribution.ROUND_ROBIN + SupervisionUrlDistribution.CHARGING_STATION_AFFINITY }` ); - urlIndex = (this.index - 1) % supervisionUrls.length; + this.configuredSupervisionUrlIndex = (this.index - 1) % supervisionUrls.length; break; } - return new URL(supervisionUrls[urlIndex]); + return new URL(supervisionUrls[this.configuredSupervisionUrlIndex]); } return new URL(supervisionUrls as string); } - private getHeartbeatInterval(): number | undefined { + private getHeartbeatInterval(): number { const HeartbeatInterval = ChargingStationConfigurationUtils.getConfigurationKey( this, StandardParametersKey.HeartbeatInterval @@ -2003,7 +1991,7 @@ export default class ChargingStation { } } - private getReconnectExponentialDelay(): boolean | undefined { + private getReconnectExponentialDelay(): boolean { return !Utils.isUndefined(this.stationInfo.reconnectExponentialDelay) ? this.stationInfo.reconnectExponentialDelay : false;