X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2Focpp%2F2.0%2FOCPP20ResponseService.ts;h=9851d3339371d8fe3e47cb7a5dcaa835d7bcace0;hb=9388120364d5a2f3b9103f05802e1756d2dad04f;hp=d468260b5346f55a9e0a97cecaf7922436cbac95;hpb=bcf95df12dfe4236db8c278eabea9f5058f40933;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/ocpp/2.0/OCPP20ResponseService.ts b/src/charging-station/ocpp/2.0/OCPP20ResponseService.ts index d468260b..9851d333 100644 --- a/src/charging-station/ocpp/2.0/OCPP20ResponseService.ts +++ b/src/charging-station/ocpp/2.0/OCPP20ResponseService.ts @@ -2,10 +2,10 @@ import type { ValidateFunction } from 'ajv' -import { OCPP20ServiceUtils } from './OCPP20ServiceUtils.js' -import { type ChargingStation, addConfigurationKey } from '../../../charging-station/index.js' +import { addConfigurationKey, type ChargingStation } from '../../../charging-station/index.js' import { OCPPError } from '../../../exception/index.js' import { + ChargingStationEvents, ErrorType, type JsonType, type OCPP20BootNotificationResponse, @@ -21,6 +21,7 @@ import { } from '../../../types/index.js' import { isAsyncFunction, logger } from '../../../utils/index.js' import { OCPPResponseService } from '../OCPPResponseService.js' +import { OCPP20ServiceUtils } from './OCPP20ServiceUtils.js' const moduleName = 'OCPP20ResponseService' @@ -37,7 +38,7 @@ export class OCPP20ResponseService extends OCPPResponseService { // if (new.target.name === moduleName) { // throw new TypeError(`Cannot construct ${new.target.name} instances directly`) // } - super(OCPPVersion.VERSION_20) + super(OCPPVersion.VERSION_201) this.responseHandlers = new Map([ [ OCPP20RequestCommand.BOOT_NOTIFICATION, @@ -157,7 +158,7 @@ export class OCPP20ResponseService extends OCPPResponseService { payload, undefined, 2 - )} while the charging station is not registered on the central server.`, + )} while the charging station is not registered on the central server`, commandName, payload ) @@ -182,17 +183,23 @@ export class OCPP20ResponseService extends OCPPResponseService { chargingStation: ChargingStation, payload: OCPP20BootNotificationResponse ): void { - if (payload.status === RegistrationStatusEnumType.ACCEPTED) { - addConfigurationKey( - chargingStation, - OCPP20OptionalVariableName.HeartbeatInterval, - payload.interval.toString(), - {}, - { overwrite: true, save: true } - ) - OCPP20ServiceUtils.startHeartbeatInterval(chargingStation, payload.interval) - } if (Object.values(RegistrationStatusEnumType).includes(payload.status)) { + chargingStation.bootNotificationResponse = payload + if (chargingStation.isRegistered()) { + chargingStation.emit(ChargingStationEvents.registered) + if (chargingStation.inAcceptedState()) { + addConfigurationKey( + chargingStation, + OCPP20OptionalVariableName.HeartbeatInterval, + payload.interval.toString(), + {}, + { overwrite: true, save: true } + ) + 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` @@ -200,6 +207,7 @@ export class OCPP20ResponseService extends OCPPResponseService { ? logger.warn(logMsg) : logger.info(logMsg) } else { + delete chargingStation.bootNotificationResponse logger.error( `${chargingStation.logPrefix()} Charging station boot notification response received: %j with undefined registration status`, payload