Groups - dresden-elektronik/deconz-rest-plugin GitHub Wiki

Get Group State

On a GET of a single group, /groups/10, the Hue API returns:

{
  "name": "Living Room",
  "lights": [
    "1",
    "2",
    "3",
    "4",
    "5",
    "6",
    "7",
    "8"
  ],
  "type": "Room",
  "state": {
    "all_on": false,
    "any_on": false
  },
  "recycle": false,
  "class": "Living room",
  "action": {
    "on": false,
    "bri": 127,
    "hue": 5500,
    "sat": 254,
    "effect": "none",
    "xy": [
      0.6468,
      0.348
    ],
    "ct": 463,
    "alert": "none",
    "colormode": "hs"
  }
}

On a GET of the same group, the deCONZ REST API returns:

{
  "action": {
    "bri": 127,
    "ct": 0,
    "effect": "none",
    "hue": 0,
    "on": false,
    "sat": 127,
    "xy": [
      0,
      0
    ]
  },
  "devicemembership": [],
  "etag": "a395a7405598df6e0ac929d039e9cc8e",
  "hidden": false,
  "id": "49650",
  "lights": [
    "8",
    "17",
    "11",
    "22",
    "25",
    "26",
    "20",
    "21"
  ],
  "lightsequence": [
    "20",
    "25",
    "26",
    "8",
    "21",
    "22",
    "11",
    "17"
  ],
  "multideviceids": [],
  "name": "Living Room",
  "scenes": [],
  "state": 0
}

Comparison

Attribute Hue deCONZ Remarks
action Y Y
action.alert Y N Missing from the deCONZ API.
action.bri Y Y
action.colormode Y Missing from the deCONZ API.
action.ct Y Y
action.effect Y Y
action.hue Y Y Different values (see Lights).
action.on Y Y
action.sat Y Y Different values (see Lights).
action.xy Y Y Different values (see Lights).
class Y Missing from the deCONZ API, but not used by homebridge-hue. Indicates the room type for Room groups, see type.
devicemembership N Y Missing from the Hue API, as it does not support binding switches or sensors to groups.
etag Y Missing from the Hue API.
hidden Y Missing from the Hue API. Used by the Wireless Light Control web application.
id Y Missing from the Hue API. I've been wanting an attribute like this. I could also use it on lights, sensors, and other resources.
lights Y Y
lightsequence Y Missing from the Hue API. Used by the Wireless Light Control web application.
multideviceids Y Missing from the Hue API, which does not create any group resource for the FLS-PP. Currently, homebridge-hue exposes the FLS-PP to HomeKit as a single Light accessory with two LightBulb services. It matches the light resources corresponding to the different endpoints through (the MAC address in) the uniqueid.
name Y Y
recycle Y Missing from the deCONZ API, but not used by homebridge-hue.
scenes Y Missing from the Hue API, which uses a separate /scenes resource. homebridge-hue does not support scenes.
state Y Y Is an object in the Hue API, but a number in the deCONZ API. Has been deprecated in the deCONZ API.
state.all_on Y Missing from the deCONZ API.
state.any_on Y Missing from the deCONZ API.
type Y Missing from the deCONZ API. Indicates the type of group: Lightgroup, Room, Luminaire, or Lightsource. The latter two are used for multisource luminaires, like the Hue Beyond, which contain multiple ZigBee devices (light modules). I don't have any of these, and I don't know of any homebridge-hue user who has one either, so homebridge-hue does not (yet) support these. Room groups are like regular Lightgroup groups, with the additional limitation that a light can belong to only one Room group. The Hue app uses these to create HomeKit rooms and to assign HomeKit light accessories to these.

Get All Groups

On a GET of /groups, the Hue API returns the full state of each group:

{
  "10": {
    "name": "Living Room",
    "lights": [
      "1",
      "2",
      "3",
      "4",
      "5",
      "6",
      "7",
      "8"
    ],
    "type": "Room",
    "state": {
      "all_on": false,
      "any_on": false
    },
    "recycle": false,
    "class": "Living room",
    "action": {
      "on": false,
      "bri": 127,
      "hue": 5500,
      "sat": 254,
      "effect": "none",
      "xy": [
        0.6468,
        0.348
      ],
      "ct": 463,
      "alert": "none",
      "colormode": "hs"
    }
  }
}

Note: I've removed the other groups from the response. Also note that Group 0 (all lights) is missing from the response.

On a GET of /groups, the deCONZ API only returns a partial state of each group:

{
  "49650": {
    "devicemembership": [],
    "etag": "a395a7405598df6e0ac929d039e9cc8e",
    "hidden": false,
    "name": "Living Room"
  }
}

Note: I've removed the other groups from the response. Also note that Group 0 (all lights) is missing from the response.

Comparison

The deCONZ API seems to take a different approach towards polling of groups than the Hue API. The etag attributes only changes when other attributes change, so a simple comparison on etag suffices to check whether a group state has changed. Then, the full groups state can be retrieved using a GET on a single group.
While more efficient on network bandwidth, I doubt whether it's actually more efficient overall than returning the full group states. Also, I don't like the inconsistency with lights or sensors, where the deCONZ API does return the full state. As a compromise, the Get All Groups response could leave out lightsequence, multideviceids, and scenes, similar to the Hue API which leaves out the lightstates on Get All Scenes.