Skip to content

Commit 9de39dd

Browse files
Add support for FilterMaintenanceAccessory
[#124](#124)
1 parent a746a02 commit 9de39dd

File tree

5 files changed

+36
-15
lines changed

5 files changed

+36
-15
lines changed

CHANGES.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
* Valid values are supported for enum characteristics instead of min and max values
1515
* Supported valid states for Thermostat, SecuritySystem, HeaterCooler and HumidifierDehumidifier [#108] [#120](https://github.com/hap-java/HAP-Java/pull/120)
16+
* Support for FilterMaintenance. Can be used as a linked service for a Air Purifier [#124](https://github.com/hap-java/HAP-Java/pull/124)
1617

1718
# HAP-Java 1.1.5
1819

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ After that, check out the [Sample](https://github.com/hap-java/HAP-Java/tree/sam
2323
Supported HomeKit Accessories
2424
=========
2525

26-
Current implementation fully supports 37 HomeKit accessory/services.
26+
Current implementation fully supports 38 HomeKit accessory/services.
2727

2828
| HomeKit Accessory & Service type | Supported by Java-HAP |
2929
|--------------------|--------------------|
@@ -41,7 +41,7 @@ Current implementation fully supports 37 HomeKit accessory/services.
4141
| Doorbell | :white_check_mark: |
4242
| Fan | :white_check_mark: |
4343
| Faucet | :white_check_mark: |
44-
| Filter Maintenance | :x: |
44+
| Filter Maintenance | :white_check_mark: |
4545
| Garage Door Opener | :white_check_mark: |
4646
| HAP Protocol Information | :white_check_mark: |
4747
| Heater Cooler | :white_check_mark: |

src/main/java/io/github/hapjava/accessories/AirPurifierAccessory.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,23 @@ public interface AirPurifierAccessory extends HomekitAccessory {
7979
/** Unsubscribes from changes in the target state of the air purifier. */
8080
void unsubscribeTargetState();
8181

82+
/**
83+
* If a filter maintenance service is needed as a linked service to this AirPurifier, this is the
84+
* place.
85+
*
86+
* @return an instance of FilterMaintenanceAccessory, null if not needed.
87+
*/
88+
default FilterMaintenanceAccessory getFilterMaintenanceAccessory() {
89+
return null;
90+
};
91+
8292
@Override
8393
default Collection<Service> getServices() {
84-
return Collections.singleton(new AirPurifierService(this));
94+
AirPurifierService service = new AirPurifierService(this);
95+
FilterMaintenanceAccessory fmAccessory = this.getFilterMaintenanceAccessory();
96+
if (fmAccessory != null) {
97+
service.addLinkedService(fmAccessory.getPrimaryService());
98+
}
99+
return Collections.singleton(service);
85100
}
86101
}

src/main/java/io/github/hapjava/characteristics/impl/base/IntegerCharacteristic.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,17 +62,21 @@ protected CompletableFuture<JsonObjectBuilder> makeBuilder(int iid) {
6262
return super.makeBuilder(iid)
6363
.thenApply(
6464
builder -> {
65-
return builder
66-
.add("minValue", minValue)
67-
.add("maxValue", maxValue)
68-
.add("minStep", 1)
69-
.add("unit", unit);
65+
builder.add("minValue", minValue).add("maxValue", maxValue).add("minStep", 1);
66+
if (this.unit != null) {
67+
builder.add("unit", unit);
68+
}
69+
return builder;
7070
});
7171
}
7272

7373
@Override
7474
protected CompletableFuture<Integer> getValue() {
75-
return getter.map(integerGetter -> integerGetter.get()).get();
75+
if (getter.isPresent()) {
76+
return getter.map(integerGetter -> integerGetter.get()).get();
77+
} else {
78+
return null;
79+
}
7680
}
7781

7882
@Override

src/main/java/io/github/hapjava/services/impl/AirPurifierService.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import io.github.hapjava.accessories.AirPurifierAccessory;
44
import io.github.hapjava.accessories.optionalcharacteristic.AccessoryWithName;
55
import io.github.hapjava.accessories.optionalcharacteristic.AccessoryWithPhysicalControlsLock;
6+
import io.github.hapjava.accessories.optionalcharacteristic.AccessoryWithRotationSpeed;
67
import io.github.hapjava.accessories.optionalcharacteristic.AccessoryWithSwingMode;
78
import io.github.hapjava.characteristics.impl.airpurifier.CurrentAirPurifierCharacteristic;
89
import io.github.hapjava.characteristics.impl.airpurifier.TargetAirPurifierStateCharacteristic;
@@ -53,13 +54,13 @@ public AirPurifierService(AirPurifierAccessory accessory) {
5354
((AccessoryWithSwingMode) accessory)::subscribeSwingMode,
5455
((AccessoryWithSwingMode) accessory)::unsubscribeSwingMode));
5556
}
56-
if (accessory instanceof AccessoryWithSwingMode) {
57+
if (accessory instanceof AccessoryWithRotationSpeed) {
5758
addOptionalCharacteristic(
58-
new SwingModeCharacteristic(
59-
((AccessoryWithSwingMode) accessory)::getSwingMode,
60-
((AccessoryWithSwingMode) accessory)::setSwingMode,
61-
((AccessoryWithSwingMode) accessory)::subscribeSwingMode,
62-
((AccessoryWithSwingMode) accessory)::unsubscribeSwingMode));
59+
new RotationSpeedCharacteristic(
60+
((AccessoryWithRotationSpeed) accessory)::getRotationSpeed,
61+
((AccessoryWithRotationSpeed) accessory)::setRotationSpeed,
62+
((AccessoryWithRotationSpeed) accessory)::subscribeRotationSpeed,
63+
((AccessoryWithRotationSpeed) accessory)::unsubscribeRotationSpeed));
6364
}
6465
if (accessory instanceof AccessoryWithPhysicalControlsLock) {
6566
addOptionalCharacteristic(

0 commit comments

Comments
 (0)