diff --git a/bundles/org.openhab.binding.somfytahoma/src/main/java/org/openhab/binding/somfytahoma/internal/handler/SomfyTahomaBaseThingHandler.java b/bundles/org.openhab.binding.somfytahoma/src/main/java/org/openhab/binding/somfytahoma/internal/handler/SomfyTahomaBaseThingHandler.java index 54ee305b3..9861a59c7 100644 --- a/bundles/org.openhab.binding.somfytahoma/src/main/java/org/openhab/binding/somfytahoma/internal/handler/SomfyTahomaBaseThingHandler.java +++ b/bundles/org.openhab.binding.somfytahoma/src/main/java/org/openhab/binding/somfytahoma/internal/handler/SomfyTahomaBaseThingHandler.java @@ -14,9 +14,11 @@ package org.openhab.binding.somfytahoma.internal.handler; import static org.openhab.binding.somfytahoma.internal.SomfyTahomaBindingConstants.*; +import java.math.BigDecimal; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; import javax.measure.Unit; @@ -231,6 +233,10 @@ public abstract class SomfyTahomaBaseThingHandler extends BaseThingHandler { } } + protected Unit getTemperatureUnit() { + return Objects.requireNonNull(units.get("Number:Temperature")); + } + private void updateUnits(List attributes) { for (SomfyTahomaState attr : attributes) { if ("core:MeasuredValueType".equals(attr.getName()) && attr.getType() == TYPE_STRING) { @@ -387,12 +393,7 @@ public abstract class SomfyTahomaBaseThingHandler extends BaseThingHandler { } private @Nullable SomfyTahomaState getStatusState(List states) { - for (SomfyTahomaState state : states) { - if (STATUS_STATE.equals(state.getName()) && state.getType() == TYPE_STRING) { - return state; - } - } - return null; + return getState(states, STATUS_STATE, TYPE_STRING); } private void updateThingStatus(@Nullable SomfyTahomaState state) { @@ -456,4 +457,29 @@ public abstract class SomfyTahomaBaseThingHandler extends BaseThingHandler { public int toInteger(Command command) { return (command instanceof DecimalType) ? ((DecimalType) command).intValue() : 0; } + + public @Nullable BigDecimal toTemperature(Command command) { + BigDecimal temperature = null; + if (command instanceof QuantityType) { + QuantityType quantity = (QuantityType) command; + QuantityType convertedQuantity = quantity.toUnit(getTemperatureUnit()); + if (convertedQuantity != null) { + quantity = convertedQuantity; + } + temperature = quantity.toBigDecimal(); + } else if (command instanceof DecimalType) { + temperature = ((DecimalType) command).toBigDecimal(); + } + return temperature; + } + + public static @Nullable SomfyTahomaState getState(List states, String stateName, + @Nullable Integer stateType) { + for (SomfyTahomaState state : states) { + if (stateName.equals(state.getName()) && (stateType == null || stateType == state.getType())) { + return state; + } + } + return null; + } } diff --git a/bundles/org.openhab.binding.somfytahoma/src/main/java/org/openhab/binding/somfytahoma/internal/handler/SomfyTahomaElectricitySensorHandler.java b/bundles/org.openhab.binding.somfytahoma/src/main/java/org/openhab/binding/somfytahoma/internal/handler/SomfyTahomaElectricitySensorHandler.java index 96059de1d..4f197a54b 100644 --- a/bundles/org.openhab.binding.somfytahoma/src/main/java/org/openhab/binding/somfytahoma/internal/handler/SomfyTahomaElectricitySensorHandler.java +++ b/bundles/org.openhab.binding.somfytahoma/src/main/java/org/openhab/binding/somfytahoma/internal/handler/SomfyTahomaElectricitySensorHandler.java @@ -14,6 +14,7 @@ package org.openhab.binding.somfytahoma.internal.handler; import static org.openhab.binding.somfytahoma.internal.SomfyTahomaBindingConstants.*; +import org.eclipse.jdt.annotation.NonNullByDefault; import org.openhab.core.thing.Thing; /** @@ -22,6 +23,7 @@ import org.openhab.core.thing.Thing; * * @author Ondrej Pecta - Initial contribution */ +@NonNullByDefault public class SomfyTahomaElectricitySensorHandler extends SomfyTahomaBaseThingHandler { public SomfyTahomaElectricitySensorHandler(Thing thing) { diff --git a/bundles/org.openhab.binding.somfytahoma/src/main/java/org/openhab/binding/somfytahoma/internal/handler/SomfyTahomaValveHeatingSystemHandler.java b/bundles/org.openhab.binding.somfytahoma/src/main/java/org/openhab/binding/somfytahoma/internal/handler/SomfyTahomaValveHeatingSystemHandler.java index 6b8aa1f56..2bc81ecd2 100644 --- a/bundles/org.openhab.binding.somfytahoma/src/main/java/org/openhab/binding/somfytahoma/internal/handler/SomfyTahomaValveHeatingSystemHandler.java +++ b/bundles/org.openhab.binding.somfytahoma/src/main/java/org/openhab/binding/somfytahoma/internal/handler/SomfyTahomaValveHeatingSystemHandler.java @@ -14,8 +14,9 @@ package org.openhab.binding.somfytahoma.internal.handler; import static org.openhab.binding.somfytahoma.internal.SomfyTahomaBindingConstants.*; +import java.math.BigDecimal; + import org.eclipse.jdt.annotation.NonNullByDefault; -import org.openhab.core.library.types.QuantityType; import org.openhab.core.thing.ChannelUID; import org.openhab.core.thing.Thing; import org.openhab.core.types.Command; @@ -47,10 +48,12 @@ public class SomfyTahomaValveHeatingSystemHandler extends SomfyTahomaBaseThingHa if (command instanceof RefreshType) { return; } else { - if (DEROGATED_TARGET_TEMPERATURE.equals(channelUID.getId()) && command instanceof QuantityType) { - QuantityType type = (QuantityType) command; - String param = "[" + type.doubleValue() + ", \"next_mode\"]"; - sendCommand(COMMAND_SET_DEROGATION, param); + if (DEROGATED_TARGET_TEMPERATURE.equals(channelUID.getId())) { + BigDecimal temperature = toTemperature(command); + if (temperature != null) { + String param = "[" + temperature.toPlainString() + ", \"next_mode\"]"; + sendCommand(COMMAND_SET_DEROGATION, param); + } } else if (DEROGATION_HEATING_MODE.equals(channelUID.getId())) { switch (command.toString()) { case "auto": diff --git a/bundles/org.openhab.binding.somfytahoma/src/main/java/org/openhab/binding/somfytahoma/internal/handler/SomfyTahomaZwaveHeatingSystemHandler.java b/bundles/org.openhab.binding.somfytahoma/src/main/java/org/openhab/binding/somfytahoma/internal/handler/SomfyTahomaZwaveHeatingSystemHandler.java index d166336d7..791170411 100644 --- a/bundles/org.openhab.binding.somfytahoma/src/main/java/org/openhab/binding/somfytahoma/internal/handler/SomfyTahomaZwaveHeatingSystemHandler.java +++ b/bundles/org.openhab.binding.somfytahoma/src/main/java/org/openhab/binding/somfytahoma/internal/handler/SomfyTahomaZwaveHeatingSystemHandler.java @@ -14,6 +14,8 @@ package org.openhab.binding.somfytahoma.internal.handler; import static org.openhab.binding.somfytahoma.internal.SomfyTahomaBindingConstants.*; +import java.math.BigDecimal; + import org.eclipse.jdt.annotation.NonNullByDefault; import org.openhab.core.thing.ChannelUID; import org.openhab.core.thing.Thing; @@ -44,8 +46,11 @@ public class SomfyTahomaZwaveHeatingSystemHandler extends SomfyTahomaBaseThingHa return; } else { if (TARGET_TEMPERATURE.equals(channelUID.getId())) { - String param = "[" + command.toString() + "]"; - sendCommand("setTargetTemperature", param); + BigDecimal temperature = toTemperature(command); + if (temperature != null) { + String param = "[" + temperature.toPlainString() + "]"; + sendCommand("setTargetTemperature", param); + } } } }