package com.beowulfe.hap.accessories;
import java.util.Collection;
import java.util.Collections;
import java.util.concurrent.CompletableFuture;
import com.beowulfe.hap.*;
import com.beowulfe.hap.impl.services.OutletService;
/**
* A power outlet with boolean power and usage states.
*
* @author Andy Lintner
*/
public interface Outlet extends HomekitAccessory {
@Override
default Collection<Service> getServices() {
return Collections.singleton(new OutletService(this));
}
/**
* Retrieves the current binary state of the outlet's power.
* @return a future that will contain the binary state
*/
CompletableFuture<Boolean> getPowerState();
/**
* Retrieves the current binary state indicating whether the outlet is in use.
* @return a future that will contain the binary state
*/
CompletableFuture<Boolean> getOutletInUse();
/**
* Sets the binary state of the outlet's power.
* @param state the binary state to set
* @return a future that completes when the change is made
* @throws Exception when the change cannot be made
*/
CompletableFuture<Void> setPowerState(boolean state) throws Exception;
/**
* Subscribes to changes in the binary state of the outlet's power.
* @param callback the function to call when the state changes.
*/
void subscribePowerState(HomekitCharacteristicChangeCallback callback);
/**
* Subscribes to changes in the binary state indicating whether the outlet is in use.
* @param callback the function to call when the state changes.
*/
void subscribeOutletInUse(HomekitCharacteristicChangeCallback callback);
/**
* Unsubscribes from changes in the binary state of the outlet's power.
*/
void unsubscribePowerState();
/**
* Unsubscribes from changes in the binary state indicating whether hte outlet is in use.
*/
void unsubscribeOutletInUse();
}