diff --git a/src/main/java/com/beowulfe/hap/characteristics/FloatCharacteristic.java b/src/main/java/com/beowulfe/hap/characteristics/FloatCharacteristic.java index 474ca21f7..4ff06f36b 100644 --- a/src/main/java/com/beowulfe/hap/characteristics/FloatCharacteristic.java +++ b/src/main/java/com/beowulfe/hap/characteristics/FloatCharacteristic.java @@ -1,10 +1,12 @@ package com.beowulfe.hap.characteristics; -import java.util.concurrent.CompletableFuture; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import javax.json.JsonNumber; import javax.json.JsonObjectBuilder; import javax.json.JsonValue; +import java.util.concurrent.CompletableFuture; /** * A characteristic that provides a Float value type. @@ -13,6 +15,8 @@ */ public abstract class FloatCharacteristic extends BaseCharacteristic { + private final static Logger LOGGER = LoggerFactory.getLogger(FloatCharacteristic.class); + private final double minValue; private final double maxValue; private final double minStep; @@ -45,14 +49,11 @@ public FloatCharacteristic(String type, boolean isWritable, boolean isReadable, */ @Override protected CompletableFuture makeBuilder(int iid) { - return super.makeBuilder(iid).thenApply(builder -> { - return builder - .add("minValue", minValue) - .add("maxValue", maxValue) - .add("minStep", minStep) - .add("unit", unit); - }); - + return super.makeBuilder(iid).thenApply(builder -> builder + .add("minValue", minValue) + .add("maxValue", maxValue) + .add("minStep", minStep) + .add("unit", unit)); } /** @@ -69,7 +70,23 @@ protected Double convert(JsonValue jsonValue) { @Override protected final CompletableFuture getValue() { double rounder = 1 / this.minStep; - return getDoubleValue().thenApply(d -> d == null ? null : Math.round(d * rounder) / rounder); + return getDoubleValue().thenApply(d -> d == null ? null : Math.round(d * rounder) / rounder) + .thenApply(d -> { + if (d != null) { + if (d < minValue) { + LOGGER.warn("Detected value out of range " + d + + ". Returning min value instead. Characteristic " + this); + return minValue; + } + if (d > maxValue) { + LOGGER.warn("Detected value out of range " + d + + ". Returning max value instead. Characteristic " + this); + return maxValue; + } + return d; + } + return null; + }); } /** diff --git a/src/main/java/com/beowulfe/hap/impl/characteristics/carbonmonoxide/Carbon/CarbonMonoxideDetectedCharacteristic.java b/src/main/java/com/beowulfe/hap/impl/characteristics/carbonmonoxide/CarbonMonoxideDetectedCharacteristic.java similarity index 95% rename from src/main/java/com/beowulfe/hap/impl/characteristics/carbonmonoxide/Carbon/CarbonMonoxideDetectedCharacteristic.java rename to src/main/java/com/beowulfe/hap/impl/characteristics/carbonmonoxide/CarbonMonoxideDetectedCharacteristic.java index ace90bb9b..4e1dbf481 100644 --- a/src/main/java/com/beowulfe/hap/impl/characteristics/carbonmonoxide/Carbon/CarbonMonoxideDetectedCharacteristic.java +++ b/src/main/java/com/beowulfe/hap/impl/characteristics/carbonmonoxide/CarbonMonoxideDetectedCharacteristic.java @@ -1,4 +1,4 @@ -package com.beowulfe.hap.impl.characteristics.carbonmonoxide.Carbon; +package com.beowulfe.hap.impl.characteristics.carbonmonoxide; import com.beowulfe.hap.HomekitCharacteristicChangeCallback; import com.beowulfe.hap.accessories.CarbonMonoxideSensor; diff --git a/src/main/java/com/beowulfe/hap/impl/services/CarbonMonoxideSensorService.java b/src/main/java/com/beowulfe/hap/impl/services/CarbonMonoxideSensorService.java index 1017a4555..c84633af9 100644 --- a/src/main/java/com/beowulfe/hap/impl/services/CarbonMonoxideSensorService.java +++ b/src/main/java/com/beowulfe/hap/impl/services/CarbonMonoxideSensorService.java @@ -1,7 +1,7 @@ package com.beowulfe.hap.impl.services; import com.beowulfe.hap.accessories.CarbonMonoxideSensor; -import com.beowulfe.hap.impl.characteristics.carbonmonoxide.Carbon.CarbonMonoxideDetectedCharacteristic; +import com.beowulfe.hap.impl.characteristics.carbonmonoxide.CarbonMonoxideDetectedCharacteristic; public class CarbonMonoxideSensorService extends AbstractServiceImpl {