Add support for CS info configuration file change detection
authorJérôme Benoit <jerome.benoit@sap.com>
Mon, 25 Apr 2022 12:57:49 +0000 (14:57 +0200)
committerJérôme Benoit <jerome.benoit@sap.com>
Mon, 25 Apr 2022 12:57:49 +0000 (14:57 +0200)
Taken now into account at simulated reset

Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
src/charging-station/ChargingStation.ts
src/types/ChargingStationInfo.ts
src/types/ChargingStationTemplate.ts

index 9f3ad1ed20af7a26b4b566bc49d2c9ce031974e0..0b61a107614d59acd7f90efe9958510ca92a9881 100644 (file)
@@ -895,8 +895,14 @@ export default class ChargingStation {
     try {
       const measureId = `${FileType.ChargingStationTemplate} read`;
       const beginId = PerformanceStatistics.beginMeasure(measureId);
-      template = JSON.parse(fs.readFileSync(this.templateFile, 'utf8')) as ChargingStationTemplate;
+      template =
+        (JSON.parse(fs.readFileSync(this.templateFile, 'utf8')) as ChargingStationTemplate) ??
+        ({} as ChargingStationTemplate);
       PerformanceStatistics.endMeasure(measureId, beginId);
+      template.templateHash = crypto
+        .createHash(Constants.DEFAULT_HASH_ALGORITHM)
+        .update(JSON.stringify(template))
+        .digest('hex');
     } catch (error) {
       FileUtils.handleFileException(
         this.logPrefix(),
@@ -943,12 +949,7 @@ export default class ChargingStation {
   }
 
   private getStationInfoFromTemplate(): ChargingStationInfo {
-    const stationInfo: ChargingStationInfo =
-      this.getTemplateFromFile() ?? ({} as ChargingStationInfo);
-    stationInfo.hash = crypto
-      .createHash(Constants.DEFAULT_HASH_ALGORITHM)
-      .update(JSON.stringify(stationInfo))
-      .digest('hex');
+    const stationInfo: ChargingStationInfo = this.getTemplateFromFile();
     const chargingStationId = this.getChargingStationId(stationInfo);
     // Deprecation template keys section
     this.warnDeprecatedTemplateKey(
@@ -982,8 +983,13 @@ export default class ChargingStation {
     return stationInfo;
   }
 
-  private getStationInfoFromFile(): ChargingStationInfo | null {
-    return this.getConfigurationFromFile()?.stationInfo ?? null;
+  private getStationInfoFromFile(): ChargingStationInfo {
+    const stationInfo = this.getConfigurationFromFile()?.stationInfo ?? ({} as ChargingStationInfo);
+    stationInfo.infoHash = crypto
+      .createHash(Constants.DEFAULT_HASH_ALGORITHM)
+      .update(JSON.stringify(stationInfo))
+      .digest('hex');
+    return stationInfo;
   }
 
   private getStationInfo(): ChargingStationInfo {
@@ -996,11 +1002,17 @@ export default class ChargingStation {
       this.hashId + '.json'
     );
     const stationInfoFromFile: ChargingStationInfo = this.getStationInfoFromFile();
-    if (stationInfoFromFile?.hash === stationInfoFromTemplate.hash) {
+    // Priority: charging stations info from template > charging station info from configuration file > charging station info attribute
+    if (stationInfoFromFile?.templateHash === stationInfoFromTemplate.templateHash) {
       return stationInfoFromFile;
+    } else if (stationInfoFromFile?.templateHash !== stationInfoFromTemplate.templateHash) {
+      this.createSerialNumber(stationInfoFromTemplate, stationInfoFromFile);
+      return stationInfoFromTemplate;
+    }
+    if (this.stationInfo?.infoHash === stationInfoFromFile?.infoHash) {
+      return this.stationInfo;
     }
-    this.createSerialNumber(stationInfoFromTemplate, stationInfoFromFile);
-    return stationInfoFromTemplate;
+    return stationInfoFromFile;
   }
 
   private saveStationInfo(): void {
index 70fda722f1a0891c489a3099769909296e78aa61..1cf27163a77588a8085d1ba38cd56b134ac9dfd2 100644 (file)
@@ -1,7 +1,7 @@
 import ChargingStationTemplate from './ChargingStationTemplate';
 
 export default interface ChargingStationInfo extends ChargingStationTemplate {
-  hash?: string;
+  infoHash?: string;
   chargingStationId?: string;
   chargeBoxSerialNumber?: string;
   chargePointSerialNumber?: string;
index e2f2a2bcfa79cab93ba31661687b8642fb43ea28..7cc8023f8a729acb6160d2fd089a37285d8d2414 100644 (file)
@@ -44,6 +44,7 @@ export interface AutomaticTransactionGenerator {
 export type WsOptions = ClientOptions & ClientRequestArgs;
 
 export default interface ChargingStationTemplate {
+  templateHash?: string;
   supervisionUrls?: string | string[];
   supervisionUrlOcppConfiguration?: boolean;
   supervisionUrlOcppKey?: string;