diff --git a/bundles/org.openhab.binding.avmfritz/README.md b/bundles/org.openhab.binding.avmfritz/README.md index f3b1c9115..d0421234a 100644 --- a/bundles/org.openhab.binding.avmfritz/README.md +++ b/bundles/org.openhab.binding.avmfritz/README.md @@ -199,6 +199,8 @@ The AIN (actor identification number) can be found in the FRITZ!Box interface -> | contact_state | Contact | Contact state information (OPEN/CLOSED). | HAN-FUN contact (e.g. SmartHome Tür-/Fensterkontakt or SmartHome Bewegungsmelder)- FRITZ!OS 7 | | last_change | DateTime | States the last time the button was pressed. | FRITZ!DECT 400, FRITZ!DECT 440, HAN-FUN switch (e.g. SmartHome Wandtaster) - FRITZ!OS 7 | | rollershutter | Rollershutter | Rollershutter control and status. Accepts UP/DOWN/STOP commands and the opening level in percent. States the opening level in percent. | HAN-FUN blind (e.g. Rolltron DECT 1213) - FRITZ!OS 7 | +| obstruction_alarm | Obstruction Alarm | Rollershutter obstruction alarm (ON/OFF) | HAN-FUN blind (e.g. Rolltron DECT 1213) - FRITZ!OS 7 | +| temperature_alarm | Temperature Alarm | Rollershutter temperature alarm (ON/OFF) | HAN-FUN blind (e.g. Rolltron DECT 1213) - FRITZ!OS 7 | ### Triggers 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 10da4a4bf..51b9a149a 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 @@ -136,6 +136,8 @@ public class AVMFritzBindingConstants { public static final String CHANNEL_NEXTTEMP = "next_temp"; public static final String CHANNEL_BATTERY_LOW = "battery_low"; public static final String CHANNEL_BATTERY = "battery_level"; + public static final String CHANNEL_OBSTRUCTION_ALARM = "obstruction_alarm"; + public static final String CHANNEL_TEMPERATURE_ALARM = "temperature_alarm"; public static final String CHANNEL_CONTACT_STATE = "contact_state"; public static final String CHANNEL_PRESS = "press"; public static final String CHANNEL_LAST_CHANGE = "last_change"; diff --git a/bundles/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/dto/AlertModel.java b/bundles/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/dto/AlertModel.java index 3ce765eae..7c7df41d8 100644 --- a/bundles/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/dto/AlertModel.java +++ b/bundles/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/dto/AlertModel.java @@ -41,6 +41,18 @@ public class AlertModel { this.state = state; } + public boolean hasObstructionAlarmOccurred() { + return (state.intValue() & 1) != 0; + } + + public boolean hasTemperaturAlarmOccurred() { + return (state.intValue() & 2) != 0; + } + + public boolean hasUnknownAlarmOccurred() { + return ((state.intValue() & 255) >> 2) != 0; + } + @Override public String toString() { return new StringBuilder().append("[state=").append(state).append("]").toString(); 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 664174997..e901bc4fc 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 @@ -152,7 +152,11 @@ public abstract class AVMFritzBaseThingHandler extends BaseThingHandler implemen updateHumiditySensor(deviceModel.getHumidity()); } if (deviceModel.isHANFUNAlarmSensor()) { - updateHANFUNAlarmSensor(deviceModel.getAlert()); + if (deviceModel.isHANFUNBlinds()) { + updateHANFUNBlindsAlarmSensor(deviceModel.getAlert()); + } else { + updateHANFUNAlarmSensor(deviceModel.getAlert()); + } } if (deviceModel.isHANFUNBlinds()) { updateLevelControl(deviceModel.getLevelControlModel()); @@ -174,6 +178,17 @@ public abstract class AVMFritzBaseThingHandler extends BaseThingHandler implemen } } + private void updateHANFUNBlindsAlarmSensor(@Nullable AlertModel alertModel) { + if (alertModel != null) { + updateThingChannelState(CHANNEL_OBSTRUCTION_ALARM, + OnOffType.from(alertModel.hasObstructionAlarmOccurred())); + updateThingChannelState(CHANNEL_TEMPERATURE_ALARM, OnOffType.from(alertModel.hasTemperaturAlarmOccurred())); + if (alertModel.hasUnknownAlarmOccurred()) { + logger.warn("Unknown blinds alarm {}", alertModel.getState()); + } + } + } + protected void updateTemperatureSensor(@Nullable TemperatureModel temperatureModel) { if (temperatureModel != null) { updateThingChannelState(CHANNEL_TEMPERATURE, @@ -397,6 +412,8 @@ public abstract class AVMFritzBaseThingHandler extends BaseThingHandler implemen case CHANNEL_BATTERY_LOW: case CHANNEL_CONTACT_STATE: case CHANNEL_LAST_CHANGE: + case CHANNEL_OBSTRUCTION_ALARM: + case CHANNEL_TEMPERATURE_ALARM: logger.debug("Channel {} is a read-only channel and cannot handle command '{}'", channelId, command); break; case CHANNEL_OUTLET: diff --git a/bundles/org.openhab.binding.avmfritz/src/main/resources/OH-INF/i18n/avmfritz.properties b/bundles/org.openhab.binding.avmfritz/src/main/resources/OH-INF/i18n/avmfritz.properties index f7198f4ce..6f9ef4909 100644 --- a/bundles/org.openhab.binding.avmfritz/src/main/resources/OH-INF/i18n/avmfritz.properties +++ b/bundles/org.openhab.binding.avmfritz/src/main/resources/OH-INF/i18n/avmfritz.properties @@ -137,6 +137,10 @@ channel-type.avmfritz.comfort_temp.label = Comfort Temperature channel-type.avmfritz.comfort_temp.description = Thermostat Comfort temperature. channel-type.avmfritz.contact_state.label = Contact State channel-type.avmfritz.contact_state.description = Contact state information (OPEN/CLOSED). +channel-type.avmfritz.obstruction_alarm.label = Obstruction Alarm +channel-type.avmfritz.obstruction_alarm.description = Obstruction alarm of the blinds. The blinds were stopped and moved a bit in the opposite direction. +channel-type.avmfritz.temperature_alarm.label = Temperature Alarm +channel-type.avmfritz.temperature_alarm.description = Temperature alarm of the blinds. Indicates overheating of the motor. channel-type.avmfritz.device_locked.label = Locked (manual) channel-type.avmfritz.device_locked.description = Device is locked for switching by pressing the button on the device. channel-type.avmfritz.eco_temp.label = Eco Temperature diff --git a/bundles/org.openhab.binding.avmfritz/src/main/resources/OH-INF/thing/channel-types.xml b/bundles/org.openhab.binding.avmfritz/src/main/resources/OH-INF/thing/channel-types.xml index 2c80f7ff8..69543c6c8 100644 --- a/bundles/org.openhab.binding.avmfritz/src/main/resources/OH-INF/thing/channel-types.xml +++ b/bundles/org.openhab.binding.avmfritz/src/main/resources/OH-INF/thing/channel-types.xml @@ -224,6 +224,20 @@ + + Switch + + Obstruction alarm of the blinds. The blinds were stopped and moved a bit in the opposite direction. + + + + + Switch + + Temperature alarm of the blinds. Indicates overheating of the motor. + + + DateTime @@ -236,7 +250,6 @@ Rollershutter Controls the rollershutter and states its opening level in percent - Blinds diff --git a/bundles/org.openhab.binding.avmfritz/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.avmfritz/src/main/resources/OH-INF/thing/thing-types.xml index b6cf1e3df..00c37e435 100644 --- a/bundles/org.openhab.binding.avmfritz/src/main/resources/OH-INF/thing/thing-types.xml +++ b/bundles/org.openhab.binding.avmfritz/src/main/resources/OH-INF/thing/thing-types.xml @@ -334,6 +334,8 @@ + + ain