Combined PR (#197)
[e-mobility-charging-stations-simulator.git] / src / charging-station / ChargingStationUtils.ts
index 28f38b4619738e81ba07708dc5c5676bf93017e7..24556120b4b9db9862dfae478ce3fcb468e2a309 100644 (file)
@@ -5,9 +5,10 @@ import { fileURLToPath } from 'url';
 import moment from 'moment';
 
 import BaseError from '../exception/BaseError';
-import type ChargingStationInfo from '../types/ChargingStationInfo';
-import ChargingStationTemplate, {
+import type { ChargingStationInfo } from '../types/ChargingStationInfo';
+import {
   AmpereUnits,
+  type ChargingStationTemplate,
   CurrentType,
   Voltage,
 } from '../types/ChargingStationTemplate';
@@ -17,7 +18,7 @@ import type { ChargingProfile, ChargingSchedulePeriod } from '../types/ocpp/Char
 import { StandardParametersKey } from '../types/ocpp/Configuration';
 import { MeterValueMeasurand, MeterValuePhase } from '../types/ocpp/MeterValues';
 import {
-  BootNotificationRequest,
+  type BootNotificationRequest,
   IncomingRequestCommand,
   RequestCommand,
 } from '../types/ocpp/Requests';
@@ -108,16 +109,13 @@ export class ChargingStationUtils {
     }
   }
 
-  public static getConfiguredNumberOfConnectors(
-    index: number,
-    stationTemplate: ChargingStationTemplate
-  ): number {
+  public static getConfiguredNumberOfConnectors(stationTemplate: ChargingStationTemplate): number {
     let configuredMaxConnectors: number;
-    if (!Utils.isEmptyArray(stationTemplate.numberOfConnectors)) {
+    if (Utils.isEmptyArray(stationTemplate.numberOfConnectors) === false) {
       const numberOfConnectors = stationTemplate.numberOfConnectors as number[];
-      // Distribute evenly the number of connectors
-      configuredMaxConnectors = numberOfConnectors[(index - 1) % numberOfConnectors.length];
-    } else if (!Utils.isUndefined(stationTemplate.numberOfConnectors)) {
+      configuredMaxConnectors =
+        numberOfConnectors[Math.floor(Utils.secureRandom() * numberOfConnectors.length)];
+    } else if (Utils.isUndefined(stationTemplate.numberOfConnectors) === false) {
       configuredMaxConnectors = stationTemplate.numberOfConnectors as number;
     } else {
       configuredMaxConnectors = stationTemplate?.Connectors[0]
@@ -416,7 +414,7 @@ export class ChargingStationUtils {
     phase?: MeterValuePhase
   ): SampledValueTemplate | undefined {
     const onPhaseStr = phase ? `on phase ${phase} ` : '';
-    if (!Constants.SUPPORTED_MEASURANDS.includes(measurand)) {
+    if (Constants.SUPPORTED_MEASURANDS.includes(measurand) === false) {
       logger.warn(
         `${chargingStation.logPrefix()} Trying to get unsupported MeterValues measurand '${measurand}' ${onPhaseStr}in template on connectorId ${connectorId}`
       );
@@ -444,10 +442,10 @@ export class ChargingStationUtils {
       index++
     ) {
       if (
-        !Constants.SUPPORTED_MEASURANDS.includes(
+        Constants.SUPPORTED_MEASURANDS.includes(
           sampledValueTemplates[index]?.measurand ??
             MeterValueMeasurand.ENERGY_ACTIVE_IMPORT_REGISTER
-        )
+        ) === false
       ) {
         logger.warn(
           `${chargingStation.logPrefix()} Unsupported MeterValues measurand '${measurand}' ${onPhaseStr}in template on connectorId ${connectorId}`
@@ -459,7 +457,7 @@ export class ChargingStationUtils {
         ChargingStationConfigurationUtils.getConfigurationKey(
           chargingStation,
           StandardParametersKey.MeterValuesSampledData
-        )?.value.includes(measurand)
+        )?.value.includes(measurand) === true
       ) {
         return sampledValueTemplates[index];
       } else if (
@@ -469,7 +467,7 @@ export class ChargingStationUtils {
         ChargingStationConfigurationUtils.getConfigurationKey(
           chargingStation,
           StandardParametersKey.MeterValuesSampledData
-        )?.value.includes(measurand)
+        )?.value.includes(measurand) === true
       ) {
         return sampledValueTemplates[index];
       } else if (
@@ -506,9 +504,15 @@ export class ChargingStationUtils {
     chargingStation: ChargingStation
   ): boolean {
     const isRequestCommand = Object.values(RequestCommand).includes(command);
-    if (isRequestCommand && !chargingStation.stationInfo?.commandsSupport?.outgoingCommands) {
+    if (
+      isRequestCommand === true &&
+      !chargingStation.stationInfo?.commandsSupport?.outgoingCommands
+    ) {
       return true;
-    } else if (isRequestCommand && chargingStation.stationInfo?.commandsSupport?.outgoingCommands) {
+    } else if (
+      isRequestCommand === true &&
+      chargingStation.stationInfo?.commandsSupport?.outgoingCommands
+    ) {
       return chargingStation.stationInfo?.commandsSupport?.outgoingCommands[command] ?? false;
     }
     logger.error(`${chargingStation.logPrefix()} Unknown outgoing OCPP command '${command}'`);
@@ -521,12 +525,12 @@ export class ChargingStationUtils {
   ): boolean {
     const isIncomingRequestCommand = Object.values(IncomingRequestCommand).includes(command);
     if (
-      isIncomingRequestCommand &&
+      isIncomingRequestCommand === true &&
       !chargingStation.stationInfo?.commandsSupport?.incomingCommands
     ) {
       return true;
     } else if (
-      isIncomingRequestCommand &&
+      isIncomingRequestCommand === true &&
       chargingStation.stationInfo?.commandsSupport?.incomingCommands
     ) {
       return chargingStation.stationInfo?.commandsSupport?.incomingCommands[command] ?? false;