diff --git a/bundles/org.openhab.binding.bondhome/src/main/java/org/openhab/binding/bondhome/internal/BondHomeBindingConstants.java b/bundles/org.openhab.binding.bondhome/src/main/java/org/openhab/binding/bondhome/internal/BondHomeBindingConstants.java index 26ce4a250..43f7dc45d 100644 --- a/bundles/org.openhab.binding.bondhome/src/main/java/org/openhab/binding/bondhome/internal/BondHomeBindingConstants.java +++ b/bundles/org.openhab.binding.bondhome/src/main/java/org/openhab/binding/bondhome/internal/BondHomeBindingConstants.java @@ -59,6 +59,7 @@ public class BondHomeBindingConstants { public static final String CHANNEL_GROUP_FAN = "fan"; public static final String CHANNEL_FAN_POWER = CHANNEL_GROUP_FAN + "#power"; public static final String CHANNEL_FAN_SPEED = CHANNEL_GROUP_FAN + "#speed"; + public static final String CHANNEL_RAW_FAN_SPEED = CHANNEL_GROUP_FAN + "#rawSpeed"; public static final String CHANNEL_FAN_BREEZE_STATE = CHANNEL_GROUP_FAN + "#breezeState"; public static final String CHANNEL_FAN_BREEZE_MEAN = CHANNEL_GROUP_FAN + "#breezeMean"; public static final String CHANNEL_FAN_BREEZE_VAR = CHANNEL_GROUP_FAN + "#breezeVariability"; diff --git a/bundles/org.openhab.binding.bondhome/src/main/java/org/openhab/binding/bondhome/internal/handler/BondDeviceHandler.java b/bundles/org.openhab.binding.bondhome/src/main/java/org/openhab/binding/bondhome/internal/handler/BondDeviceHandler.java index b6a51fbd2..89c7571b8 100644 --- a/bundles/org.openhab.binding.bondhome/src/main/java/org/openhab/binding/bondhome/internal/handler/BondDeviceHandler.java +++ b/bundles/org.openhab.binding.bondhome/src/main/java/org/openhab/binding/bondhome/internal/handler/BondDeviceHandler.java @@ -205,6 +205,27 @@ public class BondDeviceHandler extends BaseThingHandler { } break; + case CHANNEL_RAW_FAN_SPEED: + if (command instanceof DecimalType) { + value = ((DecimalType) command).intValue(); + BondDeviceProperties devProperties = this.deviceProperties; + if (devProperties != null) { + if (value < 1) { + // Interpret any 0 or less value as a request to turn off + action = BondDeviceAction.TURN_OFF; + value = null; + } else { + action = BondDeviceAction.SET_SPEED; + value = Math.min(value, devProperties.maxSpeed); + } + logger.trace("Fan raw speed command with speed set as {}, action as {}", value, action); + api.executeDeviceAction(deviceId, action, value); + } + } else { + logger.info("Unsupported command on raw fan speed channel"); + } + break; + case CHANNEL_FAN_BREEZE_STATE: logger.trace("Fan enable/disable breeze command"); api.executeDeviceAction(deviceId, @@ -548,6 +569,7 @@ public class BondDeviceHandler extends BaseThingHandler { logger.trace("Deleting channels based on the available actions"); // Get the thing to edit ThingBuilder thingBuilder = editThing(); + final BondDevice devInfo = this.deviceInfo; // Now, look at the whole list of possible channels List possibleChannels = this.getThing().getChannels(); @@ -561,10 +583,14 @@ public class BondDeviceHandler extends BaseThingHandler { } } // Remove power channels if we have a dimmer channel for them; - // the dimmer channel already covers the power case + // the dimmer channel already covers the power case. + // Add the raw channel for advanced users if we're a ceiling fan. if (availableChannelIds.contains(CHANNEL_FAN_SPEED)) { availableChannelIds.remove(CHANNEL_POWER); availableChannelIds.remove(CHANNEL_FAN_POWER); + if (devInfo != null && devInfo.type == BondDeviceType.CEILING_FAN) { + availableChannelIds.add(CHANNEL_RAW_FAN_SPEED); + } } if (availableChannelIds.contains(CHANNEL_LIGHT_BRIGHTNESS)) { availableChannelIds.remove(CHANNEL_LIGHT_POWER); @@ -631,6 +657,7 @@ public class BondDeviceHandler extends BaseThingHandler { logger.info("Unable to convert fan speed to a percent for {}!", this.getThing().getLabel()); } updateState(CHANNEL_FAN_SPEED, formPercentType(fanOn, value)); + updateState(CHANNEL_RAW_FAN_SPEED, fanOn ? new DecimalType(updateState.speed) : DecimalType.ZERO); } updateState(CHANNEL_FAN_BREEZE_STATE, updateState.breeze[0] == 0 ? OnOffType.OFF : OnOffType.ON); updateState(CHANNEL_FAN_BREEZE_MEAN, new PercentType(updateState.breeze[1])); diff --git a/bundles/org.openhab.binding.bondhome/src/main/resources/OH-INF/i18n/bondhome.properties b/bundles/org.openhab.binding.bondhome/src/main/resources/OH-INF/i18n/bondhome.properties index 13a35bc40..8fffa5074 100644 --- a/bundles/org.openhab.binding.bondhome/src/main/resources/OH-INF/i18n/bondhome.properties +++ b/bundles/org.openhab.binding.bondhome/src/main/resources/OH-INF/i18n/bondhome.properties @@ -71,6 +71,8 @@ channel-type.bondhome.enableChannelType.label = Enable Up or Down Light channel-type.bondhome.enableChannelType.description = Enables or disables the up or down light of the ceiling fan. The light must also be on to turn on the up light. channel-type.bondhome.fanSpeedChannelType.label = Fan Speed channel-type.bondhome.fanSpeedChannelType.description = Sets fan speed +channel-type.bondhome.rawFanSpeedChannelType.label = Raw Fan Speed +channel-type.bondhome.rawFanSpeedChannelType.description = Sets fan speed using raw Bond values channel-type.bondhome.flameChannelType.label = Flame Level channel-type.bondhome.flameChannelType.description = Turns on or adjust the flame level channel-type.bondhome.fpFanSpeedChannelType.label = Fireplace Fan Speed diff --git a/bundles/org.openhab.binding.bondhome/src/main/resources/OH-INF/thing/ChannelGroups.xml b/bundles/org.openhab.binding.bondhome/src/main/resources/OH-INF/thing/ChannelGroups.xml index 358cb01aa..1298d2397 100644 --- a/bundles/org.openhab.binding.bondhome/src/main/resources/OH-INF/thing/ChannelGroups.xml +++ b/bundles/org.openhab.binding.bondhome/src/main/resources/OH-INF/thing/ChannelGroups.xml @@ -18,6 +18,7 @@ + diff --git a/bundles/org.openhab.binding.bondhome/src/main/resources/OH-INF/thing/Channels.xml b/bundles/org.openhab.binding.bondhome/src/main/resources/OH-INF/thing/Channels.xml index 9314fb03b..d029a6c8f 100644 --- a/bundles/org.openhab.binding.bondhome/src/main/resources/OH-INF/thing/Channels.xml +++ b/bundles/org.openhab.binding.bondhome/src/main/resources/OH-INF/thing/Channels.xml @@ -36,6 +36,13 @@ Heating + + Number + + Sets fan speed using raw Bond values + Heating + + Switch