From: Jérôme Benoit Date: Wed, 18 Mar 2026 15:03:31 +0000 (+0100) Subject: refactor(ocpp): use buildStatusNotificationRequest helper in TriggerMessage handlers X-Git-Tag: ocpp-server@v3.2.0~62 X-Git-Url: https://git.piment-noir.org/?a=commitdiff_plain;h=f611016b6820336b74aaa7fd6f9d37c41b1b150e;p=e-mobility-charging-stations-simulator.git refactor(ocpp): use buildStatusNotificationRequest helper in TriggerMessage handlers Replace inline StatusNotification payload construction in both OCPP 1.6 and 2.0 TriggerMessage handlers with the centralized buildStatusNotificationRequest helper. Export the helper from OCPPServiceUtils to make it available. This eliminates 5 inline duplications of the same payload structure that risked diverging from the single source of truth. --- diff --git a/src/charging-station/ocpp/1.6/OCPP16IncomingRequestService.ts b/src/charging-station/ocpp/1.6/OCPP16IncomingRequestService.ts index 0973ed7f..23f0c402 100644 --- a/src/charging-station/ocpp/1.6/OCPP16IncomingRequestService.ts +++ b/src/charging-station/ocpp/1.6/OCPP16IncomingRequestService.ts @@ -52,7 +52,6 @@ import { type OCPP16CancelReservationRequest, type OCPP16ChangeAvailabilityRequest, type OCPP16ChangeAvailabilityResponse, - OCPP16ChargePointErrorCode, OCPP16ChargePointStatus, type OCPP16ChargingProfile, OCPP16ChargingProfilePurposeType, @@ -117,7 +116,11 @@ import { } from '../../../utils/index.js' import { OCPPConstants } from '../OCPPConstants.js' import { OCPPIncomingRequestService } from '../OCPPIncomingRequestService.js' -import { buildMeterValue, OCPPServiceUtils } from '../OCPPServiceUtils.js' +import { + buildMeterValue, + buildStatusNotificationRequest, + OCPPServiceUtils, +} from '../OCPPServiceUtils.js' import { OCPP16Constants } from './OCPP16Constants.js' import { OCPP16ServiceUtils } from './OCPP16ServiceUtils.js' @@ -484,12 +487,12 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService { .requestHandler( chargingStation, OCPP16RequestCommand.STATUS_NOTIFICATION, - { + buildStatusNotificationRequest( + chargingStation, connectorId, - errorCode: OCPP16ChargePointErrorCode.NO_ERROR, - status: chargingStation.getConnectorStatus(connectorId) - ?.status as OCPP16ChargePointStatus, - }, + chargingStation.getConnectorStatus(connectorId) + ?.status as OCPP16ChargePointStatus + ) as OCPP16StatusNotificationRequest, { triggerMessage: true, } @@ -505,11 +508,11 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService { >( chargingStation, OCPP16RequestCommand.STATUS_NOTIFICATION, - { - connectorId: id, - errorCode: OCPP16ChargePointErrorCode.NO_ERROR, - status: connectorStatus.status as OCPP16ChargePointStatus, - }, + buildStatusNotificationRequest( + chargingStation, + id, + connectorStatus.status as OCPP16ChargePointStatus + ) as OCPP16StatusNotificationRequest, { triggerMessage: true, } @@ -526,11 +529,11 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService { >( chargingStation, OCPP16RequestCommand.STATUS_NOTIFICATION, - { - connectorId: id, - errorCode: OCPP16ChargePointErrorCode.NO_ERROR, - status: connectorStatus.status as OCPP16ChargePointStatus, - }, + buildStatusNotificationRequest( + chargingStation, + id, + connectorStatus.status as OCPP16ChargePointStatus + ) as OCPP16StatusNotificationRequest, { triggerMessage: true, } diff --git a/src/charging-station/ocpp/2.0/OCPP20IncomingRequestService.ts b/src/charging-station/ocpp/2.0/OCPP20IncomingRequestService.ts index 40375f28..19afdf32 100644 --- a/src/charging-station/ocpp/2.0/OCPP20IncomingRequestService.ts +++ b/src/charging-station/ocpp/2.0/OCPP20IncomingRequestService.ts @@ -144,6 +144,7 @@ import { OCPPAuthServiceFactory } from '../auth/index.js' import { OCPPIncomingRequestService } from '../OCPPIncomingRequestService.js' import { buildMeterValue, + buildStatusNotificationRequest, restoreConnectorStatus, sendAndSetConnectorStatus, } from '../OCPPServiceUtils.js' @@ -3684,22 +3685,12 @@ export class OCPP20IncomingRequestService extends OCPPIncomingRequestService { for (const [evseId, evseStatus] of chargingStation.evses) { if (evseId > 0) { for (const [connectorId, connectorStatus] of evseStatus.connectors) { - const resolvedConnectorStatus = - connectorStatus.status != null - ? (connectorStatus.status as unknown as OCPP20ConnectorStatusEnumType) - : OCPP20ConnectorStatusEnumType.Available + const resolvedStatus = connectorStatus.status ?? ConnectorStatusEnum.Available chargingStation.ocppRequestService - .requestHandler( - chargingStation, - OCPP20RequestCommand.STATUS_NOTIFICATION, - { - connectorId, - connectorStatus: resolvedConnectorStatus, - evseId, - timestamp: new Date(), - }, - { skipBufferingOnError: true, triggerMessage: true } - ) + .requestHandler< + OCPP20StatusNotificationRequest, + OCPP20StatusNotificationResponse + >(chargingStation, OCPP20RequestCommand.STATUS_NOTIFICATION, buildStatusNotificationRequest(chargingStation, connectorId, resolvedStatus, evseId) as OCPP20StatusNotificationRequest, { skipBufferingOnError: true, triggerMessage: true }) .catch(errorHandler) } } @@ -3714,22 +3705,12 @@ export class OCPP20IncomingRequestService extends OCPPIncomingRequestService { if (evse?.id !== undefined && evse.id > 0 && evse.connectorId !== undefined) { const evseStatus = chargingStation.evses.get(evse.id) const connectorStatus = evseStatus?.connectors.get(evse.connectorId) - const resolvedStatus = - connectorStatus?.status != null - ? (connectorStatus.status as unknown as OCPP20ConnectorStatusEnumType) - : OCPP20ConnectorStatusEnumType.Available + const resolvedStatus = connectorStatus?.status ?? ConnectorStatusEnum.Available chargingStation.ocppRequestService - .requestHandler( - chargingStation, - OCPP20RequestCommand.STATUS_NOTIFICATION, - { - connectorId: evse.connectorId, - connectorStatus: resolvedStatus, - evseId: evse.id, - timestamp: new Date(), - }, - { skipBufferingOnError: true, triggerMessage: true } - ) + .requestHandler< + OCPP20StatusNotificationRequest, + OCPP20StatusNotificationResponse + >(chargingStation, OCPP20RequestCommand.STATUS_NOTIFICATION, buildStatusNotificationRequest(chargingStation, evse.connectorId, resolvedStatus, evse.id) as OCPP20StatusNotificationRequest, { skipBufferingOnError: true, triggerMessage: true }) .catch(errorHandler) } else if (chargingStation.hasEvses) { this.triggerAllEvseStatusNotifications(chargingStation, errorHandler) diff --git a/src/charging-station/ocpp/OCPPServiceUtils.ts b/src/charging-station/ocpp/OCPPServiceUtils.ts index f41c24af..829df23f 100644 --- a/src/charging-station/ocpp/OCPPServiceUtils.ts +++ b/src/charging-station/ocpp/OCPPServiceUtils.ts @@ -98,7 +98,7 @@ export const getMessageTypeString = (messageType: MessageType | undefined): stri } } -const buildStatusNotificationRequest = ( +export const buildStatusNotificationRequest = ( chargingStation: ChargingStation, connectorId: number, status: ConnectorStatusEnum,