diff --git a/CHANGES.md b/CHANGES.md index 7680cec66..82f671c8c 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -8,6 +8,11 @@ * `server` package consists classes to run HomeKit server and handle communication * the process is following: client, e.g. openHAB bindings, extends accessory classes, e.g. `WindowCoveringAccessory` and implements all required methods. WindowCoveringAccessory is linked already to WindowCoveringService, that in turn is link to single characteristics. +## New and improved + +* Valid values are supported for enum characteristics instead of min and max values +* Supported valid states for Thermostat, SecuritySystem and HeaterCooler [#108] + # HAP-Java 1.1.5 ## Fixes diff --git a/src/main/java/io/github/hapjava/accessories/HeaterCoolerAccessory.java b/src/main/java/io/github/hapjava/accessories/HeaterCoolerAccessory.java index d403b3839..d72af203a 100644 --- a/src/main/java/io/github/hapjava/accessories/HeaterCoolerAccessory.java +++ b/src/main/java/io/github/hapjava/accessories/HeaterCoolerAccessory.java @@ -96,6 +96,24 @@ public interface HeaterCoolerAccessory extends HomekitAccessory { /** Unsubscribes from changes in the current temperature. */ void unsubscribeCurrentTemperature(); + /** + * Valid values for current state. + * + * @return array of valid current states + */ + default CurrentHeaterCoolerStateEnum[] getCurrentHeaterCoolerStateValidValues() { + return CurrentHeaterCoolerStateEnum.values(); + } + + /** + * Valid values for target state. + * + * @return array of valid target states + */ + default TargetHeaterCoolerStateEnum[] getTargetHeaterCoolerStateValidValues() { + return TargetHeaterCoolerStateEnum.values(); + } + @Override default Collection getServices() { return Collections.singleton(new HeaterCoolerService(this)); diff --git a/src/main/java/io/github/hapjava/accessories/SecuritySystemAccessory.java b/src/main/java/io/github/hapjava/accessories/SecuritySystemAccessory.java index 93f59fa1b..43c12acd2 100644 --- a/src/main/java/io/github/hapjava/accessories/SecuritySystemAccessory.java +++ b/src/main/java/io/github/hapjava/accessories/SecuritySystemAccessory.java @@ -64,6 +64,24 @@ public interface SecuritySystemAccessory extends HomekitAccessory { */ void unsubscribeTargetSecuritySystemState(); + /** + * Valid values for current state. + * + * @return array of valid current states. + */ + default CurrentSecuritySystemStateEnum[] getCurrentSecuritySystemStateValidValues() { + return CurrentSecuritySystemStateEnum.values(); + } + + /** + * Valid values for target state. + * + * @return array of valid targe states. + */ + default TargetSecuritySystemStateEnum[] getTargetSecuritySystemStateValidValues() { + return TargetSecuritySystemStateEnum.values(); + } + @Override default Collection getServices() { return Collections.singleton(new SecuritySystemService(this)); diff --git a/src/main/java/io/github/hapjava/accessories/ThermostatAccessory.java b/src/main/java/io/github/hapjava/accessories/ThermostatAccessory.java index f55ed7a63..837993853 100644 --- a/src/main/java/io/github/hapjava/accessories/ThermostatAccessory.java +++ b/src/main/java/io/github/hapjava/accessories/ThermostatAccessory.java @@ -189,6 +189,24 @@ default double getMinStepTargetTemperature() { /** Unsubscribes from changes in the target temperature. */ void unsubscribeTargetTemperature(); + /** + * Valid values for current state. + * + * @return array of valid current states. + */ + default CurrentHeatingCoolingStateEnum[] getCurrentHeatingCoolingStateValidValues() { + return CurrentHeatingCoolingStateEnum.values(); + } + + /** + * Valid values for target state. + * + * @return array of valid targe states. + */ + default TargetHeatingCoolingStateEnum[] getTargetHeatingCoolingStateValidValues() { + return TargetHeatingCoolingStateEnum.values(); + } + @Override default Collection getServices() { return Collections.singleton(new ThermostatService(this)); diff --git a/src/main/java/io/github/hapjava/characteristics/impl/accessoryinformation/AccessoryFlagsCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/accessoryinformation/AccessoryFlagsCharacteristic.java index 1e7885382..f04a4dd8e 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/accessoryinformation/AccessoryFlagsCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/accessoryinformation/AccessoryFlagsCharacteristic.java @@ -20,7 +20,7 @@ public AccessoryFlagsCharacteristic( super( "000000A6-0000-1000-8000-0026BB765291", "accessory flags", - 1, + AccessoryFlagsEnum.values(), Optional.of(getter), Optional.empty(), Optional.of(subscriber), diff --git a/src/main/java/io/github/hapjava/characteristics/impl/airpurifier/CurrentAirPurifierCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/airpurifier/CurrentAirPurifierCharacteristic.java index 051f1b7ea..c5b506c40 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/airpurifier/CurrentAirPurifierCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/airpurifier/CurrentAirPurifierCharacteristic.java @@ -21,7 +21,7 @@ public CurrentAirPurifierCharacteristic( super( "000000A9-0000-1000-8000-0026BB765291", "current air purifier state", - 2, + CurrentAirPurifierStateEnum.values(), Optional.of(getter), Optional.empty(), Optional.of(subscriber), diff --git a/src/main/java/io/github/hapjava/characteristics/impl/airpurifier/TargetAirPurifierStateCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/airpurifier/TargetAirPurifierStateCharacteristic.java index ecc762c6b..e8452d655 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/airpurifier/TargetAirPurifierStateCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/airpurifier/TargetAirPurifierStateCharacteristic.java @@ -23,18 +23,10 @@ public TargetAirPurifierStateCharacteristic( super( "000000A8-0000-1000-8000-0026BB765291", "Air purifier state", - 1, + TargetAirPurifierStateEnum.values(), Optional.of(getter), Optional.of(setter), Optional.of(subscriber), Optional.of(unsubscriber)); } - - @Override - protected void setValue(Integer value) throws Exception { - if (!setter.isPresent()) { - return; - } - setter.get().accept(TargetAirPurifierStateEnum.fromCode(value)); - } } diff --git a/src/main/java/io/github/hapjava/characteristics/impl/airquality/AirQualityCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/airquality/AirQualityCharacteristic.java index ab9feec85..448b90383 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/airquality/AirQualityCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/airquality/AirQualityCharacteristic.java @@ -19,7 +19,7 @@ public AirQualityCharacteristic( super( "00000095-0000-1000-8000-0026BB765291", "air quality", - 5, + AirQualityEnum.values(), Optional.of(getter), Optional.empty(), Optional.of(subscriber), diff --git a/src/main/java/io/github/hapjava/characteristics/impl/base/EnumCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/base/EnumCharacteristic.java index 52eb1ccf9..f983efe16 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/base/EnumCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/base/EnumCharacteristic.java @@ -3,10 +3,13 @@ import io.github.hapjava.characteristics.CharacteristicEnum; import io.github.hapjava.characteristics.ExceptionalConsumer; import io.github.hapjava.characteristics.HomekitCharacteristicChangeCallback; +import java.util.Arrays; import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.function.Consumer; import java.util.function.Supplier; +import javax.json.Json; +import javax.json.JsonArrayBuilder; import javax.json.JsonNumber; import javax.json.JsonObject; import javax.json.JsonObjectBuilder; @@ -22,7 +25,7 @@ public abstract class EnumCharacteristic extends BaseCharacteristic { - private final int maxValue; + private final T[] validValues; Optional>> getter; protected Optional> setter; @@ -32,7 +35,7 @@ public abstract class EnumCharacteristic * @param type a string containing a UUID that indicates the type of characteristic. Apple defines * a set of these, however implementors can create their own as well. * @param description a description of the characteristic to be passed to the consuming device. - * @param maxValue the number of enum items. + * @param validValues an array of valid values for enum. * @param getter getter to retrieve the value * @param setter setter to set value * @param subscriber subscriber to subscribe to changes @@ -41,25 +44,29 @@ public abstract class EnumCharacteristic public EnumCharacteristic( String type, String description, - int maxValue, + T[] validValues, Optional>> getter, Optional> setter, Optional> subscriber, Optional unsubscriber) { super( type, "int", description, getter.isPresent(), setter.isPresent(), subscriber, unsubscriber); - this.maxValue = maxValue; this.getter = getter; this.setter = setter; + this.validValues = validValues; } /** {@inheritDoc} */ @Override protected CompletableFuture makeBuilder(int iid) { + JsonArrayBuilder validValuesBuilder = Json.createArrayBuilder(); + if (validValues != null && validValues.length != 0) { + Arrays.stream(validValues).forEach((T value) -> validValuesBuilder.add(value.getCode())); + } return super.makeBuilder(iid) .thenApply( builder -> { - return builder.add("minValue", 0).add("maxValue", maxValue).add("minStep", 1); + return builder.add("valid-values", validValuesBuilder); }); } @@ -91,12 +98,24 @@ protected void setValue(Integer value) throws Exception { return; } - // TODO implement setter here? + // check if value is in valid values + if (validValues != null && value != null) { + for (T valid : validValues) { + if (valid.getCode() == value) { + setter.get().accept(valid); + return; + } + } + } } /** {@inheritDoc} */ @Override protected Integer getDefault() { + // as default return first item from valid values + if (validValues != null && validValues.length > 0) { + return validValues[0].getCode(); + } return 0; } } diff --git a/src/main/java/io/github/hapjava/characteristics/impl/battery/ChargingStateCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/battery/ChargingStateCharacteristic.java index 7f662a651..f034e2c3c 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/battery/ChargingStateCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/battery/ChargingStateCharacteristic.java @@ -20,7 +20,7 @@ public ChargingStateCharacteristic( super( "0000008F-0000-1000-8000-0026BB765291", "Charging state", - 2, + ChargingStateEnum.values(), Optional.of(getter), Optional.empty(), Optional.of(subscriber), diff --git a/src/main/java/io/github/hapjava/characteristics/impl/battery/StatusLowBatteryCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/battery/StatusLowBatteryCharacteristic.java index 8fa55bbf1..fac7f3ead 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/battery/StatusLowBatteryCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/battery/StatusLowBatteryCharacteristic.java @@ -20,7 +20,7 @@ public StatusLowBatteryCharacteristic( super( "00000079-0000-1000-8000-0026BB765291", "Status Low Battery", - 1, + StatusLowBatteryEnum.values(), Optional.of(getter), Optional.empty(), Optional.of(subscriber), diff --git a/src/main/java/io/github/hapjava/characteristics/impl/carbondioxidesensor/CarbonDioxideDetectedCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/carbondioxidesensor/CarbonDioxideDetectedCharacteristic.java index 443d1d457..ab327a40e 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/carbondioxidesensor/CarbonDioxideDetectedCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/carbondioxidesensor/CarbonDioxideDetectedCharacteristic.java @@ -22,7 +22,7 @@ public CarbonDioxideDetectedCharacteristic( super( "00000092-0000-1000-8000-0026BB765291", "Carbon Dioxide Detected", - 1, + CarbonDioxideDetectedEnum.values(), Optional.of(getter), Optional.empty(), Optional.of(subscriber), diff --git a/src/main/java/io/github/hapjava/characteristics/impl/carbonmonoxidesensor/CarbonMonoxideDetectedCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/carbonmonoxidesensor/CarbonMonoxideDetectedCharacteristic.java index d9aa32a22..2ef603b6e 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/carbonmonoxidesensor/CarbonMonoxideDetectedCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/carbonmonoxidesensor/CarbonMonoxideDetectedCharacteristic.java @@ -22,7 +22,7 @@ public CarbonMonoxideDetectedCharacteristic( super( "00000069-0000-1000-8000-0026BB765291", "Carbon Monoxide Detected", - 1, + CarbonMonoxideDetectedEnum.values(), Optional.of(getter), Optional.empty(), Optional.of(subscriber), diff --git a/src/main/java/io/github/hapjava/characteristics/impl/common/ActiveCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/common/ActiveCharacteristic.java index fdc932218..0d7fc2c1c 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/common/ActiveCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/common/ActiveCharacteristic.java @@ -22,15 +22,10 @@ public ActiveCharacteristic( super( "000000B0-0000-1000-8000-0026BB765291", "Active", - 1, + ActiveEnum.values(), Optional.of(getter), Optional.of(setter), Optional.of(subscriber), Optional.of(unsubscriber)); } - - @Override - protected void setValue(Integer value) throws Exception { - if (setter.isPresent()) setter.get().accept(ActiveEnum.fromCode(value)); - } } diff --git a/src/main/java/io/github/hapjava/characteristics/impl/common/InUseCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/common/InUseCharacteristic.java index 967d69f13..882c27a01 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/common/InUseCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/common/InUseCharacteristic.java @@ -19,7 +19,7 @@ public InUseCharacteristic( super( "000000D2-0000-1000-8000-0026BB765291", "In Use", - 1, + InUseEnum.values(), Optional.of(getter), Optional.empty(), Optional.of(subscriber), diff --git a/src/main/java/io/github/hapjava/characteristics/impl/common/IsConfiguredCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/common/IsConfiguredCharacteristic.java index c63c032c0..c016e87c9 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/common/IsConfiguredCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/common/IsConfiguredCharacteristic.java @@ -21,15 +21,10 @@ public IsConfiguredCharacteristic( super( "000000D6-0000-1000-8000-0026BB765291", "Is Configured", - 1, + IsConfiguredEnum.values(), Optional.of(getter), Optional.of(setter), Optional.of(subscriber), Optional.of(unsubscriber)); } - - @Override - protected void setValue(Integer value) throws Exception { - if (setter.isPresent()) setter.get().accept(IsConfiguredEnum.fromCode(value)); - } } diff --git a/src/main/java/io/github/hapjava/characteristics/impl/common/ProgramModeCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/common/ProgramModeCharacteristic.java index 6504049e7..1580ae392 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/common/ProgramModeCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/common/ProgramModeCharacteristic.java @@ -19,7 +19,7 @@ public ProgramModeCharacteristic( super( "000000D1-0000-1000-8000-0026BB765291", "Program Mode", - 2, + ProgramModeEnum.values(), Optional.of(getter), Optional.empty(), Optional.of(subscriber), diff --git a/src/main/java/io/github/hapjava/characteristics/impl/common/ProgrammableSwitchEventCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/common/ProgrammableSwitchEventCharacteristic.java index de32f0475..83dcbb2dc 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/common/ProgrammableSwitchEventCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/common/ProgrammableSwitchEventCharacteristic.java @@ -24,7 +24,7 @@ public ProgrammableSwitchEventCharacteristic( super( "00000073-0000-1000-8000-0026BB765291", "Switch Event", - 2, + ProgrammableSwitchEnum.values(), Optional.of(getter), Optional.empty(), Optional.of(subscriber), diff --git a/src/main/java/io/github/hapjava/characteristics/impl/common/ServiceLabelNamespaceCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/common/ServiceLabelNamespaceCharacteristic.java index 4d6f1e24d..9f8dd3248 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/common/ServiceLabelNamespaceCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/common/ServiceLabelNamespaceCharacteristic.java @@ -16,7 +16,7 @@ public ServiceLabelNamespaceCharacteristic( super( "000000CD-0000-1000-8000-0026BB765291", "service label namespace", - 1, + ServiceLabelNamespaceEnum.values(), Optional.of(getter), Optional.empty(), Optional.empty(), diff --git a/src/main/java/io/github/hapjava/characteristics/impl/common/StatusFaultCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/common/StatusFaultCharacteristic.java index 773d1c04d..5754e11a8 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/common/StatusFaultCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/common/StatusFaultCharacteristic.java @@ -17,7 +17,7 @@ public StatusFaultCharacteristic( super( "00000077-0000-1000-8000-0026BB765291", "Status Fault", - 1, + StatusFaultEnum.values(), Optional.of(getter), Optional.empty(), Optional.of(subscriber), diff --git a/src/main/java/io/github/hapjava/characteristics/impl/common/StatusTamperedCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/common/StatusTamperedCharacteristic.java index be0c4ae6b..501bbaedb 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/common/StatusTamperedCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/common/StatusTamperedCharacteristic.java @@ -20,7 +20,7 @@ public StatusTamperedCharacteristic( super( "0000007A-0000-1000-8000-0026BB765291", "Status Tampered", - 1, + StatusTamperedEnum.values(), Optional.of(getter), Optional.empty(), Optional.of(subscriber), diff --git a/src/main/java/io/github/hapjava/characteristics/impl/contactsensor/ContactSensorStateCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/contactsensor/ContactSensorStateCharacteristic.java index 0dfb7ad9c..8ac3c1fde 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/contactsensor/ContactSensorStateCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/contactsensor/ContactSensorStateCharacteristic.java @@ -22,7 +22,7 @@ public ContactSensorStateCharacteristic( super( "0000006A-0000-1000-8000-0026BB765291", "Contact Sensor", - 1, + ContactStateEnum.values(), Optional.of(getter), Optional.empty(), Optional.of(subscriber), diff --git a/src/main/java/io/github/hapjava/characteristics/impl/fan/CurrentFanStateCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/fan/CurrentFanStateCharacteristic.java index ec9e5c9dd..75f932e50 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/fan/CurrentFanStateCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/fan/CurrentFanStateCharacteristic.java @@ -22,7 +22,7 @@ public CurrentFanStateCharacteristic( super( "000000AF-0000-1000-8000-0026BB765291", "Current Fan State", - 2, + CurrentFanStateEnum.values(), Optional.of(getter), Optional.empty(), Optional.of(subscriber), diff --git a/src/main/java/io/github/hapjava/characteristics/impl/fan/LockPhysicalControlsCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/fan/LockPhysicalControlsCharacteristic.java index 810aa8769..8ea6f35c6 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/fan/LockPhysicalControlsCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/fan/LockPhysicalControlsCharacteristic.java @@ -21,18 +21,10 @@ public LockPhysicalControlsCharacteristic( super( "000000A7-0000-1000-8000-0026BB765291", "Physical Locks", - 1, + LockPhysicalControlsEnum.values(), Optional.of(getter), Optional.of(setter), Optional.of(subscriber), Optional.of(unsubscriber)); } - - @Override - protected void setValue(Integer value) throws Exception { - if (!setter.isPresent()) { - return; - } - setter.get().accept(LockPhysicalControlsEnum.fromCode(value)); - } } diff --git a/src/main/java/io/github/hapjava/characteristics/impl/fan/RotationDirectionCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/fan/RotationDirectionCharacteristic.java index 1a2ed8d1d..efa82681f 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/fan/RotationDirectionCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/fan/RotationDirectionCharacteristic.java @@ -21,18 +21,10 @@ public RotationDirectionCharacteristic( super( "00000028-0000-1000-8000-0026BB765291", "Rotation direction", - 1, + RotationDirectionEnum.values(), Optional.of(getter), Optional.of(setter), Optional.of(subscriber), Optional.of(unsubscriber)); } - - @Override - protected void setValue(Integer value) throws Exception { - if (!setter.isPresent()) { - return; - } - setter.get().accept(RotationDirectionEnum.fromCode(value)); - } } diff --git a/src/main/java/io/github/hapjava/characteristics/impl/fan/SwingModeCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/fan/SwingModeCharacteristic.java index 821a4a487..ba58dfd0f 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/fan/SwingModeCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/fan/SwingModeCharacteristic.java @@ -21,18 +21,10 @@ public SwingModeCharacteristic( super( "000000B6-0000-1000-8000-0026BB765291", "Swing Mode", - 1, + SwingModeEnum.values(), Optional.of(getter), Optional.of(setter), Optional.of(subscriber), Optional.of(unsubscriber)); } - - @Override - protected void setValue(Integer value) throws Exception { - if (!setter.isPresent()) { - return; - } - setter.get().accept(SwingModeEnum.fromCode(value)); - } } diff --git a/src/main/java/io/github/hapjava/characteristics/impl/fan/TargetFanStateCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/fan/TargetFanStateCharacteristic.java index e91b09732..1ab9ca305 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/fan/TargetFanStateCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/fan/TargetFanStateCharacteristic.java @@ -21,18 +21,10 @@ public TargetFanStateCharacteristic( super( "000000BF-0000-1000-8000-0026BB765291", "Target Fan State", - 1, + TargetFanStateEnum.values(), Optional.of(getter), Optional.of(setter), Optional.of(subscriber), Optional.of(unsubscriber)); } - - @Override - protected void setValue(Integer value) throws Exception { - if (!setter.isPresent()) { - return; - } - setter.get().accept(TargetFanStateEnum.fromCode(value)); - } } diff --git a/src/main/java/io/github/hapjava/characteristics/impl/garagedoor/CurrentDoorStateCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/garagedoor/CurrentDoorStateCharacteristic.java index 9743c0a2a..e06937daa 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/garagedoor/CurrentDoorStateCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/garagedoor/CurrentDoorStateCharacteristic.java @@ -19,7 +19,7 @@ public CurrentDoorStateCharacteristic( super( "0000000E-0000-1000-8000-0026BB765291", "Current Door State", - 4, + CurrentDoorStateEnum.values(), Optional.of(getter), Optional.empty(), Optional.of(subscriber), diff --git a/src/main/java/io/github/hapjava/characteristics/impl/garagedoor/TargetDoorStateCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/garagedoor/TargetDoorStateCharacteristic.java index 3e6080eae..f5b490c6e 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/garagedoor/TargetDoorStateCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/garagedoor/TargetDoorStateCharacteristic.java @@ -21,18 +21,10 @@ public TargetDoorStateCharacteristic( super( "00000032-0000-1000-8000-0026BB765291", "Target Door State", - 1, + TargetDoorStateEnum.values(), Optional.of(getter), Optional.of(setter), Optional.of(subscriber), Optional.of(unsubscriber)); } - - @Override - protected void setValue(Integer value) throws Exception { - if (!setter.isPresent()) { - return; - } - setter.get().accept(TargetDoorStateEnum.fromCode(value)); - } } diff --git a/src/main/java/io/github/hapjava/characteristics/impl/heatercooler/CurrentHeaterCoolerStateCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/heatercooler/CurrentHeaterCoolerStateCharacteristic.java index 644e2ca2a..f7d48bae6 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/heatercooler/CurrentHeaterCoolerStateCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/heatercooler/CurrentHeaterCoolerStateCharacteristic.java @@ -13,13 +13,14 @@ public class CurrentHeaterCoolerStateCharacteristic extends EnumCharacteristic implements EventableCharacteristic { public CurrentHeaterCoolerStateCharacteristic( + CurrentHeaterCoolerStateEnum[] validValues, Supplier> getter, Consumer subscriber, Runnable unsubscriber) { super( "000000B1-0000-1000-8000-0026BB765291", "current heater cooler state", - 3, + validValues, Optional.of(getter), Optional.empty(), Optional.of(subscriber), diff --git a/src/main/java/io/github/hapjava/characteristics/impl/heatercooler/TargetHeaterCoolerStateCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/heatercooler/TargetHeaterCoolerStateCharacteristic.java index 0e360c735..a9a167d45 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/heatercooler/TargetHeaterCoolerStateCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/heatercooler/TargetHeaterCoolerStateCharacteristic.java @@ -14,6 +14,7 @@ public class TargetHeaterCoolerStateCharacteristic extends EnumCharacteristic implements EventableCharacteristic { public TargetHeaterCoolerStateCharacteristic( + TargetHeaterCoolerStateEnum[] validValues, Supplier> getter, ExceptionalConsumer setter, Consumer subscriber, @@ -21,18 +22,10 @@ public TargetHeaterCoolerStateCharacteristic( super( "000000B2-0000-1000-8000-0026BB765291", "target heater cooler state", - 2, + validValues, Optional.of(getter), Optional.of(setter), Optional.of(subscriber), Optional.of(unsubscriber)); } - - @Override - protected void setValue(Integer value) throws Exception { - if (!setter.isPresent()) { - return; - } - setter.get().accept(TargetHeaterCoolerStateEnum.fromCode(value)); - } } diff --git a/src/main/java/io/github/hapjava/characteristics/impl/humidifier/CurrentHumidifierDehumidifierStateCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/humidifier/CurrentHumidifierDehumidifierStateCharacteristic.java index ba72a856b..229d0aa73 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/humidifier/CurrentHumidifierDehumidifierStateCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/humidifier/CurrentHumidifierDehumidifierStateCharacteristic.java @@ -20,7 +20,7 @@ public CurrentHumidifierDehumidifierStateCharacteristic( super( "000000B3-0000-1000-8000-0026BB765291", "current humidifier state", - 3, + CurrentHumidifierDehumidifierStateEnum.values(), Optional.of(getter), Optional.empty(), Optional.of(subscriber), diff --git a/src/main/java/io/github/hapjava/characteristics/impl/humidifier/TargetHumidifierDehumidifierStateCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/humidifier/TargetHumidifierDehumidifierStateCharacteristic.java index 63de111d8..278e7443c 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/humidifier/TargetHumidifierDehumidifierStateCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/humidifier/TargetHumidifierDehumidifierStateCharacteristic.java @@ -22,18 +22,10 @@ public TargetHumidifierDehumidifierStateCharacteristic( super( "000000B4-0000-1000-8000-0026BB765291", "target humidifier state", - 2, + TargetHumidifierDehumidifierStateEnum.values(), Optional.of(getter), Optional.of(setter), Optional.of(subscriber), Optional.of(unsubscriber)); } - - @Override - protected void setValue(Integer value) throws Exception { - if (!setter.isPresent()) { - return; - } - setter.get().accept(TargetHumidifierDehumidifierStateEnum.fromCode(value)); - } } diff --git a/src/main/java/io/github/hapjava/characteristics/impl/leaksensor/LeakDetectedStateCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/leaksensor/LeakDetectedStateCharacteristic.java index ce9bc8120..ca0a2043e 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/leaksensor/LeakDetectedStateCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/leaksensor/LeakDetectedStateCharacteristic.java @@ -22,7 +22,7 @@ public LeakDetectedStateCharacteristic( super( "00000070-0000-1000-8000-0026BB765291", "Leak Detected State", - 3, + LeakDetectedStateEnum.values(), Optional.of(getter), Optional.empty(), Optional.of(subscriber), diff --git a/src/main/java/io/github/hapjava/characteristics/impl/lock/LockCurrentStateCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/lock/LockCurrentStateCharacteristic.java index ad674779b..b6946313b 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/lock/LockCurrentStateCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/lock/LockCurrentStateCharacteristic.java @@ -17,7 +17,7 @@ public LockCurrentStateCharacteristic( super( "0000001D-0000-1000-8000-0026BB765291", "Current Lock State", - 3, + LockCurrentStateEnum.values(), Optional.of(getter), Optional.empty(), Optional.of(subscriber), diff --git a/src/main/java/io/github/hapjava/characteristics/impl/lock/LockTargetStateCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/lock/LockTargetStateCharacteristic.java index f2efc26e0..c46a4eab5 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/lock/LockTargetStateCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/lock/LockTargetStateCharacteristic.java @@ -19,18 +19,10 @@ public LockTargetStateCharacteristic( super( "0000001E-0000-1000-8000-0026BB765291", "Target Lock State", - 1, + LockTargetStateEnum.values(), Optional.of(getter), Optional.of(setter), Optional.of(subscriber), Optional.of(unsubscriber)); } - - @Override - protected void setValue(Integer value) throws Exception { - if (!setter.isPresent()) { - return; - } - setter.get().accept(LockTargetStateEnum.fromCode(value)); - } } diff --git a/src/main/java/io/github/hapjava/characteristics/impl/occupancysensor/OccupancyDetectedCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/occupancysensor/OccupancyDetectedCharacteristic.java index 97c7c70f5..0057b0968 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/occupancysensor/OccupancyDetectedCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/occupancysensor/OccupancyDetectedCharacteristic.java @@ -17,7 +17,7 @@ public OccupancyDetectedCharacteristic( super( "00000071-0000-1000-8000-0026BB765291", "Occupancy Detected", - 1, + OccupancyDetectedEnum.values(), Optional.of(getter), Optional.empty(), Optional.of(subscriber), diff --git a/src/main/java/io/github/hapjava/characteristics/impl/securitysystem/CurrentSecuritySystemStateCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/securitysystem/CurrentSecuritySystemStateCharacteristic.java index 779ab51c4..38ec2c3fd 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/securitysystem/CurrentSecuritySystemStateCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/securitysystem/CurrentSecuritySystemStateCharacteristic.java @@ -12,13 +12,14 @@ public class CurrentSecuritySystemStateCharacteristic extends EnumCharacteristic { public CurrentSecuritySystemStateCharacteristic( + CurrentSecuritySystemStateEnum[] validValues, Supplier> getter, Consumer subscriber, Runnable unsubscriber) { super( "00000066-0000-1000-8000-0026BB765291", "Current Security System State", - 4, + validValues, Optional.of(getter), Optional.empty(), Optional.of(subscriber), diff --git a/src/main/java/io/github/hapjava/characteristics/impl/securitysystem/SecuritySystemAlarmTypeCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/securitysystem/SecuritySystemAlarmTypeCharacteristic.java index fa768f4fd..14c118399 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/securitysystem/SecuritySystemAlarmTypeCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/securitysystem/SecuritySystemAlarmTypeCharacteristic.java @@ -21,7 +21,7 @@ public SecuritySystemAlarmTypeCharacteristic( super( "0000008E-0000-1000-8000-0026BB765291", "Alert Type", - 1, + SecuritySystemAlarmTypeEnum.values(), Optional.of(getter), Optional.empty(), Optional.of(subscriber), diff --git a/src/main/java/io/github/hapjava/characteristics/impl/securitysystem/TargetSecuritySystemStateCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/securitysystem/TargetSecuritySystemStateCharacteristic.java index 5284d4f6e..5289ba380 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/securitysystem/TargetSecuritySystemStateCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/securitysystem/TargetSecuritySystemStateCharacteristic.java @@ -13,6 +13,7 @@ public class TargetSecuritySystemStateCharacteristic extends EnumCharacteristic { public TargetSecuritySystemStateCharacteristic( + TargetSecuritySystemStateEnum[] validValues, Supplier> getter, ExceptionalConsumer setter, Consumer subscriber, @@ -20,18 +21,10 @@ public TargetSecuritySystemStateCharacteristic( super( "00000067-0000-1000-8000-0026BB765291", "Target Security System State", - 3, + validValues, Optional.of(getter), Optional.of(setter), Optional.of(subscriber), Optional.of(unsubscriber)); } - - @Override - protected void setValue(Integer value) throws Exception { - if (!setter.isPresent()) { - return; - } - setter.get().accept(TargetSecuritySystemStateEnum.fromCode(value)); - } } diff --git a/src/main/java/io/github/hapjava/characteristics/impl/slat/CurrentSlatStateCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/slat/CurrentSlatStateCharacteristic.java index 32e897d8b..84e5e1daa 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/slat/CurrentSlatStateCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/slat/CurrentSlatStateCharacteristic.java @@ -17,7 +17,7 @@ public CurrentSlatStateCharacteristic( super( "000000AA-0000-1000-8000-0026BB765291", "current slat state", - 2, + CurrentSlatStateEnum.values(), Optional.of(getter), Optional.empty(), Optional.of(subscriber), diff --git a/src/main/java/io/github/hapjava/characteristics/impl/slat/SlatTypeCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/slat/SlatTypeCharacteristic.java index b65dbdf2c..0d9f60608 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/slat/SlatTypeCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/slat/SlatTypeCharacteristic.java @@ -14,7 +14,7 @@ public SlatTypeCharacteristic(Supplier> getter) super( "000000C0-0000-1000-8000-0026BB765291", "slat type", - 1, + SlatTypeEnum.values(), Optional.of(getter), Optional.empty(), Optional.empty(), diff --git a/src/main/java/io/github/hapjava/characteristics/impl/smokesensor/SmokeDetectedCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/smokesensor/SmokeDetectedCharacteristic.java index 76bf58ea9..9befabed0 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/smokesensor/SmokeDetectedCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/smokesensor/SmokeDetectedCharacteristic.java @@ -17,7 +17,7 @@ public SmokeDetectedCharacteristic( super( "00000076-0000-1000-8000-0026BB765291", "Smoke Detected", - 1, + SmokeDetectedStateEnum.values(), Optional.of(getter), Optional.empty(), Optional.of(subscriber), diff --git a/src/main/java/io/github/hapjava/characteristics/impl/thermostat/CurrentHeatingCoolingStateCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/thermostat/CurrentHeatingCoolingStateCharacteristic.java index 87cf113a9..8c2600a69 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/thermostat/CurrentHeatingCoolingStateCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/thermostat/CurrentHeatingCoolingStateCharacteristic.java @@ -14,13 +14,14 @@ public class CurrentHeatingCoolingStateCharacteristic extends EnumCharacteristic { public CurrentHeatingCoolingStateCharacteristic( + CurrentHeatingCoolingStateEnum[] validValues, Supplier> getter, Consumer subscriber, Runnable unsubscriber) { super( "0000000F-0000-1000-8000-0026BB765291", "Current heating cooling mode", - 2, + validValues, Optional.of(getter), Optional.empty(), Optional.of(subscriber), diff --git a/src/main/java/io/github/hapjava/characteristics/impl/thermostat/TargetHeatingCoolingStateCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/thermostat/TargetHeatingCoolingStateCharacteristic.java index 6c5091451..844df0c67 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/thermostat/TargetHeatingCoolingStateCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/thermostat/TargetHeatingCoolingStateCharacteristic.java @@ -13,6 +13,7 @@ public class TargetHeatingCoolingStateCharacteristic extends EnumCharacteristic { public TargetHeatingCoolingStateCharacteristic( + TargetHeatingCoolingStateEnum[] validValues, Supplier> getter, ExceptionalConsumer setter, Consumer subscriber, @@ -20,18 +21,10 @@ public TargetHeatingCoolingStateCharacteristic( super( "00000033-0000-1000-8000-0026BB765291", "Target heating cooling mode", - 3, + validValues, Optional.of(getter), Optional.of(setter), Optional.of(subscriber), Optional.of(unsubscriber)); } - - @Override - protected void setValue(Integer value) throws Exception { - if (!setter.isPresent()) { - return; - } - setter.get().accept(TargetHeatingCoolingStateEnum.fromCode(value)); - } } diff --git a/src/main/java/io/github/hapjava/characteristics/impl/thermostat/TemperatureDisplayUnitCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/thermostat/TemperatureDisplayUnitCharacteristic.java index 43d3d8c5d..02a23553f 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/thermostat/TemperatureDisplayUnitCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/thermostat/TemperatureDisplayUnitCharacteristic.java @@ -23,18 +23,10 @@ public TemperatureDisplayUnitCharacteristic( super( "00000036-0000-1000-8000-0026BB765291", "Temperature units", - 1, + TemperatureDisplayUnitEnum.values(), Optional.of(getter), Optional.of(setter), Optional.of(subscriber), Optional.of(unsubscriber)); } - - @Override - protected void setValue(Integer value) throws Exception { - if (!setter.isPresent()) { - return; - } - setter.get().accept(TemperatureDisplayUnitEnum.fromCode(value)); - } } diff --git a/src/main/java/io/github/hapjava/characteristics/impl/valve/ValveTypeCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/valve/ValveTypeCharacteristic.java index 4c25ce867..f98e468f4 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/valve/ValveTypeCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/valve/ValveTypeCharacteristic.java @@ -17,7 +17,7 @@ public ValveTypeCharacteristic( super( "000000D5-0000-1000-8000-0026BB765291", "Valve type", - 3, + ValveTypeEnum.values(), Optional.of(getter), Optional.empty(), Optional.of(subscriber), diff --git a/src/main/java/io/github/hapjava/characteristics/impl/windowcovering/PositionStateCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/windowcovering/PositionStateCharacteristic.java index 73141cb24..5b2488f52 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/windowcovering/PositionStateCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/windowcovering/PositionStateCharacteristic.java @@ -17,7 +17,7 @@ public PositionStateCharacteristic( super( "00000072-0000-1000-8000-0026BB765291", "Position state", - 2, + PositionStateEnum.values(), Optional.of(getter), Optional.empty(), Optional.of(subscriber), diff --git a/src/main/java/io/github/hapjava/services/impl/HeaterCoolerService.java b/src/main/java/io/github/hapjava/services/impl/HeaterCoolerService.java index 299161ed8..5204ae006 100644 --- a/src/main/java/io/github/hapjava/services/impl/HeaterCoolerService.java +++ b/src/main/java/io/github/hapjava/services/impl/HeaterCoolerService.java @@ -48,10 +48,12 @@ public HeaterCoolerService(HeaterCoolerAccessory accessory) { accessory::subscribeCurrentTemperature, accessory::unsubscribeCurrentTemperature), new CurrentHeaterCoolerStateCharacteristic( + accessory.getCurrentHeaterCoolerStateValidValues(), accessory::getCurrentHeaterCoolerState, accessory::subscribeCurrentHeaterCoolerState, accessory::unsubscribeCurrentHeaterCoolerState), new TargetHeaterCoolerStateCharacteristic( + accessory.getTargetHeaterCoolerStateValidValues(), accessory::getTargetHeaterCoolerState, accessory::setTargetHeaterCoolerState, accessory::subscribeTargetHeaterCoolerState, @@ -84,34 +86,40 @@ public HeaterCoolerService(HeaterCoolerAccessory accessory) { ((AccessoryWithPhysicalControlsLock) accessory)::unsubscribeLockControls)); } if (accessory instanceof AccessoryWithCoolingThresholdTemperature) { - new CoolingThresholdTemperatureCharacteristic( - ((AccessoryWithCoolingThresholdTemperature) accessory) - .getMinCoolingThresholdTemperature(), - ((AccessoryWithCoolingThresholdTemperature) accessory) - .getMaxCoolingThresholdTemperature(), - ((AccessoryWithCoolingThresholdTemperature) accessory) - .getStepCoolingThresholdTemperature(), - ((AccessoryWithCoolingThresholdTemperature) accessory)::getCoolingThresholdTemperature, - ((AccessoryWithCoolingThresholdTemperature) accessory)::setCoolingThresholdTemperature, - ((AccessoryWithCoolingThresholdTemperature) accessory) - ::subscribeCoolingThresholdTemperature, - ((AccessoryWithCoolingThresholdTemperature) accessory) - ::unsubscribeCoolingThresholdTemperature); + addOptionalCharacteristic( + new CoolingThresholdTemperatureCharacteristic( + ((AccessoryWithCoolingThresholdTemperature) accessory) + .getMinCoolingThresholdTemperature(), + ((AccessoryWithCoolingThresholdTemperature) accessory) + .getMaxCoolingThresholdTemperature(), + ((AccessoryWithCoolingThresholdTemperature) accessory) + .getStepCoolingThresholdTemperature(), + ((AccessoryWithCoolingThresholdTemperature) accessory) + ::getCoolingThresholdTemperature, + ((AccessoryWithCoolingThresholdTemperature) accessory) + ::setCoolingThresholdTemperature, + ((AccessoryWithCoolingThresholdTemperature) accessory) + ::subscribeCoolingThresholdTemperature, + ((AccessoryWithCoolingThresholdTemperature) accessory) + ::unsubscribeCoolingThresholdTemperature)); } if (accessory instanceof AccessoryWithHeatingThresholdTemperature) { - new HeatingThresholdTemperatureCharacteristic( - ((AccessoryWithHeatingThresholdTemperature) accessory) - .getMinHeatingThresholdTemperature(), - ((AccessoryWithHeatingThresholdTemperature) accessory) - .getMaxHeatingThresholdTemperature(), - ((AccessoryWithHeatingThresholdTemperature) accessory) - .getStepHeatingThresholdTemperature(), - ((AccessoryWithHeatingThresholdTemperature) accessory)::getHeatingThresholdTemperature, - ((AccessoryWithHeatingThresholdTemperature) accessory)::setHeatingThresholdTemperature, - ((AccessoryWithHeatingThresholdTemperature) accessory) - ::subscribeHeatingThresholdTemperature, - ((AccessoryWithHeatingThresholdTemperature) accessory) - ::unsubscribeHeatingThresholdTemperature); + addOptionalCharacteristic( + new HeatingThresholdTemperatureCharacteristic( + ((AccessoryWithHeatingThresholdTemperature) accessory) + .getMinHeatingThresholdTemperature(), + ((AccessoryWithHeatingThresholdTemperature) accessory) + .getMaxHeatingThresholdTemperature(), + ((AccessoryWithHeatingThresholdTemperature) accessory) + .getStepHeatingThresholdTemperature(), + ((AccessoryWithHeatingThresholdTemperature) accessory) + ::getHeatingThresholdTemperature, + ((AccessoryWithHeatingThresholdTemperature) accessory) + ::setHeatingThresholdTemperature, + ((AccessoryWithHeatingThresholdTemperature) accessory) + ::subscribeHeatingThresholdTemperature, + ((AccessoryWithHeatingThresholdTemperature) accessory) + ::unsubscribeHeatingThresholdTemperature)); } if (accessory instanceof AccessoryWithTemperatureDisplayUnits) { addOptionalCharacteristic( diff --git a/src/main/java/io/github/hapjava/services/impl/SecuritySystemService.java b/src/main/java/io/github/hapjava/services/impl/SecuritySystemService.java index f4cf60e00..f2bc8d02e 100644 --- a/src/main/java/io/github/hapjava/services/impl/SecuritySystemService.java +++ b/src/main/java/io/github/hapjava/services/impl/SecuritySystemService.java @@ -26,10 +26,12 @@ public SecuritySystemService( public SecuritySystemService(SecuritySystemAccessory accessory) { this( new CurrentSecuritySystemStateCharacteristic( + accessory.getCurrentSecuritySystemStateValidValues(), accessory::getCurrentSecuritySystemState, accessory::subscribeCurrentSecuritySystemState, accessory::unsubscribeCurrentSecuritySystemState), new TargetSecuritySystemStateCharacteristic( + accessory.getTargetSecuritySystemStateValidValues(), accessory::getTargetSecuritySystemState, accessory::setTargetSecuritySystemState, accessory::subscribeTargetSecuritySystemState, diff --git a/src/main/java/io/github/hapjava/services/impl/ThermostatService.java b/src/main/java/io/github/hapjava/services/impl/ThermostatService.java index 0806bb9b3..232d9c487 100644 --- a/src/main/java/io/github/hapjava/services/impl/ThermostatService.java +++ b/src/main/java/io/github/hapjava/services/impl/ThermostatService.java @@ -37,10 +37,12 @@ public ThermostatService( public ThermostatService(ThermostatAccessory accessory) { this( new CurrentHeatingCoolingStateCharacteristic( + accessory.getCurrentHeatingCoolingStateValidValues(), accessory::getCurrentState, accessory::subscribeCurrentState, accessory::unsubscribeCurrentState), new TargetHeatingCoolingStateCharacteristic( + accessory.getTargetHeatingCoolingStateValidValues(), accessory::getTargetState, accessory::setTargetState, accessory::subscribeTargetState, @@ -69,35 +71,45 @@ public ThermostatService(ThermostatAccessory accessory) { addOptionalCharacteristic(new NameCharacteristic(((AccessoryWithName) accessory)::getName)); } if (accessory instanceof AccessoryWithCoolingThresholdTemperature) { - new CoolingThresholdTemperatureCharacteristic( - ((AccessoryWithCoolingThresholdTemperature) accessory)::getCoolingThresholdTemperature, - ((AccessoryWithCoolingThresholdTemperature) accessory)::setCoolingThresholdTemperature, - ((AccessoryWithCoolingThresholdTemperature) accessory) - ::subscribeCoolingThresholdTemperature, - ((AccessoryWithCoolingThresholdTemperature) accessory) - ::unsubscribeCoolingThresholdTemperature); + addOptionalCharacteristic( + new CoolingThresholdTemperatureCharacteristic( + ((AccessoryWithCoolingThresholdTemperature) accessory) + ::getCoolingThresholdTemperature, + ((AccessoryWithCoolingThresholdTemperature) accessory) + ::setCoolingThresholdTemperature, + ((AccessoryWithCoolingThresholdTemperature) accessory) + ::subscribeCoolingThresholdTemperature, + ((AccessoryWithCoolingThresholdTemperature) accessory) + ::unsubscribeCoolingThresholdTemperature)); } if (accessory instanceof AccessoryWithHeatingThresholdTemperature) { - new HeatingThresholdTemperatureCharacteristic( - ((AccessoryWithHeatingThresholdTemperature) accessory)::getHeatingThresholdTemperature, - ((AccessoryWithHeatingThresholdTemperature) accessory)::setHeatingThresholdTemperature, - ((AccessoryWithHeatingThresholdTemperature) accessory) - ::subscribeHeatingThresholdTemperature, - ((AccessoryWithHeatingThresholdTemperature) accessory) - ::unsubscribeHeatingThresholdTemperature); + addOptionalCharacteristic( + new HeatingThresholdTemperatureCharacteristic( + ((AccessoryWithHeatingThresholdTemperature) accessory) + ::getHeatingThresholdTemperature, + ((AccessoryWithHeatingThresholdTemperature) accessory) + ::setHeatingThresholdTemperature, + ((AccessoryWithHeatingThresholdTemperature) accessory) + ::subscribeHeatingThresholdTemperature, + ((AccessoryWithHeatingThresholdTemperature) accessory) + ::unsubscribeHeatingThresholdTemperature)); } if (accessory instanceof AccessoryWithCurrentRelativeHumidity) { - new CurrentRelativeHumidityCharacteristic( - ((AccessoryWithCurrentRelativeHumidity) accessory)::getCurrentRelativeHumidity, - ((AccessoryWithCurrentRelativeHumidity) accessory)::subscribeCurrentRelativeHumidity, - ((AccessoryWithCurrentRelativeHumidity) accessory)::unsubscribeCurrentRelativeHumidity); + addOptionalCharacteristic( + new CurrentRelativeHumidityCharacteristic( + ((AccessoryWithCurrentRelativeHumidity) accessory)::getCurrentRelativeHumidity, + ((AccessoryWithCurrentRelativeHumidity) accessory)::subscribeCurrentRelativeHumidity, + ((AccessoryWithCurrentRelativeHumidity) accessory) + ::unsubscribeCurrentRelativeHumidity)); } if (accessory instanceof AccessoryWithTargetRelativeHumidity) { - new TargetRelativeHumidityCharacteristic( - ((AccessoryWithTargetRelativeHumidity) accessory)::getTargetRelativeHumidity, - ((AccessoryWithTargetRelativeHumidity) accessory)::setTargetRelativeHumidity, - ((AccessoryWithTargetRelativeHumidity) accessory)::subscribeTargetRelativeHumidity, - ((AccessoryWithTargetRelativeHumidity) accessory)::unsubscribeTargetRelativeHumidity); + addOptionalCharacteristic( + new TargetRelativeHumidityCharacteristic( + ((AccessoryWithTargetRelativeHumidity) accessory)::getTargetRelativeHumidity, + ((AccessoryWithTargetRelativeHumidity) accessory)::setTargetRelativeHumidity, + ((AccessoryWithTargetRelativeHumidity) accessory)::subscribeTargetRelativeHumidity, + ((AccessoryWithTargetRelativeHumidity) accessory) + ::unsubscribeTargetRelativeHumidity)); } }