[homekit] add support for dimmer item for slat accessories (#10019)
Signed-off-by: Eugen Freiter <freiter@gmx.de>
This commit is contained in:
@@ -214,6 +214,22 @@ public class HomekitCharacteristicFactory {
|
||||
return value;
|
||||
}
|
||||
|
||||
/** special method for tilts. it converts percentage to angle */
|
||||
private static int getAngleFromItem(HomekitTaggedItem taggedItem) {
|
||||
int value = 0;
|
||||
final State state = taggedItem.getItem().getState();
|
||||
if (state instanceof PercentType) {
|
||||
value = (int) ((((PercentType) state).intValue() * 90.0) / 50.0 - 90.0);
|
||||
} else {
|
||||
value = getIntFromItem(taggedItem);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
private static Supplier<CompletableFuture<Integer>> getAngleSupplier(HomekitTaggedItem taggedItem) {
|
||||
return () -> CompletableFuture.completedFuture(getAngleFromItem(taggedItem));
|
||||
}
|
||||
|
||||
private static Supplier<CompletableFuture<Integer>> getIntSupplier(HomekitTaggedItem taggedItem) {
|
||||
return () -> CompletableFuture.completedFuture(getIntFromItem(taggedItem));
|
||||
}
|
||||
@@ -242,6 +258,20 @@ public class HomekitCharacteristicFactory {
|
||||
};
|
||||
}
|
||||
|
||||
private static ExceptionalConsumer<Integer> setAngleConsumer(HomekitTaggedItem taggedItem) {
|
||||
return (value) -> {
|
||||
if (taggedItem.getItem() instanceof NumberItem) {
|
||||
((NumberItem) taggedItem.getItem()).send(new DecimalType(value));
|
||||
} else if (taggedItem.getItem() instanceof DimmerItem) {
|
||||
value = (int) (value * 50.0 / 90.0 + 50.0);
|
||||
((DimmerItem) taggedItem.getItem()).send(new PercentType(value));
|
||||
} else {
|
||||
logger.warn("Item type {} is not supported for {}. Only DimmerItem and NumberItem are supported.",
|
||||
taggedItem.getItem().getType(), taggedItem.getName());
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private static Supplier<CompletableFuture<Double>> getDoubleSupplier(HomekitTaggedItem taggedItem) {
|
||||
return () -> {
|
||||
final @Nullable DecimalType value = taggedItem.getItem().getStateAs(DecimalType.class);
|
||||
@@ -357,28 +387,28 @@ public class HomekitCharacteristicFactory {
|
||||
|
||||
private static CurrentHorizontalTiltAngleCharacteristic createCurrentHorizontalTiltAngleCharacteristic(
|
||||
HomekitTaggedItem taggedItem, HomekitAccessoryUpdater updater) {
|
||||
return new CurrentHorizontalTiltAngleCharacteristic(getIntSupplier(taggedItem),
|
||||
return new CurrentHorizontalTiltAngleCharacteristic(getAngleSupplier(taggedItem),
|
||||
getSubscriber(taggedItem, CURRENT_HORIZONTAL_TILT_ANGLE, updater),
|
||||
getUnsubscriber(taggedItem, CURRENT_HORIZONTAL_TILT_ANGLE, updater));
|
||||
}
|
||||
|
||||
private static CurrentVerticalTiltAngleCharacteristic createCurrentVerticalTiltAngleCharacteristic(
|
||||
HomekitTaggedItem taggedItem, HomekitAccessoryUpdater updater) {
|
||||
return new CurrentVerticalTiltAngleCharacteristic(getIntSupplier(taggedItem),
|
||||
return new CurrentVerticalTiltAngleCharacteristic(getAngleSupplier(taggedItem),
|
||||
getSubscriber(taggedItem, CURRENT_VERTICAL_TILT_ANGLE, updater),
|
||||
getUnsubscriber(taggedItem, CURRENT_VERTICAL_TILT_ANGLE, updater));
|
||||
}
|
||||
|
||||
private static TargetHorizontalTiltAngleCharacteristic createTargetHorizontalTiltAngleCharacteristic(
|
||||
HomekitTaggedItem taggedItem, HomekitAccessoryUpdater updater) {
|
||||
return new TargetHorizontalTiltAngleCharacteristic(getIntSupplier(taggedItem), setIntConsumer(taggedItem),
|
||||
return new TargetHorizontalTiltAngleCharacteristic(getAngleSupplier(taggedItem), setAngleConsumer(taggedItem),
|
||||
getSubscriber(taggedItem, TARGET_HORIZONTAL_TILT_ANGLE, updater),
|
||||
getUnsubscriber(taggedItem, TARGET_HORIZONTAL_TILT_ANGLE, updater));
|
||||
}
|
||||
|
||||
private static TargetVerticalTiltAngleCharacteristic createTargetVerticalTiltAngleCharacteristic(
|
||||
HomekitTaggedItem taggedItem, HomekitAccessoryUpdater updater) {
|
||||
return new TargetVerticalTiltAngleCharacteristic(getIntSupplier(taggedItem), setIntConsumer(taggedItem),
|
||||
return new TargetVerticalTiltAngleCharacteristic(getAngleSupplier(taggedItem), setAngleConsumer(taggedItem),
|
||||
getSubscriber(taggedItem, TARGET_HORIZONTAL_TILT_ANGLE, updater),
|
||||
getUnsubscriber(taggedItem, TARGET_HORIZONTAL_TILT_ANGLE, updater));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user