return min value instead of 0 (#11803)

Signed-off-by: Eugen Freiter <freiter@gmx.de>

Co-authored-by: Eugen Freiter <freiter@gmx.de>
This commit is contained in:
eugen
2021-12-28 13:19:55 +01:00
committed by GitHub
parent d2c06fbbe1
commit b6af3aba9f
4 changed files with 66 additions and 19 deletions

View File

@@ -286,10 +286,11 @@ public class HomekitCharacteristicFactory {
}; };
} }
private static Supplier<CompletableFuture<Double>> getDoubleSupplier(HomekitTaggedItem taggedItem) { private static Supplier<CompletableFuture<Double>> getDoubleSupplier(HomekitTaggedItem taggedItem,
double defaultValue) {
return () -> { return () -> {
final @Nullable DecimalType value = taggedItem.getItem().getStateAs(DecimalType.class); final @Nullable DecimalType value = taggedItem.getItem().getStateAs(DecimalType.class);
return CompletableFuture.completedFuture(value != null ? value.doubleValue() : 0.0); return CompletableFuture.completedFuture(value != null ? value.doubleValue() : defaultValue);
}; };
} }
@@ -373,28 +374,40 @@ public class HomekitCharacteristicFactory {
private static CarbonMonoxideLevelCharacteristic createCarbonMonoxideLevelCharacteristic( private static CarbonMonoxideLevelCharacteristic createCarbonMonoxideLevelCharacteristic(
HomekitTaggedItem taggedItem, HomekitAccessoryUpdater updater) { HomekitTaggedItem taggedItem, HomekitAccessoryUpdater updater) {
return new CarbonMonoxideLevelCharacteristic(getDoubleSupplier(taggedItem), return new CarbonMonoxideLevelCharacteristic(
getDoubleSupplier(taggedItem,
taggedItem.getConfigurationAsDouble(HomekitTaggedItem.MIN_VALUE,
CarbonMonoxideLevelCharacteristic.DEFAULT_MIN_VALUE)),
getSubscriber(taggedItem, CARBON_DIOXIDE_LEVEL, updater), getSubscriber(taggedItem, CARBON_DIOXIDE_LEVEL, updater),
getUnsubscriber(taggedItem, CARBON_DIOXIDE_LEVEL, updater)); getUnsubscriber(taggedItem, CARBON_DIOXIDE_LEVEL, updater));
} }
private static CarbonMonoxidePeakLevelCharacteristic createCarbonMonoxidePeakLevelCharacteristic( private static CarbonMonoxidePeakLevelCharacteristic createCarbonMonoxidePeakLevelCharacteristic(
HomekitTaggedItem taggedItem, HomekitAccessoryUpdater updater) { HomekitTaggedItem taggedItem, HomekitAccessoryUpdater updater) {
return new CarbonMonoxidePeakLevelCharacteristic(getDoubleSupplier(taggedItem), return new CarbonMonoxidePeakLevelCharacteristic(
getDoubleSupplier(taggedItem,
taggedItem.getConfigurationAsDouble(HomekitTaggedItem.MIN_VALUE,
CarbonMonoxidePeakLevelCharacteristic.DEFAULT_MIN_VALUE)),
getSubscriber(taggedItem, CARBON_DIOXIDE_PEAK_LEVEL, updater), getSubscriber(taggedItem, CARBON_DIOXIDE_PEAK_LEVEL, updater),
getUnsubscriber(taggedItem, CARBON_DIOXIDE_PEAK_LEVEL, updater)); getUnsubscriber(taggedItem, CARBON_DIOXIDE_PEAK_LEVEL, updater));
} }
private static CarbonDioxideLevelCharacteristic createCarbonDioxideLevelCharacteristic(HomekitTaggedItem taggedItem, private static CarbonDioxideLevelCharacteristic createCarbonDioxideLevelCharacteristic(HomekitTaggedItem taggedItem,
HomekitAccessoryUpdater updater) { HomekitAccessoryUpdater updater) {
return new CarbonDioxideLevelCharacteristic(getDoubleSupplier(taggedItem), return new CarbonDioxideLevelCharacteristic(
getDoubleSupplier(taggedItem,
taggedItem.getConfigurationAsDouble(HomekitTaggedItem.MIN_VALUE,
CarbonDioxideLevelCharacteristic.DEFAULT_MIN_VALUE)),
getSubscriber(taggedItem, CARBON_MONOXIDE_LEVEL, updater), getSubscriber(taggedItem, CARBON_MONOXIDE_LEVEL, updater),
getUnsubscriber(taggedItem, CARBON_MONOXIDE_LEVEL, updater)); getUnsubscriber(taggedItem, CARBON_MONOXIDE_LEVEL, updater));
} }
private static CarbonDioxidePeakLevelCharacteristic createCarbonDioxidePeakLevelCharacteristic( private static CarbonDioxidePeakLevelCharacteristic createCarbonDioxidePeakLevelCharacteristic(
HomekitTaggedItem taggedItem, HomekitAccessoryUpdater updater) { HomekitTaggedItem taggedItem, HomekitAccessoryUpdater updater) {
return new CarbonDioxidePeakLevelCharacteristic(getDoubleSupplier(taggedItem), return new CarbonDioxidePeakLevelCharacteristic(
getDoubleSupplier(taggedItem,
taggedItem.getConfigurationAsDouble(HomekitTaggedItem.MIN_VALUE,
CarbonDioxidePeakLevelCharacteristic.DEFAULT_MIN_VALUE)),
getSubscriber(taggedItem, CARBON_MONOXIDE_PEAK_LEVEL, updater), getSubscriber(taggedItem, CARBON_MONOXIDE_PEAK_LEVEL, updater),
getUnsubscriber(taggedItem, CARBON_MONOXIDE_PEAK_LEVEL, updater)); getUnsubscriber(taggedItem, CARBON_MONOXIDE_PEAK_LEVEL, updater));
} }
@@ -618,8 +631,10 @@ public class HomekitCharacteristicFactory {
CoolingThresholdTemperatureCharacteristic.DEFAULT_MAX_VALUE), CoolingThresholdTemperatureCharacteristic.DEFAULT_MAX_VALUE),
taggedItem.getConfigurationAsDouble(HomekitTaggedItem.STEP, taggedItem.getConfigurationAsDouble(HomekitTaggedItem.STEP,
CoolingThresholdTemperatureCharacteristic.DEFAULT_STEP), CoolingThresholdTemperatureCharacteristic.DEFAULT_STEP),
getDoubleSupplier(taggedItem), setDoubleConsumer(taggedItem), getDoubleSupplier(taggedItem,
getSubscriber(taggedItem, COOLING_THRESHOLD_TEMPERATURE, updater), taggedItem.getConfigurationAsDouble(HomekitTaggedItem.MIN_VALUE,
CoolingThresholdTemperatureCharacteristic.DEFAULT_MIN_VALUE)),
setDoubleConsumer(taggedItem), getSubscriber(taggedItem, COOLING_THRESHOLD_TEMPERATURE, updater),
getUnsubscriber(taggedItem, COOLING_THRESHOLD_TEMPERATURE, updater)); getUnsubscriber(taggedItem, COOLING_THRESHOLD_TEMPERATURE, updater));
} }
@@ -632,46 +647,66 @@ public class HomekitCharacteristicFactory {
HeatingThresholdTemperatureCharacteristic.DEFAULT_MAX_VALUE), HeatingThresholdTemperatureCharacteristic.DEFAULT_MAX_VALUE),
taggedItem.getConfigurationAsDouble(HomekitTaggedItem.STEP, taggedItem.getConfigurationAsDouble(HomekitTaggedItem.STEP,
HeatingThresholdTemperatureCharacteristic.DEFAULT_STEP), HeatingThresholdTemperatureCharacteristic.DEFAULT_STEP),
getDoubleSupplier(taggedItem), setDoubleConsumer(taggedItem), getDoubleSupplier(taggedItem,
getSubscriber(taggedItem, HEATING_THRESHOLD_TEMPERATURE, updater), taggedItem.getConfigurationAsDouble(HomekitTaggedItem.MIN_VALUE,
HeatingThresholdTemperatureCharacteristic.DEFAULT_MIN_VALUE)),
setDoubleConsumer(taggedItem), getSubscriber(taggedItem, HEATING_THRESHOLD_TEMPERATURE, updater),
getUnsubscriber(taggedItem, HEATING_THRESHOLD_TEMPERATURE, updater)); getUnsubscriber(taggedItem, HEATING_THRESHOLD_TEMPERATURE, updater));
} }
private static OzoneDensityCharacteristic createOzoneDensityCharacteristic(final HomekitTaggedItem taggedItem, private static OzoneDensityCharacteristic createOzoneDensityCharacteristic(final HomekitTaggedItem taggedItem,
HomekitAccessoryUpdater updater) { HomekitAccessoryUpdater updater) {
return new OzoneDensityCharacteristic(getDoubleSupplier(taggedItem), return new OzoneDensityCharacteristic(
getDoubleSupplier(taggedItem,
taggedItem.getConfigurationAsDouble(HomekitTaggedItem.MIN_VALUE,
OzoneDensityCharacteristic.DEFAULT_MIN_VALUE)),
getSubscriber(taggedItem, OZONE_DENSITY, updater), getUnsubscriber(taggedItem, OZONE_DENSITY, updater)); getSubscriber(taggedItem, OZONE_DENSITY, updater), getUnsubscriber(taggedItem, OZONE_DENSITY, updater));
} }
private static NitrogenDioxideDensityCharacteristic createNitrogenDioxideDensityCharacteristic( private static NitrogenDioxideDensityCharacteristic createNitrogenDioxideDensityCharacteristic(
final HomekitTaggedItem taggedItem, HomekitAccessoryUpdater updater) { final HomekitTaggedItem taggedItem, HomekitAccessoryUpdater updater) {
return new NitrogenDioxideDensityCharacteristic(getDoubleSupplier(taggedItem), return new NitrogenDioxideDensityCharacteristic(
getDoubleSupplier(taggedItem,
taggedItem.getConfigurationAsDouble(HomekitTaggedItem.MIN_VALUE,
NitrogenDioxideDensityCharacteristic.DEFAULT_MIN_VALUE)),
getSubscriber(taggedItem, NITROGEN_DIOXIDE_DENSITY, updater), getSubscriber(taggedItem, NITROGEN_DIOXIDE_DENSITY, updater),
getUnsubscriber(taggedItem, NITROGEN_DIOXIDE_DENSITY, updater)); getUnsubscriber(taggedItem, NITROGEN_DIOXIDE_DENSITY, updater));
} }
private static SulphurDioxideDensityCharacteristic createSulphurDioxideDensityCharacteristic( private static SulphurDioxideDensityCharacteristic createSulphurDioxideDensityCharacteristic(
final HomekitTaggedItem taggedItem, HomekitAccessoryUpdater updater) { final HomekitTaggedItem taggedItem, HomekitAccessoryUpdater updater) {
return new SulphurDioxideDensityCharacteristic(getDoubleSupplier(taggedItem), return new SulphurDioxideDensityCharacteristic(
getDoubleSupplier(taggedItem,
taggedItem.getConfigurationAsDouble(HomekitTaggedItem.MIN_VALUE,
SulphurDioxideDensityCharacteristic.DEFAULT_MIN_VALUE)),
getSubscriber(taggedItem, SULPHUR_DIOXIDE_DENSITY, updater), getSubscriber(taggedItem, SULPHUR_DIOXIDE_DENSITY, updater),
getUnsubscriber(taggedItem, SULPHUR_DIOXIDE_DENSITY, updater)); getUnsubscriber(taggedItem, SULPHUR_DIOXIDE_DENSITY, updater));
} }
private static PM25DensityCharacteristic createPM25DensityCharacteristic(final HomekitTaggedItem taggedItem, private static PM25DensityCharacteristic createPM25DensityCharacteristic(final HomekitTaggedItem taggedItem,
HomekitAccessoryUpdater updater) { HomekitAccessoryUpdater updater) {
return new PM25DensityCharacteristic(getDoubleSupplier(taggedItem), return new PM25DensityCharacteristic(
getDoubleSupplier(taggedItem,
taggedItem.getConfigurationAsDouble(HomekitTaggedItem.MIN_VALUE,
PM25DensityCharacteristic.DEFAULT_MIN_VALUE)),
getSubscriber(taggedItem, PM25_DENSITY, updater), getUnsubscriber(taggedItem, PM25_DENSITY, updater)); getSubscriber(taggedItem, PM25_DENSITY, updater), getUnsubscriber(taggedItem, PM25_DENSITY, updater));
} }
private static PM10DensityCharacteristic createPM10DensityCharacteristic(final HomekitTaggedItem taggedItem, private static PM10DensityCharacteristic createPM10DensityCharacteristic(final HomekitTaggedItem taggedItem,
HomekitAccessoryUpdater updater) { HomekitAccessoryUpdater updater) {
return new PM10DensityCharacteristic(getDoubleSupplier(taggedItem), return new PM10DensityCharacteristic(
getDoubleSupplier(taggedItem,
taggedItem.getConfigurationAsDouble(HomekitTaggedItem.MIN_VALUE,
PM10DensityCharacteristic.DEFAULT_MIN_VALUE)),
getSubscriber(taggedItem, PM10_DENSITY, updater), getUnsubscriber(taggedItem, PM10_DENSITY, updater)); getSubscriber(taggedItem, PM10_DENSITY, updater), getUnsubscriber(taggedItem, PM10_DENSITY, updater));
} }
private static VOCDensityCharacteristic createVOCDensityCharacteristic(final HomekitTaggedItem taggedItem, private static VOCDensityCharacteristic createVOCDensityCharacteristic(final HomekitTaggedItem taggedItem,
HomekitAccessoryUpdater updater) { HomekitAccessoryUpdater updater) {
return new VOCDensityCharacteristic(getDoubleSupplier(taggedItem), return new VOCDensityCharacteristic(
getDoubleSupplier(taggedItem,
taggedItem.getConfigurationAsDouble(HomekitTaggedItem.MIN_VALUE,
VOCDensityCharacteristic.DEFAULT_MIN_VALUE)),
getSubscriber(taggedItem, VOC_DENSITY, updater), getUnsubscriber(taggedItem, VOC_DENSITY, updater)); getSubscriber(taggedItem, VOC_DENSITY, updater), getUnsubscriber(taggedItem, VOC_DENSITY, updater));
} }
} }

View File

@@ -16,6 +16,7 @@ import static org.openhab.io.homekit.internal.HomekitCharacteristicType.ACTIVE_S
import static org.openhab.io.homekit.internal.HomekitCharacteristicType.CURRENT_HEATER_COOLER_STATE; import static org.openhab.io.homekit.internal.HomekitCharacteristicType.CURRENT_HEATER_COOLER_STATE;
import static org.openhab.io.homekit.internal.HomekitCharacteristicType.TARGET_HEATER_COOLER_STATE; import static org.openhab.io.homekit.internal.HomekitCharacteristicType.TARGET_HEATER_COOLER_STATE;
import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.EnumMap; import java.util.EnumMap;
import java.util.List; import java.util.List;
@@ -41,6 +42,7 @@ import io.github.hapjava.accessories.HeaterCoolerAccessory;
import io.github.hapjava.characteristics.HomekitCharacteristicChangeCallback; import io.github.hapjava.characteristics.HomekitCharacteristicChangeCallback;
import io.github.hapjava.characteristics.impl.heatercooler.CurrentHeaterCoolerStateEnum; import io.github.hapjava.characteristics.impl.heatercooler.CurrentHeaterCoolerStateEnum;
import io.github.hapjava.characteristics.impl.heatercooler.TargetHeaterCoolerStateEnum; import io.github.hapjava.characteristics.impl.heatercooler.TargetHeaterCoolerStateEnum;
import io.github.hapjava.characteristics.impl.thermostat.CurrentTemperatureCharacteristic;
import io.github.hapjava.characteristics.impl.thermostat.TemperatureDisplayUnitCharacteristic; import io.github.hapjava.characteristics.impl.thermostat.TemperatureDisplayUnitCharacteristic;
import io.github.hapjava.characteristics.impl.thermostat.TemperatureDisplayUnitEnum; import io.github.hapjava.characteristics.impl.thermostat.TemperatureDisplayUnitEnum;
import io.github.hapjava.services.impl.HeaterCoolerService; import io.github.hapjava.services.impl.HeaterCoolerService;
@@ -106,7 +108,9 @@ public class HomekitHeaterCoolerImpl extends AbstractHomekitAccessoryImpl implem
public CompletableFuture<Double> getCurrentTemperature() { public CompletableFuture<Double> getCurrentTemperature() {
final @Nullable DecimalType state = getStateAs(HomekitCharacteristicType.CURRENT_TEMPERATURE, final @Nullable DecimalType state = getStateAs(HomekitCharacteristicType.CURRENT_TEMPERATURE,
DecimalType.class); DecimalType.class);
return CompletableFuture.completedFuture(state != null ? convertToCelsius(state.doubleValue()) : 0.0); return CompletableFuture.completedFuture(state != null ? convertToCelsius(state.doubleValue())
: getAccessoryConfiguration(HomekitCharacteristicType.CURRENT_TEMPERATURE, HomekitTaggedItem.MIN_VALUE,
BigDecimal.valueOf(CurrentTemperatureCharacteristic.DEFAULT_MIN_VALUE)).doubleValue());
} }
@Override @Override

View File

@@ -14,17 +14,20 @@ package org.openhab.io.homekit.internal.accessories;
import static org.openhab.io.homekit.internal.HomekitCharacteristicType.LIGHT_LEVEL; import static org.openhab.io.homekit.internal.HomekitCharacteristicType.LIGHT_LEVEL;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import org.eclipse.jdt.annotation.Nullable; import org.eclipse.jdt.annotation.Nullable;
import org.openhab.core.library.types.DecimalType; import org.openhab.core.library.types.DecimalType;
import org.openhab.io.homekit.internal.HomekitAccessoryUpdater; import org.openhab.io.homekit.internal.HomekitAccessoryUpdater;
import org.openhab.io.homekit.internal.HomekitCharacteristicType;
import org.openhab.io.homekit.internal.HomekitSettings; import org.openhab.io.homekit.internal.HomekitSettings;
import org.openhab.io.homekit.internal.HomekitTaggedItem; import org.openhab.io.homekit.internal.HomekitTaggedItem;
import io.github.hapjava.accessories.LightSensorAccessory; import io.github.hapjava.accessories.LightSensorAccessory;
import io.github.hapjava.characteristics.HomekitCharacteristicChangeCallback; import io.github.hapjava.characteristics.HomekitCharacteristicChangeCallback;
import io.github.hapjava.characteristics.impl.lightsensor.CurrentAmbientLightLevelCharacteristic;
import io.github.hapjava.services.impl.LightSensorService; import io.github.hapjava.services.impl.LightSensorService;
/** /**
@@ -43,7 +46,11 @@ public class HomekitLightSensorImpl extends AbstractHomekitAccessoryImpl impleme
@Override @Override
public CompletableFuture<Double> getCurrentAmbientLightLevel() { public CompletableFuture<Double> getCurrentAmbientLightLevel() {
final @Nullable DecimalType state = getStateAs(LIGHT_LEVEL, DecimalType.class); final @Nullable DecimalType state = getStateAs(LIGHT_LEVEL, DecimalType.class);
return CompletableFuture.completedFuture(state != null ? state.doubleValue() : 0.0); return CompletableFuture
.completedFuture(state != null ? state.doubleValue()
: getAccessoryConfiguration(HomekitCharacteristicType.LIGHT_LEVEL, HomekitTaggedItem.MIN_VALUE,
BigDecimal.valueOf(CurrentAmbientLightLevelCharacteristic.DEFAULT_MIN_VALUE))
.doubleValue());
} }
@Override @Override

View File

@@ -45,7 +45,8 @@ class HomekitTemperatureSensorImpl extends AbstractHomekitAccessoryImpl implemen
public CompletableFuture<Double> getCurrentTemperature() { public CompletableFuture<Double> getCurrentTemperature() {
final @Nullable DecimalType state = getStateAs(HomekitCharacteristicType.CURRENT_TEMPERATURE, final @Nullable DecimalType state = getStateAs(HomekitCharacteristicType.CURRENT_TEMPERATURE,
DecimalType.class); DecimalType.class);
return CompletableFuture.completedFuture(state != null ? convertToCelsius(state.doubleValue()) : 0.0); return CompletableFuture
.completedFuture(state != null ? convertToCelsius(state.doubleValue()) : getMinCurrentTemperature());
} }
@Override @Override