feat: add connector status handling at boot with evses configuration
[e-mobility-charging-stations-simulator.git] / src / charging-station / ChargingStation.ts
index 6ea862e75030f40c6a9eee751e178b7ed1febc50..c51064f6667c74de7624a062e09546ed1191b7d8 100644 (file)
@@ -263,11 +263,11 @@ export class ChargingStation {
       }
       return numberOfConnectors;
     }
-    return this.connectors.get(0) ? this.connectors.size - 1 : this.connectors.size;
+    return this.connectors.has(0) ? this.connectors.size - 1 : this.connectors.size;
   }
 
   public getNumberOfEvses(): number {
-    return this.evses.size;
+    return this.evses.has(0) ? this.evses.size - 1 : this.evses.size;
   }
 
   public getConnectorStatus(connectorId: number): ConnectorStatus | undefined {
@@ -1997,30 +1997,32 @@ export class ChargingStation {
     // Start heartbeat
     this.startHeartbeat();
     // Initialize connectors status
-    for (const connectorId of this.connectors.keys()) {
-      let connectorStatus: ConnectorStatusEnum | undefined;
-      if (connectorId === 0) {
-        continue;
-      } else if (
-        !this.getConnectorStatus(connectorId)?.status &&
-        (this.isChargingStationAvailable() === false ||
-          this.isConnectorAvailable(connectorId) === false)
-      ) {
-        connectorStatus = ConnectorStatusEnum.Unavailable;
-      } else if (
-        !this.getConnectorStatus(connectorId)?.status &&
-        this.getConnectorStatus(connectorId)?.bootStatus
-      ) {
-        // Set boot status in template at startup
-        connectorStatus = this.getConnectorStatus(connectorId)?.bootStatus;
-      } else if (this.getConnectorStatus(connectorId)?.status) {
-        // Set previous status at startup
-        connectorStatus = this.getConnectorStatus(connectorId)?.status;
-      } else {
-        // Set default status
-        connectorStatus = ConnectorStatusEnum.Available;
+    if (this.hasEvses) {
+      for (const [evseId, evseStatus] of this.evses) {
+        if (evseId === 0) {
+          continue;
+        }
+        for (const [connectorId, connectorStatus] of evseStatus.connectors) {
+          const connectorBootStatus = ChargingStationUtils.getBootConnectorStatus(
+            this,
+            connectorId,
+            connectorStatus
+          );
+          await OCPPServiceUtils.sendAndSetConnectorStatus(this, connectorId, connectorBootStatus);
+        }
+      }
+    } else {
+      for (const connectorId of this.connectors.keys()) {
+        if (connectorId === 0) {
+          continue;
+        }
+        const connectorBootStatus = ChargingStationUtils.getBootConnectorStatus(
+          this,
+          connectorId,
+          this.getConnectorStatus(connectorId)
+        );
+        await OCPPServiceUtils.sendAndSetConnectorStatus(this, connectorId, connectorBootStatus);
       }
-      await OCPPServiceUtils.sendAndSetConnectorStatus(this, connectorId, connectorStatus);
     }
     if (this.stationInfo?.firmwareStatus === FirmwareStatus.Installing) {
       await this.ocppRequestService.requestHandler<