]> Piment Noir Git Repositories - e-mobility-charging-stations-simulator.git/commitdiff
refactor(ocpp): use buildStatusNotificationRequest helper in TriggerMessage handlers
authorJérôme Benoit <jerome.benoit@sap.com>
Wed, 18 Mar 2026 15:03:31 +0000 (16:03 +0100)
committerJérôme Benoit <jerome.benoit@sap.com>
Wed, 18 Mar 2026 15:03:31 +0000 (16:03 +0100)
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.

src/charging-station/ocpp/1.6/OCPP16IncomingRequestService.ts
src/charging-station/ocpp/2.0/OCPP20IncomingRequestService.ts
src/charging-station/ocpp/OCPPServiceUtils.ts

index 0973ed7f92fef3e6613ce9f19146d0bad3bdeca7..23f0c402f2ec92b93ed9dfe4fdab8bfe23d4a76a 100644 (file)
@@ -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<OCPP16StatusNotificationRequest, OCPP16StatusNotificationResponse>(
                   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,
                     }
index 40375f289716940c117d3854aa47d992039f48c6..19afdf3273fe79c743397d929ff978178db94334 100644 (file)
@@ -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<OCPP20StatusNotificationRequest, OCPP20StatusNotificationResponse>(
-              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<OCPP20StatusNotificationRequest, OCPP20StatusNotificationResponse>(
-          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)
index f41c24af16df5a3d37725d4f42b32c2a6698fac4..829df23f7358166beac128ac7071a4a736977812 100644 (file)
@@ -98,7 +98,7 @@ export const getMessageTypeString = (messageType: MessageType | undefined): stri
   }
 }
 
-const buildStatusNotificationRequest = (
+export const buildStatusNotificationRequest = (
   chargingStation: ChargingStation,
   connectorId: number,
   status: ConnectorStatusEnum,