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
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
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 () -> {
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(
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),
getUnsubscriber(taggedItem, CARBON_DIOXIDE_LEVEL, updater));
}
private static CarbonMonoxidePeakLevelCharacteristic createCarbonMonoxidePeakLevelCharacteristic(
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),
getUnsubscriber(taggedItem, CARBON_DIOXIDE_PEAK_LEVEL, updater));
}
private static CarbonDioxideLevelCharacteristic createCarbonDioxideLevelCharacteristic(HomekitTaggedItem taggedItem,
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),
getUnsubscriber(taggedItem, CARBON_MONOXIDE_LEVEL, updater));
}
private static CarbonDioxidePeakLevelCharacteristic createCarbonDioxidePeakLevelCharacteristic(
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),
getUnsubscriber(taggedItem, CARBON_MONOXIDE_PEAK_LEVEL, updater));
}
@ -618,8 +631,10 @@ public class HomekitCharacteristicFactory {
CoolingThresholdTemperatureCharacteristic.DEFAULT_MAX_VALUE),
taggedItem.getConfigurationAsDouble(HomekitTaggedItem.STEP,
CoolingThresholdTemperatureCharacteristic.DEFAULT_STEP),
getDoubleSupplier(taggedItem), setDoubleConsumer(taggedItem),
getSubscriber(taggedItem, COOLING_THRESHOLD_TEMPERATURE, updater),
getDoubleSupplier(taggedItem,
taggedItem.getConfigurationAsDouble(HomekitTaggedItem.MIN_VALUE,
CoolingThresholdTemperatureCharacteristic.DEFAULT_MIN_VALUE)),
setDoubleConsumer(taggedItem), getSubscriber(taggedItem, COOLING_THRESHOLD_TEMPERATURE, updater),
getUnsubscriber(taggedItem, COOLING_THRESHOLD_TEMPERATURE, updater));
}
@ -632,46 +647,66 @@ public class HomekitCharacteristicFactory {
HeatingThresholdTemperatureCharacteristic.DEFAULT_MAX_VALUE),
taggedItem.getConfigurationAsDouble(HomekitTaggedItem.STEP,
HeatingThresholdTemperatureCharacteristic.DEFAULT_STEP),
getDoubleSupplier(taggedItem), setDoubleConsumer(taggedItem),
getSubscriber(taggedItem, HEATING_THRESHOLD_TEMPERATURE, updater),
getDoubleSupplier(taggedItem,
taggedItem.getConfigurationAsDouble(HomekitTaggedItem.MIN_VALUE,
HeatingThresholdTemperatureCharacteristic.DEFAULT_MIN_VALUE)),
setDoubleConsumer(taggedItem), getSubscriber(taggedItem, HEATING_THRESHOLD_TEMPERATURE, updater),
getUnsubscriber(taggedItem, HEATING_THRESHOLD_TEMPERATURE, updater));
}
private static OzoneDensityCharacteristic createOzoneDensityCharacteristic(final HomekitTaggedItem taggedItem,
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));
}
private static NitrogenDioxideDensityCharacteristic createNitrogenDioxideDensityCharacteristic(
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),
getUnsubscriber(taggedItem, NITROGEN_DIOXIDE_DENSITY, updater));
}
private static SulphurDioxideDensityCharacteristic createSulphurDioxideDensityCharacteristic(
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),
getUnsubscriber(taggedItem, SULPHUR_DIOXIDE_DENSITY, updater));
}
private static PM25DensityCharacteristic createPM25DensityCharacteristic(final HomekitTaggedItem taggedItem,
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));
}
private static PM10DensityCharacteristic createPM10DensityCharacteristic(final HomekitTaggedItem taggedItem,
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));
}
private static VOCDensityCharacteristic createVOCDensityCharacteristic(final HomekitTaggedItem taggedItem,
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));
}
}

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.TARGET_HEATER_COOLER_STATE;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.EnumMap;
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.impl.heatercooler.CurrentHeaterCoolerStateEnum;
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.TemperatureDisplayUnitEnum;
import io.github.hapjava.services.impl.HeaterCoolerService;
@ -106,7 +108,9 @@ public class HomekitHeaterCoolerImpl extends AbstractHomekitAccessoryImpl implem
public CompletableFuture<Double> getCurrentTemperature() {
final @Nullable DecimalType state = getStateAs(HomekitCharacteristicType.CURRENT_TEMPERATURE,
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

View File

@ -14,17 +14,20 @@ package org.openhab.io.homekit.internal.accessories;
import static org.openhab.io.homekit.internal.HomekitCharacteristicType.LIGHT_LEVEL;
import java.math.BigDecimal;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import org.eclipse.jdt.annotation.Nullable;
import org.openhab.core.library.types.DecimalType;
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.HomekitTaggedItem;
import io.github.hapjava.accessories.LightSensorAccessory;
import io.github.hapjava.characteristics.HomekitCharacteristicChangeCallback;
import io.github.hapjava.characteristics.impl.lightsensor.CurrentAmbientLightLevelCharacteristic;
import io.github.hapjava.services.impl.LightSensorService;
/**
@ -43,7 +46,11 @@ public class HomekitLightSensorImpl extends AbstractHomekitAccessoryImpl impleme
@Override
public CompletableFuture<Double> getCurrentAmbientLightLevel() {
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

View File

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