I just got my first binding to actually work (an IKEA STYRBAR remote control, firmware 0x00010024, with a group of TADFRI lightbulbs 1055lm). I wanted to share it for those who did not succeed at first and stumbled upon this thread, as was the case for me.
Update: I was wrong about having to unbind the coordinator first. It was not necessary after all. It’s such a trial-and-error land here, that I missed another important point. So, unbinding the coordinator might be necessary on some isolated devices (or, to reduce network traffic expclicitely), but it was not necessary in my case. What was important to do, was: tap on the remote just after clicking on “Bind”. That way, the remote wakes up and receives the command. If you don’t, it will not receive it.
I am correcting my list and adding another information about debugging below.
- Go to the device panel of the Remote Control → threedots → Manage Zigbee Device
- If you want to connect only one device and not a group: Select the Device (e.g., Lamp) from the upper select menu
- Or, If you want to bind a group of devices: If not yet created, go to View Network → select the Groups Tab → Create new Zigbee Group (I called mine G01), and add one or more lamps / devices to it; then return to the Manage Zigbee Device for the remote, and select it from the group select menu.
- Both for device or Group: Select one or more Clusters from the list below the groups (this is a really confusing UX bug: It looks like the clusters are only related to groups, but that is not the case, they also apply to the device binding!).
For example, for a dimmable light, you may select both “OnOff” and “LevelControl”. Note that if you are binding two devices of the same manufacturer, you can also bind a cluster specific to that vendor (such as the Ikea functionality, ManufacturerSpecificCluster 0xfc57 from Ikea remote to Ikea lamp).
This can enable the standard behavior that would come when you “natively” bind those two devices instead of adding them to HA. - Click Bind or Bind Group depending on choice
- Immediately after clicking, do something with the source device to wake it up. For example, click one of the buttons of a remote; in the case of a motion sensor, have somebody dance in front of it.
- ZHA will create a binding for each device/group+cluster combination you selected
- Verification / Debugging:
The current “Binding” Tab in the “Manage Zigbee Device” Panel of HA/ZHA has a bug: It does not really show the current bindings. There is currently no way to show this information in the UI, unfortunately. So you’re left with testing the remote, or you can use the add-on zha-toolkit (see GitHub - mdeweerd/zha-toolkit: 🧰 Zigbee Home Assistant Toolkit - service for "rare" Zigbee operations using ZHA on Home Assistant ) and issue the following command in Developer Tools / Actions (after installing and activating the toolkit and restarting HA):
(replace xx.xx.xx.xx.xx. with the IEEE address of the source device. It is shown under Device Info when you click on the arrow near Zigbee Info):
action: zha_toolkit.binds_get
data:
ieee: xx:xx:xx:xx:xx:xx:xx:xx
tries: 100
expect_reply: true
Immediately after clicking “Perform action” you should wake up the device, like above.
Hope it helps anyone trying to achieve some bindings. It’s good to have lights go on even when I’m updating HA.
Notes:
- The UI does not show the bindings as selected when re-opening the control. You’ll have to note down somewhere who you bound with whom.
- The Remote is still visible in HA, and it is still reporting events on the UI.
- To remove a Binding you have to do the same, you did to bind, but click unbind instead.
- I’ve had some devices not working with the binding, although the zha-toolkit showed that the binding was there.
- Some devices - for example multi-power strips where you can command each single plug on it - have multiple endpoints. You can bind to a specific endpoint, but that does not work with the UI. You’ll have to do it with zha-toolkit at the moment, and specify the endpoint there. Example of binding a device (as always, don’t forget to wake it up…):
action: zha_toolkit.bind_ieee
data:
ieee: xx:xx:xx:xx:xx:xx:xx:xx # (IEEE of remote)
command_data: yy:yy:yy:yy:yy:yy:yy # (IEEE of target device)
cluster: 6 # (e.g., the OnOff cluster (*))
dst_endpoint: 3 # The endpoint. Here: the third plug..
expect_reply: true
tries: 100
(*) The supported clusters on each device are available in ZHA under “Manage Zigbee Device” → Clusters (pop open the menu).
The “cluster” key for the zha_toolkit action takes the integer value of it. So in case of 0x0006 (OnOff), it’s simply 6; ;or 8 (0x0008) for “LevelControl”. In case of a higher one, such as 0xfc57, make sure to convert it properly (eg with a a programming calculator) to the corresponding integer (in the latter example, 64599).