Use crypto unbiased random integer generator
[e-mobility-charging-stations-simulator.git] / src / charging-station / ocpp / 1.6 / OCPP16ResponseService.ts
index 61d1ffad5f1d5d262ed1bf785b802c29b9965a10..effa3abd0ada1244ba1ec1326e92c66848415dca 100644 (file)
@@ -6,6 +6,7 @@ import { fileURLToPath } from 'url';
 
 import type { JSONSchemaType } from 'ajv';
 
+import { OCPP16ServiceUtils } from './OCPP16ServiceUtils';
 import OCPPError from '../../../exception/OCPPError';
 import type { JsonObject, JsonType } from '../../../types/JsonType';
 import { OCPP16ChargePointErrorCode } from '../../../types/ocpp/1.6/ChargePointErrorCode';
@@ -60,7 +61,6 @@ import Utils from '../../../utils/Utils';
 import type ChargingStation from '../../ChargingStation';
 import { ChargingStationConfigurationUtils } from '../../ChargingStationConfigurationUtils';
 import OCPPResponseService from '../OCPPResponseService';
-import { OCPP16ServiceUtils } from './OCPP16ServiceUtils';
 
 const moduleName = 'OCPP16ResponseService';
 
@@ -569,7 +569,7 @@ export default class OCPP16ResponseService extends OCPPResponseService {
           ' Starting transaction id ' +
           payload.transactionId.toString() +
           " REJECTED with status '" +
-          payload?.idTagInfo?.status +
+          payload.idTagInfo?.status +
           "', idTag '" +
           requestPayload.idTag +
           "'"
@@ -614,72 +614,65 @@ export default class OCPP16ResponseService extends OCPPResponseService {
       );
       return;
     }
-    if (payload.idTagInfo?.status === OCPP16AuthorizationStatus.ACCEPTED) {
-      chargingStation.getBeginEndMeterValues() === true &&
-        chargingStation.getOcppStrictCompliance() === false &&
-        chargingStation.getOutOfOrderEndMeterValues() === true &&
-        (await chargingStation.ocppRequestService.requestHandler<
-          OCPP16MeterValuesRequest,
-          OCPP16MeterValuesResponse
-        >(chargingStation, OCPP16RequestCommand.METER_VALUES, {
-          connectorId: transactionConnectorId,
-          transactionId: requestPayload.transactionId,
-          meterValue: [
-            OCPP16ServiceUtils.buildTransactionEndMeterValue(
-              chargingStation,
-              transactionConnectorId,
-              requestPayload.meterStop
-            ),
-          ],
-        }));
-      if (
-        chargingStation.isChargingStationAvailable() === false ||
-        chargingStation.isConnectorAvailable(transactionConnectorId) === false
-      ) {
-        await chargingStation.ocppRequestService.requestHandler<
-          OCPP16StatusNotificationRequest,
-          OCPP16StatusNotificationResponse
-        >(chargingStation, OCPP16RequestCommand.STATUS_NOTIFICATION, {
-          connectorId: transactionConnectorId,
-          status: OCPP16ChargePointStatus.UNAVAILABLE,
-          errorCode: OCPP16ChargePointErrorCode.NO_ERROR,
-        });
-        chargingStation.getConnectorStatus(transactionConnectorId).status =
-          OCPP16ChargePointStatus.UNAVAILABLE;
-      } else {
-        await chargingStation.ocppRequestService.requestHandler<
-          OCPP16BootNotificationRequest,
-          OCPP16BootNotificationResponse
-        >(chargingStation, OCPP16RequestCommand.STATUS_NOTIFICATION, {
-          connectorId: transactionConnectorId,
-          status: OCPP16ChargePointStatus.AVAILABLE,
-          errorCode: OCPP16ChargePointErrorCode.NO_ERROR,
-        });
-        chargingStation.getConnectorStatus(transactionConnectorId).status =
-          OCPP16ChargePointStatus.AVAILABLE;
-      }
-      if (chargingStation.stationInfo.powerSharedByConnectors) {
-        chargingStation.powerDivider--;
-      }
-      chargingStation.resetConnectorStatus(transactionConnectorId);
-      logger.info(
-        chargingStation.logPrefix() +
-          ' Transaction ' +
-          requestPayload.transactionId.toString() +
-          ' STOPPED on ' +
-          chargingStation.stationInfo.chargingStationId +
-          '#' +
-          transactionConnectorId.toString()
-      );
+    chargingStation.getBeginEndMeterValues() === true &&
+      chargingStation.getOcppStrictCompliance() === false &&
+      chargingStation.getOutOfOrderEndMeterValues() === true &&
+      (await chargingStation.ocppRequestService.requestHandler<
+        OCPP16MeterValuesRequest,
+        OCPP16MeterValuesResponse
+      >(chargingStation, OCPP16RequestCommand.METER_VALUES, {
+        connectorId: transactionConnectorId,
+        transactionId: requestPayload.transactionId,
+        meterValue: [
+          OCPP16ServiceUtils.buildTransactionEndMeterValue(
+            chargingStation,
+            transactionConnectorId,
+            requestPayload.meterStop
+          ),
+        ],
+      }));
+    if (
+      chargingStation.isChargingStationAvailable() === false ||
+      chargingStation.isConnectorAvailable(transactionConnectorId) === false
+    ) {
+      await chargingStation.ocppRequestService.requestHandler<
+        OCPP16StatusNotificationRequest,
+        OCPP16StatusNotificationResponse
+      >(chargingStation, OCPP16RequestCommand.STATUS_NOTIFICATION, {
+        connectorId: transactionConnectorId,
+        status: OCPP16ChargePointStatus.UNAVAILABLE,
+        errorCode: OCPP16ChargePointErrorCode.NO_ERROR,
+      });
+      chargingStation.getConnectorStatus(transactionConnectorId).status =
+        OCPP16ChargePointStatus.UNAVAILABLE;
     } else {
-      logger.warn(
-        chargingStation.logPrefix() +
-          ' Stopping transaction id ' +
-          requestPayload.transactionId.toString() +
-          " REJECTED with status '" +
-          payload.idTagInfo?.status +
-          "'"
-      );
+      await chargingStation.ocppRequestService.requestHandler<
+        OCPP16BootNotificationRequest,
+        OCPP16BootNotificationResponse
+      >(chargingStation, OCPP16RequestCommand.STATUS_NOTIFICATION, {
+        connectorId: transactionConnectorId,
+        status: OCPP16ChargePointStatus.AVAILABLE,
+        errorCode: OCPP16ChargePointErrorCode.NO_ERROR,
+      });
+      chargingStation.getConnectorStatus(transactionConnectorId).status =
+        OCPP16ChargePointStatus.AVAILABLE;
+    }
+    if (chargingStation.stationInfo.powerSharedByConnectors) {
+      chargingStation.powerDivider--;
+    }
+    chargingStation.resetConnectorStatus(transactionConnectorId);
+    const logMsg = `${chargingStation.logPrefix()} Transaction ${requestPayload.transactionId.toString()} STOPPED on ${
+      chargingStation.stationInfo.chargingStationId
+    }#${transactionConnectorId.toString()} with status '${
+      payload.idTagInfo?.status ?? 'undefined'
+    }'`;
+    if (
+      Utils.isNullOrUndefined(payload.idTagInfo) ||
+      payload.idTagInfo?.status === OCPP16AuthorizationStatus.ACCEPTED
+    ) {
+      logger.info(logMsg);
+    } else {
+      logger.warn(logMsg);
     }
   }