package com.beowulfe.hap.impl.services; import com.beowulfe.hap.accessories.HorizontalTiltingWindowCovering; import com.beowulfe.hap.accessories.VerticalTiltingWindowCovering; import com.beowulfe.hap.accessories.WindowCovering; import com.beowulfe.hap.impl.characteristics.common.ObstructionDetectedCharacteristic; import com.beowulfe.hap.impl.characteristics.windowcovering.*; public class WindowCoveringService extends AbstractServiceImpl { public WindowCoveringService(WindowCovering windowCovering) { this(windowCovering, windowCovering.getLabel()); } public WindowCoveringService(WindowCovering windowCovering, String serviceName) { super("0000008C-0000-1000-8000-0026BB765291", windowCovering, serviceName); addCharacteristic(new CurrentPositionCharacteristic(windowCovering)); addCharacteristic(new HoldPositionCharacteristic(windowCovering)); addCharacteristic(new PositionStateCharacteristic(windowCovering)); addCharacteristic(new TargetPositionCharacteristic(windowCovering)); addCharacteristic(new ObstructionDetectedCharacteristic(() -> windowCovering.getObstructionDetected(), c -> windowCovering.subscribeObstructionDetected(c), () -> windowCovering.unsubscribeObstructionDetected())); if (windowCovering instanceof HorizontalTiltingWindowCovering) { addCharacteristic(new CurrentHorizontalTiltAngleCharacteristic( (HorizontalTiltingWindowCovering) windowCovering)); addCharacteristic(new TargetHorizontalTiltAngleCharacteristic( (HorizontalTiltingWindowCovering) windowCovering)); } if (windowCovering instanceof VerticalTiltingWindowCovering) { addCharacteristic(new CurrentVerticalTiltAngleCharacteristic( (VerticalTiltingWindowCovering) windowCovering)); addCharacteristic(new TargetVerticalTiltAngleCharacteristic( (VerticalTiltingWindowCovering) windowCovering)); } } }