diff --git a/bundles/org.openhab.binding.danfossairunit/README.md b/bundles/org.openhab.binding.danfossairunit/README.md index 669d08e2827dd..7763c732333cb 100644 --- a/bundles/org.openhab.binding.danfossairunit/README.md +++ b/bundles/org.openhab.binding.danfossairunit/README.md @@ -41,6 +41,7 @@ These are the available configuration parameters: | exhaust_temp | recuperator | Number | RO | Temperature of the air when pushed outside | | battery_life | service | Number | RO | Remaining Air Dial Battery Level (percentage) | | filter_life | service | Number | RO | Remaining life of filter until exchange is necessary (percentage) | +| filter_period | service | Number | RW | Number of months between filter replacements (between 3 and 12) | ## Full Example diff --git a/bundles/org.openhab.binding.danfossairunit/src/main/java/org/openhab/binding/danfossairunit/internal/Channel.java b/bundles/org.openhab.binding.danfossairunit/src/main/java/org/openhab/binding/danfossairunit/internal/Channel.java index ea77d6baf9e26..4aaeeb2b7c6b5 100644 --- a/bundles/org.openhab.binding.danfossairunit/src/main/java/org/openhab/binding/danfossairunit/internal/Channel.java +++ b/bundles/org.openhab.binding.danfossairunit/src/main/java/org/openhab/binding/danfossairunit/internal/Channel.java @@ -59,7 +59,9 @@ public enum Channel { // service channels CHANNEL_BATTERY_LIFE("battery_life", ChannelGroup.SERVICE, DanfossAirUnit::getBatteryLife), - CHANNEL_FILTER_LIFE("filter_life", ChannelGroup.SERVICE, DanfossAirUnit::getFilterLife); + CHANNEL_FILTER_LIFE("filter_life", ChannelGroup.SERVICE, DanfossAirUnit::getFilterLife), + CHANNEL_FILTER_PERIOD("filter_period", ChannelGroup.SERVICE, DanfossAirUnit::getFilterPeriod, + DanfossAirUnit::setFilterPeriod); private final String channelName; private final ChannelGroup group; diff --git a/bundles/org.openhab.binding.danfossairunit/src/main/java/org/openhab/binding/danfossairunit/internal/Commands.java b/bundles/org.openhab.binding.danfossairunit/src/main/java/org/openhab/binding/danfossairunit/internal/Commands.java index ba98872a2afb8..752458d031993 100644 --- a/bundles/org.openhab.binding.danfossairunit/src/main/java/org/openhab/binding/danfossairunit/internal/Commands.java +++ b/bundles/org.openhab.binding.danfossairunit/src/main/java/org/openhab/binding/danfossairunit/internal/Commands.java @@ -57,6 +57,7 @@ public class Commands { public static byte[] EXHAUST_TEMPERATURE = { 0x14, 0x75 }; public static byte[] BATTERY_LIFE = { 0x03, 0x0f }; public static byte[] FILTER_LIFE = { 0x14, 0x6a }; + public static byte[] FILTER_PERIOD = { 0x14, 0x69 }; public static byte[] CURRENT_TIME = { 0x15, (byte) 0xe0 }; public static byte[] AWAY_TO = { 0x15, 0x20 }; public static byte[] AWAY_FROM = { 0x15, 0x21 }; diff --git a/bundles/org.openhab.binding.danfossairunit/src/main/java/org/openhab/binding/danfossairunit/internal/DanfossAirUnit.java b/bundles/org.openhab.binding.danfossairunit/src/main/java/org/openhab/binding/danfossairunit/internal/DanfossAirUnit.java index 0e3646281ed17..80a8e3271d087 100644 --- a/bundles/org.openhab.binding.danfossairunit/src/main/java/org/openhab/binding/danfossairunit/internal/DanfossAirUnit.java +++ b/bundles/org.openhab.binding.danfossairunit/src/main/java/org/openhab/binding/danfossairunit/internal/DanfossAirUnit.java @@ -216,6 +216,14 @@ public DecimalType getFilterLife() throws IOException { return new DecimalType(BigDecimal.valueOf(asPercentByte(getByte(REGISTER_1_READ, FILTER_LIFE)))); } + public DecimalType getFilterPeriod() throws IOException { + return new DecimalType(BigDecimal.valueOf(getByte(REGISTER_1_READ, FILTER_PERIOD))); + } + + public DecimalType setFilterPeriod(Command cmd) throws IOException { + return setNumberTypeRegister(cmd, FILTER_PERIOD); + } + public DateTimeType getCurrentTime() throws IOException, UnexpectedResponseValueException { ZonedDateTime timestamp = getTimestamp(REGISTER_1_READ, CURRENT_TIME); return new DateTimeType(timestamp); @@ -225,6 +233,14 @@ public PercentType setManualFanStep(Command cmd) throws IOException { return setPercentTypeRegister(cmd, MANUAL_FAN_SPEED_STEP); } + private DecimalType setNumberTypeRegister(Command cmd, byte[] register) throws IOException { + if (cmd instanceof DecimalType) { + byte value = (byte) ((((DecimalType) cmd).intValue())); + set(REGISTER_1_WRITE, register, value); + } + return new DecimalType(BigDecimal.valueOf(getByte(REGISTER_1_READ, register))); + } + private PercentType setPercentTypeRegister(Command cmd, byte[] register) throws IOException { if (cmd instanceof PercentType) { byte value = (byte) ((((PercentType) cmd).intValue() + 5) / 10); diff --git a/bundles/org.openhab.binding.danfossairunit/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.danfossairunit/src/main/resources/OH-INF/thing/thing-types.xml index fe22f1e907b94..11e5555762a87 100644 --- a/bundles/org.openhab.binding.danfossairunit/src/main/resources/OH-INF/thing/thing-types.xml +++ b/bundles/org.openhab.binding.danfossairunit/src/main/resources/OH-INF/thing/thing-types.xml @@ -124,6 +124,7 @@ Remaining life of filter until exchange is necessary + @@ -190,6 +191,12 @@ Fan + + Number + + Number of months between filter replacements + + Number