Skip to content

Commit

Permalink
[homekit] Adjust default ranges for some characteristics (openhab#17157)
Browse files Browse the repository at this point in the history
* [homekit] adjust default ranges for some characteristics

Signed-off-by: Cody Cutrer <cody@cutrer.us>
  • Loading branch information
ccutrer authored and digitaldan committed Sep 21, 2024
1 parent 284f513 commit 2f49f30
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,26 @@
*/
@NonNullByDefault
public class HomekitCharacteristicFactory {
// These values represent ranges that do not match the defaults that are part of
// the HAP specification/the defaults in HAP-Java, but nonetheless are commonly
// encountered in consumer-grade devices. So we define our own default min/max so
// that users don't have to override the default unnecessarily.

// HAP default is 50-400 mired/2500-20,000 K. These numbers represent
// the warmest and coolest bulbs I could reasonably find at general
// purpose retailers.
public static final int COLOR_TEMPERATURE_MIN_MIREDS = 107; // 9300 K
public static final int COLOR_TEMPERATURE_MAX_MIREDS = 556; // 1800 K
// HAP default is 0 °C, but it's very common for outdoor temperatures and/or
// refrigation devices to go below freezing.
// Lowest recorded temperature on Earth is -89.2 °C. This is just a nice round number.
public static final int CURRENT_TEMPERATURE_MIN_CELSIUS = -100;
// HAP default is 0.0001 lx, but this is commonly rounded to 0 by many devices
public static final int CURRENT_AMBIENT_LIGHT_LEVEL_MIN_LUX = 0;
// HAP default is 100k
// https://en.wikipedia.org/wiki/Daylight#Intensity_in_different_conditions
public static final int CURRENT_AMBIENT_LIGHT_LEVEL_MAX_LUX = 120000;

private static final Logger LOGGER = LoggerFactory.getLogger(HomekitCharacteristicFactory.class);

// List of optional characteristics and corresponding method to create them.
Expand Down Expand Up @@ -796,14 +816,10 @@ private static ColorTemperatureCharacteristic createColorTemperatureCharacterist
HomekitAccessoryUpdater updater) {
final boolean inverted = taggedItem.isInverted();

int minValue = taggedItem
.getConfigurationAsQuantity(HomekitTaggedItem.MIN_VALUE,
new QuantityType(ColorTemperatureCharacteristic.DEFAULT_MIN_VALUE, Units.MIRED), false)
.intValue();
int maxValue = taggedItem
.getConfigurationAsQuantity(HomekitTaggedItem.MAX_VALUE,
new QuantityType(ColorTemperatureCharacteristic.DEFAULT_MAX_VALUE, Units.MIRED), false)
.intValue();
int minValue = taggedItem.getConfigurationAsQuantity(HomekitTaggedItem.MIN_VALUE,
new QuantityType(COLOR_TEMPERATURE_MIN_MIREDS, Units.MIRED), false).intValue();
int maxValue = taggedItem.getConfigurationAsQuantity(HomekitTaggedItem.MAX_VALUE,
new QuantityType(COLOR_TEMPERATURE_MAX_MIREDS, Units.MIRED), false).intValue();

// It's common to swap these if you're providing in Kelvin instead of mired
if (minValue > maxValue) {
Expand Down Expand Up @@ -947,13 +963,9 @@ private static CurrentMediaStateCharacteristic createCurrentMediaStateCharacteri

private static CurrentTemperatureCharacteristic createCurrentTemperatureCharacteristic(HomekitTaggedItem taggedItem,
HomekitAccessoryUpdater updater) {
double minValue = taggedItem
.getConfigurationAsQuantity(HomekitTaggedItem.MIN_VALUE,
Objects.requireNonNull(
new QuantityType(CurrentTemperatureCharacteristic.DEFAULT_MIN_VALUE, SIUnits.CELSIUS)
.toUnit(getSystemTemperatureUnit())),
false)
.toUnit(SIUnits.CELSIUS).doubleValue();
double minValue = taggedItem.getConfigurationAsQuantity(HomekitTaggedItem.MIN_VALUE, Objects.requireNonNull(
new QuantityType(CURRENT_TEMPERATURE_MIN_CELSIUS, SIUnits.CELSIUS).toUnit(getSystemTemperatureUnit())),
false).toUnit(SIUnits.CELSIUS).doubleValue();
double maxValue = taggedItem
.getConfigurationAsQuantity(HomekitTaggedItem.MAX_VALUE,
Objects.requireNonNull(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@
import io.github.hapjava.accessories.LightSensorAccessory;
import io.github.hapjava.characteristics.Characteristic;
import io.github.hapjava.characteristics.HomekitCharacteristicChangeCallback;
import io.github.hapjava.characteristics.impl.lightsensor.CurrentAmbientLightLevelCharacteristic;
import io.github.hapjava.services.impl.LightSensorService;

/**
Expand Down Expand Up @@ -61,13 +60,13 @@ public CompletableFuture<Double> getCurrentAmbientLightLevel() {
@Override
public double getMinCurrentAmbientLightLevel() {
return getAccessoryConfiguration(HomekitCharacteristicType.LIGHT_LEVEL, HomekitTaggedItem.MIN_VALUE,
BigDecimal.valueOf(CurrentAmbientLightLevelCharacteristic.DEFAULT_MIN_VALUE)).doubleValue();
BigDecimal.valueOf(HomekitCharacteristicFactory.CURRENT_AMBIENT_LIGHT_LEVEL_MIN_LUX)).doubleValue();
}

@Override
public double getMaxCurrentAmbientLightLevel() {
return getAccessoryConfiguration(HomekitCharacteristicType.LIGHT_LEVEL, HomekitTaggedItem.MAX_VALUE,
BigDecimal.valueOf(CurrentAmbientLightLevelCharacteristic.DEFAULT_MAX_VALUE)).doubleValue();
BigDecimal.valueOf(HomekitCharacteristicFactory.CURRENT_AMBIENT_LIGHT_LEVEL_MAX_LUX)).doubleValue();
}

@Override
Expand Down

0 comments on commit 2f49f30

Please sign in to comment.