X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2FChargingStation.ts;h=e9420089086639754f86c687007b1aa420e216a8;hb=c8eeb62b00988601b40e599745329acb67197750;hp=aed980c8df47c6c9d0204a2077419e0a0e3f9f04;hpb=57939a9da57b9ed1780ec63a2ecceaf44a107b17;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/ChargingStation.ts b/src/charging-station/ChargingStation.ts index aed980c8..e9420089 100644 --- a/src/charging-station/ChargingStation.ts +++ b/src/charging-station/ChargingStation.ts @@ -22,7 +22,6 @@ import OCPPError from './OCPPError'; import OCPPIncomingRequestService from './ocpp/OCPPIncomingRequestService'; import OCPPRequestService from './ocpp/OCPPRequestService'; import { OCPPVersion } from '../types/ocpp/OCPPVersion'; -import { PerformanceObserver } from 'perf_hooks'; import PerformanceStatistics from '../utils/PerformanceStatistics'; import { StopTransactionReason } from '../types/ocpp/Transaction'; import { URL } from 'url'; @@ -55,7 +54,6 @@ export default class ChargingStation { private hasSocketRestarted: boolean; private autoReconnectRetryCount: number; private automaticTransactionGeneration!: AutomaticTransactionGenerator; - private performanceObserver!: PerformanceObserver; private webSocketPingSetInterval!: NodeJS.Timeout; constructor(index: number, stationTemplateFile: string) { @@ -292,7 +290,7 @@ export default class ChargingStation { if (interval > 0) { // eslint-disable-next-line @typescript-eslint/no-misused-promises this.getConnector(connectorId).transactionSetInterval = setInterval(async (): Promise => { - await this.ocppRequestService.sendMeterValues(connectorId, this.getConnector(connectorId).transactionId, interval, this.ocppRequestService); + await this.ocppRequestService.sendMeterValues(connectorId, this.getConnector(connectorId).transactionId, interval); }, interval); } else { logger.error(`${this.logPrefix()} Charging station ${StandardParametersKey.MeterValueSampleInterval} configuration set to ${interval ? Utils.milliSecondsToHHMMSS(interval) : interval}, not sending MeterValues`); @@ -300,6 +298,9 @@ export default class ChargingStation { } public start(): void { + if (this.getEnableStatistics()) { + this.performanceStatistics.start(); + } this.openWSConnection(); // Monitor authorization file this.startAuthorizationFileMonitoring(); @@ -331,18 +332,20 @@ export default class ChargingStation { if (this.isWebSocketOpen()) { this.wsConnection.close(); } + if (this.getEnableStatistics()) { + this.performanceStatistics.stop(); + } this.bootNotificationResponse = null; this.hasStopped = true; } public getConfigurationKey(key: string | StandardParametersKey, caseInsensitive = false): ConfigurationKey | undefined { - const configurationKey: ConfigurationKey | undefined = this.configuration.configurationKey.find((configElement) => { + return this.configuration.configurationKey.find((configElement) => { if (caseInsensitive) { return configElement.key.toLowerCase() === key.toLowerCase(); } return configElement.key === key; }); - return configurationKey; } public addConfigurationKey(key: string | StandardParametersKey, value: string, readonly = false, visible = true, reboot = false): void { @@ -415,6 +418,7 @@ export default class ChargingStation { if (!Utils.isEmptyArray(this.messageQueue)) { this.messageQueue.forEach((message, index) => { this.messageQueue.splice(index, 1); + // TODO: evaluate the need to track performance this.wsConnection.send(message); }); } @@ -551,7 +555,6 @@ export default class ChargingStation { this.stationInfo.powerDivider = this.getPowerDivider(); if (this.getEnableStatistics()) { this.performanceStatistics = new PerformanceStatistics(this.stationInfo.chargingStationId); - this.performanceObserver = PerformanceStatistics.initPerformanceObserver(Constants.ENTITY_CHARGING_STATION, this.performanceStatistics, this.performanceObserver); } } @@ -593,7 +596,7 @@ export default class ChargingStation { } private async onOpen(): Promise { - logger.info(`${this.logPrefix()} Connected to server through ${this.wsConnectionUrl.toString()}`); + logger.info(`${this.logPrefix()} Connected to OCPP server through ${this.wsConnectionUrl.toString()}`); if (!this.isRegistered()) { // Send BootNotification let registrationRetryCount = 0; @@ -652,7 +655,7 @@ export default class ChargingStation { // Incoming Message case MessageType.CALL_MESSAGE: if (this.getEnableStatistics()) { - this.performanceStatistics.addMessage(commandName, messageType); + this.performanceStatistics.addRequestStatistic(commandName, messageType); } // Process the call await this.ocppIncomingRequestService.handleRequest(messageId, commandName, commandPayload); @@ -718,7 +721,7 @@ export default class ChargingStation { } private getTemplateChargingStationConfiguration(): ChargingStationConfiguration { - return this.stationInfo.Configuration ? this.stationInfo.Configuration : {} as ChargingStationConfiguration; + return this.stationInfo.Configuration ?? {} as ChargingStationConfiguration; } private getAuthorizationFile(): string | undefined { @@ -842,9 +845,6 @@ export default class ChargingStation { } // Start the ATG this.startAutomaticTransactionGenerator(); - if (this.getEnableStatistics()) { - this.performanceStatistics.start(); - } } private startAutomaticTransactionGenerator() { @@ -954,7 +954,7 @@ export default class ChargingStation { break; } this.wsConnection = new WebSocket(this.wsConnectionUrl, protocol, options); - logger.info(this.logPrefix() + ' Open connection to URL ' + this.wsConnectionUrl.toString()); + logger.info(this.logPrefix() + ' Open OCPP connection to URL ' + this.wsConnectionUrl.toString()); } private stopMeterValues(connectorId: number) { @@ -992,13 +992,17 @@ export default class ChargingStation { logger.debug(this.logPrefix() + ' Template file ' + this.stationTemplateFile + ' have changed, reload'); // Initialize this.initialize(); - // Stop the ATG + // Restart the ATG if (!this.stationInfo.AutomaticTransactionGenerator.enable && this.automaticTransactionGeneration) { await this.automaticTransactionGeneration.stop(); } - // Start the ATG this.startAutomaticTransactionGenerator(); + if (this.getEnableStatistics()) { + 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() + ' Charging station template file monitoring error: %j', error); @@ -1014,6 +1018,8 @@ export default class ChargingStation { } private async reconnect(error: any): Promise { + // Stop WebSocket ping + this.stopWebSocketPing(); // Stop heartbeat this.stopHeartbeat(); // Stop the ATG if needed