X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2FChargingStationWorkerBroadcastChannel.ts;h=154e1afb14bbb8631fdb570c3a95c2888e4516f2;hb=1984f1944eeb7468c2f3adbf03b83fbc98910dff;hp=e36650bb3cb2ab1c4d2281e8bbd0dc2ac0cb7f63;hpb=d273692c3ddee7eb01353e032304762a993c33e2;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/ChargingStationWorkerBroadcastChannel.ts b/src/charging-station/ChargingStationWorkerBroadcastChannel.ts index e36650bb..154e1afb 100644 --- a/src/charging-station/ChargingStationWorkerBroadcastChannel.ts +++ b/src/charging-station/ChargingStationWorkerBroadcastChannel.ts @@ -8,6 +8,8 @@ import { import type { HeartbeatResponse, StatusNotificationResponse } from '../types/ocpp/Responses'; import { AuthorizationStatus, + AuthorizeRequest, + AuthorizeResponse, StartTransactionRequest, StartTransactionResponse, StopTransactionRequest, @@ -31,6 +33,7 @@ const moduleName = 'ChargingStationWorkerBroadcastChannel'; type CommandResponse = | StartTransactionResponse | StopTransactionResponse + | AuthorizeResponse | StatusNotificationResponse | HeartbeatResponse; @@ -65,10 +68,7 @@ export default class ChargingStationWorkerBroadcastChannel extends WorkerBroadca this.chargingStation.ocppRequestService.requestHandler< StartTransactionRequest, StartTransactionResponse - >(this.chargingStation, RequestCommand.START_TRANSACTION, { - connectorId: requestPayload.connectorId, - idTag: requestPayload.idTag, - }), + >(this.chargingStation, RequestCommand.START_TRANSACTION, requestPayload), ], [ BroadcastChannelProcedureName.STOP_TRANSACTION, @@ -77,13 +77,11 @@ export default class ChargingStationWorkerBroadcastChannel extends WorkerBroadca StopTransactionRequest, StartTransactionResponse >(this.chargingStation, RequestCommand.STOP_TRANSACTION, { - transactionId: requestPayload.transactionId, + ...requestPayload, meterStop: this.chargingStation.getEnergyActiveImportRegisterByTransactionId( requestPayload.transactionId, true ), - idTag: requestPayload.idTag, - reason: requestPayload.reason, }), ], [ @@ -96,35 +94,29 @@ export default class ChargingStationWorkerBroadcastChannel extends WorkerBroadca (requestPayload?: BroadcastChannelRequestPayload) => this.chargingStation.stopAutomaticTransactionGenerator(requestPayload.connectorIds), ], + [ + BroadcastChannelProcedureName.AUTHORIZE, + async (requestPayload?: BroadcastChannelRequestPayload) => + this.chargingStation.ocppRequestService.requestHandler< + AuthorizeRequest, + AuthorizeResponse + >(this.chargingStation, RequestCommand.AUTHORIZE, requestPayload), + ], [ BroadcastChannelProcedureName.STATUS_NOTIFICATION, async (requestPayload?: BroadcastChannelRequestPayload) => this.chargingStation.ocppRequestService.requestHandler< StatusNotificationRequest, StatusNotificationResponse - >(this.chargingStation, RequestCommand.STATUS_NOTIFICATION, { - connectorId: requestPayload.connectorId, - errorCode: requestPayload.errorCode, - status: requestPayload.status, - ...(requestPayload.info && { info: requestPayload.info }), - ...(requestPayload.timestamp && { timestamp: requestPayload.timestamp }), - ...(requestPayload.vendorId && { vendorId: requestPayload.vendorId }), - ...(requestPayload.vendorErrorCode && { - vendorErrorCode: requestPayload.vendorErrorCode, - }), - }), + >(this.chargingStation, RequestCommand.STATUS_NOTIFICATION, requestPayload), ], [ BroadcastChannelProcedureName.HEARTBEAT, - async (requestPayload?: BroadcastChannelRequestPayload) => { - delete requestPayload.hashId; - delete requestPayload.hashIds; - delete requestPayload.connectorIds; - return this.chargingStation.ocppRequestService.requestHandler< + async (requestPayload?: BroadcastChannelRequestPayload) => + this.chargingStation.ocppRequestService.requestHandler< HeartbeatRequest, HeartbeatResponse - >(this.chargingStation, RequestCommand.HEARTBEAT, requestPayload); - }, + >(this.chargingStation, RequestCommand.HEARTBEAT, requestPayload), ], ]); this.chargingStation = chargingStation; @@ -165,10 +157,24 @@ export default class ChargingStationWorkerBroadcastChannel extends WorkerBroadca status: ResponseStatus.SUCCESS, }; } else { - responsePayload = { - hashId: this.chargingStation.stationInfo.hashId, - status: this.commandResponseToResponseStatus(command, commandResponse as CommandResponse), - }; + const responseStatus = this.commandResponseToResponseStatus( + command, + commandResponse as CommandResponse + ); + if (responseStatus === ResponseStatus.SUCCESS) { + responsePayload = { + hashId: this.chargingStation.stationInfo.hashId, + status: responseStatus, + }; + } else { + responsePayload = { + hashId: this.chargingStation.stationInfo.hashId, + status: responseStatus, + command, + requestPayload, + commandResponse: commandResponse as CommandResponse, + }; + } } } catch (error) { logger.error( @@ -201,11 +207,24 @@ export default class ChargingStationWorkerBroadcastChannel extends WorkerBroadca requestPayload: BroadcastChannelRequestPayload ): Promise { if (this.commandHandlers.has(command) === true) { + this.cleanRequestPayload(command, requestPayload); return this.commandHandlers.get(command)(requestPayload); } throw new BaseError(`Unknown worker broadcast channel command: ${command}`); } + private cleanRequestPayload( + command: BroadcastChannelProcedureName, + requestPayload: BroadcastChannelRequestPayload + ): void { + delete requestPayload.hashId; + delete requestPayload.hashIds; + [ + BroadcastChannelProcedureName.START_AUTOMATIC_TRANSACTION_GENERATOR, + BroadcastChannelProcedureName.STOP_AUTOMATIC_TRANSACTION_GENERATOR, + ].includes(command) === false && delete requestPayload.connectorIds; + } + private commandResponseToResponseStatus( command: BroadcastChannelProcedureName, commandResponse: CommandResponse @@ -213,9 +232,14 @@ export default class ChargingStationWorkerBroadcastChannel extends WorkerBroadca switch (command) { case BroadcastChannelProcedureName.START_TRANSACTION: case BroadcastChannelProcedureName.STOP_TRANSACTION: + case BroadcastChannelProcedureName.AUTHORIZE: if ( - (commandResponse as StartTransactionResponse | StopTransactionResponse)?.idTagInfo - ?.status === AuthorizationStatus.ACCEPTED + ( + commandResponse as + | StartTransactionResponse + | StopTransactionResponse + | AuthorizeResponse + )?.idTagInfo?.status === AuthorizationStatus.ACCEPTED ) { return ResponseStatus.SUCCESS; }