Fix power unit in kW handling in charging station template
authorJérôme Benoit <jerome.benoit@sap.com>
Sat, 12 Jun 2021 16:53:31 +0000 (18:53 +0200)
committerJérôme Benoit <jerome.benoit@sap.com>
Sat, 12 Jun 2021 16:53:31 +0000 (18:53 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
src/charging-station/ChargingStation.ts
src/charging-station/OcppError.ts
src/types/ChargingStationInfo.ts

index 503231279b9e00f781f418113629122d06bc9fc3..ac704ea8097dcbf245d7d6f1c358a11275445dad 100644 (file)
@@ -1,6 +1,6 @@
 import { BootNotificationResponse, RegistrationStatus } from '../types/ocpp/Responses';
 import ChargingStationConfiguration, { ConfigurationKey } from '../types/ChargingStationConfiguration';
-import ChargingStationTemplate, { CurrentOutType, VoltageOut } from '../types/ChargingStationTemplate';
+import ChargingStationTemplate, { CurrentOutType, PowerUnits, VoltageOut } from '../types/ChargingStationTemplate';
 import Connectors, { Connector } from '../types/Connectors';
 import { PerformanceObserver, performance } from 'perf_hooks';
 import Requests, { AvailabilityType, BootNotificationRequest, IncomingRequest, IncomingRequestCommand } from '../types/ocpp/Requests';
@@ -395,12 +395,18 @@ export default class ChargingStation {
     } catch (error) {
       FileUtils.handleFileException(this.logPrefix(), 'Template', this.stationTemplateFile, error);
     }
-    const stationInfo: ChargingStationInfo = stationTemplateFromFile || {} as ChargingStationInfo;
+    const stationInfo: ChargingStationInfo = stationTemplateFromFile ?? {} as ChargingStationInfo;
     if (!Utils.isEmptyArray(stationTemplateFromFile.power)) {
       stationTemplateFromFile.power = stationTemplateFromFile.power as number[];
-      stationInfo.maxPower = stationTemplateFromFile.power[Math.floor(Math.random() * stationTemplateFromFile.power.length)];
+      const powerArrayRandomIndex = Math.floor(Math.random() * stationTemplateFromFile.power.length);
+      stationInfo.maxPower = stationTemplateFromFile.powerUnit === PowerUnits.KILO_WATT
+        ? stationTemplateFromFile.power[powerArrayRandomIndex] * 1000
+        : stationTemplateFromFile.power[powerArrayRandomIndex];
     } else {
-      stationInfo.maxPower = stationTemplateFromFile.power as number;
+      stationTemplateFromFile.power = stationTemplateFromFile.power as number;
+      stationInfo.maxPower = stationTemplateFromFile.powerUnit === PowerUnits.KILO_WATT
+        ? (stationTemplateFromFile.power) * 1000
+        : stationTemplateFromFile.power;
     }
     stationInfo.chargingStationId = this.getChargingStationId(stationTemplateFromFile);
     stationInfo.resetTime = stationTemplateFromFile.resetTime ? stationTemplateFromFile.resetTime * 1000 : Constants.CHARGING_STATION_DEFAULT_RESET_TIME;
index ae86c0a160138657b193aa413258349874570ca5..6780b60bcc032bc8f3470069b0150836c4d42dcf 100644 (file)
@@ -7,9 +7,9 @@ export default class OCPPError extends Error {
   constructor(code: string, message: string, details?: any) {
     super(message);
 
-    this.code = code || ErrorType.GENERIC_ERROR;
-    this.message = message || '';
-    this.details = details || {};
+    this.code = code ?? ErrorType.GENERIC_ERROR;
+    this.message = message ?? '';
+    this.details = details ?? {};
 
     Object.setPrototypeOf(this, OCPPError.prototype); // For instanceof
 
index 033dcb513fcb4d6a27d40241500e528e9ce17ab8..732bf00ade5863a1bcb27fff38b1f7e60709b004 100644 (file)
@@ -3,6 +3,6 @@ import ChargingStationTemplate from './ChargingStationTemplate';
 export default interface ChargingStationInfo extends ChargingStationTemplate {
   chargingStationId?: string;
   chargeBoxSerialNumber?: string;
-  maxPower?: number;
+  maxPower?: number; // Always in Watt
   powerDivider?: number;
 }