]> git.basschouten.com Git - openhab-addons.git/commitdiff
fix: Support Quantity Types (#11229)
authorPeter Schraffl <p.schraffl@gmx.at>
Sat, 2 Oct 2021 23:38:28 +0000 (01:38 +0200)
committerGitHub <noreply@github.com>
Sat, 2 Oct 2021 23:38:28 +0000 (01:38 +0200)
Signed-off-by: Schraffl Peter <p.schraffl@gmx.at>
bundles/org.openhab.binding.bsblan/src/main/java/org/openhab/binding/bsblan/internal/helper/BsbLanParameterConverter.java
bundles/org.openhab.binding.bsblan/src/test/java/org/openhab/binding/bsblan/internal/helper/BsbLanParameterConverterTests.java

index e9d24f19c9e09cb1c75289173f2ba48bb4f10a6b..9a4e997e7530680cbeccf3e0e9ce7c5ef8d6135c 100644 (file)
@@ -21,6 +21,7 @@ import org.openhab.binding.bsblan.internal.api.dto.BsbLanApiParameterDTO;
 import org.openhab.binding.bsblan.internal.handler.BsbLanParameterHandler;
 import org.openhab.core.library.types.DecimalType;
 import org.openhab.core.library.types.OnOffType;
+import org.openhab.core.library.types.QuantityType;
 import org.openhab.core.library.types.StringType;
 import org.openhab.core.types.Command;
 import org.openhab.core.types.State;
@@ -134,8 +135,13 @@ public class BsbLanParameterConverter {
     }
 
     private static @Nullable String getValueForNumberValueChannel(Command command) {
+        if (command instanceof QuantityType<?>) {
+            // the target unit is yet unknown, so just use the value as is (without converting based on the unit)
+            QuantityType<?> quantity = (QuantityType<?>) command;
+            return String.valueOf(quantity.doubleValue());
+        }
         // check if numeric
-        if (command.toString().matches("-?\\d+(\\.\\d+)?")) {
+        else if (command.toString().matches("-?\\d+(\\.\\d+)?")) {
             return command.toString();
         }
         LOGGER.warn("Command '{}' is not a valid number value", command);
index 1eb846f75c9854c8659d9d89efa46b9331784513..b3f2ad07efb4083c912b8e5ea1a9203a1c3af981 100644 (file)
@@ -20,7 +20,10 @@ import org.junit.jupiter.api.Test;
 import org.openhab.binding.bsblan.internal.api.dto.BsbLanApiParameterDTO;
 import org.openhab.core.library.types.DecimalType;
 import org.openhab.core.library.types.OnOffType;
+import org.openhab.core.library.types.PercentType;
+import org.openhab.core.library.types.QuantityType;
 import org.openhab.core.library.types.StringType;
+import org.openhab.core.library.unit.SIUnits;
 import org.openhab.core.types.State;
 
 /**
@@ -219,11 +222,14 @@ public class BsbLanParameterConverterTests {
     public void testGetValueForNumberValueChannel() {
         assertNull(BsbLanParameterConverter.getValue(PARAMETER_CHANNEL_NUMBER_VALUE, OnOffType.ON), "1");
         assertNull(BsbLanParameterConverter.getValue(PARAMETER_CHANNEL_NUMBER_VALUE, OnOffType.OFF), "0");
-        assertEquals(BsbLanParameterConverter.getValue(PARAMETER_CHANNEL_NUMBER_VALUE, new DecimalType(42)), "42");
-        assertEquals(BsbLanParameterConverter.getValue(PARAMETER_CHANNEL_NUMBER_VALUE, new DecimalType(22.5)), "22.5");
+        assertEquals("42", BsbLanParameterConverter.getValue(PARAMETER_CHANNEL_NUMBER_VALUE, new DecimalType(42)));
+        assertEquals("22.5", BsbLanParameterConverter.getValue(PARAMETER_CHANNEL_NUMBER_VALUE, new DecimalType(22.5)));
         assertNull(BsbLanParameterConverter.getValue(PARAMETER_CHANNEL_NUMBER_VALUE,
                 new StringType("Not a number value")));
         assertNull(BsbLanParameterConverter.getValue(PARAMETER_CHANNEL_NUMBER_VALUE, new StringType("")));
+        assertEquals("75", BsbLanParameterConverter.getValue(PARAMETER_CHANNEL_NUMBER_VALUE, new PercentType(75)));
+        assertEquals("22.5", BsbLanParameterConverter.getValue(PARAMETER_CHANNEL_NUMBER_VALUE,
+                new QuantityType<>(22.5, SIUnits.CELSIUS)));
     }
 
     @Test