diff --git a/bundles/org.openhab.binding.lutron/src/main/java/org/openhab/binding/lutron/internal/handler/LeapBridgeHandler.java b/bundles/org.openhab.binding.lutron/src/main/java/org/openhab/binding/lutron/internal/handler/LeapBridgeHandler.java index c2a29dd35457d..1290e7342fc9e 100644 --- a/bundles/org.openhab.binding.lutron/src/main/java/org/openhab/binding/lutron/internal/handler/LeapBridgeHandler.java +++ b/bundles/org.openhab.binding.lutron/src/main/java/org/openhab/binding/lutron/internal/handler/LeapBridgeHandler.java @@ -727,6 +727,9 @@ public int getButton(int integrationID, int component) { } } + /** + * Executed by keepAliveJob. Sends a LEAP ping request and schedules a reconnect task. + */ private void sendKeepAlive() { logger.trace("Sending keepalive query"); sendCommand(new LeapCommand(Request.ping())); @@ -734,12 +737,20 @@ private void sendKeepAlive() { reconnectTaskSchedule(); } + /** + * Schedules the reconnect task keepAliveReconnectJob to execute in KEEPALIVE_TIMEOUT_SECONDS. This should be + * cancelled by calling reconnectTaskCancel() if a valid response is received from the bridge. + */ private void reconnectTaskSchedule() { synchronized (keepAliveReconnectLock) { - keepAliveReconnectJob = scheduler.schedule(this::reconnect, KEEPALIVE_TIMEOUT_SECONDS, TimeUnit.SECONDS); + keepAliveReconnectJob = scheduler.schedule(this::keepaliveTimeoutExpired, KEEPALIVE_TIMEOUT_SECONDS, + TimeUnit.SECONDS); } } + /** + * Cancels the reconnect task keepAliveReconnectJob. + */ private void reconnectTaskCancel(boolean interrupt) { synchronized (keepAliveReconnectLock) { ScheduledFuture keepAliveReconnectJob = this.keepAliveReconnectJob; @@ -751,6 +762,15 @@ private void reconnectTaskCancel(boolean interrupt) { } } + /** + * Executed by keepAliveReconnectJob if it is not cancelled by the LEAP message parser calling + * validMessageReceived() which in turn calls reconnectTaskCancel(). + */ + private void keepaliveTimeoutExpired() { + logger.debug("Keepalive response timeout expired. Initiating reconnect."); + reconnect(); + } + @Override public void handleCommand(ChannelUID channelUID, Command command) { if (channelUID.getId().equals(CHANNEL_COMMAND)) {