UI protocol: add OCPP heartbeat command support
[e-mobility-charging-stations-simulator.git] / src / charging-station / AutomaticTransactionGenerator.ts
index eb7876e2b34d16a8efa91bccc72be25dfade3fef..54b409ed39b7837cc7d988de8719e18512ee4add 100644 (file)
@@ -186,11 +186,7 @@ export default class AutomaticTransactionGenerator {
         this.connectorsStatus.get(connectorId).skippedConsecutiveTransactions = 0;
         // Start transaction
         const startResponse = await this.startTransaction(connectorId);
-        this.connectorsStatus.get(connectorId).startTransactionRequests++;
-        if (startResponse?.idTagInfo?.status !== AuthorizationStatus.ACCEPTED) {
-          logger.warn(this.logPrefix(connectorId) + ' start transaction rejected');
-          this.connectorsStatus.get(connectorId).rejectedStartTransactionRequests++;
-        } else {
+        if (startResponse?.idTagInfo?.status === AuthorizationStatus.ACCEPTED) {
           // Wait until end of transaction
           const waitTrxEnd =
             Utils.getRandomInteger(this.configuration.maxDuration, this.configuration.minDuration) *
@@ -202,7 +198,6 @@ export default class AutomaticTransactionGenerator {
               ' started and will stop in ' +
               Utils.formatDurationMilliSeconds(waitTrxEnd)
           );
-          this.connectorsStatus.get(connectorId).acceptedStartTransactionRequests++;
           await Utils.sleep(waitTrxEnd);
           // Stop transaction
           logger.info(
@@ -226,7 +221,6 @@ export default class AutomaticTransactionGenerator {
       }
       this.connectorsStatus.get(connectorId).lastRunDate = new Date();
     }
-    // await this.stopTransaction(connectorId);
     this.connectorsStatus.get(connectorId).stoppedDate = new Date();
     logger.info(
       this.logPrefix(connectorId) +
@@ -284,7 +278,7 @@ export default class AutomaticTransactionGenerator {
 
   private async startTransaction(
     connectorId: number
-  ): Promise<StartTransactionResponse | AuthorizeResponse> {
+  ): Promise<StartTransactionResponse | undefined> {
     const measureId = 'StartTransaction with ATG';
     const beginId = PerformanceStatistics.beginMeasure(measureId);
     let startResponse: StartTransactionResponse;
@@ -315,12 +309,13 @@ export default class AutomaticTransactionGenerator {
             connectorId,
             idTag,
           });
+          this.handleStartTransactionResponse(connectorId, startResponse);
           PerformanceStatistics.endMeasure(measureId, beginId);
           return startResponse;
         }
         this.connectorsStatus.get(connectorId).rejectedAuthorizeRequests++;
         PerformanceStatistics.endMeasure(measureId, beginId);
-        return authorizeResponse;
+        return startResponse;
       }
       logger.info(startTransactionLogMsg);
       // Start transaction
@@ -331,6 +326,7 @@ export default class AutomaticTransactionGenerator {
         connectorId,
         idTag,
       });
+      this.handleStartTransactionResponse(connectorId, startResponse);
       PerformanceStatistics.endMeasure(measureId, beginId);
       return startResponse;
     }
@@ -339,6 +335,7 @@ export default class AutomaticTransactionGenerator {
       StartTransactionRequest,
       StartTransactionResponse
     >(this.chargingStation, RequestCommand.START_TRANSACTION, { connectorId });
+    this.handleStartTransactionResponse(connectorId, startResponse);
     PerformanceStatistics.endMeasure(measureId, beginId);
     return startResponse;
   }
@@ -353,7 +350,7 @@ export default class AutomaticTransactionGenerator {
     if (this.chargingStation.getConnectorStatus(connectorId)?.transactionStarted === true) {
       stopResponse = await this.chargingStation.stopTransactionOnConnector(connectorId, reason);
       this.connectorsStatus.get(connectorId).stopTransactionRequests++;
-      if (stopResponse.idTagInfo?.status === AuthorizationStatus.ACCEPTED) {
+      if (stopResponse?.idTagInfo?.status === AuthorizationStatus.ACCEPTED) {
         this.connectorsStatus.get(connectorId).acceptedStopTransactionRequests++;
       } else {
         this.connectorsStatus.get(connectorId).rejectedStopTransactionRequests++;
@@ -381,4 +378,17 @@ export default class AutomaticTransactionGenerator {
       }:`
     );
   }
+
+  private handleStartTransactionResponse(
+    connectorId: number,
+    startResponse: StartTransactionResponse
+  ): void {
+    this.connectorsStatus.get(connectorId).startTransactionRequests++;
+    if (startResponse?.idTagInfo?.status === AuthorizationStatus.ACCEPTED) {
+      this.connectorsStatus.get(connectorId).acceptedStartTransactionRequests++;
+    } else {
+      logger.warn(this.logPrefix(connectorId) + ' start transaction rejected');
+      this.connectorsStatus.get(connectorId).rejectedStartTransactionRequests++;
+    }
+  }
 }