From 99100f9c8709a7ead56c1e2745db80a75e8f6f79 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Thu, 30 May 2024 03:54:15 +0200 Subject: [PATCH] fix: start web socket ping interval at successful connection MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérôme Benoit --- src/charging-station/ChargingStation.ts | 36 +++++++++++-------- .../ocpp/1.6/OCPP16ResponseService.ts | 2 +- .../ocpp/2.0/OCPP20ResponseService.ts | 2 +- src/types/ChargingStationEvents.ts | 1 + 4 files changed, 25 insertions(+), 16 deletions(-) diff --git a/src/charging-station/ChargingStation.ts b/src/charging-station/ChargingStation.ts index 2d934e06..64cb637b 100644 --- a/src/charging-station/ChargingStation.ts +++ b/src/charging-station/ChargingStation.ts @@ -236,6 +236,11 @@ export class ChargingStation extends EventEmitter { this.on(ChargingStationEvents.rejected, () => { this.wsConnectionRetried = false }) + this.on(ChargingStationEvents.connected, () => { + if (this.wsPingSetInterval == null) { + this.startWebSocketPing() + } + }) this.on(ChargingStationEvents.disconnected, () => { try { this.internalStopMessageSequence() @@ -554,7 +559,8 @@ export class ChargingStation extends EventEmitter { } public startHeartbeat (): void { - if (this.getHeartbeatInterval() > 0 && this.heartbeatSetInterval == null) { + const heartbeatInterval = this.getHeartbeatInterval() + if (heartbeatInterval > 0 && this.heartbeatSetInterval == null) { this.heartbeatSetInterval = setInterval(() => { this.ocppRequestService .requestHandler(this, RequestCommand.HEARTBEAT) @@ -564,21 +570,21 @@ export class ChargingStation extends EventEmitter { error ) }) - }, this.getHeartbeatInterval()) + }, heartbeatInterval) logger.info( `${this.logPrefix()} Heartbeat started every ${formatDurationMilliSeconds( - this.getHeartbeatInterval() + heartbeatInterval )}` ) } else if (this.heartbeatSetInterval != null) { logger.info( `${this.logPrefix()} Heartbeat already started every ${formatDurationMilliSeconds( - this.getHeartbeatInterval() + heartbeatInterval )}` ) } else { logger.error( - `${this.logPrefix()} Heartbeat interval set to ${this.getHeartbeatInterval()}, not starting the heartbeat` + `${this.logPrefix()} Heartbeat interval set to ${heartbeatInterval}, not starting the heartbeat` ) } } @@ -1822,6 +1828,7 @@ export class ChargingStation extends EventEmitter { private async onOpen (): Promise { if (this.isWebSocketConnectionOpened()) { + this.emit(ChargingStationEvents.connected) this.emit(ChargingStationEvents.updated) logger.info( `${this.logPrefix()} Connection to OCPP server through ${ @@ -2222,12 +2229,12 @@ export class ChargingStation extends EventEmitter { }) } // Start WebSocket ping - this.startWebSocketPing() + if (this.wsPingSetInterval == null) { + this.startWebSocketPing() + } // Start heartbeat if (this.heartbeatSetInterval == null) { this.startHeartbeat() - } else if (this.getHeartbeatInterval() !== this.bootNotificationResponse?.interval) { - this.restartHeartbeat() } // Initialize connectors status if (this.hasEvses) { @@ -2318,13 +2325,14 @@ export class ChargingStation extends EventEmitter { } } + private getWebSocketPingInterval (): number { + return getConfigurationKey(this, StandardParametersKey.WebSocketPingInterval) != null + ? convertToInt(getConfigurationKey(this, StandardParametersKey.WebSocketPingInterval)?.value) + : 0 + } + private startWebSocketPing (): void { - const webSocketPingInterval = - getConfigurationKey(this, StandardParametersKey.WebSocketPingInterval) != null - ? convertToInt( - getConfigurationKey(this, StandardParametersKey.WebSocketPingInterval)?.value - ) - : 0 + const webSocketPingInterval = this.getWebSocketPingInterval() if (webSocketPingInterval > 0 && this.wsPingSetInterval == null) { this.wsPingSetInterval = setInterval(() => { if (this.isWebSocketConnectionOpened()) { diff --git a/src/charging-station/ocpp/1.6/OCPP16ResponseService.ts b/src/charging-station/ocpp/1.6/OCPP16ResponseService.ts index 409f382e..c7a75e43 100644 --- a/src/charging-station/ocpp/1.6/OCPP16ResponseService.ts +++ b/src/charging-station/ocpp/1.6/OCPP16ResponseService.ts @@ -515,7 +515,6 @@ export class OCPP16ResponseService extends OCPPResponseService { if (chargingStation.isRegistered()) { chargingStation.emit(ChargingStationEvents.registered) if (chargingStation.inAcceptedState()) { - chargingStation.emit(ChargingStationEvents.accepted) addConfigurationKey( chargingStation, OCPP16StandardParametersKey.HeartbeatInterval, @@ -530,6 +529,7 @@ export class OCPP16ResponseService extends OCPPResponseService { { visible: false }, { overwrite: true, save: true } ) + chargingStation.emit(ChargingStationEvents.accepted) } } else if (chargingStation.inRejectedState()) { chargingStation.emit(ChargingStationEvents.rejected) diff --git a/src/charging-station/ocpp/2.0/OCPP20ResponseService.ts b/src/charging-station/ocpp/2.0/OCPP20ResponseService.ts index 77546cfa..8a6e2cac 100644 --- a/src/charging-station/ocpp/2.0/OCPP20ResponseService.ts +++ b/src/charging-station/ocpp/2.0/OCPP20ResponseService.ts @@ -188,7 +188,6 @@ export class OCPP20ResponseService extends OCPPResponseService { if (chargingStation.isRegistered()) { chargingStation.emit(ChargingStationEvents.registered) if (chargingStation.inAcceptedState()) { - chargingStation.emit(ChargingStationEvents.accepted) addConfigurationKey( chargingStation, OCPP20OptionalVariableName.HeartbeatInterval, @@ -196,6 +195,7 @@ export class OCPP20ResponseService extends OCPPResponseService { {}, { overwrite: true, save: true } ) + chargingStation.emit(ChargingStationEvents.accepted) } } else if (chargingStation.inRejectedState()) { chargingStation.emit(ChargingStationEvents.rejected) diff --git a/src/types/ChargingStationEvents.ts b/src/types/ChargingStationEvents.ts index b690bc91..3fa6adec 100644 --- a/src/types/ChargingStationEvents.ts +++ b/src/types/ChargingStationEvents.ts @@ -7,6 +7,7 @@ export enum ChargingStationEvents { registered = 'registered', accepted = 'accepted', rejected = 'rejected', + connected = 'connected', disconnected = 'disconnected', connectorStatusChanged = 'connectorStatusChanged' } -- 2.43.0