From 43b5e79d78174214653843fd60a6004e74ce76dd Mon Sep 17 00:00:00 2001 From: Christoph Weitkamp Date: Wed, 13 Jan 2021 23:58:03 +0100 Subject: [PATCH] [avmfritz] Fixed channel update for DECT440 rocker (#9753) Signed-off-by: Christoph Weitkamp --- .../internal/AVMFritzBindingConstants.java | 1 + .../avmfritz/internal/dto/DeviceModel.java | 2 +- .../handler/AVMFritzBaseThingHandler.java | 4 +- .../handler/AVMFritzButtonHandler.java | 43 ++++++++++++++++++- 4 files changed, 45 insertions(+), 5 deletions(-) diff --git a/bundles/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/AVMFritzBindingConstants.java b/bundles/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/AVMFritzBindingConstants.java index b59d09f75..05b60fc34 100644 --- a/bundles/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/AVMFritzBindingConstants.java +++ b/bundles/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/AVMFritzBindingConstants.java @@ -90,6 +90,7 @@ public class AVMFritzBindingConstants { public static final String PRODUCT_NAME = "productName"; // List of all channel groups + public static final String CHANNEL_GROUP_DEVICE = "device"; public static final String CHANNEL_GROUP_SENSORS = "sensors"; public static final String CHANNEL_GROUP_TOP_LEFT = "top-left"; public static final String CHANNEL_GROUP_BOTTOM_LEFT = "bottom-left"; diff --git a/bundles/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/dto/DeviceModel.java b/bundles/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/dto/DeviceModel.java index ba5d88e09..9fbb401eb 100644 --- a/bundles/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/dto/DeviceModel.java +++ b/bundles/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/dto/DeviceModel.java @@ -50,7 +50,7 @@ public class DeviceModel extends AVMFritzBaseModel { return humidity; } - public void setTemperature(HumidityModel humidityModel) { + public void setHumidity(HumidityModel humidityModel) { this.humidity = humidityModel; } diff --git a/bundles/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/handler/AVMFritzBaseThingHandler.java b/bundles/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/handler/AVMFritzBaseThingHandler.java index 967d43ebb..aed952d24 100644 --- a/bundles/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/handler/AVMFritzBaseThingHandler.java +++ b/bundles/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/handler/AVMFritzBaseThingHandler.java @@ -156,7 +156,7 @@ public abstract class AVMFritzBaseThingHandler extends BaseThingHandler implemen } } - private void updateTemperatureSensor(@Nullable TemperatureModel temperatureModel) { + protected void updateTemperatureSensor(@Nullable TemperatureModel temperatureModel) { if (temperatureModel != null) { updateThingChannelState(CHANNEL_TEMPERATURE, new QuantityType<>(temperatureModel.getCelsius(), SIUnits.CELSIUS)); @@ -301,7 +301,7 @@ public abstract class AVMFritzBaseThingHandler extends BaseThingHandler implemen * @param configId ID of the configuration to be updated. * @param value Value to be set. */ - private void updateThingChannelConfiguration(String channelId, String configId, Object value) { + protected void updateThingChannelConfiguration(String channelId, String configId, Object value) { Channel channel = thing.getChannel(channelId); if (channel != null) { Configuration editConfig = channel.getConfiguration(); diff --git a/bundles/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/handler/AVMFritzButtonHandler.java b/bundles/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/handler/AVMFritzButtonHandler.java index 34b0e992a..850bb35f0 100644 --- a/bundles/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/handler/AVMFritzButtonHandler.java +++ b/bundles/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/handler/AVMFritzButtonHandler.java @@ -14,6 +14,7 @@ package org.openhab.binding.avmfritz.internal.handler; import static org.openhab.binding.avmfritz.internal.AVMFritzBindingConstants.*; +import java.math.BigDecimal; import java.time.Instant; import java.time.ZoneId; import java.time.ZonedDateTime; @@ -23,11 +24,16 @@ import java.util.Optional; import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; import org.openhab.binding.avmfritz.internal.dto.AVMFritzBaseModel; +import org.openhab.binding.avmfritz.internal.dto.BatteryModel; import org.openhab.binding.avmfritz.internal.dto.ButtonModel; import org.openhab.binding.avmfritz.internal.dto.DeviceModel; import org.openhab.binding.avmfritz.internal.dto.HumidityModel; +import org.openhab.binding.avmfritz.internal.dto.TemperatureModel; import org.openhab.core.library.types.DateTimeType; +import org.openhab.core.library.types.DecimalType; +import org.openhab.core.library.types.OnOffType; import org.openhab.core.library.types.QuantityType; +import org.openhab.core.library.unit.SIUnits; import org.openhab.core.library.unit.Units; import org.openhab.core.thing.Channel; import org.openhab.core.thing.ChannelUID; @@ -89,11 +95,44 @@ public class AVMFritzButtonHandler extends DeviceHandler { } } + @Override + protected void updateTemperatureSensor(@Nullable TemperatureModel temperatureModel) { + if (temperatureModel != null) { + String channelId = (DECT440_THING_TYPE.equals(thing.getThingTypeUID()) + ? CHANNEL_GROUP_SENSORS + ChannelUID.CHANNEL_GROUP_SEPARATOR + : "") + CHANNEL_TEMPERATURE; + updateThingChannelState(channelId, new QuantityType<>(temperatureModel.getCelsius(), SIUnits.CELSIUS)); + updateThingChannelConfiguration(channelId, CONFIG_CHANNEL_TEMP_OFFSET, temperatureModel.getOffset()); + } + } + @Override protected void updateHumiditySensor(@Nullable HumidityModel humidityModel) { if (humidityModel != null) { - updateThingChannelState(CHANNEL_GROUP_SENSORS + ChannelUID.CHANNEL_GROUP_SEPARATOR + CHANNEL_HUMIDITY, - new QuantityType<>(humidityModel.getRelativeHumidity(), Units.PERCENT)); + String channelId = (DECT440_THING_TYPE.equals(thing.getThingTypeUID()) + ? CHANNEL_GROUP_SENSORS + ChannelUID.CHANNEL_GROUP_SEPARATOR + : "") + CHANNEL_HUMIDITY; + updateThingChannelState(channelId, new QuantityType<>(humidityModel.getRelativeHumidity(), Units.PERCENT)); + } + } + + @Override + protected void updateBattery(BatteryModel batteryModel) { + String batteryLevelChannelId = (DECT440_THING_TYPE.equals(thing.getThingTypeUID()) + ? CHANNEL_GROUP_DEVICE + ChannelUID.CHANNEL_GROUP_SEPARATOR + : "") + CHANNEL_BATTERY; + BigDecimal batteryLevel = batteryModel.getBattery(); + updateThingChannelState(batteryLevelChannelId, + batteryLevel == null ? UnDefType.UNDEF : new DecimalType(batteryLevel)); + String lowBatteryChannelId = (DECT440_THING_TYPE.equals(thing.getThingTypeUID()) + ? CHANNEL_GROUP_DEVICE + ChannelUID.CHANNEL_GROUP_SEPARATOR + : "") + CHANNEL_BATTERY_LOW; + BigDecimal lowBattery = batteryModel.getBatterylow(); + if (lowBattery == null) { + updateThingChannelState(lowBatteryChannelId, UnDefType.UNDEF); + } else { + updateThingChannelState(lowBatteryChannelId, + BatteryModel.BATTERY_ON.equals(lowBattery) ? OnOffType.ON : OnOffType.OFF); } }