X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcharging-station%2Fbroadcast-channel%2FChargingStationWorkerBroadcastChannel.ts;h=a8d9b045abde5b93728ab16548a3a4e91fec8511;hb=7375968c99fc22707e16e5e7923ca130c824ce5b;hp=a7c6e4ad867331a82979cd188df36c69f60e854b;hpb=5edd8ba0f8978cfb3ca9d80f299d9748c6c5970e;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/broadcast-channel/ChargingStationWorkerBroadcastChannel.ts b/src/charging-station/broadcast-channel/ChargingStationWorkerBroadcastChannel.ts index a7c6e4ad..a8d9b045 100644 --- a/src/charging-station/broadcast-channel/ChargingStationWorkerBroadcastChannel.ts +++ b/src/charging-station/broadcast-channel/ChargingStationWorkerBroadcastChannel.ts @@ -1,3 +1,5 @@ +import { secondsToMilliseconds } from 'date-fns'; + import { WorkerBroadcastChannel } from './WorkerBroadcastChannel'; import { BaseError, type OCPPError } from '../../exception'; import { @@ -15,6 +17,7 @@ import { DataTransferStatus, type DiagnosticsStatusNotificationRequest, type DiagnosticsStatusNotificationResponse, + type EmptyObject, type FirmwareStatusNotificationRequest, type FirmwareStatusNotificationResponse, type HeartbeatRequest, @@ -36,22 +39,19 @@ import { } from '../../types'; import { Constants, convertToInt, isEmptyObject, isNullOrUndefined, logger } from '../../utils'; import type { ChargingStation } from '../ChargingStation'; -import { ChargingStationConfigurationUtils } from '../ChargingStationConfigurationUtils'; +import { getConfigurationKey } from '../ConfigurationKeyUtils'; import { OCPP16ServiceUtils } from '../ocpp'; const moduleName = 'ChargingStationWorkerBroadcastChannel'; type CommandResponse = + | EmptyObject | StartTransactionResponse | StopTransactionResponse | AuthorizeResponse | BootNotificationResponse - | StatusNotificationResponse | HeartbeatResponse - | MeterValuesResponse - | DataTransferResponse - | DiagnosticsStatusNotificationResponse - | FirmwareStatusNotificationResponse; + | DataTransferResponse; type CommandHandler = ( requestPayload?: BroadcastChannelRequestPayload, @@ -114,7 +114,7 @@ export class ChargingStationWorkerBroadcastChannel extends WorkerBroadcastChanne RequestCommand.STOP_TRANSACTION, { meterStop: this.chargingStation.getEnergyActiveImportRegisterByTransactionId( - requestPayload.transactionId, + requestPayload!.transactionId!, true, ), ...requestPayload, @@ -176,11 +176,10 @@ export class ChargingStationWorkerBroadcastChannel extends WorkerBroadcastChanne [ BroadcastChannelProcedureName.METER_VALUES, async (requestPayload?: BroadcastChannelRequestPayload) => { - const configuredMeterValueSampleInterval = - ChargingStationConfigurationUtils.getConfigurationKey( - chargingStation, - StandardParametersKey.MeterValueSampleInterval, - ); + const configuredMeterValueSampleInterval = getConfigurationKey( + chargingStation, + StandardParametersKey.MeterValueSampleInterval, + ); return this.chargingStation.ocppRequestService.requestHandler< MeterValuesRequest, MeterValuesResponse @@ -192,11 +191,11 @@ export class ChargingStationWorkerBroadcastChannel extends WorkerBroadcastChanne // FIXME: Implement OCPP version agnostic helpers OCPP16ServiceUtils.buildMeterValue( this.chargingStation, - requestPayload.connectorId, - this.chargingStation.getConnectorStatus(requestPayload.connectorId) - ?.transactionId, - configuredMeterValueSampleInterval - ? convertToInt(configuredMeterValueSampleInterval.value) * 1000 + requestPayload!.connectorId!, + this.chargingStation.getConnectorStatus(requestPayload!.connectorId!)! + .transactionId!, + configuredMeterValueSampleInterval !== undefined + ? secondsToMilliseconds(convertToInt(configuredMeterValueSampleInterval.value)) : Constants.DEFAULT_METER_VALUES_INTERVAL, ), ], @@ -242,8 +241,8 @@ export class ChargingStationWorkerBroadcastChannel extends WorkerBroadcastChanne ], ]); this.chargingStation = chargingStation; - this.onmessage = this.requestHandler.bind(this) as (message: MessageEvent) => void; - this.onmessageerror = this.messageErrorHandler.bind(this) as (message: MessageEvent) => void; + this.onmessage = this.requestHandler.bind(this) as (message: unknown) => void; + this.onmessageerror = this.messageErrorHandler.bind(this) as (message: unknown) => void; } private async requestHandler(messageEvent: MessageEvent): Promise { @@ -256,19 +255,19 @@ export class ChargingStationWorkerBroadcastChannel extends WorkerBroadcastChanne } const [uuid, command, requestPayload] = validatedMessageEvent.data as BroadcastChannelRequest; if ( - !isNullOrUndefined(requestPayload?.hashIds) && - requestPayload?.hashIds?.includes(this.chargingStation.stationInfo.hashId) === false + !isNullOrUndefined(requestPayload.hashIds) && + requestPayload.hashIds?.includes(this.chargingStation.stationInfo.hashId) === false ) { return; } - if (!isNullOrUndefined(requestPayload?.hashId)) { + if (!isNullOrUndefined(requestPayload.hashId)) { logger.error( `${this.chargingStation.logPrefix()} ${moduleName}.requestHandler: 'hashId' field usage in PDU is deprecated, use 'hashIds' array instead`, ); return; } - let responsePayload: BroadcastChannelResponsePayload; - let commandResponse: CommandResponse | void; + let responsePayload: BroadcastChannelResponsePayload | undefined; + let commandResponse: CommandResponse | void | undefined; try { commandResponse = await this.commandHandler(command, requestPayload); if (isNullOrUndefined(commandResponse) || isEmptyObject(commandResponse as CommandResponse)) { @@ -294,12 +293,12 @@ export class ChargingStationWorkerBroadcastChannel extends WorkerBroadcastChanne command, requestPayload, commandResponse: commandResponse as CommandResponse, - errorMessage: (error as Error).message, - errorStack: (error as Error).stack, + errorMessage: (error as OCPPError).message, + errorStack: (error as OCPPError).stack, errorDetails: (error as OCPPError).details, }; } finally { - this.sendResponse([uuid, responsePayload]); + this.sendResponse([uuid, responsePayload!]); } } @@ -316,9 +315,9 @@ export class ChargingStationWorkerBroadcastChannel extends WorkerBroadcastChanne ): Promise { if (this.commandHandlers.has(command) === true) { this.cleanRequestPayload(command, requestPayload); - return this.commandHandlers.get(command)(requestPayload); + return this.commandHandlers.get(command)!(requestPayload); } - throw new BaseError(`Unknown worker broadcast channel command: ${command}`); + throw new BaseError(`Unknown worker broadcast channel command: '${command}'`); } private cleanRequestPayload(