IKEA Fyrtur ZigBee w/Direct Control HOWTO

As previously threatened, I wanted to document my completed setup for the IKEA Fyrtur blinds (and included components) with the native ZigBee binding. The main difference I have implemented is direct control from the included remote while still having OpenHAB be able to instrument / control / automate the blinds themselves. So that is, no rules or message parsing are required on the OpenHAB side for the remote to directly control one (or more) blinds.

My original setup was using the Tradfri Gateway, pairing all the IKEA ZigBee devices (blinds, repeaters, remotes) to that gateway, and then connecting OpenHAB to it via the Tradfri Binding. That setup was great from an OpenHAB perspective, but the gateway crashed all the time and eventually became unusable. This was my replication of that setup with direct OpenHAB control.

I am using a Nortek GoControl HUSBZB-1 (EM3581) controller and this implementation was done with OpenHAB 3.2.0-1 installed via packages on Ubuntu 20.04 LTS. My experience was that I needed to upgrade the USB stick to the firmware found here. I covered some additional details about this in my forum post trying to get most of this working, found here.

Additional notes before you undertake this process:

  • This process requires interacting with the OpenHAB console. If you are uncomfortable with that, this may not be a good starting point. Read the documentation
  • I consider basic ZigBee configuration outside the scope of this document. Read the binding documentation for configuring your USB stick, etc.
  • In order to configure direct control (the main element of this tutorial) via the OpenHAB console the remotes need to be upgraded to at least firmware 2.3.75. I upgraded my remotes that needed it to the current release (2.3.79) using zigbee2mqtt. I will show how to view the firmware version below
  • Since I mention using zigbee2mqtt, I will follow up with say I did not want the additional abstraction layer (and container service) between OpenHAB and ZigBee, so I wanted to use the native binding
  • I am also linking to the device descriptions on the ZigBee2MQTT project page because there is additional useful information on each page
  • I mostly pulled apart how Z2M does the OTA upgrades of the Remotes. I believe this can be done manually with the OpenHAB ZigBee binding commands but have not tried it yet. More to come, perhaps

Device Binding:
Each IKEA Fyrtur blind I have purchased has included three things in the box:

  • One Fyrtur Blackout Blind, model number E1757
  • One Tradfri Signal Repeater, model number E1746
  • One Tradfri Open/Close Remote, model number E1766

Bind Order:
Start with the Signal Repeater. Start a scan from the OpenHAB GUI via the add a thing button → ZigBee binding. Once the scan has started, use a paperclip to press the recessed button on the Repeater for > 5 seconds to start a reset / search. The device will initially show up as "Unknown ZigBee Device ", looking something like this:

Wait until discovery has completed and the binding has identified it as a Repeater, and then add the Thing to OpenHAB.

Now place or move the repeater vaguely near the blind (or blinds) you are adding to OpenHAB. If you are doing multiple blinds in one room, one repeater is fine for both blinds. The setup I documented here was one Repeater and two blinds.

Next up you need to start a new scan to add the blinds, one at a time. To reset / start the blinds searching to join, press and hold the up and down buttons on the blind together for > 5 seconds until the white light turns on solid. Since these are battery powered devices, discovery can take a minute or two to complete, and might require re-attempts to get them to add. Again, do not add the Thing to OpenHAB until discovery completes and the blind is identified:

Don’t add them yet! Wait until it looks like this:

If you had previously set the blind’s max open / max close settings you will need to redo that after the reset / rejoin. Refer to the docs for that.

The last to be added to OpenHAB is the remote. These devices are extremely fickle during the join. I have had the most success pressing the reset button four times (to reset and start joining) and setting it down directly on top of the repeater. I then wait up to 10 minutes for the Discovery interogation to complete. Evidently Discovery is very prone to fail if the battery is less than 100% as well. It took a few tries and about 10 minutes of waiting (with some random hitting up or down on the remote) until I saw this:

Again, as each device is fully Discovered, add it to create the Thing. Once added, the Repeater thing will show an error. This is normal, since the Repeater exposes no channels that OpenHAB can talk to:

With the things created, you can bind Items to the blinds on the “windowcoveringlift” (Rollershutter) channel to test that you can indeed control the blinds. Instructions for that are outside the scope of this document. See the Items documentation as needed.

Collect Addresses
For the next steps on the scary console, you will need to collect the IEEE address of each blind and the remote you wish to use to control them. This is the 16 character hex listed on the Thing page under MAC Address, as shown here:

The setup I am adding during this process (as mentioned) is two blinds and one remote. So I have:

  • Blind (Right) on 5C0272FFFE8A0FD8
  • Blind (Left) on 5C0272FFFE8835A1
  • Remote on 804B50FFFE2D2DD9

Now we need to open up the OpenHAB console so we can do some command-line magic. First we are going to need the Network Node address (in decimal) for the devices we care about. I am not going to explain what that means, but I will explain how to do it. Use the last four characters of the IEEE address and the “zigbee nodes” command to get the network address for each of the above devices, using grep to filter the output to just what we need:

From that output, I can see the node address (the number in the first column) is 9200. You can type just “zigbee nodes” to see everything in your system. Following that process for each of my nodes, I find I have this:

  • Blind (Right) on 5C0272FFFE8A0FD8, node 9200
  • Blind (Left) on 5C0272FFFE8835A1, node 4633
  • Remote on 804B50FFFE2D2DD9, node 65105

Now, before being able to proceed, we need to validate the firmware version on the remote. After typing the command, you will need to click the remote up/down to wake it up so it can process and respond to the command. For my remote, node number 65105, the command is this:

zigbee read 65105/1 in:0 16384

After pressing enter on that command and clicking “up” on the remote I get this:

That indicates my remote is running firmware 2.3.79, which is indeed newer / greater than the minimum requirement of 2.3.75. So I can now proceed to connect the remote directly to my two blinds above.

First we can look at the “bind table” on the remote. This is the list of places to which the remote is sending its commands for various functions:
zigbee bindtable 65105
Again, one needs to click a button on the remote to wake it after each command, and you will get something like this:

What that output is telling us is that the remote is configured to send some categories of information (for example, the power configuration) to my ZigBee Coordinator, which is what xxx7B20 is. If we inspect the remote using the “endpoint” command we can see what clusters of information are available to transmit, but the short answer is cluster 0102 (hexadecimal) “Window Covering” is an output Cluster on the Remote, and is an input Cluster on the Blinds.

So we are going to add each blind as an endpoint to the remote directly using the bind command:

zigbee bind 0x102 65105/1 9200/1

Again, click after each command.

Then check the table:

Once the table is updated, your remote should now be directly controlling the blinds. After completing this document, that remote now controls both blinds without OpenHAB needing to be in the communication. This is nice because I do not need to do anything complex at all on the OpenHAB side to map the remote action to a blind function. And in the extremely unlikely event that I have an OpenHAB outage, the blinds can still be controlled with the remotes.

I will do my best to answer questions should any arise, but as always, please try to search the docs and forums first.