From 8b2bbfe90ce6de786face8d3df2ba14acf64a414 Mon Sep 17 00:00:00 2001 From: Jacob Laursen Date: Fri, 15 Nov 2024 17:07:04 +0100 Subject: [PATCH] Fix last hour not being considered for best price (#17745) Backport of #17731 Signed-off-by: Jacob Laursen --- .../handler/AwattarBestpriceHandler.java | 2 +- .../internal/handler/AwattarBridgeHandler.java | 16 ++++++++++++++-- .../awattar/internal/handler/TimeRange.java | 1 + .../handler/AwattarBridgeHandlerTest.java | 10 +++++++++- 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/bundles/org.openhab.binding.awattar/src/main/java/org/openhab/binding/awattar/internal/handler/AwattarBestpriceHandler.java b/bundles/org.openhab.binding.awattar/src/main/java/org/openhab/binding/awattar/internal/handler/AwattarBestpriceHandler.java index 4c92b523411..8508c51229a 100644 --- a/bundles/org.openhab.binding.awattar/src/main/java/org/openhab/binding/awattar/internal/handler/AwattarBestpriceHandler.java +++ b/bundles/org.openhab.binding.awattar/src/main/java/org/openhab/binding/awattar/internal/handler/AwattarBestpriceHandler.java @@ -139,7 +139,7 @@ public class AwattarBestpriceHandler extends BaseThingHandler { } AwattarBestpriceConfiguration config = getConfigAs(AwattarBestpriceConfiguration.class); TimeRange timerange = getRange(config.rangeStart, config.rangeDuration, bridgeHandler.getTimeZone()); - if (!(bridgeHandler.containsPriceFor(timerange.start()) && bridgeHandler.containsPriceFor(timerange.end()))) { + if (!(bridgeHandler.containsPriceFor(timerange))) { updateState(channelUID, state); return; } diff --git a/bundles/org.openhab.binding.awattar/src/main/java/org/openhab/binding/awattar/internal/handler/AwattarBridgeHandler.java b/bundles/org.openhab.binding.awattar/src/main/java/org/openhab/binding/awattar/internal/handler/AwattarBridgeHandler.java index 8bd65306efb..bbcb95cad9e 100644 --- a/bundles/org.openhab.binding.awattar/src/main/java/org/openhab/binding/awattar/internal/handler/AwattarBridgeHandler.java +++ b/bundles/org.openhab.binding.awattar/src/main/java/org/openhab/binding/awattar/internal/handler/AwattarBridgeHandler.java @@ -210,8 +210,20 @@ public class AwattarBridgeHandler extends BaseBridgeHandler { public boolean containsPriceFor(long timestamp) { SortedSet localPrices = getPrices(); - return localPrices != null && localPrices.first().timerange().start() <= timestamp - && localPrices.last().timerange().end() > timestamp; + if (localPrices == null) { + return false; + } + return new TimeRange(localPrices.first().timerange().start(), localPrices.last().timerange().end()) + .contains(timestamp); + } + + public boolean containsPriceFor(TimeRange timeRange) { + SortedSet localPrices = getPrices(); + if (localPrices == null) { + return false; + } + return new TimeRange(localPrices.first().timerange().start(), localPrices.last().timerange().end()) + .contains(timeRange); } @Override diff --git a/bundles/org.openhab.binding.awattar/src/main/java/org/openhab/binding/awattar/internal/handler/TimeRange.java b/bundles/org.openhab.binding.awattar/src/main/java/org/openhab/binding/awattar/internal/handler/TimeRange.java index 7e3bf8815c1..2ff339f8097 100644 --- a/bundles/org.openhab.binding.awattar/src/main/java/org/openhab/binding/awattar/internal/handler/TimeRange.java +++ b/bundles/org.openhab.binding.awattar/src/main/java/org/openhab/binding/awattar/internal/handler/TimeRange.java @@ -48,6 +48,7 @@ public record TimeRange(long start, long end) implements Comparable { * @param o the object to be compared * @return the result of {@link Long#compare(long, long)} for the {@link #start} timestamps */ + @Override public int compareTo(TimeRange o) { return Long.compare(start, o.start); } diff --git a/bundles/org.openhab.binding.awattar/src/test/java/org/openhab/binding/awattar/internal/handler/AwattarBridgeHandlerTest.java b/bundles/org.openhab.binding.awattar/src/test/java/org/openhab/binding/awattar/internal/handler/AwattarBridgeHandlerTest.java index a0e8d079c08..ff526baf28e 100644 --- a/bundles/org.openhab.binding.awattar/src/test/java/org/openhab/binding/awattar/internal/handler/AwattarBridgeHandlerTest.java +++ b/bundles/org.openhab.binding.awattar/src/test/java/org/openhab/binding/awattar/internal/handler/AwattarBridgeHandlerTest.java @@ -148,9 +148,17 @@ public class AwattarBridgeHandlerTest extends JavaTest { } @Test - public void testContainsPrizeFor() { + void testContainsPriceForTimestamp() { + assertThat(bridgeHandler.containsPriceFor(new TimeRange(1618503200000L, 1718316000000L)), is(false)); + assertThat(bridgeHandler.containsPriceFor(new TimeRange(1618503200000L, 1718503200000L)), is(false)); + assertThat(bridgeHandler.containsPriceFor(new TimeRange(1718503200000L, 1718575200000L)), is(true)); + } + + @Test + void testContainsPriceForRange() { assertThat(bridgeHandler.containsPriceFor(1618503200000L), is(false)); assertThat(bridgeHandler.containsPriceFor(1718503200000L), is(true)); + assertThat(bridgeHandler.containsPriceFor(1718575200000L), is(false)); assertThat(bridgeHandler.containsPriceFor(1818503200000L), is(false)); }