From 505390847039ec18d52b665e2bc5afff69414aab Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Wed, 29 May 2024 20:02:34 +0200 Subject: [PATCH] fix: ensure message sequence is fired at boot notification response processing MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit closes #1039 Signed-off-by: Jérôme Benoit --- src/charging-station/ChargingStation.ts | 10 +--------- src/charging-station/ocpp/1.6/OCPP16ResponseService.ts | 9 +++++++++ src/charging-station/ocpp/2.0/OCPP20ResponseService.ts | 9 +++++++++ 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/charging-station/ChargingStation.ts b/src/charging-station/ChargingStation.ts index 7df0a35f..ba197954 100644 --- a/src/charging-station/ChargingStation.ts +++ b/src/charging-station/ChargingStation.ts @@ -1861,15 +1861,7 @@ export class ChargingStation extends EventEmitter { this.stationInfo?.registrationMaxRetries === -1) ) } - if (this.isRegistered()) { - this.emit(ChargingStationEvents.registered) - if (this.inAcceptedState()) { - this.emit(ChargingStationEvents.accepted) - } - } else { - if (this.inRejectedState()) { - this.emit(ChargingStationEvents.rejected) - } + if (!this.isRegistered()) { logger.error( `${this.logPrefix()} Registration failure: maximum retries reached (${registrationRetryCount}) or retry disabled (${ this.stationInfo?.registrationMaxRetries diff --git a/src/charging-station/ocpp/1.6/OCPP16ResponseService.ts b/src/charging-station/ocpp/1.6/OCPP16ResponseService.ts index 64e33061..ff04f4dc 100644 --- a/src/charging-station/ocpp/1.6/OCPP16ResponseService.ts +++ b/src/charging-station/ocpp/1.6/OCPP16ResponseService.ts @@ -13,6 +13,7 @@ import { import { OCPPError } from '../../../exception/index.js' import { type ChangeConfigurationResponse, + ChargingStationEvents, ErrorType, type GenericResponse, type GetConfigurationResponse, @@ -527,6 +528,14 @@ export class OCPP16ResponseService extends OCPPResponseService { OCPP16ServiceUtils.startHeartbeatInterval(chargingStation, payload.interval) } if (Object.values(RegistrationStatusEnumType).includes(payload.status)) { + if (chargingStation.isRegistered()) { + chargingStation.emit(ChargingStationEvents.registered) + if (chargingStation.inAcceptedState()) { + chargingStation.emit(ChargingStationEvents.accepted) + } + } else if (chargingStation.inRejectedState()) { + chargingStation.emit(ChargingStationEvents.rejected) + } const logMsg = `${chargingStation.logPrefix()} Charging station in '${ payload.status }' state on the central server` diff --git a/src/charging-station/ocpp/2.0/OCPP20ResponseService.ts b/src/charging-station/ocpp/2.0/OCPP20ResponseService.ts index 6ab91c07..54ccdeec 100644 --- a/src/charging-station/ocpp/2.0/OCPP20ResponseService.ts +++ b/src/charging-station/ocpp/2.0/OCPP20ResponseService.ts @@ -5,6 +5,7 @@ import type { ValidateFunction } from 'ajv' import { addConfigurationKey, type ChargingStation } from '../../../charging-station/index.js' import { OCPPError } from '../../../exception/index.js' import { + ChargingStationEvents, ErrorType, type JsonType, type OCPP20BootNotificationResponse, @@ -193,6 +194,14 @@ export class OCPP20ResponseService extends OCPPResponseService { OCPP20ServiceUtils.startHeartbeatInterval(chargingStation, payload.interval) } if (Object.values(RegistrationStatusEnumType).includes(payload.status)) { + if (chargingStation.isRegistered()) { + chargingStation.emit(ChargingStationEvents.registered) + if (chargingStation.inAcceptedState()) { + chargingStation.emit(ChargingStationEvents.accepted) + } + } else if (chargingStation.inRejectedState()) { + chargingStation.emit(ChargingStationEvents.rejected) + } const logMsg = `${chargingStation.logPrefix()} Charging station in '${ payload.status }' state on the central server` -- 2.43.0