Add status notification support to trigger message OCPP command
[e-mobility-charging-stations-simulator.git] / src / charging-station / ocpp / 1.6 / OCPP16ResponseService.ts
index 9eb82d2aca41d920eac7261553b975e2fe919dd5..f2a08a1656b339f79ba5830b62cb2d96c575ace5 100644 (file)
@@ -1,26 +1,28 @@
 // Partial Copyright Jerome Benoit. 2021. All Rights Reserved.
 
 import {
-  AuthorizeRequest,
   OCPP16AuthorizationStatus,
+  OCPP16AuthorizeRequest,
   OCPP16AuthorizeResponse,
+  OCPP16StartTransactionRequest,
   OCPP16StartTransactionResponse,
+  OCPP16StopTransactionRequest,
   OCPP16StopTransactionResponse,
-  StartTransactionRequest,
-  StopTransactionRequest,
 } from '../../../types/ocpp/1.6/Transaction';
 import {
-  HeartbeatRequest,
+  OCPP16BootNotificationRequest,
   OCPP16RequestCommand,
-  StatusNotificationRequest,
+  OCPP16StatusNotificationRequest,
 } from '../../../types/ocpp/1.6/Requests';
 import {
-  HeartbeatResponse,
   OCPP16BootNotificationResponse,
   OCPP16RegistrationStatus,
-  StatusNotificationResponse,
+  OCPP16StatusNotificationResponse,
 } from '../../../types/ocpp/1.6/Responses';
-import { MeterValuesRequest, MeterValuesResponse } from '../../../types/ocpp/1.6/MeterValues';
+import {
+  OCPP16MeterValuesRequest,
+  OCPP16MeterValuesResponse,
+} from '../../../types/ocpp/1.6/MeterValues';
 
 import type ChargingStation from '../../ChargingStation';
 import { ErrorType } from '../../../types/ocpp/ErrorType';
@@ -56,9 +58,9 @@ export default class OCPP16ResponseService extends OCPPResponseService {
     ]);
   }
 
-  public async handleResponse(
+  public async responseHandler(
     commandName: OCPP16RequestCommand,
-    payload: JsonType | string,
+    payload: JsonType,
     requestPayload: JsonType
   ): Promise<void> {
     if (
@@ -111,7 +113,7 @@ export default class OCPP16ResponseService extends OCPPResponseService {
       this.chargingStation.addConfigurationKey(
         OCPP16StandardParametersKey.HeartbeatInterval,
         payload.interval.toString(),
-        { visible: false, reboot: false },
+        { visible: false },
         { overwrite: true, save: true }
       );
       this.chargingStation.heartbeatSetInterval
@@ -134,21 +136,12 @@ export default class OCPP16ResponseService extends OCPPResponseService {
     }
   }
 
-  private handleResponseHeartbeat(
-    payload: HeartbeatResponse,
-    requestPayload: HeartbeatRequest
-  ): void {
-    logger.debug(
-      this.chargingStation.logPrefix() +
-        ' Heartbeat response received: %j to Heartbeat request: %j',
-      payload,
-      requestPayload
-    );
-  }
+  // eslint-disable-next-line @typescript-eslint/no-empty-function
+  private handleResponseHeartbeat(): void {}
 
   private handleResponseAuthorize(
     payload: OCPP16AuthorizeResponse,
-    requestPayload: AuthorizeRequest
+    requestPayload: OCPP16AuthorizeRequest
   ): void {
     let authorizeConnectorId: number;
     for (const connectorId of this.chargingStation.connectors.keys()) {
@@ -181,7 +174,7 @@ export default class OCPP16ResponseService extends OCPPResponseService {
 
   private async handleResponseStartTransaction(
     payload: OCPP16StartTransactionResponse,
-    requestPayload: StartTransactionRequest
+    requestPayload: OCPP16StartTransactionRequest
   ): Promise<void> {
     const connectorId = requestPayload.connectorId;
 
@@ -313,23 +306,23 @@ export default class OCPP16ResponseService extends OCPPResponseService {
           requestPayload.meterStart
         );
       this.chargingStation.getBeginEndMeterValues() &&
-        (await this.chargingStation.ocppRequestService.sendMessageHandler(
-          OCPP16RequestCommand.METER_VALUES,
-          {
-            connectorId,
-            transactionId: payload.transactionId,
-            meterValue:
-              this.chargingStation.getConnectorStatus(connectorId).transactionBeginMeterValue,
-          }
-        ));
-      await this.chargingStation.ocppRequestService.sendMessageHandler(
-        OCPP16RequestCommand.STATUS_NOTIFICATION,
-        {
+        (await this.chargingStation.ocppRequestService.requestHandler<
+          OCPP16MeterValuesRequest,
+          OCPP16MeterValuesResponse
+        >(OCPP16RequestCommand.METER_VALUES, {
           connectorId,
-          status: OCPP16ChargePointStatus.CHARGING,
-          errorCode: OCPP16ChargePointErrorCode.NO_ERROR,
-        }
-      );
+          transactionId: payload.transactionId,
+          meterValue:
+            this.chargingStation.getConnectorStatus(connectorId).transactionBeginMeterValue,
+        }));
+      await this.chargingStation.ocppRequestService.requestHandler<
+        OCPP16StatusNotificationRequest,
+        OCPP16StatusNotificationResponse
+      >(OCPP16RequestCommand.STATUS_NOTIFICATION, {
+        connectorId,
+        status: OCPP16ChargePointStatus.CHARGING,
+        errorCode: OCPP16ChargePointErrorCode.NO_ERROR,
+      });
       this.chargingStation.getConnectorStatus(connectorId).status =
         OCPP16ChargePointStatus.CHARGING;
       logger.info(
@@ -375,14 +368,14 @@ export default class OCPP16ResponseService extends OCPPResponseService {
       this.chargingStation.getConnectorStatus(connectorId).status !==
       OCPP16ChargePointStatus.AVAILABLE
     ) {
-      await this.chargingStation.ocppRequestService.sendMessageHandler(
-        OCPP16RequestCommand.STATUS_NOTIFICATION,
-        {
-          connectorId,
-          status: OCPP16ChargePointStatus.AVAILABLE,
-          errorCode: OCPP16ChargePointErrorCode.NO_ERROR,
-        }
-      );
+      await this.chargingStation.ocppRequestService.requestHandler<
+        OCPP16StatusNotificationRequest,
+        OCPP16StatusNotificationResponse
+      >(OCPP16RequestCommand.STATUS_NOTIFICATION, {
+        connectorId,
+        status: OCPP16ChargePointStatus.AVAILABLE,
+        errorCode: OCPP16ChargePointErrorCode.NO_ERROR,
+      });
       this.chargingStation.getConnectorStatus(connectorId).status =
         OCPP16ChargePointStatus.AVAILABLE;
     }
@@ -390,7 +383,7 @@ export default class OCPP16ResponseService extends OCPPResponseService {
 
   private async handleResponseStopTransaction(
     payload: OCPP16StopTransactionResponse,
-    requestPayload: StopTransactionRequest
+    requestPayload: OCPP16StopTransactionRequest
   ): Promise<void> {
     const transactionConnectorId = this.chargingStation.getConnectorIdByTransactionId(
       requestPayload.transactionId
@@ -407,41 +400,41 @@ export default class OCPP16ResponseService extends OCPPResponseService {
       this.chargingStation.getBeginEndMeterValues() &&
         !this.chargingStation.getOcppStrictCompliance() &&
         this.chargingStation.getOutOfOrderEndMeterValues() &&
-        (await this.chargingStation.ocppRequestService.sendMessageHandler(
-          OCPP16RequestCommand.METER_VALUES,
-          {
-            connectorId: transactionConnectorId,
-            transactionId: requestPayload.transactionId,
-            meterValue: OCPP16ServiceUtils.buildTransactionEndMeterValue(
-              this.chargingStation,
-              transactionConnectorId,
-              requestPayload.meterStop
-            ),
-          }
-        ));
+        (await this.chargingStation.ocppRequestService.requestHandler<
+          OCPP16MeterValuesRequest,
+          OCPP16MeterValuesResponse
+        >(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.sendMessageHandler(
-          OCPP16RequestCommand.STATUS_NOTIFICATION,
-          {
-            connectorId: transactionConnectorId,
-            status: OCPP16ChargePointStatus.UNAVAILABLE,
-            errorCode: OCPP16ChargePointErrorCode.NO_ERROR,
-          }
-        );
+        await this.chargingStation.ocppRequestService.requestHandler<
+          OCPP16StatusNotificationRequest,
+          OCPP16StatusNotificationResponse
+        >(OCPP16RequestCommand.STATUS_NOTIFICATION, {
+          connectorId: transactionConnectorId,
+          status: OCPP16ChargePointStatus.UNAVAILABLE,
+          errorCode: OCPP16ChargePointErrorCode.NO_ERROR,
+        });
         this.chargingStation.getConnectorStatus(transactionConnectorId).status =
           OCPP16ChargePointStatus.UNAVAILABLE;
       } else {
-        await this.chargingStation.ocppRequestService.sendMessageHandler(
-          OCPP16RequestCommand.STATUS_NOTIFICATION,
-          {
-            connectorId: transactionConnectorId,
-            status: OCPP16ChargePointStatus.AVAILABLE,
-            errorCode: OCPP16ChargePointErrorCode.NO_ERROR,
-          }
-        );
+        await this.chargingStation.ocppRequestService.requestHandler<
+          OCPP16BootNotificationRequest,
+          OCPP16BootNotificationResponse
+        >(OCPP16RequestCommand.STATUS_NOTIFICATION, {
+          connectorId: transactionConnectorId,
+          status: OCPP16ChargePointStatus.AVAILABLE,
+          errorCode: OCPP16ChargePointErrorCode.NO_ERROR,
+        });
         this.chargingStation.getConnectorStatus(transactionConnectorId).status =
           OCPP16ChargePointStatus.AVAILABLE;
       }
@@ -470,27 +463,9 @@ export default class OCPP16ResponseService extends OCPPResponseService {
     }
   }
 
-  private handleResponseStatusNotification(
-    payload: StatusNotificationRequest,
-    requestPayload: StatusNotificationResponse
-  ): void {
-    logger.debug(
-      this.chargingStation.logPrefix() +
-        ' Status notification response received: %j to StatusNotification request: %j',
-      payload,
-      requestPayload
-    );
-  }
+  // eslint-disable-next-line @typescript-eslint/no-empty-function
+  private handleResponseStatusNotification(): void {}
 
-  private handleResponseMeterValues(
-    payload: MeterValuesRequest,
-    requestPayload: MeterValuesResponse
-  ): void {
-    logger.debug(
-      this.chargingStation.logPrefix() +
-        ' MeterValues response received: %j to MeterValues request: %j',
-      payload,
-      requestPayload
-    );
-  }
+  // eslint-disable-next-line @typescript-eslint/no-empty-function
+  private handleResponseMeterValues(): void {}
 }