Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[hue] Added channel to enable / disable a motion sensor #8721

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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;
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For other channels, I think you have to call the parent class (which handle few other channels).

Copy link
Contributor Author

@cweitkamp cweitkamp Oct 11, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On the first glance, yes, but currently the presence sensor only has read-only channels thus no command has to be handled except this one.


hueBridge.updateSensorConfig(sensor, configUpdate);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It should be moved in your switch case.

}

@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