feat: add initial support get composite schedule OCPP 1.6 command
[e-mobility-charging-stations-simulator.git] / src / charging-station / ocpp / 1.6 / OCPP16ResponseService.ts
index 958f1a5d5b47c038a521e8339e4abaf4d82173fa..68e9f7c66cae6febf94318a5a5523ef5ee4d6e3d 100644 (file)
@@ -2,7 +2,7 @@
 
 import type { JSONSchemaType } from 'ajv';
 
-import { OCPP16ServiceUtils } from './OCPP16ServiceUtils';
+import { type ChargingStation, ChargingStationConfigurationUtils } from '../../../charging-station';
 import { OCPPError } from '../../../exception';
 import {
   type ChangeAvailabilityResponse,
@@ -24,6 +24,7 @@ import {
   type OCPP16DataTransferResponse,
   type OCPP16DiagnosticsStatusNotificationResponse,
   type OCPP16FirmwareStatusNotificationResponse,
+  type OCPP16GetCompositeScheduleResponse,
   type OCPP16HeartbeatResponse,
   OCPP16IncomingRequestCommand,
   type OCPP16MeterValuesRequest,
@@ -44,12 +45,8 @@ import {
   type SetChargingProfileResponse,
   type UnlockConnectorResponse,
 } from '../../../types';
-import { Constants } from '../../../utils/Constants';
-import { logger } from '../../../utils/Logger';
-import { Utils } from '../../../utils/Utils';
-import type { ChargingStation } from '../../ChargingStation';
-import { ChargingStationConfigurationUtils } from '../../ChargingStationConfigurationUtils';
-import { OCPPResponseService } from '../OCPPResponseService';
+import { Constants, Utils, logger } from '../../../utils';
+import { OCPP16ServiceUtils, OCPPResponseService } from '../internal';
 
 const moduleName = 'OCPP16ResponseService';
 
@@ -63,9 +60,9 @@ export class OCPP16ResponseService extends OCPPResponseService {
   private jsonSchemas: Map<OCPP16RequestCommand, JSONSchemaType<JsonObject>>;
 
   public constructor() {
-    if (new.target?.name === moduleName) {
-      throw new TypeError(`Cannot construct ${new.target?.name} instances directly`);
-    }
+    // if (new.target?.name === moduleName) {
+    //   throw new TypeError(`Cannot construct ${new.target?.name} instances directly`);
+    // }
     super(OCPPVersion.VERSION_16);
     this.responseHandlers = new Map<OCPP16RequestCommand, ResponseHandler>([
       [OCPP16RequestCommand.BOOT_NOTIFICATION, this.handleResponseBootNotification.bind(this)],
@@ -210,6 +207,14 @@ export class OCPP16ResponseService extends OCPPResponseService {
           'constructor'
         ),
       ],
+      [
+        OCPP16IncomingRequestCommand.GET_COMPOSITE_SCHEDULE,
+        OCPP16ServiceUtils.parseJsonSchemaFile<OCPP16GetCompositeScheduleResponse>(
+          '../../../assets/json-schemas/ocpp/1.6/GetCompositeScheduleResponse.json',
+          moduleName,
+          'constructor'
+        ),
+      ],
       [
         OCPP16IncomingRequestCommand.SET_CHARGING_PROFILE,
         OCPP16ServiceUtils.parseJsonSchemaFile<SetChargingProfileResponse>(
@@ -367,9 +372,7 @@ export class OCPP16ResponseService extends OCPPResponseService {
         { visible: false },
         { overwrite: true, save: true }
       );
-      chargingStation.heartbeatSetInterval
-        ? chargingStation.restartHeartbeat()
-        : chargingStation.startHeartbeat();
+      OCPP16ServiceUtils.startHeartbeatInterval(chargingStation, payload.interval);
     }
     if (Object.values(RegistrationStatusEnumType).includes(payload.status)) {
       const logMsg = `${chargingStation.logPrefix()} Charging station in '${
@@ -447,7 +450,7 @@ export class OCPP16ResponseService extends OCPPResponseService {
       chargingStation.getConnectorStatus(connectorId)?.transactionRemoteStarted === true &&
       chargingStation.getAuthorizeRemoteTxRequests() === true &&
       chargingStation.getLocalAuthListEnabled() === true &&
-      chargingStation.hasAuthorizedTags() &&
+      chargingStation.hasIdTags() &&
       chargingStation.getConnectorStatus(connectorId)?.idTagLocalAuthorized === false
     ) {
       logger.error(
@@ -510,8 +513,8 @@ export class OCPP16ResponseService extends OCPPResponseService {
     }
     if (
       chargingStation.getConnectorStatus(connectorId)?.status !==
-        OCPP16ChargePointStatus.AVAILABLE &&
-      chargingStation.getConnectorStatus(connectorId)?.status !== OCPP16ChargePointStatus.PREPARING
+        OCPP16ChargePointStatus.Available &&
+      chargingStation.getConnectorStatus(connectorId)?.status !== OCPP16ChargePointStatus.Preparing
     ) {
       logger.error(
         `${chargingStation.logPrefix()} Trying to start a transaction on connector ${connectorId.toString()} with status ${
@@ -556,10 +559,10 @@ export class OCPP16ResponseService extends OCPPResponseService {
         OCPP16StatusNotificationResponse
       >(chargingStation, OCPP16RequestCommand.STATUS_NOTIFICATION, {
         connectorId,
-        status: OCPP16ChargePointStatus.CHARGING,
+        status: OCPP16ChargePointStatus.Charging,
         errorCode: OCPP16ChargePointErrorCode.NO_ERROR,
       });
-      chargingStation.getConnectorStatus(connectorId).status = OCPP16ChargePointStatus.CHARGING;
+      chargingStation.getConnectorStatus(connectorId).status = OCPP16ChargePointStatus.Charging;
       logger.info(
         `${chargingStation.logPrefix()} Transaction ${payload.transactionId.toString()} STARTED on ${
           chargingStation.stationInfo.chargingStationId
@@ -595,17 +598,17 @@ export class OCPP16ResponseService extends OCPPResponseService {
   ): Promise<void> {
     chargingStation.resetConnectorStatus(connectorId);
     if (
-      chargingStation.getConnectorStatus(connectorId)?.status !== OCPP16ChargePointStatus.AVAILABLE
+      chargingStation.getConnectorStatus(connectorId)?.status !== OCPP16ChargePointStatus.Available
     ) {
       await chargingStation.ocppRequestService.requestHandler<
         OCPP16StatusNotificationRequest,
         OCPP16StatusNotificationResponse
       >(chargingStation, OCPP16RequestCommand.STATUS_NOTIFICATION, {
         connectorId,
-        status: OCPP16ChargePointStatus.AVAILABLE,
+        status: OCPP16ChargePointStatus.Available,
         errorCode: OCPP16ChargePointErrorCode.NO_ERROR,
       });
-      chargingStation.getConnectorStatus(connectorId).status = OCPP16ChargePointStatus.AVAILABLE;
+      chargingStation.getConnectorStatus(connectorId).status = OCPP16ChargePointStatus.Available;
     }
   }
 
@@ -649,22 +652,22 @@ export class OCPP16ResponseService extends OCPPResponseService {
         OCPP16StatusNotificationResponse
       >(chargingStation, OCPP16RequestCommand.STATUS_NOTIFICATION, {
         connectorId: transactionConnectorId,
-        status: OCPP16ChargePointStatus.UNAVAILABLE,
+        status: OCPP16ChargePointStatus.Unavailable,
         errorCode: OCPP16ChargePointErrorCode.NO_ERROR,
       });
       chargingStation.getConnectorStatus(transactionConnectorId).status =
-        OCPP16ChargePointStatus.UNAVAILABLE;
+        OCPP16ChargePointStatus.Unavailable;
     } else {
       await chargingStation.ocppRequestService.requestHandler<
         OCPP16BootNotificationRequest,
         OCPP16BootNotificationResponse
       >(chargingStation, OCPP16RequestCommand.STATUS_NOTIFICATION, {
         connectorId: transactionConnectorId,
-        status: OCPP16ChargePointStatus.AVAILABLE,
+        status: OCPP16ChargePointStatus.Available,
         errorCode: OCPP16ChargePointErrorCode.NO_ERROR,
       });
       chargingStation.getConnectorStatus(transactionConnectorId).status =
-        OCPP16ChargePointStatus.AVAILABLE;
+        OCPP16ChargePointStatus.Available;
     }
     if (chargingStation.stationInfo.powerSharedByConnectors) {
       chargingStation.powerDivider--;