+import { secondsToMilliseconds } from 'date-fns';
+
import { WorkerBroadcastChannel } from './WorkerBroadcastChannel';
import { BaseError, type OCPPError } from '../../exception';
import {
DataTransferStatus,
type DiagnosticsStatusNotificationRequest,
type DiagnosticsStatusNotificationResponse,
+ type EmptyObject,
type FirmwareStatusNotificationRequest,
type FirmwareStatusNotificationResponse,
type HeartbeatRequest,
} 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,
RequestCommand.STOP_TRANSACTION,
{
meterStop: this.chargingStation.getEnergyActiveImportRegisterByTransactionId(
- requestPayload.transactionId,
+ requestPayload!.transactionId!,
true,
),
...requestPayload,
[
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
// FIXME: Implement OCPP version agnostic helpers
OCPP16ServiceUtils.buildMeterValue(
this.chargingStation,
- requestPayload.connectorId,
- this.chargingStation.getConnectorStatus(requestPayload.connectorId)
- ?.transactionId,
+ requestPayload!.connectorId!,
+ this.chargingStation.getConnectorStatus(requestPayload!.connectorId!)!
+ .transactionId!,
configuredMeterValueSampleInterval
- ? convertToInt(configuredMeterValueSampleInterval.value) * 1000
+ ? secondsToMilliseconds(convertToInt(configuredMeterValueSampleInterval.value))
: Constants.DEFAULT_METER_VALUES_INTERVAL,
),
],
],
]);
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<void> {
}
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)) {
errorDetails: (error as OCPPError).details,
};
} finally {
- this.sendResponse([uuid, responsePayload]);
+ this.sendResponse([uuid, responsePayload!]);
}
}
): Promise<CommandResponse | void> {
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(