build(simulator): switch to TS 5.x.x
[e-mobility-charging-stations-simulator.git] / src / charging-station / ChargingStation.ts
index 645c3f736b004be126891afc3f8bb8b2318c85dc..9125c377c2ae76e5750b66f9cf62b5dcdaabe600 100644 (file)
@@ -47,7 +47,7 @@ import {
   type ChargingStationOcppConfiguration,
   type ChargingStationTemplate,
   ConnectorPhaseRotation,
-  ConnectorStatus,
+  type ConnectorStatus,
   ConnectorStatusEnum,
   CurrentType,
   type ErrorCallback,
@@ -123,7 +123,6 @@ export class ChargingStation {
   private ocppIncomingRequestService!: OCPPIncomingRequestService;
   private readonly messageBuffer: Set<string>;
   private configuredSupervisionUrl!: URL;
-  private configuredSupervisionUrlIndex!: number;
   private wsConnectionRestarted: boolean;
   private autoReconnectRetryCount: number;
   private templateFileWatcher!: fs.FSWatcher | undefined;
@@ -152,7 +151,8 @@ export class ChargingStation {
   private get wsConnectionUrl(): URL {
     return new URL(
       `${
-        this.getSupervisionUrlOcppConfiguration()
+        this.getSupervisionUrlOcppConfiguration() &&
+        Utils.isNotEmptyString(this.getSupervisionUrlOcppKey())
           ? ChargingStationConfigurationUtils.getConfigurationKey(
               this,
               this.getSupervisionUrlOcppKey()
@@ -387,12 +387,25 @@ export class ChargingStation {
     return localAuthListEnabled ? Utils.convertToBoolean(localAuthListEnabled.value) : false;
   }
 
-  public startHeartbeat(): void {
+  public setSupervisionUrl(url: string): void {
     if (
-      this.getHeartbeatInterval() &&
-      this.getHeartbeatInterval() > 0 &&
-      !this.heartbeatSetInterval
+      this.getSupervisionUrlOcppConfiguration() &&
+      Utils.isNotEmptyString(this.getSupervisionUrlOcppKey())
     ) {
+      ChargingStationConfigurationUtils.setConfigurationKeyValue(
+        this,
+        this.getSupervisionUrlOcppKey(),
+        url
+      );
+    } else {
+      this.stationInfo.supervisionUrls = url;
+      this.saveStationInfo();
+      this.configuredSupervisionUrl = this.getConfiguredSupervisionUrl();
+    }
+  }
+
+  public startHeartbeat(): void {
+    if (this.getHeartbeatInterval() > 0 && !this.heartbeatSetInterval) {
       this.heartbeatSetInterval = setInterval(() => {
         this.ocppRequestService
           .requestHandler<HeartbeatRequest, HeartbeatResponse>(this, RequestCommand.HEARTBEAT)
@@ -1083,6 +1096,7 @@ export class ChargingStation {
     }
     if (
       this.getSupervisionUrlOcppConfiguration() &&
+      Utils.isNotEmptyString(this.getSupervisionUrlOcppKey()) &&
       !ChargingStationConfigurationUtils.getConfigurationKey(this, this.getSupervisionUrlOcppKey())
     ) {
       ChargingStationConfigurationUtils.addConfigurationKey(
@@ -1093,6 +1107,7 @@ export class ChargingStation {
       );
     } else if (
       !this.getSupervisionUrlOcppConfiguration() &&
+      Utils.isNotEmptyString(this.getSupervisionUrlOcppKey()) &&
       ChargingStationConfigurationUtils.getConfigurationKey(this, this.getSupervisionUrlOcppKey())
     ) {
       ChargingStationConfigurationUtils.deleteConfigurationKey(
@@ -1510,7 +1525,7 @@ export class ChargingStation {
         messageType
       )} is not an array`,
       undefined,
-      cachedRequest as unknown as JsonType
+      cachedRequest as JsonType
     );
   }
 
@@ -1932,11 +1947,10 @@ export class ChargingStation {
   private getConfiguredSupervisionUrl(): URL {
     const supervisionUrls = this.stationInfo?.supervisionUrls ?? Configuration.getSupervisionUrls();
     if (Utils.isNotEmptyArray(supervisionUrls)) {
+      let configuredSupervisionUrlIndex: number;
       switch (Configuration.getSupervisionUrlDistribution()) {
         case SupervisionUrlDistribution.RANDOM:
-          this.configuredSupervisionUrlIndex = Math.floor(
-            Utils.secureRandom() * supervisionUrls.length
-          );
+          configuredSupervisionUrlIndex = Math.floor(Utils.secureRandom() * supervisionUrls.length);
           break;
         case SupervisionUrlDistribution.ROUND_ROBIN:
         case SupervisionUrlDistribution.CHARGING_STATION_AFFINITY:
@@ -1949,10 +1963,10 @@ export class ChargingStation {
                 SupervisionUrlDistribution.CHARGING_STATION_AFFINITY
               }`
             );
-          this.configuredSupervisionUrlIndex = (this.index - 1) % supervisionUrls.length;
+          configuredSupervisionUrlIndex = (this.index - 1) % supervisionUrls.length;
           break;
       }
-      return new URL(supervisionUrls[this.configuredSupervisionUrlIndex]);
+      return new URL(supervisionUrls[configuredSupervisionUrlIndex]);
     }
     return new URL(supervisionUrls as string);
   }