- switch (section) {
- case Section.ocppConfiguration:
- configurationData.configurationKey = this.ocppConfiguration.configurationKey;
- break;
- case Section.stationInfo:
- if (configurationData?.stationInfo?.infoHash === this.stationInfo?.infoHash) {
- logger.debug(
- `${this.logPrefix()} Not saving unchanged charging station information to configuration file ${
- this.configurationFile
- }`
- );
- return;
- }
- configurationData.stationInfo = this.stationInfo;
- break;
- default:
- configurationData.configurationKey = this.ocppConfiguration.configurationKey;
- if (configurationData?.stationInfo?.infoHash !== this.stationInfo?.infoHash) {
- configurationData.stationInfo = this.stationInfo;
- }
- break;
+ const configurationData: ChargingStationConfiguration =
+ this.getConfigurationFromFile() ?? {};
+ this.ocppConfiguration?.configurationKey &&
+ (configurationData.configurationKey = this.ocppConfiguration.configurationKey);
+ this.stationInfo && (configurationData.stationInfo = this.stationInfo);
+ delete configurationData.configurationHash;
+ const configurationHash = crypto
+ .createHash(Constants.DEFAULT_HASH_ALGORITHM)
+ .update(JSON.stringify(configurationData))
+ .digest('hex');
+ if (this.configurationFileHash !== configurationHash) {
+ configurationData.configurationHash = configurationHash;
+ const measureId = `${FileType.ChargingStationConfiguration} write`;
+ const beginId = PerformanceStatistics.beginMeasure(measureId);
+ const fileDescriptor = fs.openSync(this.configurationFile, 'w');
+ fs.writeFileSync(fileDescriptor, JSON.stringify(configurationData, null, 2), 'utf8');
+ fs.closeSync(fileDescriptor);
+ PerformanceStatistics.endMeasure(measureId, beginId);
+ this.cache.deleteChargingStationConfiguration(this.configurationFileHash);
+ this.configurationFileHash = configurationHash;
+ this.cache.setChargingStationConfiguration(configurationData);
+ } else {
+ logger.debug(
+ `${this.logPrefix()} Not saving unchanged charging station configuration file ${
+ this.configurationFile
+ }`
+ );