]> git.basschouten.com Git - openhab-addons.git/commitdiff
[Netatmo] Avoid double refresh of weather channels (#15686)
authorGaël L'hopital <gael@lhopital.org>
Sun, 8 Oct 2023 07:35:41 +0000 (09:35 +0200)
committerGitHub <noreply@github.com>
Sun, 8 Oct 2023 07:35:41 +0000 (09:35 +0200)
* Solves issue #15684
* Removing excessive usage of inline typecast

---------

Signed-off-by: clinique <gael@lhopital.org>
bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/handler/capability/Capability.java
bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/handler/capability/MeasureCapability.java
bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/handler/channelhelper/HumidityChannelHelper.java
bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/utils/ChannelTypeUtils.java

index 5799e950712624a1c0d931346fa9da8591b60aa8..5ad70ae2545f1b378527e69c1471c318abf737c9 100644 (file)
@@ -47,7 +47,6 @@ import org.openhab.core.types.Command;
  */
 @NonNullByDefault
 public class Capability {
-
     protected final Thing thing;
     protected final CommonInterface handler;
     protected final ModuleType moduleType;
index 738ae2acf00ea06f527a04de8594d0a92c5e7475..b6598d9f3ea0d94171164a7120e5f3b1599c041a 100644 (file)
@@ -25,6 +25,7 @@ import org.eclipse.jdt.annotation.Nullable;
 import org.openhab.binding.netatmo.internal.api.NetatmoException;
 import org.openhab.binding.netatmo.internal.api.WeatherApi;
 import org.openhab.binding.netatmo.internal.api.data.NetatmoConstants.MeasureClass;
+import org.openhab.binding.netatmo.internal.api.dto.Device;
 import org.openhab.binding.netatmo.internal.api.dto.NAObject;
 import org.openhab.binding.netatmo.internal.config.MeasureConfiguration;
 import org.openhab.binding.netatmo.internal.handler.CommonInterface;
@@ -56,6 +57,13 @@ public class MeasureCapability extends CacheWeatherCapability {
         measureChannelHelper.setMeasures(measures);
     }
 
+    @Override
+    protected void updateNADevice(Device newData) {
+        // Resolution of issue #15684 :
+        // Do not transfer newData to superclass - MeasureCapability pulls its own data based on measurement channels
+        // configuration and store them in 'measures' for the channel helper.
+    }
+
     private void updateMeasures(WeatherApi api, String deviceId, @Nullable String moduleId) {
         measures.clear();
         handler.getActiveChannels().filter(channel -> !channel.getConfiguration().getProperties().isEmpty())
index 09f507cb1055630f048c3741847c2b39dca3b732..934bf6066f781b227c67f0c0e4f535f670c42169 100644 (file)
@@ -40,14 +40,12 @@ public class HumidityChannelHelper extends ChannelHelper {
 
     @Override
     protected @Nullable State internalGetDashboard(String channelId, Dashboard dashboard) {
-        switch (channelId) {
-            case CHANNEL_HUMIDEX:
-                return new DecimalType(humidex(dashboard.getTemperature(), dashboard.getHumidity()));
-            case CHANNEL_HUMIDEX_SCALE:
-                return new DecimalType(humidexScale(humidex(dashboard.getTemperature(), dashboard.getHumidity())));
-            case CHANNEL_VALUE:
-                return toQuantityType(dashboard.getHumidity(), MeasureClass.HUMIDITY);
-        }
-        return null;
+        return switch (channelId) {
+            case CHANNEL_HUMIDEX -> new DecimalType(humidex(dashboard.getTemperature(), dashboard.getHumidity()));
+            case CHANNEL_HUMIDEX_SCALE ->
+                new DecimalType(humidexScale(humidex(dashboard.getTemperature(), dashboard.getHumidity())));
+            case CHANNEL_VALUE -> toQuantityType(dashboard.getHumidity(), MeasureClass.HUMIDITY);
+            default -> null;
+        };
     }
 }
index 40b56700ba28d34f92936250a9b67cec45a05e74..78a5a9a390e12c6651b00a81530fecd492a09e1d 100644 (file)
@@ -25,7 +25,6 @@ import org.openhab.binding.netatmo.internal.api.data.NetatmoConstants.Measure;
 import org.openhab.binding.netatmo.internal.api.data.NetatmoConstants.MeasureClass;
 import org.openhab.core.io.net.http.HttpUtil;
 import org.openhab.core.library.types.DateTimeType;
-import org.openhab.core.library.types.DecimalType;
 import org.openhab.core.library.types.QuantityType;
 import org.openhab.core.library.types.RawType;
 import org.openhab.core.library.types.StringType;
@@ -75,16 +74,12 @@ public class ChannelTypeUtils {
         return zonedDateTime.map(zdt -> (State) new DateTimeType(zdt)).orElse(UnDefType.NULL);
     }
 
-    public static State toQuantityType(@Nullable Double value, @Nullable MeasureClass measureClass) {
+    public static State toQuantityType(@Nullable Double value, MeasureClass measureClass) {
         if (value != null && !value.isNaN()) {
-            if (measureClass != null) {
-                Measure measureDef = measureClass.measureDefinition;
-                BigDecimal measure = new BigDecimal(Math.min(measureDef.maxValue, Math.max(measureDef.minValue, value)))
-                        .setScale(measureDef.scale, RoundingMode.HALF_UP);
-                return new QuantityType<>(measure, measureDef.unit);
-            } else {
-                return new DecimalType(value);
-            }
+            Measure measureDef = measureClass.measureDefinition;
+            BigDecimal measure = new BigDecimal(Math.min(measureDef.maxValue, Math.max(measureDef.minValue, value)))
+                    .setScale(measureDef.scale, RoundingMode.HALF_UP);
+            return new QuantityType<>(measure, measureDef.unit);
         }
         return UnDefType.NULL;
     }