Nortek Stick / Conbee 2 and the Lutron Aurora Dimmer Switch Button push Issue

I’ve seen on this forum and in others posts on reddit etc that many have had inconsistent results with the Lutron Aurora dimmer switch on ZHA.

https://www.lutron.com/en-US/products/pages/standalonecontrols/dimmers-switches/smartbulbdimmer/overview.aspx

Turning the dial always works consistently, but pushing the button has been hit or miss. This device is one of my favorites and I’m determined to get it working in HA. Here’s what I’ve learned. Please keep in mind that I don’t know much about zigbee command classes so I’m probably using incorrect terminology but I think the experts can figure out what I’m describing:

  • Most (if not everyone) with the button push problem, appear to be using the Nortek Zigbee/zwave stick (HUSBZB-1).
    I have tried updating the zigbee stack on the stick but it still didn’t work…it actually seemed to be worse.

  • Since others do not seem to be having the same issue with the Conbee2, I decided to buy one and test it myself. As expected, the button pushes work consistently with the Conbee 2 in ZHA.

  • Listening to the zha_event stream always showed the expected result with the Conbee stick but would only show events some of the time with the Nortek stick.

  • However the zigbee logs always showed “something” with both sticks…just different output which leads me to believe that the Nortek stick is simply not paired correctly with the Lutron device or just not listening for the correct device cluster reports/attributes.

The next 2 posts are the zha_event and zigbee logs for both controller sticks when the button is pushed. It toggles max brightness(255) and off (0).
I split these into 2 different posts so they are easier to look at. One for Conbee2 and one post for Nortek.

4 Likes

CONBEE2 - Works as expected and consistently

Zigbee logs for button pushes

[0x0000:zdo] ZDO request ZDOCmd.Mgmt_Permit_Joining_req: [60, <Bool.false: 0>]
[0x4f4f:1:0x0006] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=GLOBAL_COMMAND manufacturer_specific=False is_reply=False disable_default_response=True> manufacturer=None tsn=5 command_id=Command.Read_Attributes>
[0x4f4f:1:0x0006] ZCL request 0x0000: [[0]]
[0x4f4f:1:0x0008] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=False disable_default_response=True> manufacturer=None tsn=6 command_id=4>
[0x4f4f:1:0x0008] ZCL request 0x0004: [255, 7]
[0x4f4f:1:0x0008] No handler for cluster command 4
[0x4f4f:1:0x0006] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=GLOBAL_COMMAND manufacturer_specific=False is_reply=False disable_default_response=True> manufacturer=None tsn=7 command_id=Command.Read_Attributes>
[0x4f4f:1:0x0006] ZCL request 0x0000: [[0]]
[0x4f4f:1:0x0008] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=False disable_default_response=True> manufacturer=None tsn=8 command_id=4>
[0x4f4f:1:0x0008] ZCL request 0x0004: [0, 7]
[0x4f4f:1:0x0008] No handler for cluster command 4
[0x4f4f:1:0x0006] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=GLOBAL_COMMAND manufacturer_specific=False is_reply=False disable_default_response=True> manufacturer=None tsn=9 command_id=Command.Read_Attributes>
[0x4f4f:1:0x0006] ZCL request 0x0000: [[0]]
[0x4f4f:1:0x0008] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=False disable_default_response=True> manufacturer=None tsn=10 command_id=4>
[0x4f4f:1:0x0008] ZCL request 0x0004: [255, 7]
[0x4f4f:1:0x0008] No handler for cluster command 4

Corresponding zha_event stream

Event 2 fired 5:43 PM:
{
    "event_type": "zha_event",
    "data": {
        "device_ieee": "xx:xx:xx:xx:xx:xx:xx:xx",
        "unique_id": "xx:xx:xx:xx:xx:xx:xx:xx:1:0x0008",
        "device_id": "adf503a5c06a8fe45cc9a1810ae77755",
        "endpoint_id": 1,
        "cluster_id": 8,
        "command": "move_to_level_with_on_off",
        "args": [
            255,
            7
        ]
    },
    "origin": "LOCAL",
    "time_fired": "2020-11-19T22:43:17.682985+00:00",
    "context": {
        "id": "2bb807bcb2eb1a249a09de76ce650232",
        "parent_id": null,
        "user_id": null
    }
}
Event 1 fired 5:43 PM:
{
    "event_type": "zha_event",
    "data": {
        "device_ieee": "xx:xx:xx:xx:xx:xx:xx:xx",
        "unique_id": "xx:xx:xx:xx:xx:xx:xx:xx:1:0x0008",
        "device_id": "adf503a5c06a8fe45cc9a1810ae77755",
        "endpoint_id": 1,
        "cluster_id": 8,
        "command": "move_to_level_with_on_off",
        "args": [
            0,
            7
        ]
    },
    "origin": "LOCAL",
    "time_fired": "2020-11-19T22:43:16.456370+00:00",
    "context": {
        "id": "1f11f395a2c87eb737fb561009afdb63",
        "parent_id": null,
        "user_id": null
    }
}
Event 0 fired 5:43 PM:
{
    "event_type": "zha_event",
    "data": {
        "device_ieee": "xx:xx:xx:xx:xx:xx:xx:xx",
        "unique_id": "xx:xx:xx:xx:xx:xx:xx:xx:1:0x0008",
        "device_id": "adf503a5c06a8fe45cc9a1810ae77755",
        "endpoint_id": 1,
        "cluster_id": 8,
        "command": "move_to_level_with_on_off",
        "args": [
            255,
            7
        ]
    },
    "origin": "LOCAL",
    "time_fired": "2020-11-19T22:43:14.784466+00:00",
    "context": {
        "id": "e59fd88ce61ab820a5c2dcea91202da3",
        "parent_id": null,
        "user_id": null
    }
}

Nortek Stick

After a LOT of button pushes I finally got the zha_event to show activity see below for both the zigbee logs and the zha_event stream when the Nortek stick actually reported the button pushes

Zigbee logs

[0x0000:zdo] ZDO request ZDOCmd.Mgmt_Permit_Joining_req: [60, <Bool.false: 0>]
[0x3212:1:0x0006] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=GLOBAL_COMMAND manufacturer_specific=False is_reply=False disable_default_response=True> manufacturer=None tsn=30 command_id=Command.Read_Attributes>
[0x3212:1:0x0006] ZCL request 0x0000: [[0]]
[0x3212:1:0x0008] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=False disable_default_response=True> manufacturer=None tsn=31 command_id=4>
[0x3212:1:0x0008] ZCL request 0x0004: [0, 7]
[0x3212:1:0x0008] No handler for cluster command 4
[0x3212:1:0x0006] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=GLOBAL_COMMAND manufacturer_specific=False is_reply=False disable_default_response=True> manufacturer=None tsn=32 command_id=Command.Read_Attributes>
[0x3212:1:0x0006] ZCL request 0x0000: [[0]]
[0x3212:1:0x0008] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=False disable_default_response=True> manufacturer=None tsn=33 command_id=4>
[0x3212:1:0x0008] ZCL request 0x0004: [255, 7]
[0x3212:1:0x0008] No handler for cluster command 4

Corresponding zha_event stream:

{
    "event_type": "zha_event",
    "data": {
        "device_ieee": "xx:xx:xx:xx:xx:xx:xx:xx",
        "unique_id": "xx:xx:xx:xx:xx:xx:xx:xx:1:0x0008",
        "device_id": "1234567890abcdefg",
        "endpoint_id": 1,
        "cluster_id": 8,
        "command": "move_to_level_with_on_off",
        "args": [
            255,
            7
        ]
    },
    "origin": "LOCAL",
    "time_fired": "2020-11-19T23:13:59.641917+00:00",
    "context": {
        "id": "3eb1cd6c57837efc5d26dc286deb80d8",
        "parent_id": null,
        "user_id": null
    }
}
Event 12 fired 6:13 PM:
{
    "event_type": "zha_event",
    "data": {
        "device_ieee": "xx:xx:xx:xx:xx:xx:xx:xx",
        "unique_id": "xx:xx:xx:xx:xx:xx:xx:xx:1:0x0008",
        "device_id": "1234567890abcdefg",
        "endpoint_id": 1,
        "cluster_id": 8,
        "command": "move_to_level_with_on_off",
        "args": [
            0,
            7
        ]
    },
    "origin": "LOCAL",
    "time_fired": "2020-11-19T23:13:58.216472+00:00",
    "context": {
        "id": "362b47bacd37bbc349de56e769dc8cb6",
        "parent_id": null,
        "user_id": null
    }
}

** Now here’s what the Zigbee logs look like when nothing appears in zha_event:**

0x0000:zdo] ZDO request ZDOCmd.Mgmt_Permit_Joining_req: [60, <Bool.false: 0>]
[0x3212:1:0x0006] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=GLOBAL_COMMAND manufacturer_specific=False is_reply=False disable_default_response=True> manufacturer=None tsn=34 command_id=Command.Read_Attributes>
[0x3212:1:0x0006] ZCL request 0x0000: [[0]]
[0x3212:1:0x0006] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=GLOBAL_COMMAND manufacturer_specific=False is_reply=False disable_default_response=True> manufacturer=None tsn=36 command_id=Command.Read_Attributes>
[0x3212:1:0x0006] ZCL request 0x0000: [[0]]

It looks like the Level Control cluster (0x0008) isn’t consistently reporting. Hopefully one of our fantastic devs can use this info to help get the Nortek stick working with the Lutron Aurora devices.

1 Like

I just bind my Aurora’s to bulbs and they work pretty reliably however there are times when they take several presses to work. Interesting that it seems to work better with another coordinator.

If you rely on events do not upgrade the firmware to 3.08, you will loss all events unless you bind the Device to the coordinator (0.118 allows this)

At some point this fw will be the default on new Aurora.

1 Like

Thanks for the reply. Unfortunately I have these switches in different locations with different device types (sengled, hue bridge, Caseta, HBFC). I have also bound it directly to sengled and my fan controller but it also had occasional button push issue. Strangley enough, once I paired it to my Conbee stick, it works every time…so far at least.

If I didn’t already have about 70 device with twice as many entities tied to my Nortek stick, I would just use the Conbee2. I simply don’t have the time or patience to move over. Still hoping the devs get back and say it’s a simple fix. :crossed_fingers:

Are both the switches routing direct to the coordinator or via an intermediary router?

Directly to the coordinator sticks.
I setup a test instance of HA that has nothing but the zha integration, the zigbee stick and the switch configured.

@walt as requested, please see the logs below. This is the output when the button is pushed (once for on and another time for off). This is when attached to the Conbee 2 stick. I can get the same output when attached to the Nortek stick if needed. Let me know.

Conbee2

2020-11-20 17:11:53 DEBUG (MainThread) [zigpy_deconz.api] Device state changed response: [<DeviceState.128|APSDE_DATA_REQUEST_SLOTS_AVAILABLE|APSDE_DATA_INDICATION|2: 170>, 0]
2020-11-20 17:11:53 DEBUG (MainThread) [zigpy_deconz.api] Command Command.aps_data_indication (1, 1)
2020-11-20 17:11:53 DEBUG (MainThread) [zigpy_deconz.api] APS data indication response: [35, <DeviceState.APSDE_DATA_REQUEST_SLOTS_AVAILABLE|2: 34>, <DeconzAddress address_mode=ADDRESS_MODE.NWK address=0xfffd>, 0, <DeconzAddress address_mode=ADDRESS_MODE.NWK address=0x2964>, 0, 0, 19, b'\x86d)zz\xfd\xe7\x0f\x00\xff\xff\x80', 0, 175, 127, 63, 31, 0, 0, -78]
2020-11-20 17:11:53 INFO (MainThread) [zigpy_deconz.zigbee.application] New device joined: 0x2964, ff:ff:00:0f:e7:fd:7a:7a
2020-11-20 17:11:53 INFO (MainThread) [zigpy.application] Device 0x2964 (ff:ff:00:0f:e7:fd:7a:7a) joined the network
2020-11-20 17:11:53 DEBUG (MainThread) [zigpy_deconz.api] 'aps_data_indication' response from <DeconzAddress address_mode=ADDRESS_MODE.NWK address=0x2964>, ep: 0, profile: 0x0000, cluster_id: 0x0013, data: b'8664297a7afde70f00ffff80'
2020-11-20 17:11:53 DEBUG (MainThread) [zigpy_deconz.api] Device state changed response: [<DeviceState.128|APSDE_DATA_REQUEST_SLOTS_AVAILABLE|APSDE_DATA_INDICATION|2: 170>, 0]
2020-11-20 17:11:53 DEBUG (MainThread) [zigpy_deconz.api] Command Command.aps_data_indication (1, 1)
2020-11-20 17:11:53 DEBUG (MainThread) [zigpy_deconz.api] APS data indication response: [28, <DeviceState.APSDE_DATA_REQUEST_SLOTS_AVAILABLE|2: 34>, <DeconzAddress address_mode=ADDRESS_MODE.NWK address=0x0000>, 1, <DeconzAddress address_mode=ADDRESS_MODE.NWK address=0x2964>, 1, 260, 6, b'\x10,\x00\x00\x00', 0, 175, 119, 64, 31, 0, 0, -79]
2020-11-20 17:11:53 DEBUG (MainThread) [zigpy_deconz.api] 'aps_data_indication' response from <DeconzAddress address_mode=ADDRESS_MODE.NWK address=0x2964>, ep: 1, profile: 0x0104, cluster_id: 0x0006, data: b'102c000000'
2020-11-20 17:11:53 DEBUG (MainThread) [zigpy_deconz.api] Device state changed response: [<DeviceState.128|APSDE_DATA_REQUEST_SLOTS_AVAILABLE|APSDE_DATA_INDICATION|2: 170>, 0]
2020-11-20 17:11:53 DEBUG (MainThread) [zigpy_deconz.api] Command Command.aps_data_indication (1, 1)
2020-11-20 17:11:53 DEBUG (MainThread) [zigpy_deconz.api] APS data indication response: [29, <DeviceState.APSDE_DATA_REQUEST_SLOTS_AVAILABLE|2: 34>, <DeconzAddress address_mode=ADDRESS_MODE.GROUP address=0x6277>, 0, <DeconzAddress address_mode=ADDRESS_MODE.NWK address=0x2964>, 1, 260, 8, b'\x11-\x04\x00\x07\x00', 0, 175, 79, 64, 31, 0, 0, -84]
2020-11-20 17:11:53 DEBUG (MainThread) [zigpy_deconz.api] 'aps_data_indication' response from <DeconzAddress address_mode=ADDRESS_MODE.NWK address=0x2964>, ep: 1, profile: 0x0104, cluster_id: 0x0008, data: b'112d04000700'

The remote sends the events not directly to Coordinator, but to the group. By default ConBee radios show traffic for any group, but EZSP based radios need to be specifically added to that group.

Is there a “zhaquirk” for your device? By the looks of it, it is a randomly picked group by the device and ATM you cannot pick a group ID when creating a group in ZHA. So a quirk is needed if there’s none

3 Likes

Has anyone found a solution to this issue? I have the latest firmware on my HUSBZB-1, and latest HomeAssistant and ZHA integration. The behavior is the same as described in this thread.

1 Like

The solution is to get a different coordinator. This is a limitation of the Nortek stick that (according to Subject matter experts) cannot be overcome…even with the latest firmware. The Conbee2 and Tube’s router are 2 coordinators that I have used and work perfectly this button devices.

Thank you! I wish Tube’s Coordinator was available for sale right now, seems like its antenna would give it much better range.

I went ahead and bought a Conbee2, I’m going to sell the HUSBZB-1 as I have no Z-Wave devices yet.

Home assistant yellow here and where can I find the zhaquirk?

I ended up using an approach that so far I like even better than using the central button.

So far, I’ve been using 2-button devices that cover pole toggle wall switches I cannot replace. Each button emits one event for a short press and a different event for a long press. I set them all to:

  • turn on “mood” lighting for a short press of the top button
  • turn on bright lighting for a long press of the top button
  • turn off all lights in this room for a short press of the bottom button
  • turn off all lights in both this room and any neighboring rooms for a long press of the bottom button

I thought this would be intuitive enough, but most guests and housemates seemed to have difficulty with it.

While trying to come up with a workaround for the missing central button press events from the Aurora dimmer, I decided to try a different approach, to use the wheel as a sort of browse-able, discover-able UX for the scenes relevant to that room. Specifically, I divide the range of dimmer level values included in the ZHA events into some number of arcs so that as the user turns the wheel it cycles through the different available scenes. I’m happier with how it works and I wonder if this might be better for guests and housemates too.

For example my living room also serves as the media room. I have the wheel set to cycle from the lowest counterclockwise value to the highest clockwise value through the following scenes:

  • turn off all lights in both this room and any neighboring rooms
  • turn off all lights in just this room
  • turn on “mood” lighting
  • turn on “house” lighting, brighter than “mood” lighting, enough to see what you’re doing but low enough to minimally impact media viewing
  • turn on bright lighting

Note this gets me one more scene than the previous buttons, “house” lighting, which I used to have go to the web UI to use. Also note that this is 5 scenes, but I divide the “level” values up into 6 arcs. I give 2 arcs to turning off lights in just this room to make it less likely to accidentally turn off lights in other rooms. I don’t think I’d want to go much smaller than the arc angle provided by 6 arcs, as it feels just shy of too finicky with 6 arcs. Regardless, one could use various combinations of these approaches for specific rooms and corresponding scenes and then users can just turn until the get what they want.

Firstly, we need to handle dividing the range of dimmer level values into the arcs which requires doing some light math, so that needs to be a template of some sort. Best to make the “position” of the wheel into a state because that most clearly expresses the intent and is the most broadly usable. Note that this device only reveals the dimmer level in zha_event event data, not in any entity state, so we’d have to add a template sensor of some sort regardless. Add a template sensor in ./configuration.yaml:

template:

  # Workaround lack of access to Aurora dimmer wheel levels in states.  Also divide the
  # level into a fixed number of positions:
  - sensor:
      - unique_id: "lr_wall_switch_position"
        name: "LR Wall Switch Position"
        state: >-
          {%- set position_count = 6 -%}
          {%- set level_min = 2 -%}
          {%- set level_max = 255 -%}
          {%- set level = trigger.event.data.params.level|int -%}
          {{- (level / ((level_max - level_min + 1) / (position_count - 1)))
              |round|int + 1 -}}
    trigger:
      platform: "event"
      event_type: "zha_event"
      event_data:
        device_ieee: "ff:ff:00:0f:e7:fa:da:d4"
        command: "move_to_level_with_on_off"

Now we can use this template sensor in a state change trigger for each automation in ./automations.yaml:

- id: lr_wall_switch_neighbors_off
  alias: LR Wall Switch Neighbors Off
  description: Turn off all lights in the living room and adjacent rooms when the
    dimmer wheel is turned all the way counterclockwise.
  trigger:
  - platform: state
    entity_id:
    - sensor.lr_wall_switch_position
    to: '1'
  action:
  - service: scene.turn_on
    data:
      entity_id:
      - scene.lr_off
      - scene.kitchen_off
      - scene.hallway_off
  mode: single
- id: lr_wall_switch_off
  alias: LR Wall Switch Off
  description: Turn off all living room lights when the dimmer wheel is turned to
    first or second position.
  trigger:
  - platform: state
    entity_id:
    - sensor.lr_wall_switch_position
    to: '2'
  - platform: state
    entity_id:
    - sensor.lr_wall_switch_position
    to: '3'
  action:
  - service: scene.turn_on
    data:
      entity_id:
      - scene.lr_off
  mode: single
- id: lr_wall_switch_mood_lighting
  alias: LR Wall Switch Mood Lighting
  description: Turn on pleasant, mood lighting in the living room when the dimmer
    wheel is turned to the third position.
  trigger:
  - platform: state
    entity_id:
    - sensor.lr_wall_switch_position
    to: '4'
  action:
  - service: scene.turn_on
    data:
      entity_id:
      - scene.lr_on
      - scene.kitchen_on
      - scene.hallway_on
  mode: single
- id: lr_wall_switch_house_lighting
  alias: LR Wall Switch House Lighting
  description: Turn on bright but not blinding house lighting in the living room when
    the dimmer wheel is turned to the fourth position.
  trigger:
  - platform: state
    entity_id:
    - sensor.lr_wall_switch_position
    to: '5'
  action:
  - data:
      entity_id:
      - scene.house_lighting
      - scene.kitchen_on
      - scene.hallway_on
    service: scene.turn_on
  mode: single
- id: lr_wall_switch_bright
  alias: LR Wall Switch Bright
  description: Turn on all lights in the living room to full brightness when the dimmer
    wheel is turned all the way clockwise.
  trigger:
  - platform: state
    entity_id:
    - sensor.lr_wall_switch_position
    to: '6'
  action:
  - data:
      entity_id:
      - scene.lr_bright
      - scene.kitchen_on
      - scene.hallway_on
    service: scene.turn_on
  mode: single

It’s working pretty well and I already prefer it to the old fixed buttons approach.

ZHA quirk/quirks = ZHA Device Handlers → https://www.home-assistant.io/integrations/zha#how-to-add-support-for-new-and-unsupported-devices