X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2Focpp%2F1.6%2FOCPP16IncomingRequestService.ts;h=6f089a7029eb78cdcb0705276960a1db345ff0e2;hb=90293abb1042312652c22f8b8c468d99ec080c71;hp=36869b6d3c551996f73ddf99a8303098d27c7a1c;hpb=e9a4164c46a1cf3d5761f06446dc7b46b98372ad;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/ocpp/1.6/OCPP16IncomingRequestService.ts b/src/charging-station/ocpp/1.6/OCPP16IncomingRequestService.ts index 36869b6d..6f089a70 100644 --- a/src/charging-station/ocpp/1.6/OCPP16IncomingRequestService.ts +++ b/src/charging-station/ocpp/1.6/OCPP16IncomingRequestService.ts @@ -78,7 +78,7 @@ import type { OCPPConfigurationKey } from '../../../types/ocpp/Configuration'; import { ErrorType } from '../../../types/ocpp/ErrorType'; import { OCPPVersion } from '../../../types/ocpp/OCPPVersion'; import type { IncomingRequestHandler } from '../../../types/ocpp/Requests'; -import type { DefaultResponse } from '../../../types/ocpp/Responses'; +import type { GenericResponse } from '../../../types/ocpp/Responses'; import Constants from '../../../utils/Constants'; import logger from '../../../utils/Logger'; import Utils from '../../../utils/Utils'; @@ -329,7 +329,7 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer private handleRequestReset( chargingStation: ChargingStation, commandPayload: ResetRequest - ): DefaultResponse { + ): GenericResponse { this.asyncResource .runInAsyncScope( chargingStation.reset.bind(chargingStation) as ( @@ -694,7 +694,7 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer private async handleRequestRemoteStartTransaction( chargingStation: ChargingStation, commandPayload: RemoteStartTransactionRequest - ): Promise { + ): Promise { const transactionConnectorId = commandPayload.connectorId; if (chargingStation.connectors.has(transactionConnectorId) === true) { const remoteStartTransactionLogMsg = @@ -843,7 +843,7 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer chargingStation: ChargingStation, connectorId: number, idTag: string - ): Promise { + ): Promise { if ( chargingStation.getConnectorStatus(connectorId).status !== OCPP16ChargePointStatus.AVAILABLE ) { @@ -899,7 +899,7 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer private async handleRequestRemoteStopTransaction( chargingStation: ChargingStation, commandPayload: RemoteStopTransactionRequest - ): Promise { + ): Promise { const transactionId = commandPayload.transactionId; for (const connectorId of chargingStation.connectors.keys()) { if ( @@ -944,6 +944,18 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer OCPP16IncomingRequestCommand.UPDATE_FIRMWARE ) === false ) { + logger.warn( + `${chargingStation.logPrefix()} ${moduleName}.handleRequestUpdateFirmware: Cannot simulate firmware update: feature profile not supported` + ); + return OCPPConstants.OCPP_RESPONSE_EMPTY; + } + if ( + !Utils.isNullOrUndefined(chargingStation.stationInfo.firmwareStatus) && + chargingStation.stationInfo.firmwareStatus !== OCPP16FirmwareStatus.Installed + ) { + logger.warn( + `${chargingStation.logPrefix()} ${moduleName}.handleRequestUpdateFirmware: Cannot simulate firmware update: firmware update is already in progress` + ); return OCPPConstants.OCPP_RESPONSE_EMPTY; } const retrieveDate = Utils.convertToDate(commandPayload.retrieveDate); @@ -972,8 +984,8 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer private async updateFirmware( chargingStation: ChargingStation, - minDelay = 15, - maxDelay = 30 + maxDelay = 30, + minDelay = 15 ): Promise { chargingStation.stopAutomaticTransactionGenerator(); for (const connectorId of chargingStation.connectors.keys()) { @@ -993,6 +1005,18 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer OCPP16ChargePointStatus.UNAVAILABLE; } } + if ( + chargingStation.getFirmwareUpgrade()?.failureStatus && + !Utils.isEmptyString(chargingStation.getFirmwareUpgrade().failureStatus) + ) { + await chargingStation.ocppRequestService.requestHandler< + OCPP16FirmwareStatusNotificationRequest, + OCPP16FirmwareStatusNotificationResponse + >(chargingStation, OCPP16RequestCommand.FIRMWARE_STATUS_NOTIFICATION, { + status: chargingStation.getFirmwareUpgrade().failureStatus, + }); + return; + } await chargingStation.ocppRequestService.requestHandler< OCPP16FirmwareStatusNotificationRequest, OCPP16FirmwareStatusNotificationResponse @@ -1000,7 +1024,7 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer status: OCPP16FirmwareStatus.Downloading, }); chargingStation.stationInfo.firmwareStatus = OCPP16FirmwareStatus.Downloading; - await Utils.sleep(Utils.getRandomInteger(minDelay, maxDelay) * 1000); + await Utils.sleep(Utils.getRandomInteger(maxDelay, minDelay) * 1000); await chargingStation.ocppRequestService.requestHandler< OCPP16FirmwareStatusNotificationRequest, OCPP16FirmwareStatusNotificationResponse @@ -1008,7 +1032,7 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer status: OCPP16FirmwareStatus.Downloaded, }); chargingStation.stationInfo.firmwareStatus = OCPP16FirmwareStatus.Downloaded; - await Utils.sleep(Utils.getRandomInteger(minDelay, maxDelay) * 1000); + await Utils.sleep(Utils.getRandomInteger(maxDelay, minDelay) * 1000); await chargingStation.ocppRequestService.requestHandler< OCPP16FirmwareStatusNotificationRequest, OCPP16FirmwareStatusNotificationResponse @@ -1016,8 +1040,10 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer status: OCPP16FirmwareStatus.Installing, }); chargingStation.stationInfo.firmwareStatus = OCPP16FirmwareStatus.Installing; - await Utils.sleep(Utils.getRandomInteger(minDelay, maxDelay) * 1000); - await chargingStation.reset(OCPP16StopTransactionReason.REBOOT); + if (chargingStation.getFirmwareUpgrade().reset === true) { + await Utils.sleep(Utils.getRandomInteger(maxDelay, minDelay) * 1000); + await chargingStation.reset(OCPP16StopTransactionReason.REBOOT); + } } private async handleRequestGetDiagnostics( @@ -1031,6 +1057,9 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer OCPP16IncomingRequestCommand.GET_DIAGNOSTICS ) === false ) { + logger.warn( + `${chargingStation.logPrefix()} ${moduleName}.handleRequestGetDiagnostics: Cannot get diagnostics: feature profile not supported` + ); return OCPPConstants.OCPP_RESPONSE_EMPTY; } const uri = new URL(commandPayload.location);