Skip to content

Commit cc1a0c6

Browse files
committed
Add LeakSensor accessory and associated characteristics
1 parent 819a5c2 commit cc1a0c6

File tree

3 files changed

+103
-0
lines changed

3 files changed

+103
-0
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package com.beowulfe.hap.accessories;
2+
3+
import java.util.Collection;
4+
import java.util.Collections;
5+
import java.util.concurrent.CompletableFuture;
6+
7+
import com.beowulfe.hap.HomekitAccessory;
8+
import com.beowulfe.hap.HomekitCharacteristicChangeCallback;
9+
import com.beowulfe.hap.Service;
10+
import com.beowulfe.hap.impl.services.LeakSensorService;
11+
12+
/**
13+
* <p>
14+
* A leak sensor that reports whether a leak has been detected.
15+
* </p>
16+
*
17+
* <p>
18+
* Leak sensors that run on batteries will need to implement this interface
19+
* and also implement {@link BatteryStatusAccessory}.
20+
* </p>
21+
*
22+
* @author Tim Harper
23+
*/
24+
public interface LeakSensor extends HomekitAccessory {
25+
26+
/**
27+
* Retrieves the state of the leak sensor. If true then leak has been detected.
28+
*
29+
* @return a future that will contain the leak sensor's state
30+
*/
31+
CompletableFuture<Boolean> getLeakDetected();
32+
33+
@Override
34+
default Collection<Service> getServices() {
35+
return Collections.singleton(new LeakSensorService(this));
36+
}
37+
38+
/**
39+
* Subscribes to changes in the leak sensor.
40+
*
41+
* @param callback the function to call when the state changes.
42+
*/
43+
void subscribeLeakDetected(HomekitCharacteristicChangeCallback callback);
44+
45+
/**
46+
* Unsubscribes from changes in the leak sensor.
47+
*/
48+
void unsubscribeLeakDetected();
49+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.beowulfe.hap.impl.characteristics.leaksensor;
2+
3+
import java.util.concurrent.CompletableFuture;
4+
5+
import com.beowulfe.hap.HomekitCharacteristicChangeCallback;
6+
import com.beowulfe.hap.accessories.LeakSensor;
7+
import com.beowulfe.hap.characteristics.BooleanCharacteristic;
8+
import com.beowulfe.hap.characteristics.EventableCharacteristic;
9+
10+
public class LeakDetectedStateCharacteristic extends BooleanCharacteristic implements EventableCharacteristic {
11+
12+
private final LeakSensor leakSensor;
13+
14+
public LeakDetectedStateCharacteristic(LeakSensor leakSensor) {
15+
super("00000070-0000-1000-8000-0026BB765291", false, true, "Leak Detected");
16+
this.leakSensor = leakSensor;
17+
}
18+
19+
@Override
20+
protected CompletableFuture<Boolean> getValue() {
21+
return leakSensor.getLeakDetected();
22+
}
23+
24+
@Override
25+
protected void setValue(Boolean value) throws Exception {
26+
// Read Only
27+
}
28+
29+
@Override
30+
public void subscribe(HomekitCharacteristicChangeCallback callback) {
31+
leakSensor.subscribeLeakDetected(callback);
32+
}
33+
34+
@Override
35+
public void unsubscribe() {
36+
leakSensor.unsubscribeLeakDetected();
37+
}
38+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.beowulfe.hap.impl.services;
2+
3+
import com.beowulfe.hap.accessories.LeakSensor;
4+
import com.beowulfe.hap.impl.characteristics.leaksensor.LeakDetectedStateCharacteristic;
5+
6+
public class LeakSensorService extends AbstractServiceImpl {
7+
8+
public LeakSensorService(LeakSensor leakSensor) {
9+
this(leakSensor, leakSensor.getLabel());
10+
}
11+
12+
public LeakSensorService(LeakSensor leakSensor, String serviceName) {
13+
super("00000083-0000-1000-8000-0026BB765291", leakSensor, serviceName);
14+
addCharacteristic(new LeakDetectedStateCharacteristic(leakSensor));
15+
}
16+
}

0 commit comments

Comments
 (0)