Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[homekit] Adjust default ranges for some characteristics #17157

Merged
merged 2 commits into from
Sep 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,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 @@ -759,14 +779,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 @@ -898,13 +914,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