import org.openhab.core.library.types.StringType;
import org.openhab.core.library.types.UpDownType;
import org.openhab.core.library.unit.SIUnits;
+import org.openhab.core.library.unit.Units;
import org.openhab.core.types.Type;
import org.openhab.core.util.ColorUtil;
import org.slf4j.Logger;
unit = unit.replace("K", "°C");
}
} else if (value.toString().contains("°F")) {
- if (unit != null) {
- unit = unit.replace("K", "°F");
+ // an new approach to handle temperature differences was introduced to core
+ // after 4.0, stripping the unit and and creating a new QuantityType works
+ // both with core release 4.0 and current snapshot
+ boolean perPercent = value.toString().contains("/%");
+ value = new QuantityType<>(((QuantityType<?>) value).doubleValue() * 5.0 / 9.0, Units.KELVIN);
+ // PercentType needs to be adapted
+ if (perPercent) {
+ value = ((QuantityType<?>) value).multiply(BigDecimal.valueOf(100));
}
- value = ((QuantityType<?>) value).multiply(BigDecimal.valueOf(5.0 / 9.0));
}
} else if (DPTXlator4ByteFloat.DPT_LIGHT_QUANTITY.getID().equals(dptId)) {
if (!value.toString().contains("J")) {
assertEquals("1", ValueEncoder.encode(new QuantityType<>("1 K"), "9.002"));
assertEquals("1", ValueEncoder.encode(new QuantityType<>("1000 mK"), "9.002"));
assertEquals("1", ValueEncoder.encode(new QuantityType<>("1 °C"), "9.002"));
- // TODO
- // assertTrue(ValueEncoder.encode(new QuantityType<>("1 °F"), "9.002").startsWith("0.55"));
+ assertTrue(ValueEncoder.encode(new QuantityType<>("1 °F"), "9.002").startsWith("0.55"));
assertEquals("1", ValueEncoder.encode(new QuantityType<>("1 K/h"), "9.003"));
assertEquals("1", ValueEncoder.encode(new QuantityType<>("1 °C/h"), "9.003"));
assertEquals("1", ValueEncoder.encode(new QuantityType<>("1000 mK/h"), "9.003"));
assertEquals("12", ValueEncoder.encode(new QuantityType<>("12 W/m²"), "9.022"));
assertEquals("1", ValueEncoder.encode(new QuantityType<>("1 K/%"), "9.023"));
assertEquals("1", ValueEncoder.encode(new QuantityType<>("1 °C/%"), "9.023"));
- // TODO
- // assertTrue(ValueEncoder.encode(new QuantityType<>("1 °F/%"), "9.023").startsWith("0.55"));
+ assertTrue(ValueEncoder.encode(new QuantityType<>("1 °F/%"), "9.023").startsWith("0.55"));
assertEquals("1", ValueEncoder.encode(new QuantityType<>("1 kW"), "9.024"));
assertEquals("1", ValueEncoder.encode(new QuantityType<>("1 l/h"), "9.025"));
assertEquals("60", ValueEncoder.encode(new QuantityType<>("1 l/min"), "9.025"));