From: Gaƫl L'hopital Date: Tue, 19 Mar 2024 07:55:25 +0000 (+0100) Subject: Avoiding reads of Energy data for Security channels (#16543) X-Git-Url: https://git.basschouten.com/?a=commitdiff_plain;h=329115fcbe5f4928a2358baf55e9eed7d6c6afe3;p=openhab-addons.git Avoiding reads of Energy data for Security channels (#16543) Signed-off-by: clinique --- diff --git a/bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/api/dto/NAHomeStatus.java b/bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/api/dto/NAHomeStatus.java index 09ae2bd4fc..c24247fac3 100644 --- a/bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/api/dto/NAHomeStatus.java +++ b/bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/api/dto/NAHomeStatus.java @@ -18,6 +18,7 @@ import java.util.Optional; import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; import org.openhab.binding.netatmo.internal.api.ApiResponse; +import org.openhab.binding.netatmo.internal.api.data.NetatmoConstants.FeatureArea; import org.openhab.binding.netatmo.internal.deserialization.NAObjectMap; /** @@ -31,7 +32,7 @@ public class NAHomeStatus { public class NAHomeStatusResponse extends ApiResponse { } - public class HomeStatus extends NAThing { + public class HomeStatus extends NAObject { private @Nullable NAObjectMap modules; private @Nullable NAObjectMap rooms; private @Nullable NAObjectMap persons; @@ -50,6 +51,14 @@ public class NAHomeStatus { NAObjectMap local = persons; return local != null ? local : new NAObjectMap<>(); } + + public boolean appliesTo(FeatureArea area) { + return switch (area) { + case ENERGY -> (rooms != null || modules != null); + case SECURITY -> persons != null; + default -> false; + }; + } } private @Nullable HomeStatus home; diff --git a/bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/handler/channelhelper/SecurityChannelHelper.java b/bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/handler/channelhelper/SecurityChannelHelper.java index 8b85b16134..44c6a00c74 100644 --- a/bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/handler/channelhelper/SecurityChannelHelper.java +++ b/bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/handler/channelhelper/SecurityChannelHelper.java @@ -17,9 +17,11 @@ import static org.openhab.binding.netatmo.internal.utils.ChannelTypeUtils.toRawT import java.util.List; import java.util.Set; +import java.util.function.Predicate; import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; +import org.openhab.binding.netatmo.internal.api.data.NetatmoConstants.FeatureArea; import org.openhab.binding.netatmo.internal.api.dto.HomeData; import org.openhab.binding.netatmo.internal.api.dto.HomeDataPerson; import org.openhab.binding.netatmo.internal.api.dto.HomeStatusPerson; @@ -51,12 +53,12 @@ public class SecurityChannelHelper extends ChannelHelper { super.setNewData(data); if (data instanceof HomeData.Security securityData) { knownIds = securityData.getKnownPersons().stream().map(HomeDataPerson::getId).toList(); - } else if (data instanceof HomeStatus securityStatus) { - List present = securityStatus.getPersons().values().stream() - .filter(HomeStatusPerson::atHome).toList(); + } else if (data instanceof HomeStatus status && status.appliesTo(FeatureArea.SECURITY)) { + List present = status.getPersons().values().stream().filter(HomeStatusPerson::atHome) + .map(HomeStatusPerson::getId).toList(); persons = present.size(); - unknowns = present.stream().filter(person -> !knownIds.contains(person.getId())).count(); + unknowns = present.stream().filter(Predicate.not(knownIds::contains)).count(); } }