X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2FChargingStationWorkerBroadcastChannel.ts;h=00780f2f6ed0000c352b0d417ea567ddc2ea1382;hb=45c0ae82dee8cf065f6303c4853c8adfe239dee1;hp=cf089ee3919b54f8a77f16b77b27d0674ea4cf07;hpb=d3195f0a57d61e2afd211f30092f8f1afe6c5245;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/ChargingStationWorkerBroadcastChannel.ts b/src/charging-station/ChargingStationWorkerBroadcastChannel.ts index cf089ee3..00780f2f 100644 --- a/src/charging-station/ChargingStationWorkerBroadcastChannel.ts +++ b/src/charging-station/ChargingStationWorkerBroadcastChannel.ts @@ -2,31 +2,34 @@ import BaseError from '../exception/BaseError'; import type OCPPError from '../exception/OCPPError'; import { StandardParametersKey } from '../types/ocpp/Configuration'; import { - HeartbeatRequest, - MeterValuesRequest, + type BootNotificationRequest, + type HeartbeatRequest, + type MeterValuesRequest, RequestCommand, type StatusNotificationRequest, } from '../types/ocpp/Requests'; -import type { - HeartbeatResponse, - MeterValuesResponse, - StatusNotificationResponse, +import { + type BootNotificationResponse, + type HeartbeatResponse, + type MeterValuesResponse, + RegistrationStatus, + type StatusNotificationResponse, } from '../types/ocpp/Responses'; import { AuthorizationStatus, - AuthorizeRequest, - AuthorizeResponse, - StartTransactionRequest, - StartTransactionResponse, - StopTransactionRequest, - StopTransactionResponse, + type AuthorizeRequest, + type AuthorizeResponse, + type StartTransactionRequest, + type StartTransactionResponse, + type StopTransactionRequest, + type StopTransactionResponse, } from '../types/ocpp/Transaction'; import { BroadcastChannelProcedureName, - BroadcastChannelRequest, - BroadcastChannelRequestPayload, - BroadcastChannelResponsePayload, - MessageEvent, + type BroadcastChannelRequest, + type BroadcastChannelRequestPayload, + type BroadcastChannelResponsePayload, + type MessageEvent, } from '../types/WorkerBroadcastChannel'; import { ResponseStatus } from '../ui/web/src/types/UIProtocol'; import Constants from '../utils/Constants'; @@ -43,6 +46,7 @@ type CommandResponse = | StartTransactionResponse | StopTransactionResponse | AuthorizeResponse + | BootNotificationResponse | StatusNotificationResponse | HeartbeatResponse | MeterValuesResponse; @@ -53,7 +57,6 @@ type CommandHandler = ( export default class ChargingStationWorkerBroadcastChannel extends WorkerBroadcastChannel { private readonly commandHandlers: Map; - private readonly chargingStation: ChargingStation; constructor(chargingStation: ChargingStation) { @@ -97,13 +100,11 @@ export default class ChargingStationWorkerBroadcastChannel extends WorkerBroadca StopTransactionRequest, StartTransactionResponse >(this.chargingStation, RequestCommand.STOP_TRANSACTION, { + meterStop: this.chargingStation.getEnergyActiveImportRegisterByTransactionId( + requestPayload.transactionId, + true + ), ...requestPayload, - meterStop: - requestPayload.meterStop ?? - this.chargingStation.getEnergyActiveImportRegisterByTransactionId( - requestPayload.transactionId, - true - ), }), ], [ @@ -114,6 +115,27 @@ export default class ChargingStationWorkerBroadcastChannel extends WorkerBroadca AuthorizeResponse >(this.chargingStation, RequestCommand.AUTHORIZE, requestPayload), ], + [ + BroadcastChannelProcedureName.BOOT_NOTIFICATION, + async (requestPayload?: BroadcastChannelRequestPayload) => { + this.chargingStation.bootNotificationResponse = + await this.chargingStation.ocppRequestService.requestHandler< + BootNotificationRequest, + BootNotificationResponse + >( + this.chargingStation, + RequestCommand.BOOT_NOTIFICATION, + { + ...this.chargingStation.bootNotificationRequest, + ...requestPayload, + }, + { + skipBufferingOnError: true, + } + ); + return this.chargingStation.bootNotificationResponse; + }, + ], [ BroadcastChannelProcedureName.STATUS_NOTIFICATION, async (requestPayload?: BroadcastChannelRequestPayload) => @@ -142,8 +164,7 @@ export default class ChargingStationWorkerBroadcastChannel extends WorkerBroadca MeterValuesRequest, MeterValuesResponse >(this.chargingStation, RequestCommand.METER_VALUES, { - ...requestPayload, - meterValue: requestPayload.meterValue ?? [ + meterValue: [ OCPP16ServiceUtils.buildMeterValue( this.chargingStation, requestPayload.connectorId, @@ -153,6 +174,7 @@ export default class ChargingStationWorkerBroadcastChannel extends WorkerBroadca : Constants.DEFAULT_METER_VALUES_INTERVAL ), ], + ...requestPayload, }); }, ], @@ -171,7 +193,6 @@ export default class ChargingStationWorkerBroadcastChannel extends WorkerBroadca return; } const [uuid, command, requestPayload] = validatedMessageEvent.data as BroadcastChannelRequest; - if ( requestPayload?.hashIds !== undefined && requestPayload?.hashIds?.includes(this.chargingStation.stationInfo.hashId) === false @@ -223,7 +244,7 @@ export default class ChargingStationWorkerBroadcastChannel extends WorkerBroadca private messageErrorHandler(messageEvent: MessageEvent): void { logger.error( `${this.chargingStation.logPrefix()} ${moduleName}.messageErrorHandler: Error at handling message:`, - { messageEvent } + messageEvent ); } @@ -255,26 +276,23 @@ export default class ChargingStationWorkerBroadcastChannel extends WorkerBroadca requestPayload: BroadcastChannelRequestPayload, commandResponse: CommandResponse ): BroadcastChannelResponsePayload { - const commandResponseStatus = this.commandResponseStatusToResponseStatus( - command, - commandResponse - ); - if (commandResponseStatus === ResponseStatus.SUCCESS) { + const responseStatus = this.commandResponseToResponseStatus(command, commandResponse); + if (responseStatus === ResponseStatus.SUCCESS) { return { hashId: this.chargingStation.stationInfo.hashId, - status: commandResponseStatus, + status: responseStatus, }; } return { hashId: this.chargingStation.stationInfo.hashId, - status: commandResponseStatus, + status: responseStatus, command, requestPayload, commandResponse, }; } - private commandResponseStatusToResponseStatus( + private commandResponseToResponseStatus( command: BroadcastChannelProcedureName, commandResponse: CommandResponse ): ResponseStatus { @@ -293,6 +311,11 @@ export default class ChargingStationWorkerBroadcastChannel extends WorkerBroadca return ResponseStatus.SUCCESS; } return ResponseStatus.FAILURE; + case BroadcastChannelProcedureName.BOOT_NOTIFICATION: + if (commandResponse?.status === RegistrationStatus.ACCEPTED) { + return ResponseStatus.SUCCESS; + } + return ResponseStatus.FAILURE; case BroadcastChannelProcedureName.STATUS_NOTIFICATION: case BroadcastChannelProcedureName.METER_VALUES: if (Utils.isEmptyObject(commandResponse) === true) {