# Philips Hue Binding Configuration for API v2
# Supported Things
The binding supports bridge-api2
, device
, room
, and zone
thing types.
The bridge-api2
thing type represents the Hue Bridge which is the server for all other things.
The device
thing type represents a piece of physical equipment in the home.
Such device
things may contain either a light, a button, or (one or more) sensors.
Lights can be of any type from a simple on/off light, through dimmable monochrome lights, to full colour dimmable lights.
Buttons are devices having one or more push buttons.
Sensors can be (for example) light level sensors, temperature sensors, or motion sensors.
The room
and zone
thing type represents logical groupings of equipment in the home, either within a specific room, or a logical group of equipment.
# Thing Configuration
# Bridge
The Hue Bridge requires the IP address as a configuration value in order for the binding to know where to access it.
It requires an 'application key' to authenticate against the Hue Bridge.
This may be copied from an API v1 installation, or it may be automatically generated (press button to authenticate).
Please note that the generated application key cannot be written automatically to the .things
file, and has to be set manually.
The generated application key can be found, after pressing the authentication button on the bridge, with the following console command: openhab:hue <bridgeUID> applicationkey
.
The application key can be set using the applicationKey
configuration value, e.g.:
Bridge hue:bridge-api2:1 [ ipAddress="192.168.0.64", applicationKey="qwertzuiopasdfghjklyxcvbnm1234" ]
Parameter | Description |
---|---|
ipAddress | Network address of the Hue Bridge. Mandatory. |
applicationKey | A code generated by the bridge that allows to access the API. Mandatory |
checkMinutes | Interval in minutes between retrying the HTTP 2 and SSE connections. Default is 60. Advanced |
useSelfSignedCertificate | Use self-signed certificate for HTTPS connection to Hue Bridge. Default is true . Advanced |
# Devices, Rooms, and Zones
Apart from the Bridge, there are three other types of thing -- namely device
, room
, and zone
.
Device things represent physical hardware devices in the system, whereas room
and zone
things represent sets of physical lights, either in a room or a zone.
In addition to regular rooms and zones, there is a 'super' zone
that allows you to control all of the lights in the system.
All things are identified by a unique Resource Identifier string that the Hue Bridge assigns to them e.g. d1ae958e-8908-449a-9897-7f10f9b8d4c2
.
Thus, all it needs for manual configuration is this single value, like:
device officelamp "Lamp 1" @ "Office" [ resourceId="d1ae958e-8908-449a-9897-7f10f9b8d4c2" ]
..
zone kitchenLights "Kitchen Down Lights" @ "Kitchen" [ resourceId="7f10f9b8-8908-449a-9897-d4c2d1ae958e" ]
You can get a list of all devices in the bridge and their respective Resource Ids by entering the following console command: openhab:hue <bridgeUID> things
See console command
The configuration of all things (as described above) is the same regardless of whether it is a device containing a light, a button, or (one or more) sensors, or whether it is a room or zone.
# Channels for Bridges
Bridge Things support the following channels:
Channel ID | Item Type | Description |
---|---|---|
automation#11111111-2222-3333-4444-555555555555 | Switch | Enable / disable the respective automation. |
The Bridge dynamically creates automation
channels corresponding to the automations in the Hue App;
the '11111111-2222-3333-4444-555555555555' is the unique id of the respective automation.
# Channels for Devices
Device things support some of the following channels:
Channel ID | Item Type | Description |
---|---|---|
color | Color | Supports full color control with hue, saturation and brightness values, or brightness only, or switching on or off. |
brightness | Dimmer | Supports control of the brightness value, or switching on or off. |
color-temperature | Dimmer | Supports control of the color temperature in percent from cold (0%) to warm (100%). |
color-temperature-abs | Number:Temperature | Supports control of the color temperature via a QuantityType having a temperature unit e.g. Kelvin. (Advanced) |
switch | Switch | Supports switching the device on and off. |
dynamics | Number:Time | Sets the duration of dynamic transitions between light states. (Advanced) |
alert | String | Allows setting an alert on a light e.g. flashing them. (Advanced) |
effect | String | Allows setting an effect on a light e.g. 'candle' effect. (Advanced) |
button-last-event | (String) | Informs which button was last pressed in the device. (Trigger Channel) |
button-last-updated | DateTime | The date and time when a button was last pressed. (Read Only) (Advanced) |
rotary-steps | (String) | Informs about the number of rotary steps of the last rotary dial movement. (Trigger Channel) |
rotary-steps-last-updated | DateTime | The date and time when the rotary steps were last updated. (Read Only) (Advanced) |
motion | Switch | Shows if motion has been detected by the sensor. (Read Only) |
motion-enabled | Switch | Supports enabling / disabling the motion sensor. (Advanced) |
motion-last-updated | DateTime | The date and time when the motion value was last updated. (Read Only) (Advanced) |
light-level | Number:Illuminance | Shows the current light level measured by the sensor. (Read Only) |
light-level-last-updated | DateTime | The date and time when the light level was last updated. (Read Only) (Advanced) |
light-level-enabled | Switch | Supports enabling / disabling the light level sensor. (Advanced) |
temperature | Number:Temperature | Shows the current temperature measured by the sensor. (Read Only) |
temperature-last-updated | DateTime | The date and time when the temperature was last updated. (Read Only) (Advanced) |
temperature-enabled | Switch | Supports enabling / disabling the temperature sensor. (Advanced) |
battery-level | Number | Shows the battery level. (Read Only) |
battery-low | Switch | Indicates whether the battery is low or not. (Read Only) |
last-updated | DateTime | The date and time when the thing state was last updated. (Read Only) (Advanced) |
color-xy-only | Color | Allows access to the color-xy parameter of the light(s) only. Has no impact on dimming or on-off parameters. |
dimming-only | Dimmer | Allows access to the dimming parameter of the light(s) only. Has no impact on color-xy or on-off parameters. |
on-off-only | Switch | Allows access to the on-off parameter of the light(s) only. Has no impact on color-xy or dimming parameters. |
security-contact | Contact | Indicates whether a security contact has been triggered. (Read Only) |
security-contact-enabled | Switch | Supports enabling / disabling the security contact. (Advanced) |
security-contact-last-updated | DateTime | The date and time when the security contact state was last updated. (Read Only) (Advanced) |
security-tamper | Contact | Indicates whether a security tamper contact has been triggered. Open means tampering detected. (Read Only) |
security-tamper-last-updated | DateTime | The date and time when the security tamper contact state was last updated. (Read Only) (Advanced) |
The exact list of channels in a given device is determined at run time when the system is started. Each device reports its own live list of capabilities, and the respective list of channels is created accordingly.
The channels color-xy-only
, dimming-only
and on-off-only
are advanced channels - see below for more details.
The effect
channel is an amalgamation of 'normal' and 'timed' effects.
To activate a 'normal' effect, the binding sends a single command to activate the respective effect.
To activate a 'timed' effect, the binding sends a first command to set the timing followed a second command to activate the effect.
You can explicitly send the timing command via the dynamics channel before you send the effect command.
Or otherwise the binding will send a default timing command of 15 minutes.
The button-last-event
channel is a trigger channel.
When the button is pressed the channel receives a number as calculated by the following formula:
value = (button_id * 1000) + event_id;
In a single button device, the button_id
is 1, whereas in a multi- button device the button_id
can be either 1, 2, 3, or 4 depending on which button was pressed.
The event_id
can have the following values:
Event | Value |
---|---|
INITIAL_PRESS | 0 |
REPEAT | 1 |
SHORT_RELEASE | 2 |
LONG_RELEASE | 3 |
DOUBLE_SHORT_RELEASE | 4 |
So (for example) the channel value 1002
((1 * 1000) + 2) means that the second button in the device had a short release event.
The rotary-steps
channel is a trigger channel.
When the dial is turned, the channel receives a number corresponding to the number of steps of the last movement of a rotary dial.
A positive number means the dial was rotated clock-wise, whereas a negative number means it was rotated counter-clockwise.
# Channels for Rooms and Zones
Room and Zone things allow you to control the lights in a given zone or room. They support the following channels:
Channel ID | Item Type | Description |
---|---|---|
brightness | Dimmer | Supports adjusting the brightness or switching the lights on and off. |
switch | Switch | Supports switching the lights on and off. |
scene1) | String | Setting the string to a valid scene friendly name activates the respective scene. |
dynamics | Number:Time | The duration of dynamic transitions between light or scene states. |
alert1) | String | This channel allows setting an alert on the lights e.g. flashing them. |
1) The scene and alert channels are optional. If the respective room or zone has no scenes or alerts associated with it, the respective channel will not be shown.
# The dynamics
Channel
Some channels support dynamic transitions between light states. A dynamic transition is where, instead of the light state changing immediately to its new target value, it changes gradually to the new value over a period of time.
If a thing supports dynamic transitions, then it will have a dynamics
channel.
This is a numeric channel where you can set the time delay for the transition in milliseconds.
When you set a value for the dynamics
channel (e.g. 2000 milliseconds) and then quickly issue another command (e.g. brightness 100%), the second command will be executed gradually over the period of milliseconds given by the dynamics
channel value.
When the dynamics
channel value is changed, it triggers a time window of ten seconds during which the value is active.
If the second command is sent within the active time window, it will be executed gradually according to the dynamics
channel value.
However, if the second command is sent after the active time window has expired, then it will be executed immediately.
If the second command is a 'timed' effect, then the dynamics duration will be applied to that effect.
# Advanced Channels for Devices, Rooms and Zones
Some things support additional advanced channels color-xy-only
, dimming-only
and/or on-off-only
.
For convenience the normal channels often amalgamate multiple elements of the state of a light, room or zone into one single channel.
For example, a full color light has one single color
channel that can accept HSBType commands for changing the color, PercentType commands for changing the brightness, and OnOffType commands for switching it on or off.
By contrast, the purpose of the advanced channels is to individually access specificstate elements of the respective lights, rooms or zones.
These advanced channels can be used as "presets".
For example, you may want to preset the dimming-only
channel to 20% at night, and to 100% in the day time.
Then if somebody turns on the light at night time it will turn on to 20% resp. to 100% in the day time.
You can also use the color-xy-only
channel to preset (say) a cool color in the morning, and a warm color in the evening.
NOTE: you can also preset color temperature values in advance via the color-temperature
and color-temperature-abs
channels described above.
# Console Command for finding ResourceIds
The openHAB console has a command named openhab:hue
that (among other things) lists the resourceId
of all device things in the bridge.
The console command usage is openhab:hue <brigeUID> things
.
An exampe of such a console command, and its respective output, is shown below.
openhab> openhab:hue hue:bridge-api2:g24 things
Bridge hue:bridge-api2:g24 "Philips Hue Bridge" [ipAddress="192.168.1.234", applicationKey="abcdefghijklmnopqrstuvwxyz0123456789ABCD"] {
Thing device 11111111-2222-3333-4444-555555555555 "Standard Lamp L" [resourceId="11111111-2222-3333-4444-555555555555"] // Hue color lamp
Thing device 11111111-2222-3333-4444-666666666666 "Kitchen Wallplate Switch" [resourceId="11111111-2222-3333-4444-666666666666"] // Hue wall switch module
}
The openhab:hue <brigeUID> things
command produces an output that can be used to directly create a .things
file, as shown below.
openhab> openhab:hue hue:bridge-api2:g24 things > myThingsFile.things
# Rule Actions
This binding includes a rule action, which implements dynamic (i.e. gradual) transitions to a new scene or light(s) state. Each thing has a separate action instance, which can be retrieved as follows.
val hueActions = getActions("hue","hue:device:g24:11111111-2222-3333-4444-555555555555")
Where the first parameter must always be hue
and the second must be the full thing UID.
Once the action instance has been retrieved, you can invoke its dynamicCommand(String channelId, Command command, Long durationMs)
method as follows.
hueActions.dynamicCommand("brightness", new PercentType(100), new Long(10000))
hueActions.dynamicCommand("scene", new StringType("SceneName"), new Long(20000))
Parameter | Description |
---|---|
channelId | The channel ID of the channel to send the command to (one of brightness , color , color-temperature , color-temp-kelvin , or scene ). |
command | The target command state to transition to. |
durationMs | The dynamic transition duration in milliseconds. |
# Full Example
# demo.things:
Bridge hue:bridge-api2:g24 "Philips Hue Hub" @ "Home" [ipAddress="192.168.1.234", applicationKey="abcdefghijklmnopqrstuvwxyz0123456789ABCD"] {
Thing device 11111111-2222-3333-4444-555555555555 "Living Room Standard Lamp Left" @ "Living Room" [resourceId="11111111-2222-3333-4444-555555555555"]
Thing device 11111111-2222-3333-4444-666666666666 "Kitchen Wallplate Switch" @ "Kitchen" [resourceId="11111111-2222-3333-4444-666666666666"]
Thing zone 11111111-2222-3333-4444-666666666666 "Kitchen Lights" @ "Kitchen" [resourceId="11111111-2222-3333-4444-666666666666"]
}
# demo.items:
Color Living_Room_Standard_Lamp_Left_Colour "Living Room Standard Lamp Left Colour" {channel="hue:device:g24:11111111-2222-3333-4444-555555555555:color"}
Dimmer Living_Room_Standard_Lamp_Left_Brightness "Living Room Standard Lamp Left Brightness [%.0f %%]" {channel="hue:device:g24:11111111-2222-3333-4444-555555555555:brightness"}
Switch Living_Room_Standard_Lamp_Left_Switch "Living Room Standard Lamp Left Switch" (g_Lights_On_Count) {channel="hue:device:g24:11111111-2222-3333-4444-555555555555:switch"}
String Kitchen_Wallplate_Switch_Last_Event "Kitchen Wallplate Switch Last Event" {channel="hue:device:g24:11111111-2222-3333-4444-666666666666:button-last-event"}
Switch Kitchen_Wallplate_Switch_Battery_Low_Alarm "Kitchen Wallplate Switch Battery Low Alarm" {channel="hue:device:g24:11111111-2222-3333-4444-666666666666:battery-low"}
# demo.sitemap:
sitemap demo label="Hue" {
Frame label="Standard Lamp" {
Switch item=Living_Room_Standard_Lamp_Left_Switch
Slider item=Living_Room_Standard_Lamp_Left_Brightness
Colorpicker item=Living_Room_Standard_Lamp_Left_Colour
}
}