X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2FChargingStation.ts;h=8cdde246cebb00a52d296ef0587a266f4d3eb5a7;hb=1a6188b2fcd2bf644e6fea0c697a095228c1aed0;hp=ae5f0fd1a965a6ea8b58660adce1dbf5873ec440;hpb=5398cecf45b4bdab604d0e6aff8a96dcc67d5ae9;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/ChargingStation.ts b/src/charging-station/ChargingStation.ts index ae5f0fd1..8cdde246 100644 --- a/src/charging-station/ChargingStation.ts +++ b/src/charging-station/ChargingStation.ts @@ -228,7 +228,6 @@ export class ChargingStation extends EventEmitter { public get stationInfo(): ChargingStationInfo { return { - ...this.internalStationInfo, ...{ enableStatistics: false, remoteAuthorization: true, @@ -252,6 +251,7 @@ export class ChargingStation extends EventEmitter { reconnectExponentialDelay: false, stopTransactionsOnStopped: true, }, + ...this.internalStationInfo, }; } @@ -513,7 +513,7 @@ export class ChargingStation extends EventEmitter { public setSupervisionUrl(url: string): void { if ( - this.stationInfo?.supervisionUrlOcppConfiguration && + this.stationInfo?.supervisionUrlOcppConfiguration === true && isNotEmptyString(this.stationInfo?.supervisionUrlOcppKey) ) { setConfigurationKeyValue(this, this.stationInfo.supervisionUrlOcppKey!, url); @@ -782,7 +782,7 @@ export class ChargingStation extends EventEmitter { this.wsConnection = new WebSocket( this.wsConnectionUrl, - `ocpp${this.stationInfo.ocppVersion}`, + `ocpp${this.stationInfo?.ocppVersion}`, options, ); @@ -1129,6 +1129,7 @@ export class ChargingStation extends EventEmitter { ? stationTemplate.power * 1000 : stationTemplate.power; } + stationInfo.maximumAmperage = this.getMaximumAmperage(stationInfo); stationInfo.firmwareVersionPattern = stationTemplate?.firmwareVersionPattern ?? Constants.SEMVER_PATTERN; if ( @@ -1153,7 +1154,6 @@ export class ChargingStation extends EventEmitter { stationInfo.resetTime = !isNullOrUndefined(stationTemplate?.resetTime) ? secondsToMilliseconds(stationTemplate.resetTime!) : Constants.CHARGING_STATION_DEFAULT_RESET_TIME; - stationInfo.maximumAmperage = this.getMaximumAmperage(stationInfo); return stationInfo; } @@ -1192,7 +1192,7 @@ export class ChargingStation extends EventEmitter { } } - private handleUnsupportedVersion(version: OCPPVersion) { + private handleUnsupportedVersion(version: OCPPVersion | undefined) { const errorMsg = `Unsupported protocol version '${version}' configured in template file ${this.templateFile}`; logger.error(`${this.logPrefix()} ${errorMsg}`); throw new BaseError(errorMsg); @@ -1249,6 +1249,11 @@ export class ChargingStation extends EventEmitter { this.ocppConfiguration = this.getOcppConfiguration(); this.initializeOcppConfiguration(); this.initializeOcppServices(); + this.once(ChargingStationEvents.accepted, () => { + this.startMessageSequence().catch((error) => { + logger.error(`${this.logPrefix()} Error while starting the message sequence:`, error); + }); + }); if (this.stationInfo?.autoRegister === true) { this.bootNotificationResponse = { currentTime: new Date(), @@ -1259,7 +1264,7 @@ export class ChargingStation extends EventEmitter { } private initializeOcppServices(): void { - const ocppVersion = this.stationInfo.ocppVersion; + const ocppVersion = this.stationInfo?.ocppVersion; switch (ocppVersion) { case OCPPVersion.VERSION_16: this.ocppIncomingRequestService = @@ -1735,9 +1740,9 @@ export class ChargingStation extends EventEmitter { logger.info( `${this.logPrefix()} Connection to OCPP server through ${this.wsConnectionUrl.toString()} succeeded`, ); + let registrationRetryCount = 0; if (this.isRegistered() === false) { // Send BootNotification - let registrationRetryCount = 0; do { this.bootNotificationResponse = await this.ocppRequestService.requestHandler< BootNotificationRequest, @@ -1756,18 +1761,17 @@ export class ChargingStation extends EventEmitter { } while ( this.isRegistered() === false && (registrationRetryCount <= this.stationInfo.registrationMaxRetries! || - this.stationInfo?.registrationMaxRetries) === -1 + this.stationInfo?.registrationMaxRetries === -1) ); } if (this.isRegistered() === true) { this.emit(ChargingStationEvents.registered); if (this.inAcceptedState() === true) { this.emit(ChargingStationEvents.accepted); - await this.startMessageSequence(); } } else { logger.error( - `${this.logPrefix()} Registration failure: max retries reached or retry disabled (${this + `${this.logPrefix()} Registration failure: maximum retries reached (${registrationRetryCount}) or retry disabled (${this .stationInfo?.registrationMaxRetries})`, ); } @@ -1823,7 +1827,7 @@ export class ChargingStation extends EventEmitter { private async handleIncomingMessage(request: IncomingRequest): Promise { const [messageType, messageId, commandName, commandPayload] = request; - if (this.stationInfo.enableStatistics === true) { + if (this.stationInfo?.enableStatistics === true) { this.performanceStatistics?.addRequestStatistic(commandName, messageType); } logger.debug( @@ -2037,7 +2041,7 @@ export class ChargingStation extends EventEmitter { private getPowerDivider(): number { let powerDivider = this.hasEvses ? this.getNumberOfEvses() : this.getNumberOfConnectors(); - if (this.stationInfo?.powerSharedByConnectors) { + if (this.stationInfo?.powerSharedByConnectors === true) { powerDivider = this.getNumberOfRunningTransactions(); } return powerDivider; @@ -2062,7 +2066,7 @@ export class ChargingStation extends EventEmitter { } private getCurrentOutType(stationInfo?: ChargingStationInfo): CurrentType { - return (stationInfo ?? this.stationInfo).currentOutType!; + return (stationInfo ?? this.stationInfo).currentOutType ?? CurrentType.AC; } private getVoltageOut(stationInfo?: ChargingStationInfo): number { @@ -2152,12 +2156,12 @@ export class ChargingStation extends EventEmitter { this.stopWebSocketPing(); // Stop heartbeat this.stopHeartbeat(); - // Stop ongoing transactions - stopTransactions && (await this.stopRunningTransactions(reason)); // Stop the ATG if (this.automaticTransactionGenerator?.started === true) { this.stopAutomaticTransactionGenerator(); } + // Stop ongoing transactions + stopTransactions && (await this.stopRunningTransactions(reason)); if (this.hasEvses) { for (const [evseId, evseStatus] of this.evses) { if (evseId > 0) {