From f765beaae7c12b03f9f05aa688d94a64389db785 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Mon, 25 Apr 2022 14:57:49 +0200 Subject: [PATCH] Add support for CS info configuration file change detection MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Taken now into account at simulated reset Signed-off-by: Jérôme Benoit --- src/charging-station/ChargingStation.ts | 36 ++++++++++++++++--------- src/types/ChargingStationInfo.ts | 2 +- src/types/ChargingStationTemplate.ts | 1 + 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/src/charging-station/ChargingStation.ts b/src/charging-station/ChargingStation.ts index 9f3ad1ed..0b61a107 100644 --- a/src/charging-station/ChargingStation.ts +++ b/src/charging-station/ChargingStation.ts @@ -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 { diff --git a/src/types/ChargingStationInfo.ts b/src/types/ChargingStationInfo.ts index 70fda722..1cf27163 100644 --- a/src/types/ChargingStationInfo.ts +++ b/src/types/ChargingStationInfo.ts @@ -1,7 +1,7 @@ import ChargingStationTemplate from './ChargingStationTemplate'; export default interface ChargingStationInfo extends ChargingStationTemplate { - hash?: string; + infoHash?: string; chargingStationId?: string; chargeBoxSerialNumber?: string; chargePointSerialNumber?: string; diff --git a/src/types/ChargingStationTemplate.ts b/src/types/ChargingStationTemplate.ts index e2f2a2bc..7cc8023f 100644 --- a/src/types/ChargingStationTemplate.ts +++ b/src/types/ChargingStationTemplate.ts @@ -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;