X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2FChargingStation.ts;h=bd3fb81283b079f66ceed55b380434666c331613;hb=b3b3f0eb5e187646c6502a9d36939e05c80b5939;hp=d9f548d71c47aa15ee55d4ebf32ccdbde5ffad91;hpb=2035255d4bd926c4acb40acd2b882d2d16174c55;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/ChargingStation.ts b/src/charging-station/ChargingStation.ts index d9f548d7..bd3fb812 100644 --- a/src/charging-station/ChargingStation.ts +++ b/src/charging-station/ChargingStation.ts @@ -149,7 +149,7 @@ import { roundTo, secureRandom, sleep, - watchJsonFile, + // watchJsonFile, } from '../utils'; export class ChargingStation { @@ -161,7 +161,7 @@ export class ChargingStation { public idTagsCache: IdTagsCache; public automaticTransactionGenerator!: AutomaticTransactionGenerator | undefined; public ocppConfiguration!: ChargingStationOcppConfiguration | undefined; - public wsConnection!: WebSocket | null; + public wsConnection: WebSocket | null; public readonly connectors: Map; public readonly evses: Map; public readonly requests: Map; @@ -193,6 +193,7 @@ export class ChargingStation { this.started = false; this.starting = false; this.stopping = false; + this.wsConnection = null; this.wsConnectionRestarted = false; this.autoReconnectRetryCount = 0; this.index = index; @@ -663,44 +664,55 @@ export class ChargingStation { } this.openWSConnection(); // Monitor charging station template file - this.templateFileWatcher = watchJsonFile( - this.templateFile, - FileType.ChargingStationTemplate, - this.logPrefix(), - undefined, - (event, filename): void => { - if (isNotEmptyString(filename) && event === 'change') { - try { - logger.debug( - `${this.logPrefix()} ${FileType.ChargingStationTemplate} ${ - this.templateFile - } file have changed, reload`, - ); - this.sharedLRUCache.deleteChargingStationTemplate(this.templateFileHash); - // Initialize - this.initialize(); - this.idTagsCache.deleteIdTags(getIdTagsFile(this.stationInfo)!); - // Restart the ATG - this.stopAutomaticTransactionGenerator(); - delete this.automaticTransactionGeneratorConfiguration; - if (this.getAutomaticTransactionGeneratorConfiguration()?.enable === true) { - this.startAutomaticTransactionGenerator(); - } - if (this.getEnableStatistics() === true) { - this.performanceStatistics?.restart(); - } else { - this.performanceStatistics?.stop(); - } - // FIXME?: restart heartbeat and WebSocket ping when their interval values have changed - } catch (error) { - logger.error( - `${this.logPrefix()} ${FileType.ChargingStationTemplate} file monitoring error:`, - error, - ); - } - } - }, - ); + // FIXME: Disabled until the spurious configuration file change detection is identified + // this.templateFileWatcher = watchJsonFile( + // this.templateFile, + // FileType.ChargingStationTemplate, + // this.logPrefix(), + // undefined, + // (event, filename): void => { + // if (isNotEmptyString(filename) && event === 'change') { + // try { + // logger.debug( + // `${this.logPrefix()} ${FileType.ChargingStationTemplate} ${ + // this.templateFile + // } file have changed, reload`, + // ); + // this.sharedLRUCache.deleteChargingStationTemplate(this.templateFileHash); + // // Initialize + // this.initialize(); + // this.idTagsCache.deleteIdTags(getIdTagsFile(this.stationInfo)!); + // // Restart the ATG + // this.stopAutomaticTransactionGenerator() + // .then(() => { + // delete this.automaticTransactionGeneratorConfiguration; + // if (this.getAutomaticTransactionGeneratorConfiguration()?.enable === true) { + // this.startAutomaticTransactionGenerator(); + // } + // }) + // .catch((err) => + // logger.error( + // `${this.logPrefix()} failed to stop ATG at ${ + // FileType.ChargingStationTemplate + // } reload`, + // err, + // ), + // ); + // if (this.getEnableStatistics() === true) { + // this.performanceStatistics?.restart(); + // } else { + // this.performanceStatistics?.stop(); + // } + // // FIXME?: restart heartbeat and WebSocket ping when their interval values have changed + // } catch (error) { + // logger.error( + // `${this.logPrefix()} ${FileType.ChargingStationTemplate} file monitoring error:`, + // error, + // ); + // } + // } + // }, + // ); this.started = true; parentPort?.postMessage(buildStartedMessage(this)); this.starting = false; @@ -872,13 +884,13 @@ export class ChargingStation { parentPort?.postMessage(buildUpdatedMessage(this)); } - public stopAutomaticTransactionGenerator(connectorIds?: number[]): void { + public async stopAutomaticTransactionGenerator(connectorIds?: number[]): Promise { if (isNotEmptyArray(connectorIds)) { for (const connectorId of connectorIds!) { - this.automaticTransactionGenerator?.stopConnector(connectorId); + await this.automaticTransactionGenerator?.stopConnector(connectorId); } } else { - this.automaticTransactionGenerator?.stop(); + await this.automaticTransactionGenerator?.stop(); } this.saveAutomaticTransactionGeneratorConfiguration(); parentPort?.postMessage(buildUpdatedMessage(this)); @@ -1033,7 +1045,7 @@ export class ChargingStation { } private stopReservationExpirationSetInterval(): void { - if (this.reservationExpirationSetInterval) { + if (!isNullOrUndefined(this.reservationExpirationSetInterval)) { clearInterval(this.reservationExpirationSetInterval); } } @@ -1699,7 +1711,7 @@ export class ChargingStation { const beginId = PerformanceStatistics.beginMeasure(measureId); writeFileSync( this.configurationFile, - JSON.stringify(configurationData, null, 2), + JSON.stringify(configurationData, undefined, 2), 'utf8', ); PerformanceStatistics.endMeasure(measureId, beginId); @@ -2170,7 +2182,7 @@ export class ChargingStation { this.stopHeartbeat(); // Stop ongoing transactions if (this.automaticTransactionGenerator?.started === true) { - this.stopAutomaticTransactionGenerator(); + await this.stopAutomaticTransactionGenerator(); } else { await this.stopRunningTransactions(reason); } @@ -2317,7 +2329,7 @@ export class ChargingStation { this.stopHeartbeat(); // Stop the ATG if needed if (this.getAutomaticTransactionGeneratorConfiguration().stopOnConnectionFailure === true) { - this.stopAutomaticTransactionGenerator(); + await this.stopAutomaticTransactionGenerator(); } if ( this.autoReconnectRetryCount < this.getAutoReconnectMaxRetries()! ||