Improve charging profiles handling debug logs
[e-mobility-charging-stations-simulator.git] / src / charging-station / ChargingStation.ts
index ce5677a41e8e757c67ed94b727acdf34b54d6a5e..a52ebacb88eeb91a62e1d3ddf91d70b3a519f40b 100644 (file)
@@ -36,7 +36,6 @@ import type { ChargingStationOcppConfiguration } from '../types/ChargingStationO
 import {
   type ChargingStationTemplate,
   CurrentType,
-  type FirmwareUpgrade,
   PowerUnits,
   type WsOptions,
 } from '../types/ChargingStationTemplate';
@@ -378,12 +377,15 @@ export default class ChargingStation {
       this.getHeartbeatInterval() > 0 &&
       !this.heartbeatSetInterval
     ) {
-      // eslint-disable-next-line @typescript-eslint/no-misused-promises
-      this.heartbeatSetInterval = setInterval(async (): Promise<void> => {
-        await this.ocppRequestService.requestHandler<HeartbeatRequest, HeartbeatResponse>(
-          this,
-          RequestCommand.HEARTBEAT
-        );
+      this.heartbeatSetInterval = setInterval(() => {
+        this.ocppRequestService
+          .requestHandler<HeartbeatRequest, HeartbeatResponse>(this, RequestCommand.HEARTBEAT)
+          .catch((error) => {
+            logger.error(
+              `${this.logPrefix()} Error while sending '${RequestCommand.HEARTBEAT}':`,
+              error
+            );
+          });
       }, this.getHeartbeatInterval());
       logger.info(
         this.logPrefix() +
@@ -449,18 +451,16 @@ export default class ChargingStation {
       return;
     }
     if (interval > 0) {
-      // eslint-disable-next-line @typescript-eslint/no-misused-promises
-      this.getConnectorStatus(connectorId).transactionSetInterval = setInterval(
-        // eslint-disable-next-line @typescript-eslint/no-misused-promises
-        async (): Promise<void> => {
-          // FIXME: Implement OCPP version agnostic helpers
-          const meterValue: MeterValue = OCPP16ServiceUtils.buildMeterValue(
-            this,
-            connectorId,
-            this.getConnectorStatus(connectorId).transactionId,
-            interval
-          );
-          await this.ocppRequestService.requestHandler<MeterValuesRequest, MeterValuesResponse>(
+      this.getConnectorStatus(connectorId).transactionSetInterval = setInterval(() => {
+        // FIXME: Implement OCPP version agnostic helpers
+        const meterValue: MeterValue = OCPP16ServiceUtils.buildMeterValue(
+          this,
+          connectorId,
+          this.getConnectorStatus(connectorId).transactionId,
+          interval
+        );
+        this.ocppRequestService
+          .requestHandler<MeterValuesRequest, MeterValuesResponse>(
             this,
             RequestCommand.METER_VALUES,
             {
@@ -468,10 +468,14 @@ export default class ChargingStation {
               transactionId: this.getConnectorStatus(connectorId).transactionId,
               meterValue: [meterValue],
             }
-          );
-        },
-        interval
-      );
+          )
+          .catch((error) => {
+            logger.error(
+              `${this.logPrefix()} Error while sending '${RequestCommand.METER_VALUES}':`,
+              error
+            );
+          });
+      }, interval);
     } else {
       logger.error(
         `${this.logPrefix()} Charging station ${
@@ -632,7 +636,7 @@ export default class ChargingStation {
     if (params?.terminateOpened) {
       this.terminateWSConnection();
     }
-    const ocppVersion = this.getOcppVersion();
+    const ocppVersion = this.stationInfo.ocppVersion ?? OCPPVersion.VERSION_16;
     let protocol: string;
     switch (ocppVersion) {
       case OCPPVersion.VERSION_16:
@@ -834,6 +838,7 @@ export default class ChargingStation {
       this.index,
       stationTemplate
     );
+    stationInfo.ocppVersion = stationTemplate.ocppVersion ?? OCPPVersion.VERSION_16;
     ChargingStationUtils.createSerialNumber(stationTemplate, stationInfo);
     if (!Utils.isEmptyArray(stationTemplate.power)) {
       stationTemplate.power = stationTemplate.power as number[];
@@ -936,10 +941,6 @@ export default class ChargingStation {
     }
   }
 
-  private getOcppVersion(): OCPPVersion {
-    return this.stationInfo.ocppVersion ?? OCPPVersion.VERSION_16;
-  }
-
   private getOcppPersistentConfiguration(): boolean {
     return this.stationInfo?.ocppPersistentConfiguration ?? true;
   }
@@ -978,7 +979,8 @@ export default class ChargingStation {
     // OCPP configuration
     this.ocppConfiguration = this.getOcppConfiguration();
     this.initializeOcppConfiguration();
-    switch (this.getOcppVersion()) {
+    const ocppVersion = this.stationInfo.ocppVersion ?? OCPPVersion.VERSION_16;
+    switch (ocppVersion) {
       case OCPPVersion.VERSION_16:
         this.ocppIncomingRequestService =
           OCPP16IncomingRequestService.getInstance<OCPP16IncomingRequestService>();
@@ -995,7 +997,7 @@ export default class ChargingStation {
         );
         break;
       default:
-        this.handleUnsupportedVersion(this.getOcppVersion());
+        this.handleUnsupportedVersion(ocppVersion);
         break;
     }
     if (this.stationInfo?.autoRegister === true) {
@@ -1804,8 +1806,11 @@ export default class ChargingStation {
           logger.error(
             `${this.logPrefix()} Charging profile id ${
               matchingChargingProfile.chargingProfileId
-            } limit ${limit} is greater than connector id ${connectorId} maximum ${connectorMaximumPower}, dump charging profiles' stack: %j`,
-            this.getConnectorStatus(connectorId).chargingProfiles
+            } limit ${limit} is greater than connector id ${connectorId} maximum ${connectorMaximumPower}: %j`,
+            this.getConnectorStatus(connectorId).chargingProfiles.find(
+              (chargingProfile) =>
+                chargingProfile.chargingProfileId === matchingChargingProfile.chargingProfileId
+            )
           );
           limit = connectorMaximumPower;
         }