|
29 | 29 |
|
30 | 30 | import javax.measure.Quantity;
|
31 | 31 | import javax.measure.Unit;
|
| 32 | +import javax.measure.quantity.Temperature; |
32 | 33 |
|
33 | 34 | import org.eclipse.jdt.annotation.NonNullByDefault;
|
34 | 35 | import org.eclipse.jdt.annotation.Nullable;
|
@@ -441,6 +442,10 @@ public static TemperatureDisplayUnitCharacteristic createSystemTemperatureDispla
|
441 | 442 | });
|
442 | 443 | }
|
443 | 444 |
|
| 445 | + public static Unit<Temperature> getSystemTemperatureUnit() { |
| 446 | + return useFahrenheit() ? ImperialUnits.FAHRENHEIT : SIUnits.CELSIUS; |
| 447 | + } |
| 448 | + |
444 | 449 | private static <T extends CharacteristicEnum> CompletableFuture<T> getEnumFromItem(HomekitTaggedItem item,
|
445 | 450 | Map<T, String> mapping, T defaultValue) {
|
446 | 451 | return CompletableFuture.completedFuture(getKeyFromMapping(item, mapping, defaultValue));
|
@@ -506,11 +511,11 @@ private static <T extends Quantity<T>> double convertAndRound(double value, Unit
|
506 | 511 | }
|
507 | 512 |
|
508 | 513 | public static double convertToCelsius(double degrees) {
|
509 |
| - return convertAndRound(degrees, useFahrenheit() ? ImperialUnits.FAHRENHEIT : SIUnits.CELSIUS, SIUnits.CELSIUS); |
| 514 | + return convertAndRound(degrees, getSystemTemperatureUnit(), SIUnits.CELSIUS); |
510 | 515 | }
|
511 | 516 |
|
512 | 517 | public static double convertFromCelsius(double degrees) {
|
513 |
| - return convertAndRound(degrees, SIUnits.CELSIUS, useFahrenheit() ? ImperialUnits.FAHRENHEIT : SIUnits.CELSIUS); |
| 518 | + return convertAndRound(degrees, SIUnits.CELSIUS, getSystemTemperatureUnit()); |
514 | 519 | }
|
515 | 520 |
|
516 | 521 | public static double getTemperatureStep(HomekitTaggedItem taggedItem, double defaultValue) {
|
@@ -604,8 +609,13 @@ private static Supplier<CompletableFuture<Double>> getTemperatureSupplier(Homeki
|
604 | 609 |
|
605 | 610 | private static ExceptionalConsumer<Double> setTemperatureConsumer(HomekitTaggedItem taggedItem) {
|
606 | 611 | return (value) -> {
|
607 |
| - if (taggedItem.getBaseItem() instanceof NumberItem) { |
608 |
| - taggedItem.send(new DecimalType(convertFromCelsius(value))); |
| 612 | + Item baseItem = taggedItem.getBaseItem(); |
| 613 | + if (baseItem instanceof NumberItem baseAsNumberItem) { |
| 614 | + if (baseAsNumberItem.getUnit() != null) { |
| 615 | + taggedItem.send(new QuantityType(value, SIUnits.CELSIUS)); |
| 616 | + } else { |
| 617 | + taggedItem.send(new DecimalType(convertFromCelsius(value))); |
| 618 | + } |
609 | 619 | } else {
|
610 | 620 | LOGGER.warn("Item type {} is not supported for {}. Only Number type is supported.",
|
611 | 621 | taggedItem.getBaseItem().getType(), taggedItem.getName());
|
@@ -786,11 +796,22 @@ private static ConfiguredNameCharacteristic createConfiguredNameCharacteristic(H
|
786 | 796 |
|
787 | 797 | private static CoolingThresholdTemperatureCharacteristic createCoolingThresholdCharacteristic(
|
788 | 798 | HomekitTaggedItem taggedItem, HomekitAccessoryUpdater updater) {
|
789 |
| - double minValue = HomekitCharacteristicFactory.convertToCelsius(taggedItem.getConfigurationAsDouble( |
790 |
| - HomekitTaggedItem.MIN_VALUE, CoolingThresholdTemperatureCharacteristic.DEFAULT_MIN_VALUE)); |
791 |
| - double maxValue = HomekitCharacteristicFactory.convertToCelsius(taggedItem.getConfigurationAsDouble( |
792 |
| - HomekitTaggedItem.MAX_VALUE, CoolingThresholdTemperatureCharacteristic.DEFAULT_MAX_VALUE)); |
793 |
| - double step = getTemperatureStep(taggedItem, CoolingThresholdTemperatureCharacteristic.DEFAULT_STEP); |
| 799 | + double minValue = taggedItem.getConfigurationAsQuantity(HomekitTaggedItem.MIN_VALUE, |
| 800 | + Objects.requireNonNull( |
| 801 | + new QuantityType(CoolingThresholdTemperatureCharacteristic.DEFAULT_MIN_VALUE, SIUnits.CELSIUS) |
| 802 | + .toUnit(getSystemTemperatureUnit())), |
| 803 | + false).toUnit(SIUnits.CELSIUS).doubleValue(); |
| 804 | + double maxValue = taggedItem.getConfigurationAsQuantity(HomekitTaggedItem.MAX_VALUE, |
| 805 | + Objects.requireNonNull( |
| 806 | + new QuantityType(CoolingThresholdTemperatureCharacteristic.DEFAULT_MAX_VALUE, SIUnits.CELSIUS) |
| 807 | + .toUnit(getSystemTemperatureUnit())), |
| 808 | + false).toUnit(SIUnits.CELSIUS).doubleValue(); |
| 809 | + double step = taggedItem |
| 810 | + .getConfigurationAsQuantity(HomekitTaggedItem.STEP, |
| 811 | + Objects.requireNonNull(new QuantityType(CoolingThresholdTemperatureCharacteristic.DEFAULT_STEP, |
| 812 | + SIUnits.CELSIUS).toUnit(getSystemTemperatureUnit())), |
| 813 | + true) |
| 814 | + .toUnit(SIUnits.CELSIUS).doubleValue(); |
794 | 815 | return new CoolingThresholdTemperatureCharacteristic(minValue, maxValue, step,
|
795 | 816 | getTemperatureSupplier(taggedItem, minValue), setTemperatureConsumer(taggedItem),
|
796 | 817 | getSubscriber(taggedItem, COOLING_THRESHOLD_TEMPERATURE, updater),
|
@@ -833,11 +854,27 @@ private static CurrentMediaStateCharacteristic createCurrentMediaStateCharacteri
|
833 | 854 |
|
834 | 855 | private static CurrentTemperatureCharacteristic createCurrentTemperatureCharacteristic(HomekitTaggedItem taggedItem,
|
835 | 856 | HomekitAccessoryUpdater updater) {
|
836 |
| - double minValue = HomekitCharacteristicFactory.convertToCelsius(taggedItem.getConfigurationAsDouble( |
837 |
| - HomekitTaggedItem.MIN_VALUE, CurrentTemperatureCharacteristic.DEFAULT_MIN_VALUE)); |
838 |
| - double maxValue = HomekitCharacteristicFactory.convertToCelsius(taggedItem.getConfigurationAsDouble( |
839 |
| - HomekitTaggedItem.MAX_VALUE, CurrentTemperatureCharacteristic.DEFAULT_MAX_VALUE)); |
840 |
| - double step = getTemperatureStep(taggedItem, CurrentTemperatureCharacteristic.DEFAULT_STEP); |
| 857 | + double minValue = taggedItem |
| 858 | + .getConfigurationAsQuantity(HomekitTaggedItem.MIN_VALUE, |
| 859 | + Objects.requireNonNull( |
| 860 | + new QuantityType(CurrentTemperatureCharacteristic.DEFAULT_MIN_VALUE, SIUnits.CELSIUS) |
| 861 | + .toUnit(getSystemTemperatureUnit())), |
| 862 | + false) |
| 863 | + .toUnit(SIUnits.CELSIUS).doubleValue(); |
| 864 | + double maxValue = taggedItem |
| 865 | + .getConfigurationAsQuantity(HomekitTaggedItem.MAX_VALUE, |
| 866 | + Objects.requireNonNull( |
| 867 | + new QuantityType(CurrentTemperatureCharacteristic.DEFAULT_MAX_VALUE, SIUnits.CELSIUS) |
| 868 | + .toUnit(getSystemTemperatureUnit())), |
| 869 | + false) |
| 870 | + .toUnit(SIUnits.CELSIUS).doubleValue(); |
| 871 | + double step = taggedItem |
| 872 | + .getConfigurationAsQuantity(HomekitTaggedItem.STEP, |
| 873 | + Objects.requireNonNull( |
| 874 | + new QuantityType(CurrentTemperatureCharacteristic.DEFAULT_STEP, SIUnits.CELSIUS) |
| 875 | + .toUnit(getSystemTemperatureUnit())), |
| 876 | + true) |
| 877 | + .toUnit(SIUnits.CELSIUS).doubleValue(); |
841 | 878 | return new CurrentTemperatureCharacteristic(minValue, maxValue, step,
|
842 | 879 | getTemperatureSupplier(taggedItem, minValue), getSubscriber(taggedItem, TARGET_TEMPERATURE, updater),
|
843 | 880 | getUnsubscriber(taggedItem, TARGET_TEMPERATURE, updater));
|
@@ -916,11 +953,22 @@ private static HardwareRevisionCharacteristic createHardwareRevisionCharacterist
|
916 | 953 |
|
917 | 954 | private static HeatingThresholdTemperatureCharacteristic createHeatingThresholdCharacteristic(
|
918 | 955 | HomekitTaggedItem taggedItem, HomekitAccessoryUpdater updater) {
|
919 |
| - double minValue = HomekitCharacteristicFactory.convertToCelsius(taggedItem.getConfigurationAsDouble( |
920 |
| - HomekitTaggedItem.MIN_VALUE, HeatingThresholdTemperatureCharacteristic.DEFAULT_MIN_VALUE)); |
921 |
| - double maxValue = HomekitCharacteristicFactory.convertToCelsius(taggedItem.getConfigurationAsDouble( |
922 |
| - HomekitTaggedItem.MAX_VALUE, HeatingThresholdTemperatureCharacteristic.DEFAULT_MAX_VALUE)); |
923 |
| - double step = getTemperatureStep(taggedItem, HeatingThresholdTemperatureCharacteristic.DEFAULT_STEP); |
| 956 | + double minValue = taggedItem.getConfigurationAsQuantity(HomekitTaggedItem.MIN_VALUE, |
| 957 | + Objects.requireNonNull( |
| 958 | + new QuantityType(HeatingThresholdTemperatureCharacteristic.DEFAULT_MIN_VALUE, SIUnits.CELSIUS) |
| 959 | + .toUnit(getSystemTemperatureUnit())), |
| 960 | + false).toUnit(SIUnits.CELSIUS).doubleValue(); |
| 961 | + double maxValue = taggedItem.getConfigurationAsQuantity(HomekitTaggedItem.MAX_VALUE, |
| 962 | + Objects.requireNonNull( |
| 963 | + new QuantityType(HeatingThresholdTemperatureCharacteristic.DEFAULT_MAX_VALUE, SIUnits.CELSIUS) |
| 964 | + .toUnit(getSystemTemperatureUnit())), |
| 965 | + false).toUnit(SIUnits.CELSIUS).doubleValue(); |
| 966 | + double step = taggedItem |
| 967 | + .getConfigurationAsQuantity(HomekitTaggedItem.STEP, |
| 968 | + Objects.requireNonNull(new QuantityType(HeatingThresholdTemperatureCharacteristic.DEFAULT_STEP, |
| 969 | + SIUnits.CELSIUS).toUnit(getSystemTemperatureUnit())), |
| 970 | + true) |
| 971 | + .toUnit(SIUnits.CELSIUS).doubleValue(); |
924 | 972 | return new HeatingThresholdTemperatureCharacteristic(minValue, maxValue, step,
|
925 | 973 | getTemperatureSupplier(taggedItem, minValue), setTemperatureConsumer(taggedItem),
|
926 | 974 | getSubscriber(taggedItem, HEATING_THRESHOLD_TEMPERATURE, updater),
|
@@ -1286,11 +1334,27 @@ private static TargetRelativeHumidityCharacteristic createTargetRelativeHumidity
|
1286 | 1334 |
|
1287 | 1335 | private static TargetTemperatureCharacteristic createTargetTemperatureCharacteristic(HomekitTaggedItem taggedItem,
|
1288 | 1336 | HomekitAccessoryUpdater updater) {
|
1289 |
| - double minValue = HomekitCharacteristicFactory.convertToCelsius(taggedItem.getConfigurationAsDouble( |
1290 |
| - HomekitTaggedItem.MIN_VALUE, TargetTemperatureCharacteristic.DEFAULT_MIN_VALUE)); |
1291 |
| - double maxValue = HomekitCharacteristicFactory.convertToCelsius(taggedItem.getConfigurationAsDouble( |
1292 |
| - HomekitTaggedItem.MAX_VALUE, TargetTemperatureCharacteristic.DEFAULT_MAX_VALUE)); |
1293 |
| - double step = getTemperatureStep(taggedItem, TargetTemperatureCharacteristic.DEFAULT_STEP); |
| 1337 | + double minValue = taggedItem |
| 1338 | + .getConfigurationAsQuantity(HomekitTaggedItem.MIN_VALUE, |
| 1339 | + Objects.requireNonNull( |
| 1340 | + new QuantityType(TargetTemperatureCharacteristic.DEFAULT_MIN_VALUE, SIUnits.CELSIUS) |
| 1341 | + .toUnit(getSystemTemperatureUnit())), |
| 1342 | + false) |
| 1343 | + .toUnit(SIUnits.CELSIUS).doubleValue(); |
| 1344 | + double maxValue = taggedItem |
| 1345 | + .getConfigurationAsQuantity(HomekitTaggedItem.MAX_VALUE, |
| 1346 | + Objects.requireNonNull( |
| 1347 | + new QuantityType(TargetTemperatureCharacteristic.DEFAULT_MAX_VALUE, SIUnits.CELSIUS) |
| 1348 | + .toUnit(getSystemTemperatureUnit())), |
| 1349 | + false) |
| 1350 | + .toUnit(SIUnits.CELSIUS).doubleValue(); |
| 1351 | + double step = taggedItem |
| 1352 | + .getConfigurationAsQuantity(HomekitTaggedItem.STEP, |
| 1353 | + Objects.requireNonNull( |
| 1354 | + new QuantityType(TargetTemperatureCharacteristic.DEFAULT_STEP, SIUnits.CELSIUS) |
| 1355 | + .toUnit(getSystemTemperatureUnit())), |
| 1356 | + true) |
| 1357 | + .toUnit(SIUnits.CELSIUS).doubleValue(); |
1294 | 1358 | return new TargetTemperatureCharacteristic(minValue, maxValue, step,
|
1295 | 1359 | getTemperatureSupplier(taggedItem, minValue), setTemperatureConsumer(taggedItem),
|
1296 | 1360 | getSubscriber(taggedItem, TARGET_TEMPERATURE, updater),
|
|
0 commit comments