X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2FChargingStationWorkerBroadcastChannel.ts;h=dfb50ab1dd67d318f251ed88a953aae67011e276;hb=cf058664a0053a43b9ac08815b6e430179ff5ddf;hp=0c3af5887ee06b494269b426df6736df25374a37;hpb=4f317101dedf3e41deaa06cc04ef5beaf79af3bd;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/ChargingStationWorkerBroadcastChannel.ts b/src/charging-station/ChargingStationWorkerBroadcastChannel.ts index 0c3af588..dfb50ab1 100644 --- a/src/charging-station/ChargingStationWorkerBroadcastChannel.ts +++ b/src/charging-station/ChargingStationWorkerBroadcastChannel.ts @@ -1,10 +1,11 @@ import BaseError from '../exception/BaseError'; -import { RequestCommand } from '../types/ocpp/Requests'; +import type OCPPError from '../exception/OCPPError'; +import { RequestCommand, type StatusNotificationRequest } from '../types/ocpp/Requests'; +import type { StatusNotificationResponse } from '../types/ocpp/Responses'; import { AuthorizationStatus, StartTransactionRequest, StartTransactionResponse, - StopTransactionReason, StopTransactionRequest, StopTransactionResponse, } from '../types/ocpp/Transaction'; @@ -17,12 +18,16 @@ import { } from '../types/WorkerBroadcastChannel'; import { ResponseStatus } from '../ui/web/src/types/UIProtocol'; import logger from '../utils/Logger'; +import Utils from '../utils/Utils'; import type ChargingStation from './ChargingStation'; import WorkerBroadcastChannel from './WorkerBroadcastChannel'; const moduleName = 'ChargingStationWorkerBroadcastChannel'; -type CommandResponse = StartTransactionResponse | StopTransactionResponse; +type CommandResponse = + | StartTransactionResponse + | StopTransactionResponse + | StatusNotificationResponse; export default class ChargingStationWorkerBroadcastChannel extends WorkerBroadcastChannel { private readonly chargingStation: ChargingStation; @@ -35,7 +40,7 @@ export default class ChargingStationWorkerBroadcastChannel extends WorkerBroadca } private async requestHandler(messageEvent: MessageEvent): Promise { - if (this.isResponse(messageEvent.data)) { + if (this.isResponse(messageEvent.data) === true) { return; } const [uuid, command, requestPayload] = this.validateMessageEvent(messageEvent) @@ -89,6 +94,7 @@ export default class ChargingStationWorkerBroadcastChannel extends WorkerBroadca commandResponse, errorMessage: (error as Error).message, errorStack: (error as Error).stack, + errorDetails: (error as OCPPError).details, }; } this.sendResponse([uuid, responsePayload]); @@ -136,8 +142,8 @@ export default class ChargingStationWorkerBroadcastChannel extends WorkerBroadca requestPayload.transactionId, true ), - idTag: this.chargingStation.getTransactionIdTag(requestPayload.transactionId), - ...(requestPayload.reason && { reason: requestPayload.reason }), + idTag: requestPayload.idTag, + reason: requestPayload.reason, }); case BroadcastChannelProcedureName.START_AUTOMATIC_TRANSACTION_GENERATOR: this.chargingStation.startAutomaticTransactionGenerator(requestPayload.connectorIds); @@ -145,6 +151,21 @@ export default class ChargingStationWorkerBroadcastChannel extends WorkerBroadca case BroadcastChannelProcedureName.STOP_AUTOMATIC_TRANSACTION_GENERATOR: this.chargingStation.stopAutomaticTransactionGenerator(requestPayload.connectorIds); break; + case BroadcastChannelProcedureName.STATUS_NOTIFICATION: + return 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, + }), + }); default: // eslint-disable-next-line @typescript-eslint/restrict-template-expressions throw new BaseError(`Unknown worker broadcast channel command: ${command}`); @@ -152,7 +173,10 @@ export default class ChargingStationWorkerBroadcastChannel extends WorkerBroadca } private commandResponseToResponseStatus(commandResponse: CommandResponse): ResponseStatus { - if (commandResponse?.idTagInfo?.status === AuthorizationStatus.ACCEPTED) { + if ( + Utils.isEmptyObject(commandResponse) || + commandResponse?.idTagInfo?.status === AuthorizationStatus.ACCEPTED + ) { return ResponseStatus.SUCCESS; } return ResponseStatus.FAILURE;