+ this.addConfigurationKey(
+ StandardParametersKey.ConnectionTimeOut,
+ Constants.DEFAULT_CONNECTION_TIMEOUT.toString()
+ );
+ }
+ this.saveOcppConfiguration();
+ }
+
+ private getConfigurationFromFile(): ChargingStationConfiguration | null {
+ let configuration: ChargingStationConfiguration = null;
+ if (this.configurationFile && fs.existsSync(this.configurationFile)) {
+ try {
+ const measureId = `${FileType.ChargingStationConfiguration} read`;
+ const beginId = PerformanceStatistics.beginMeasure(
+ `${FileType.ChargingStationConfiguration} read`
+ );
+ configuration = JSON.parse(
+ fs.readFileSync(this.configurationFile, 'utf8')
+ ) as ChargingStationConfiguration;
+ PerformanceStatistics.endMeasure(measureId, beginId);
+ } catch (error) {
+ FileUtils.handleFileException(
+ this.logPrefix(),
+ FileType.ChargingStationConfiguration,
+ this.configurationFile,
+ error as NodeJS.ErrnoException
+ );
+ }
+ }
+ return configuration;
+ }
+
+ private saveConfiguration(section?: Section): void {
+ if (this.configurationFile) {
+ try {
+ const configurationData: ChargingStationConfiguration =
+ this.getConfigurationFromFile() ?? {};
+ if (!fs.existsSync(path.dirname(this.configurationFile))) {
+ fs.mkdirSync(path.dirname(this.configurationFile), { recursive: true });
+ }
+ switch (section) {
+ case Section.ocppConfiguration:
+ configurationData.configurationKey = this.ocppConfiguration.configurationKey;
+ break;
+ case Section.stationInfo:
+ configurationData.stationInfo = this.stationInfo;
+ break;
+ default:
+ configurationData.configurationKey = this.ocppConfiguration.configurationKey;
+ configurationData.stationInfo = this.stationInfo;
+ break;
+ }
+ 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);
+ } catch (error) {
+ FileUtils.handleFileException(
+ this.logPrefix(),
+ FileType.ChargingStationConfiguration,
+ this.configurationFile,
+ error as NodeJS.ErrnoException
+ );
+ }
+ } else {
+ logger.error(
+ `${this.logPrefix()} Trying to save charging station configuration to undefined file`
+ );
+ }
+ }
+
+ private getOcppConfigurationFromTemplate(): ChargingStationOcppConfiguration {
+ return this.getTemplateFromFile().Configuration ?? ({} as ChargingStationOcppConfiguration);
+ }
+
+ private getOcppConfigurationFromFile(): ChargingStationOcppConfiguration | null {
+ let configuration: ChargingStationConfiguration = null;
+ if (this.getOcppPersistentConfiguration()) {
+ const configurationFromFile = this.getConfigurationFromFile();
+ configuration = configurationFromFile?.configurationKey && configurationFromFile;
+ }
+ configuration && delete configuration.stationInfo;
+ return configuration;
+ }
+
+ private getOcppConfiguration(): ChargingStationOcppConfiguration {
+ let ocppConfiguration: ChargingStationOcppConfiguration = this.getOcppConfigurationFromFile();
+ if (!ocppConfiguration) {
+ ocppConfiguration = this.getOcppConfigurationFromTemplate();
+ }
+ return ocppConfiguration;
+ }
+
+ private saveOcppConfiguration(): void {
+ if (this.getOcppPersistentConfiguration()) {
+ this.saveConfiguration(Section.ocppConfiguration);