Add CS template tunable to enable persistent OCPP configuration
[e-mobility-charging-stations-simulator.git] / src / charging-station / ocpp / 1.6 / OCPP16ResponseService.ts
index 79064f1c48d9deec97e583da6679fd4b2a600d86..93465c620fb9ff04584a1adecead5781ead24935 100644 (file)
@@ -25,6 +25,7 @@ import { MeterValuesRequest, MeterValuesResponse } from '../../../types/ocpp/1.6
 import type ChargingStation from '../../ChargingStation';
 import { ErrorType } from '../../../types/ocpp/ErrorType';
 import { JsonType } from '../../../types/JsonType';
+import { OCPP16ChargePointErrorCode } from '../../../types/ocpp/1.6/ChargePointErrorCode';
 import { OCPP16ChargePointStatus } from '../../../types/ocpp/1.6/ChargePointStatus';
 import { OCPP16ServiceUtils } from './OCPP16ServiceUtils';
 import { OCPP16StandardParametersKey } from '../../../types/ocpp/1.6/Configuration';
@@ -103,12 +104,15 @@ export default class OCPP16ResponseService extends OCPPResponseService {
     if (payload.status === OCPP16RegistrationStatus.ACCEPTED) {
       this.chargingStation.addConfigurationKey(
         OCPP16StandardParametersKey.HeartBeatInterval,
-        payload.interval.toString()
+        payload.interval.toString(),
+        {},
+        { overwrite: true, save: true }
       );
       this.chargingStation.addConfigurationKey(
         OCPP16StandardParametersKey.HeartbeatInterval,
         payload.interval.toString(),
-        { visible: false }
+        { visible: false },
+        { overwrite: true, save: true }
       );
       this.chargingStation.heartbeatSetInterval
         ? this.chargingStation.restartHeartbeat()
@@ -168,9 +172,9 @@ export default class OCPP16ResponseService extends OCPPResponseService {
       this.chargingStation.getConnectorStatus(authorizeConnectorId).idTagAuthorized = false;
       delete this.chargingStation.getConnectorStatus(authorizeConnectorId).authorizeIdTag;
       logger.debug(
-        `${this.chargingStation.logPrefix()} IdTag ${requestPayload.idTag} refused with status ${
+        `${this.chargingStation.logPrefix()} IdTag ${requestPayload.idTag} refused with status '${
           payload.idTagInfo.status
-        } on connector ${authorizeConnectorId}`
+        }' on connector ${authorizeConnectorId}`
       );
     }
   }
@@ -309,14 +313,22 @@ export default class OCPP16ResponseService extends OCPPResponseService {
           requestPayload.meterStart
         );
       this.chargingStation.getBeginEndMeterValues() &&
-        (await this.chargingStation.ocppRequestService.sendTransactionBeginMeterValues(
-          connectorId,
-          payload.transactionId,
-          this.chargingStation.getConnectorStatus(connectorId).transactionBeginMeterValue
+        (await this.chargingStation.ocppRequestService.sendMessageHandler(
+          OCPP16RequestCommand.METER_VALUES,
+          {
+            connectorId,
+            transactionId: payload.transactionId,
+            meterValue:
+              this.chargingStation.getConnectorStatus(connectorId).transactionBeginMeterValue,
+          }
         ));
-      await this.chargingStation.ocppRequestService.sendStatusNotification(
-        connectorId,
-        OCPP16ChargePointStatus.CHARGING
+      await this.chargingStation.ocppRequestService.sendMessageHandler(
+        OCPP16RequestCommand.STATUS_NOTIFICATION,
+        {
+          connectorId,
+          status: OCPP16ChargePointStatus.CHARGING,
+          errorCode: OCPP16ChargePointErrorCode.NO_ERROR,
+        }
       );
       this.chargingStation.getConnectorStatus(connectorId).status =
         OCPP16ChargePointStatus.CHARGING;
@@ -348,9 +360,9 @@ export default class OCPP16ResponseService extends OCPPResponseService {
         this.chargingStation.logPrefix() +
           ' Starting transaction id ' +
           payload.transactionId.toString() +
-          ' REJECTED with status ' +
+          " REJECTED with status '" +
           payload?.idTagInfo?.status +
-          ', idTag ' +
+          "', idTag " +
           requestPayload.idTag
       );
       await this.resetConnectorOnStartTransactionError(connectorId);
@@ -363,9 +375,13 @@ export default class OCPP16ResponseService extends OCPPResponseService {
       this.chargingStation.getConnectorStatus(connectorId).status !==
       OCPP16ChargePointStatus.AVAILABLE
     ) {
-      await this.chargingStation.ocppRequestService.sendStatusNotification(
-        connectorId,
-        OCPP16ChargePointStatus.AVAILABLE
+      await this.chargingStation.ocppRequestService.sendMessageHandler(
+        OCPP16RequestCommand.STATUS_NOTIFICATION,
+        {
+          connectorId,
+          status: OCPP16ChargePointStatus.AVAILABLE,
+          errorCode: OCPP16ChargePointErrorCode.NO_ERROR,
+        }
       );
       this.chargingStation.getConnectorStatus(connectorId).status =
         OCPP16ChargePointStatus.AVAILABLE;
@@ -376,17 +392,9 @@ export default class OCPP16ResponseService extends OCPPResponseService {
     payload: OCPP16StopTransactionResponse,
     requestPayload: StopTransactionRequest
   ): Promise<void> {
-    let transactionConnectorId: number;
-    for (const connectorId of this.chargingStation.connectors.keys()) {
-      if (
-        connectorId > 0 &&
-        this.chargingStation.getConnectorStatus(connectorId)?.transactionId ===
-          requestPayload.transactionId
-      ) {
-        transactionConnectorId = connectorId;
-        break;
-      }
-    }
+    const transactionConnectorId = this.chargingStation.getConnectorIdByTransactionId(
+      requestPayload.transactionId
+    );
     if (!transactionConnectorId) {
       logger.error(
         this.chargingStation.logPrefix() +
@@ -399,29 +407,40 @@ export default class OCPP16ResponseService extends OCPPResponseService {
       this.chargingStation.getBeginEndMeterValues() &&
         !this.chargingStation.getOcppStrictCompliance() &&
         this.chargingStation.getOutOfOrderEndMeterValues() &&
-        (await this.chargingStation.ocppRequestService.sendTransactionEndMeterValues(
-          transactionConnectorId,
-          requestPayload.transactionId,
-          OCPP16ServiceUtils.buildTransactionEndMeterValue(
-            this.chargingStation,
-            transactionConnectorId,
-            requestPayload.meterStop
-          )
+        (await this.chargingStation.ocppRequestService.sendMessageHandler(
+          OCPP16RequestCommand.METER_VALUES,
+          {
+            connectorId: transactionConnectorId,
+            transactionId: requestPayload.transactionId,
+            meterValue: OCPP16ServiceUtils.buildTransactionEndMeterValue(
+              this.chargingStation,
+              transactionConnectorId,
+              requestPayload.meterStop
+            ),
+          }
         ));
       if (
         !this.chargingStation.isChargingStationAvailable() ||
         !this.chargingStation.isConnectorAvailable(transactionConnectorId)
       ) {
-        await this.chargingStation.ocppRequestService.sendStatusNotification(
-          transactionConnectorId,
-          OCPP16ChargePointStatus.UNAVAILABLE
+        await this.chargingStation.ocppRequestService.sendMessageHandler(
+          OCPP16RequestCommand.STATUS_NOTIFICATION,
+          {
+            connectorId: transactionConnectorId,
+            status: OCPP16ChargePointStatus.UNAVAILABLE,
+            errorCode: OCPP16ChargePointErrorCode.NO_ERROR,
+          }
         );
         this.chargingStation.getConnectorStatus(transactionConnectorId).status =
           OCPP16ChargePointStatus.UNAVAILABLE;
       } else {
-        await this.chargingStation.ocppRequestService.sendStatusNotification(
-          transactionConnectorId,
-          OCPP16ChargePointStatus.AVAILABLE
+        await this.chargingStation.ocppRequestService.sendMessageHandler(
+          OCPP16RequestCommand.STATUS_NOTIFICATION,
+          {
+            connectorId: transactionConnectorId,
+            status: OCPP16ChargePointStatus.AVAILABLE,
+            errorCode: OCPP16ChargePointErrorCode.NO_ERROR,
+          }
         );
         this.chargingStation.getConnectorStatus(transactionConnectorId).status =
           OCPP16ChargePointStatus.AVAILABLE;
@@ -444,8 +463,9 @@ export default class OCPP16ResponseService extends OCPPResponseService {
         this.chargingStation.logPrefix() +
           ' Stopping transaction id ' +
           requestPayload.transactionId.toString() +
-          ' REJECTED with status ' +
-          payload.idTagInfo?.status
+          " REJECTED with status '" +
+          payload.idTagInfo?.status +
+          "'"
       );
     }
   }