]> git.basschouten.com Git - openhab-addons.git/commitdiff
[knx] Improve rounding when encoding DPT 232.60000 (#14772)
authorHolger Friedrich <holgerfriedrich@users.noreply.github.com>
Fri, 14 Apr 2023 18:23:32 +0000 (20:23 +0200)
committerGitHub <noreply@github.com>
Fri, 14 Apr 2023 18:23:32 +0000 (20:23 +0200)
* [knx] Improve rounding when encoding DPT 232.60000
* [knx] SAT and warnings

Signed-off-by: Holger Friedrich <mail@holger-friedrich.de>
bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/client/AbstractKNXClient.java
bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/dpt/ValueDecoder.java
bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/dpt/ValueEncoder.java
bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/handler/DeviceThingHandler.java
bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/handler/IPBridgeThingHandler.java
bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/handler/SerialBridgeThingHandler.java
bundles/org.openhab.binding.knx/src/test/java/org/openhab/binding/knx/internal/dpt/DPTTest.java

index df3d42e34a58c48b21fdaefec7bd621719db413e..0c887983619809c2680e778e4ade8c34001d7464 100644 (file)
@@ -251,7 +251,7 @@ public abstract class AbstractKNXClient implements NetworkLinkListener, KNXClien
             state = ClientState.RUNNING;
             return true;
         } catch (InterruptedException e) {
-            final var lastState = state;
+            ClientState lastState = state;
             state = ClientState.INTERRUPTED;
 
             logger.trace("Bridge {}, connection interrupted", thingUID);
@@ -458,7 +458,7 @@ public abstract class AbstractKNXClient implements NetworkLinkListener, KNXClien
 
     @Override
     public boolean isConnected() {
-        final var tmpLink = link;
+        KNXNetworkLink tmpLink = link;
         return tmpLink != null && tmpLink.isOpen();
     }
 
index 7aa716130c16d0b79db4f21a627af0c2353bf240..28d3ecae9e95efa8d93271b1ea8e76b3ba29f8b4 100644 (file)
@@ -310,8 +310,8 @@ public class ValueDecoder {
                 if (stringY == null) {
                     return ColorUtil.xyToHsb(new double[] { x, y });
                 } else {
-                    double Y = Double.parseDouble(stringY.replace(",", "."));
-                    return ColorUtil.xyToHsb(new double[] { x, y, Y });
+                    double pY = Double.parseDouble(stringY.replace(",", "."));
+                    return ColorUtil.xyToHsb(new double[] { x, y, pY });
                 }
             }
         }
index 23b056e05914aae35521926a1b246e76d0ec4070..f7ad538e2566a8b19a4554e886dcc00eba8b36ab 100644 (file)
@@ -154,7 +154,7 @@ public class ValueEncoder {
             case "232.60000":
                 // MDT specific: mis-use 232.600 for hsv instead of rgb
                 int hue = hsb.getHue().toBigDecimal().multiply(BigDecimal.valueOf(255))
-                        .divide(BigDecimal.valueOf(360), 2, RoundingMode.HALF_UP).intValue();
+                        .divide(BigDecimal.valueOf(360), 0, RoundingMode.HALF_UP).intValue();
                 return "r:" + hue + " g:" + convertPercentToByte(hsb.getSaturation()) + " b:"
                         + convertPercentToByte(hsb.getBrightness());
             case "242.600":
@@ -188,14 +188,20 @@ public class ValueEncoder {
                     || DPTXlator2ByteFloat.DPT_KELVIN_PER_PERCENT.getID().equals(dptId)) {
                 // match unicode character or °C
                 if (value.toString().contains(SIUnits.CELSIUS.getSymbol()) || value.toString().contains("°C")) {
-                    unit = unit.replace("K", "°C");
+                    if (unit != null) {
+                        unit = unit.replace("K", "°C");
+                    }
                 } else if (value.toString().contains("°F")) {
-                    unit = unit.replace("K", "°F");
+                    if (unit != null) {
+                        unit = unit.replace("K", "°F");
+                    }
                     value = ((QuantityType<?>) value).multiply(BigDecimal.valueOf(5.0 / 9.0));
                 }
             } else if (DPTXlator4ByteFloat.DPT_LIGHT_QUANTITY.getID().equals(dptId)) {
                 if (!value.toString().contains("J")) {
-                    unit = unit.replace("J", "lm*s");
+                    if (unit != null) {
+                        unit = unit.replace("J", "lm*s");
+                    }
                 }
             } else if (DPTXlator4ByteFloat.DPT_ELECTRIC_FLUX.getID().equals(dptId)) {
                 // use alternate definition of flux
@@ -250,6 +256,6 @@ public class ValueEncoder {
      */
     private static int convertPercentToByte(PercentType percent) {
         return percent.toBigDecimal().multiply(BigDecimal.valueOf(255))
-                .divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP).intValue();
+                .divide(BigDecimal.valueOf(100), 0, RoundingMode.HALF_UP).intValue();
     }
 }
index be5828a828682f1885d5156372337b2af185111a..040e16a72d696ded5bb7ef71e80e9eb21f285526 100644 (file)
@@ -505,12 +505,12 @@ public class DeviceThingHandler extends BaseThingHandler implements GroupAddress
     }
 
     protected void detachFromClient() {
-        final var pollingJobSynced = pollingJob;
+        ScheduledFuture<?> pollingJobSynced = pollingJob;
         if (pollingJobSynced != null) {
             pollingJobSynced.cancel(true);
             pollingJob = null;
         }
-        final var descriptionJobSynced = descriptionJob;
+        ScheduledFuture<?> descriptionJobSynced = descriptionJob;
         if (descriptionJobSynced != null) {
             descriptionJobSynced.cancel(true);
             descriptionJob = null;
index e2067d7f3c7653288b67d11d78311f2215134c2a..dbd2f1dfde32a1aa6dd52a3f36ea984971976186 100644 (file)
@@ -171,12 +171,13 @@ public class IPBridgeThingHandler extends KNXBridgeBaseThingHandler {
         if (!config.getLocalIp().isEmpty()) {
             localEndPoint = new InetSocketAddress(config.getLocalIp(), 0);
         } else {
-            if (networkAddressService == null) {
+            NetworkAddressService localNetworkAddressService = networkAddressService;
+            if (localNetworkAddressService == null) {
                 logger.debug("NetworkAddressService not available, cannot create bridge {}", thing.getUID());
                 updateStatus(ThingStatus.OFFLINE);
                 return;
             } else {
-                localEndPoint = new InetSocketAddress(networkAddressService.getPrimaryIpv4HostAddress(), 0);
+                localEndPoint = new InetSocketAddress(localNetworkAddressService.getPrimaryIpv4HostAddress(), 0);
             }
         }
 
@@ -186,7 +187,7 @@ public class IPBridgeThingHandler extends KNXBridgeBaseThingHandler {
                 secureTunnel.user, secureTunnel.userKey, thing.getUID(), config.getResponseTimeout(),
                 config.getReadingPause(), config.getReadRetriesLimit(), getScheduler(), this);
 
-        final var tmpClient = client;
+        IPClient tmpClient = client;
         if (tmpClient != null) {
             tmpClient.initialize();
         }
@@ -196,7 +197,7 @@ public class IPBridgeThingHandler extends KNXBridgeBaseThingHandler {
 
     @Override
     public void dispose() {
-        final var tmpInitJob = initJob;
+        Future<?> tmpInitJob = initJob;
         if (tmpInitJob != null) {
             while (!tmpInitJob.isDone()) {
                 logger.trace("Bridge {}, shutdown during init, trying to cancel", thing.getUID());
@@ -209,7 +210,7 @@ public class IPBridgeThingHandler extends KNXBridgeBaseThingHandler {
             }
             initJob = null;
         }
-        final var tmpClient = client;
+        IPClient tmpClient = client;
         if (tmpClient != null) {
             tmpClient.dispose();
             client = null;
index a97538165891d11ea9e2c40f3c5da18fa4078ce4..0c66934ac853602dcc7b400ddff7dbc799809999 100644 (file)
@@ -65,7 +65,7 @@ public class SerialBridgeThingHandler extends KNXBridgeBaseThingHandler {
     }
 
     public void initializeLater() {
-        final var tmpClient = client;
+        SerialClient tmpClient = client;
         if (tmpClient != null) {
             tmpClient.initialize();
         }
@@ -73,7 +73,7 @@ public class SerialBridgeThingHandler extends KNXBridgeBaseThingHandler {
 
     @Override
     public void dispose() {
-        final var tmpInitJob = initJob;
+        Future<?> tmpInitJob = initJob;
         if (tmpInitJob != null) {
             if (!tmpInitJob.isDone()) {
                 logger.trace("Bridge {}, shutdown during init, trying to cancel", thing.getUID());
@@ -87,7 +87,7 @@ public class SerialBridgeThingHandler extends KNXBridgeBaseThingHandler {
             initJob = null;
         }
 
-        final var tmpClient = client;
+        SerialClient tmpClient = client;
         if (tmpClient != null) {
             tmpClient.dispose();
             client = null;
index b61f55e7de9b7a82aeb1abe213ff0a5e75891f4d..79b328a9f4128a0c88b4dff6aa3df7276584a8bf 100644 (file)
@@ -326,6 +326,10 @@ class DPTTest {
         assertEquals(173.6, hsbType.getHue().doubleValue(), 0.1);
         assertEquals(17.6, hsbType.getSaturation().doubleValue(), 0.1);
         assertEquals(26.3, hsbType.getBrightness().doubleValue(), 0.1);
+
+        String encoded = ValueEncoder.encode(hsbType, "232.60000");
+        assertNotNull(encoded);
+        assertEquals(encoded, "r:" + data[0] + " g:" + data[1] + " b:" + data[2]);
     }
 
     @Test