fix: restore connector status reserved only if needed
[e-mobility-charging-stations-simulator.git] / src / charging-station / ocpp / OCPPServiceUtils.ts
index 8a42bf67a7b05f361374a1d04bf996ab5d6b304f..256544fa50090a5a88319f08fdcbe47c2c845f05 100644 (file)
@@ -18,7 +18,8 @@ import {
   type AuthorizeResponse,
   ChargePointErrorCode,
   ChargingStationEvents,
-  type ConnectorStatusEnum,
+  type ConnectorStatus,
+  ConnectorStatusEnum,
   CurrentType,
   ErrorType,
   FileType,
@@ -194,6 +195,21 @@ export const sendAndSetConnectorStatus = async (
   })
 }
 
+export const restoreConnectorStatus = async (
+  chargingStation: ChargingStation,
+  connectorId: number,
+  connectorStatus: ConnectorStatus | undefined
+): Promise<void> => {
+  if (
+    connectorStatus?.reservation != null &&
+    connectorStatus.status !== ConnectorStatusEnum.Reserved
+  ) {
+    await sendAndSetConnectorStatus(chargingStation, connectorId, ConnectorStatusEnum.Reserved)
+  } else if (connectorStatus?.status !== ConnectorStatusEnum.Available) {
+    await sendAndSetConnectorStatus(chargingStation, connectorId, ConnectorStatusEnum.Available)
+  }
+}
+
 const checkConnectorStatusTransition = (
   chargingStation: ChargingStation,
   connectorId: number,
@@ -1228,6 +1244,7 @@ const getMeasurandDefaultLocation = (
 export class OCPPServiceUtils {
   public static readonly getMessageTypeString = getMessageTypeString
   public static readonly sendAndSetConnectorStatus = sendAndSetConnectorStatus
+  public static readonly restoreConnectorStatus = restoreConnectorStatus
   public static readonly isIdTagAuthorized = isIdTagAuthorized
   public static readonly buildTransactionEndMeterValue = buildTransactionEndMeterValue
   protected static getSampledValueTemplate = getSampledValueTemplate