RequestCommand,
type Response,
StandardParametersKey,
+ type Status,
type StatusNotificationRequest,
type StatusNotificationResponse,
StopTransactionReason,
public getAutomaticTransactionGeneratorConfiguration():
| AutomaticTransactionGeneratorConfiguration
| undefined {
+ let automaticTransactionGeneratorConfiguration:
+ | AutomaticTransactionGeneratorConfiguration
+ | undefined;
const automaticTransactionGeneratorConfigurationFromFile =
this.getConfigurationFromFile()?.automaticTransactionGenerator;
- if (automaticTransactionGeneratorConfigurationFromFile) {
- return automaticTransactionGeneratorConfigurationFromFile;
+ if (
+ this.getAutomaticTransactionGeneratorPersistentConfiguration() &&
+ automaticTransactionGeneratorConfigurationFromFile
+ ) {
+ automaticTransactionGeneratorConfiguration =
+ automaticTransactionGeneratorConfigurationFromFile;
+ } else {
+ automaticTransactionGeneratorConfiguration =
+ this.getTemplateFromFile()?.AutomaticTransactionGenerator;
}
- return this.getTemplateFromFile()?.AutomaticTransactionGenerator;
+ return {
+ ...Constants.DEFAULT_ATG_CONFIGURATION,
+ ...automaticTransactionGeneratorConfiguration,
+ };
+ }
+
+ public getAutomaticTransactionGeneratorStatuses(): Status[] | undefined {
+ return this.getConfigurationFromFile()?.automaticTransactionGeneratorStatuses;
}
public startAutomaticTransactionGenerator(connectorIds?: number[]): void {
private getStationInfoFromTemplate(): ChargingStationInfo {
const stationTemplate: ChargingStationTemplate | undefined = this.getTemplateFromFile();
- ChargingStationUtils.checkTemplateFile(stationTemplate, this.logPrefix(), this.templateFile);
+ ChargingStationUtils.checkTemplate(stationTemplate, this.logPrefix(), this.templateFile);
ChargingStationUtils.warnTemplateKeysDeprecation(
stationTemplate,
this.logPrefix(),
return this.stationInfo?.stationInfoPersistentConfiguration ?? true;
}
+ private getAutomaticTransactionGeneratorPersistentConfiguration(): boolean {
+ return this.stationInfo?.automaticTransactionGeneratorPersistentConfiguration ?? true;
+ }
+
private handleUnsupportedVersion(version: OCPPVersion) {
const errorMsg = `Unsupported protocol version '${version}' configured in template file ${this.templateFile}`;
logger.error(`${this.logPrefix()} ${errorMsg}`);
private initialize(): void {
const stationTemplate = this.getTemplateFromFile();
- ChargingStationUtils.checkTemplateFile(stationTemplate, this.logPrefix(), this.templateFile);
+ ChargingStationUtils.checkTemplate(stationTemplate, this.logPrefix(), this.templateFile);
this.configurationFile = path.join(
path.dirname(this.templateFile.replace('station-templates', 'configurations')),
`${ChargingStationUtils.getHashId(this.index, stationTemplate)}.json`
);
const chargingStationConfiguration = this.getConfigurationFromFile();
- const featureFlag = false;
if (
- featureFlag &&
+ chargingStationConfiguration?.stationInfo?.templateHash === stationTemplate?.templateHash &&
(chargingStationConfiguration?.connectorsStatus || chargingStationConfiguration?.evsesStatus)
) {
this.initializeConnectorsOrEvsesFromFile(chargingStationConfiguration);
if (stationTemplate?.Evses) {
const evsesConfigHash = crypto
.createHash(Constants.DEFAULT_HASH_ALGORITHM)
- .update(`${JSON.stringify(stationTemplate?.Evses)}`)
+ .update(JSON.stringify(stationTemplate?.Evses))
.digest('hex');
const evsesConfigChanged =
this.evses?.size !== 0 && this.evsesConfigurationHash !== evsesConfigHash;
}
private saveChargingStationAutomaticTransactionGeneratorConfiguration(): void {
- this.saveConfiguration();
+ if (this.getAutomaticTransactionGeneratorPersistentConfiguration()) {
+ this.saveConfiguration();
+ }
}
private saveConnectorsStatus() {
Utils.cloneObject<ChargingStationConfiguration>(this.getConfigurationFromFile()) ?? {};
if (this.getStationInfoPersistentConfiguration() && this.stationInfo) {
configurationData.stationInfo = this.stationInfo;
+ } else {
+ delete configurationData.stationInfo;
}
if (this.getOcppPersistentConfiguration() && this.ocppConfiguration?.configurationKey) {
configurationData.configurationKey = this.ocppConfiguration.configurationKey;
+ } else {
+ delete configurationData.configurationKey;
}
configurationData = merge<ChargingStationConfiguration>(
configurationData,
buildChargingStationAutomaticTransactionGeneratorConfiguration(this)
);
+ if (
+ !this.getAutomaticTransactionGeneratorPersistentConfiguration() ||
+ !this.getAutomaticTransactionGeneratorConfiguration()
+ ) {
+ delete configurationData.automaticTransactionGenerator;
+ }
if (this.connectors.size > 0) {
configurationData.connectorsStatus = buildConnectorsStatus(this);
+ } else {
+ delete configurationData.connectorsStatus;
}
if (this.evses.size > 0) {
configurationData.evsesStatus = buildEvsesStatus(this);
+ } else {
+ delete configurationData.evsesStatus;
}
delete configurationData.configurationHash;
const configurationHash = crypto
.createHash(Constants.DEFAULT_HASH_ALGORITHM)
- .update(JSON.stringify(configurationData))
+ .update(
+ JSON.stringify({
+ stationInfo: configurationData.stationInfo,
+ configurationKey: configurationData.configurationKey,
+ automaticTransactionGenerator: configurationData.automaticTransactionGenerator,
+ } as ChargingStationConfiguration)
+ )
.digest('hex');
if (this.configurationFileHash !== configurationHash) {
AsyncLock.acquire(AsyncLockType.configuration)
skipBufferingOnError: true,
});
if (this.isRegistered() === false) {
- this.getRegistrationMaxRetries() !== -1 && registrationRetryCount++;
+ this.getRegistrationMaxRetries() !== -1 && ++registrationRetryCount;
await Utils.sleep(
this?.bootNotificationResponse?.interval
? this.bootNotificationResponse.interval * 1000
this.autoReconnectRetryCount < this.getAutoReconnectMaxRetries() ||
this.getAutoReconnectMaxRetries() === -1
) {
- this.autoReconnectRetryCount++;
+ ++this.autoReconnectRetryCount;
const reconnectDelay = this.getReconnectExponentialDelay()
? Utils.exponentialDelay(this.autoReconnectRetryCount)
: this.getConnectionTimeout() * 1000;