]> Piment Noir Git Repositories - e-mobility-charging-stations-simulator.git/commitdiff
fix: improve OCPP 2.0.1 TransactionEvent spec compliance
authorJérôme Benoit <jerome.benoit@sap.com>
Sun, 29 Mar 2026 00:45:59 +0000 (01:45 +0100)
committerJérôme Benoit <jerome.benoit@sap.com>
Sun, 29 Mar 2026 00:45:59 +0000 (01:45 +0100)
- Auto-derive chargingState in buildTransactionEvent when not explicitly
  provided (E02.FR.13: Started always has chargingState)
- Use idToken type Local instead of hardcoded Central in
  startTransactionOnConnector for ATG local tag consistency (E02.FR.01)
- Add TimeLimitReached mapping in mapStopReasonToOCPP20 for stations
  that need to report time-limited transaction stops

src/charging-station/ocpp/2.0/OCPP20ServiceUtils.ts
src/charging-station/ocpp/OCPPServiceUtils.ts

index 015bfe15a36373e32483ba91c7d1aa951d64c802..34bbab148538d1f32016a3dd6d225f3b728aaffd 100644 (file)
@@ -1018,8 +1018,15 @@ export function buildTransactionEvent (
     transactionId: transactionId as UUIDv4,
   }
 
-  if (commandParams.chargingState !== undefined) {
-    transactionInfo.chargingState = commandParams.chargingState
+  const chargingState =
+    commandParams.chargingState ??
+    (eventType === OCPP20TransactionEventEnumType.Ended
+      ? undefined
+      : connectorStatus.transactionStarted === true
+        ? OCPP20ChargingStateEnumType.Charging
+        : OCPP20ChargingStateEnumType.EVConnected)
+  if (chargingState !== undefined) {
+    transactionInfo.chargingState = chargingState
   }
   if (commandParams.stoppedReason !== undefined) {
     transactionInfo.stoppedReason = commandParams.stoppedReason
index cd95c2587a0a1d5cca23dffd48e2215393b94d0b..68eb372c21c8a7961c31878d8d26c1568a7fc733 100644 (file)
@@ -397,6 +397,11 @@ export const mapStopReasonToOCPP20 = (
         stoppedReason: OCPP20ReasonEnumType.Remote,
         triggerReason: OCPP20TriggerReasonEnumType.RemoteStop,
       }
+    case OCPP20ReasonEnumType.TimeLimitReached:
+      return {
+        stoppedReason: OCPP20ReasonEnumType.TimeLimitReached,
+        triggerReason: OCPP20TriggerReasonEnumType.TimeLimitReached,
+      }
     case OCPP16StopTransactionReason.LOCAL:
     case OCPP20ReasonEnumType.Local:
     case undefined:
@@ -447,7 +452,7 @@ export const startTransactionOnConnector = async (
         transactionId,
         {
           idToken:
-            idTag != null ? { idToken: idTag, type: OCPP20IdTokenEnumType.Central } : undefined,
+            idTag != null ? { idToken: idTag, type: OCPP20IdTokenEnumType.Local } : undefined,
           ...(startedMeterValues.length > 0 && { meterValue: startedMeterValues }),
         }
       )