From 3e5597d5381950ea456842bc6a12287e6bfff70f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20L=27hopital?= Date: Sat, 28 Feb 2026 13:32:57 +0100 Subject: [PATCH] [netatmo] Avoid sending refresh requests twice (#20286) * Avoids sending refresh requests twice Signed-off-by: gael@lhopital.org --- .../internal/handler/CommonInterface.java | 4 +-- .../capability/ParentUpdateCapability.java | 36 ++++++++++++------- .../handler/capability/RefreshCapability.java | 2 +- 3 files changed, 27 insertions(+), 15 deletions(-) diff --git a/bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/handler/CommonInterface.java b/bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/handler/CommonInterface.java index d24e4b2235..e5844acf4b 100644 --- a/bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/handler/CommonInterface.java +++ b/bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/handler/CommonInterface.java @@ -94,8 +94,8 @@ public interface CommonInterface { : null; } - default Optional> schedule(Runnable arg0, Duration delay) { - return Optional.of(getScheduler().schedule(arg0, delay.getSeconds(), TimeUnit.SECONDS)); + default ScheduledFuture schedule(Runnable arg0, Duration delay) { + return getScheduler().schedule(arg0, delay.getSeconds(), TimeUnit.SECONDS); } default @Nullable ApiBridgeHandler getAccountHandler() { diff --git a/bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/handler/capability/ParentUpdateCapability.java b/bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/handler/capability/ParentUpdateCapability.java index 9a1b00406f..62d6f61db0 100644 --- a/bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/handler/capability/ParentUpdateCapability.java +++ b/bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/handler/capability/ParentUpdateCapability.java @@ -12,7 +12,6 @@ */ package org.openhab.binding.netatmo.internal.handler.capability; -import java.time.Duration; import java.util.concurrent.ScheduledFuture; import org.eclipse.jdt.annotation.NonNullByDefault; @@ -29,9 +28,8 @@ import org.slf4j.LoggerFactory; */ @NonNullByDefault public class ParentUpdateCapability extends Capability { - private static final Duration DEFAULT_DELAY = Duration.ofSeconds(2); - private final Logger logger = LoggerFactory.getLogger(ParentUpdateCapability.class); + private @Nullable ScheduledFuture job; public ParentUpdateCapability(CommonInterface handler) { @@ -40,22 +38,36 @@ public class ParentUpdateCapability extends Capability { @Override public void initialize() { - handler.schedule(() -> { + if (job != null) { + logger.debug("Data update is already requested for '{}'", thingUID); + return; + } + + this.job = handler.schedule(() -> { logger.debug("Requesting parents data update for Thing '{}'", thingUID); - CommonInterface bridgeHandler = handler.getBridgeHandler(); - if (bridgeHandler != null) { + if (handler.getBridgeHandler() instanceof CommonInterface bridgeHandler) { bridgeHandler.expireData(); } - }, DEFAULT_DELAY).ifPresent(job -> this.job = job); + job = null; + }, RefreshCapability.ASAP); + } + + @Override + protected void beforeNewData() { + super.beforeNewData(); + cancelJob(); + } + + private void cancelJob() { + if (job instanceof ScheduledFuture local) { + local.cancel(true); + this.job = null; + } } @Override public void dispose() { - ScheduledFuture job = this.job; - if (job != null) { - job.cancel(true); - } - this.job = null; + cancelJob(); super.dispose(); } } diff --git a/bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/handler/capability/RefreshCapability.java b/bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/handler/capability/RefreshCapability.java index 0c7aed2537..de2bf2300c 100644 --- a/bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/handler/capability/RefreshCapability.java +++ b/bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/handler/capability/RefreshCapability.java @@ -112,7 +112,7 @@ public class RefreshCapability extends Capability { stopJob(); } logger.debug("'{}' next refresh in {}", thingUID, delay); - handler.schedule(this::proceedWithUpdate, delay).ifPresent(job -> this.refreshJob = job); + this.refreshJob = handler.schedule(this::proceedWithUpdate, delay); } private void stopJob() {