Skip to content

Commit

Permalink
[hue] Added channel to enable / disable a motion sensor (openhab#8721)
Browse files Browse the repository at this point in the history
* Added channel to activate/deactivate a motion sensor
* Applied spotless

Signed-off-by: Christoph Weitkamp <[email protected]>
  • Loading branch information
cweitkamp authored Oct 16, 2020
1 parent d85d305 commit 37a4e8f
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 25 deletions.
43 changes: 22 additions & 21 deletions bundles/org.openhab.binding.hue/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -165,27 +165,28 @@ The group type also have an optional configuration value to specify the fade tim

The devices support some of the following channels:

| Channel Type ID | Item Type | Description | Thing types supporting this channel |
|-------------------|--------------------|-----------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------|
| switch | Switch | This channel supports switching the device on and off. | 0000, 0010, group |
| color | Color | This channel supports full color control with hue, saturation and brightness values. | 0200, 0210, group |
| brightness | Dimmer | This channel supports adjusting the brightness value. Note that this is not available, if the color channel is supported. | 0100, 0110, 0220, group |
| color_temperature | Dimmer | This channel supports adjusting the color temperature from cold (0%) to warm (100%). | 0210, 0220, group |
| alert | String | This channel supports displaying alerts by flashing the bulb either once or multiple times. Valid values are: NONE, SELECT and LSELECT. | 0000, 0100, 0200, 0210, 0220, group |
| effect | Switch | This channel supports color looping. | 0200, 0210, 0220 |
| dimmer_switch | Number | This channel shows which button was last pressed on the dimmer switch. | 0820 |
| illuminance | Number:Illuminance | This channel shows the current illuminance measured by the sensor. | 0106 |
| light_level | Number | This channel shows the current light level measured by the sensor. **Advanced** | 0106 |
| dark | Switch | This channel indicates whether the light level is below the darkness threshold or not. | 0106 |
| daylight | Switch | This channel indicates whether the light level is below the daylight threshold or not. | 0106 |
| presence | Switch | This channel indicates whether a motion is detected by the sensor or not. | 0107 |
| temperature | Number:Temperature | This channel shows the current temperature measured by the sensor. | 0302 |
| flag | Switch | This channel save flag state for a CLIP sensor. | 0850 |
| status | Number | This channel save status state for a CLIP sensor. | 0840 |
| last_updated | DateTime | This channel the date and time when the sensor was last updated. | 0820, 0830, 0840, 0850, 0106, 0107, 0302|
| battery_level | Number | This channel shows the battery level. | 0820, 0106, 0107, 0302 |
| battery_low | Switch | This channel indicates whether the battery is low or not. | 0820, 0106, 0107, 0302 |
| scene | String | This channel activates the scene with the given ID String. The ID String of each scene is assigned by the Hue bridge. | bridge, group |
| Channel Type ID | Item Type | Description | Thing types supporting this channel |
|-------------------|--------------------|-----------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------|
| switch | Switch | This channel supports switching the device on and off. | 0000, 0010, group |
| color | Color | This channel supports full color control with hue, saturation and brightness values. | 0200, 0210, group |
| brightness | Dimmer | This channel supports adjusting the brightness value. Note that this is not available, if the color channel is supported. | 0100, 0110, 0220, group |
| color_temperature | Dimmer | This channel supports adjusting the color temperature from cold (0%) to warm (100%). | 0210, 0220, group |
| alert | String | This channel supports displaying alerts by flashing the bulb either once or multiple times. Valid values are: NONE, SELECT and LSELECT. | 0000, 0100, 0200, 0210, 0220, group |
| effect | Switch | This channel supports color looping. | 0200, 0210, 0220 |
| dimmer_switch | Number | This channel shows which button was last pressed on the dimmer switch. | 0820 |
| illuminance | Number:Illuminance | This channel shows the current illuminance measured by the sensor. | 0106 |
| light_level | Number | This channel shows the current light level measured by the sensor. **Advanced** | 0106 |
| dark | Switch | This channel indicates whether the light level is below the darkness threshold or not. | 0106 |
| daylight | Switch | This channel indicates whether the light level is below the daylight threshold or not. | 0106 |
| presence | Switch | This channel indicates whether a motion is detected by the sensor or not. | 0107 |
| enabled | Switch | This channel activated or deactivates the sensor | 0107 |
| temperature | Number:Temperature | This channel shows the current temperature measured by the sensor. | 0302 |
| flag | Switch | This channel save flag state for a CLIP sensor. | 0850 |
| status | Number | This channel save status state for a CLIP sensor. | 0840 |
| last_updated | DateTime | This channel the date and time when the sensor was last updated. | 0820, 0830, 0840, 0850, 0106, 0107, 0302 |
| battery_level | Number | This channel shows the battery level. | 0820, 0106, 0107, 0302 |
| battery_low | Switch | This channel indicates whether the battery is low or not. | 0820, 0106, 0107, 0302 |
| scene | String | This channel activates the scene with the given ID String. The ID String of each scene is assigned by the Hue bridge. | bridge, group |

To load a hue scene inside a rule for example, the ID of the scene will be required.
You can list all the scene IDs with the following console commands: `hue <bridgeUID> scenes` and `hue <groupThingUID> scenes`.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ public class HueBindingConstants {
public static final String CHANNEL_DIMMER_SWITCH = "dimmer_switch";
public static final String CHANNEL_TAP_SWITCH = "tap_switch";
public static final String CHANNEL_PRESENCE = "presence";
public static final String CHANNEL_ENABLED = "enabled";
public static final String CHANNEL_TEMPERATURE = "temperature";
public static final String CHANNEL_LAST_UPDATED = "last_updated";
public static final String CHANNEL_BATTERY_LEVEL = "battery_level";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ public abstract class HueSensorHandler extends BaseThingHandler implements Senso

private @Nullable HueClient hueClient;

private @Nullable FullSensor lastFullSensor;
protected @Nullable FullSensor lastFullSensor;

public HueSensorHandler(Thing thing) {
super(thing);
Expand Down Expand Up @@ -164,15 +164,14 @@ public void handleCommand(ChannelUID channelUID, Command command) {
handleCommand(channelUID.getId(), command);
}

public void handleCommand(String channel, Command command) {
protected void handleCommand(String channel, Command command) {
HueClient bridgeHandler = getHueClient();
if (bridgeHandler == null) {
logger.warn("hue bridge handler not found. Cannot handle command without bridge.");
return;
}

final FullSensor sensor = lastFullSensor;

if (sensor == null) {
logger.debug("hue sensor not known on bridge. Cannot handle command.");
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR,
Expand Down Expand Up @@ -213,7 +212,7 @@ public void handleConfigurationUpdate(Map<String, Object> configurationParameter

final FullSensor sensor = lastFullSensor;
if (sensor == null) {
logger.debug("hue sensor not known on bridge. Cannot handle command.");
logger.debug("hue sensor not known on bridge. Cannot handle configuration update.");
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR,
"@text/offline.conf-error-wrong-sensor-id");
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,17 @@
import org.openhab.binding.hue.internal.FullSensor;
import org.openhab.binding.hue.internal.PresenceConfigUpdate;
import org.openhab.binding.hue.internal.SensorConfigUpdate;
import org.openhab.binding.hue.internal.handler.HueClient;
import org.openhab.binding.hue.internal.handler.HueSensorHandler;
import org.openhab.core.config.core.Configuration;
import org.openhab.core.library.types.OnOffType;
import org.openhab.core.thing.Thing;
import org.openhab.core.thing.ThingStatus;
import org.openhab.core.thing.ThingStatusDetail;
import org.openhab.core.thing.ThingTypeUID;
import org.openhab.core.types.Command;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* Presence Sensor
Expand All @@ -39,10 +45,38 @@
public class PresenceHandler extends HueSensorHandler {
public static final Set<ThingTypeUID> SUPPORTED_THING_TYPES = Collections.singleton(THING_TYPE_PRESENCE_SENSOR);

private final Logger logger = LoggerFactory.getLogger(PresenceHandler.class);

public PresenceHandler(Thing thing) {
super(thing);
}

@Override
public void handleCommand(String channel, Command command) {
HueClient hueBridge = getHueClient();
if (hueBridge == null) {
logger.warn("hue bridge handler not found. Cannot handle command without bridge.");
return;
}

final FullSensor sensor = lastFullSensor;
if (sensor == null) {
logger.debug("hue sensor not known on bridge. Cannot handle command.");
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR,
"@text/offline.conf-error-wrong-sensor-id");
return;
}

SensorConfigUpdate configUpdate = new SensorConfigUpdate();
switch (channel) {
case CHANNEL_ENABLED:
configUpdate.setOn(OnOffType.ON.equals(command));
break;
}

hueBridge.updateSensorConfig(sensor, configUpdate);
}

@Override
protected SensorConfigUpdate doConfigurationUpdate(Map<String, Object> configurationParameters) {
PresenceConfigUpdate configUpdate = new PresenceConfigUpdate();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
<channels>
<channel id="presence" typeId="system.motion"/>
<channel id="last_updated" typeId="last_updated"/>
<channel id="enabled" typeId="system.power"/>
<channel id="battery_level" typeId="system.battery-level"/>
<channel id="battery_low" typeId="system.low-battery"/>
</channels>
Expand Down

0 comments on commit 37a4e8f

Please sign in to comment.