]> git.basschouten.com Git - openhab-addons.git/commitdiff
[influxdb] support restoring unit for dimension items (#15009)
authorJ-N-K <github@klug.nrw>
Sat, 20 May 2023 21:01:23 +0000 (23:01 +0200)
committerGitHub <noreply@github.com>
Sat, 20 May 2023 21:01:23 +0000 (23:01 +0200)
Signed-off-by: Jan N. Klug <github@klug.nrw>
bundles/org.openhab.persistence.influxdb/src/main/java/org/openhab/persistence/influxdb/internal/InfluxDBStateConvertUtils.java
bundles/org.openhab.persistence.influxdb/src/test/java/org/openhab/persistence/influxdb/internal/InfluxDBStateConvertUtilsTest.java

index 5b54ff6de31ac3c3e7e584172644ad3ff867bba6..d9ce0749a1f2470dde4891b5807993ffecd6b300 100644 (file)
@@ -17,6 +17,8 @@ import java.time.Instant;
 import java.time.ZonedDateTime;
 import java.util.TimeZone;
 
+import javax.measure.Unit;
+
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.eclipse.jdt.annotation.Nullable;
 import org.openhab.core.items.GroupItem;
@@ -116,8 +118,13 @@ public class InfluxDBStateConvertUtils {
             return new HSBType(valueStr);
         } else if (item instanceof LocationItem) {
             return new PointType(valueStr);
-        } else if (item instanceof NumberItem) {
-            return new DecimalType(valueStr);
+        } else if (item instanceof NumberItem numberItem) {
+            Unit<?> unit = numberItem.getUnit();
+            if (unit == null) {
+                return new DecimalType(valueStr);
+            } else {
+                return new QuantityType<>(new BigDecimal(valueStr), unit);
+            }
         } else if (item instanceof DimmerItem) {
             return new PercentType(valueStr);
         } else if (item instanceof SwitchItem) {
index b430d5b8b93e231942acb2c855a323ce1c0c9128..249697475f8f24ea62902d552d72860721b1a935 100644 (file)
@@ -15,16 +15,22 @@ package org.openhab.persistence.influxdb.internal;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.is;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 import java.math.BigDecimal;
 import java.time.Instant;
 import java.time.ZoneId;
 import java.time.ZonedDateTime;
 
+import javax.measure.Unit;
+
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.ValueSource;
+import org.openhab.core.i18n.UnitProvider;
 import org.openhab.core.library.items.ContactItem;
 import org.openhab.core.library.items.DateTimeItem;
 import org.openhab.core.library.items.NumberItem;
@@ -33,6 +39,8 @@ import org.openhab.core.library.types.DateTimeType;
 import org.openhab.core.library.types.DecimalType;
 import org.openhab.core.library.types.OnOffType;
 import org.openhab.core.library.types.OpenClosedType;
+import org.openhab.core.library.types.QuantityType;
+import org.openhab.core.library.unit.SIUnits;
 
 /**
  * @author Joan Pujol Espinar - Initial contribution
@@ -69,9 +77,14 @@ public class InfluxDBStateConvertUtilsTest {
     @ParameterizedTest
     @ValueSource(strings = { "1.12", "25" })
     public void convertDecimalToState(String number) {
+        UnitProvider unitProviderMock = mock(UnitProvider.class);
+        when(unitProviderMock.getUnit(any())).thenReturn((Unit) SIUnits.CELSIUS);
         BigDecimal val = new BigDecimal(number);
-        NumberItem item = new NumberItem("name");
-        assertThat(InfluxDBStateConvertUtils.objectToState(val, item), equalTo(new DecimalType(val)));
+        NumberItem plainItem = new NumberItem("plain");
+        NumberItem dimensionItem = new NumberItem("Number:Temperature", "dimension", unitProviderMock);
+        assertThat(InfluxDBStateConvertUtils.objectToState(val, plainItem), equalTo(new DecimalType(val)));
+        assertThat(InfluxDBStateConvertUtils.objectToState(val, dimensionItem),
+                equalTo(new QuantityType<>(new BigDecimal(number), SIUnits.CELSIUS)));
     }
 
     @Test