Better handling of missing serial number prefix in template
[e-mobility-charging-stations-simulator.git] / src / charging-station / ChargingStation.ts
index 09cfa74f42e4d13d13245981b55e7a80d31d4921..bd3e9c9cf998b26acbf0fef91b9e2cdd6f751ea9 100644 (file)
@@ -625,16 +625,10 @@ export default class ChargingStation {
     },
     params: { overwrite?: boolean; save?: boolean } = { overwrite: false, save: false }
   ): void {
-    if (!options || Utils.isEmptyObject(options)) {
-      options = {
-        readonly: false,
-        visible: true,
-        reboot: false,
-      };
-    }
-    const readonly = options.readonly;
-    const visible = options.visible;
-    const reboot = options.reboot;
+    options = options ?? ({} as { readonly?: boolean; visible?: boolean; reboot?: boolean });
+    options.readonly = options?.readonly ?? false;
+    options.visible = options?.visible ?? true;
+    options.reboot = options?.reboot ?? false;
     let keyFound = this.getConfigurationKey(key);
     if (keyFound && params?.overwrite) {
       this.deleteConfigurationKey(keyFound.key, { save: false });
@@ -643,10 +637,10 @@ export default class ChargingStation {
     if (!keyFound) {
       this.configuration.configurationKey.push({
         key,
-        readonly,
+        readonly: options.readonly,
         value,
-        visible,
-        reboot,
+        visible: options.visible,
+        reboot: options.reboot,
       });
       params?.save && this.saveConfiguration();
     } else {
@@ -759,6 +753,19 @@ export default class ChargingStation {
           idSuffix;
   }
 
+  private getRandomSerialNumberSuffix(params?: {
+    randomBytesLength?: number;
+    upperCase?: boolean;
+  }): string {
+    const randomSerialNumberSuffix = crypto
+      .randomBytes(params?.randomBytesLength ?? 16)
+      .toString('hex');
+    if (params?.upperCase) {
+      return randomSerialNumberSuffix.toUpperCase();
+    }
+    return randomSerialNumberSuffix;
+  }
+
   private buildStationInfo(): ChargingStationInfo {
     let stationTemplateFromFile: ChargingStationTemplate;
     try {
@@ -784,6 +791,14 @@ export default class ChargingStation {
     );
     this.convertDeprecatedTemplateKey(stationTemplateFromFile, 'supervisionUrl', 'supervisionUrls');
     const stationInfo: ChargingStationInfo = stationTemplateFromFile ?? ({} as ChargingStationInfo);
+    stationInfo.chargePointSerialNumber =
+      stationTemplateFromFile?.chargePointSerialNumberPrefix &&
+      stationTemplateFromFile.chargePointSerialNumberPrefix;
+    delete stationInfo.chargePointSerialNumberPrefix;
+    stationInfo.chargeBoxSerialNumber =
+      stationTemplateFromFile?.chargeBoxSerialNumberPrefix &&
+      stationTemplateFromFile.chargeBoxSerialNumberPrefix;
+    delete stationInfo.chargeBoxSerialNumberPrefix;
     stationInfo.wsOptions = stationTemplateFromFile?.wsOptions ?? {};
     if (!Utils.isEmptyArray(stationTemplateFromFile.power)) {
       stationTemplateFromFile.power = stationTemplateFromFile.power as number[];
@@ -831,8 +846,11 @@ export default class ChargingStation {
     this.bootNotificationRequest = {
       chargePointModel: this.stationInfo.chargePointModel,
       chargePointVendor: this.stationInfo.chargePointVendor,
-      ...(!Utils.isUndefined(this.stationInfo.chargeBoxSerialNumberPrefix) && {
-        chargeBoxSerialNumber: this.stationInfo.chargeBoxSerialNumberPrefix,
+      ...(!Utils.isUndefined(this.stationInfo.chargeBoxSerialNumber) && {
+        chargeBoxSerialNumber: this.stationInfo.chargeBoxSerialNumber,
+      }),
+      ...(!Utils.isUndefined(this.stationInfo.chargePointSerialNumber) && {
+        chargePointSerialNumber: this.stationInfo.chargePointSerialNumber,
       }),
       ...(!Utils.isUndefined(this.stationInfo.firmwareVersion) && {
         firmwareVersion: this.stationInfo.firmwareVersion,
@@ -846,7 +864,6 @@ export default class ChargingStation {
         meterType: this.stationInfo.meterType,
       }),
     };
-
     this.hashId = crypto
       .createHash(Constants.DEFAULT_HASH_ALGORITHM)
       .update(JSON.stringify(this.bootNotificationRequest) + this.stationInfo.chargingStationId)