[RELEASE] IKEA Zigbee drivers

When you click the "Update Firmware" button, on the device details page, the following happens:

  1. The Hubitat hub sends a Zigbee message to the device saying something like "You should check for firmware updates".
    Note: battery powered devices might not get this message since they are sleeping almost all the time, so you should "activate" them (push a button, trigger motion, etc) in order to make sure they are awake.

  2. The device sends a message to the hub saying "This is the firmware version I'm currently running on. Anything new?"
    Note: this is when the hub learn the device firmware version and populates the "firmwareMT" value in the "Device Details" section.

  3. The hub then connects to the Hubitat cloud servers and checks if the staff uploaded there a firmware file with a version that is newer than the one received in the previous step.

  4. The hub replies with either "No updates for you" and the message exchange stops; or the hub says that it has this new version, and then the device starts downloading the firmware file.

To see what is really happening, you need to click the "Update Firmware" button and watch the Live Logs for messages coming from the hub (sys:1):

This is how the Zigbee specification handles OTA updates and the hub implemented it as best as it could. That being said, the process is indeed not user friendly. Folks click that damned button and nothing happens, then probably click it a couple of times more, for a good measure, and finally conclude that "it's not working, probably broken... oh well...".

I would say that this needs to be added in the platform. I mean, it kinda works if you know how the platform handles firmware updates and know where to look at. But it definitely needs some UX love.

I'm pretty sure a "Zigbee Firmware Updater" app can be coded that can send the first message to all Zigbee devices, monitor the logs websocket for replies from sys:1 and present the information in a user-friendly way. Doable but hackish :slight_smile:

1 Like

I indeed managed to successfully re-pair a stubborn Aqara T/H sensor directly to the hub (C7) from its final location using this tool. Thanks, @dandanache !

1 Like

I salute you for using it and managing to come out on top of it :+1: I used it recently for an IKEA device and, oh man... I had to read the instructions (that I wrote) twice.

6 Likes

:rofl:

1 Like

After every Hubitat reboot all my IKEA Trafdri LED Driver devices are throwing this kind of errors:

dev:7932024-04-03 03:22:12.027errordimIkeaKaffee sent unexpected Zigbee message: description=catchall: 0000 8032 00 00 0040 00 5D9A 00 00 0000 00 00 00000A010900000300000000030000C72D0044E4D2DE00D12284FF003B57E82F0044E49E6F009E6F3B57003B5744E40044E4, msg=[raw:catchall: 0000 8032 00 00 0040 00 5D9A 00 00 0000 00 00 00000A010900000300000000030000C72D0044E4D2DE00D12284FF003B57E82F0044E49E6F009E6F3B57003B5744E40044E4, profileId:0000, clusterId:8032, clusterInt:32818, sourceEndpoint:00, destinationEndpoint:00, options:0040, messageType:00, dni:5D9A, isClusterSpecific:false, isManufacturerSpecific:false, manufacturerId:0000, command:00, direction:00, data:[00, 00, 0A, 01, 09, 00, 00, 03, 00, 00, 00, 00, 03, 00, 00, C7, 2D, 00, 44, E4, D2, DE, 00, D1, 22, 84, FF, 00, 3B, 57, E8, 2F, 00, 44, E4, 9E, 6F, 00, 9E, 6F, 3B, 57, 00, 3B, 57, 44, E4, 00, 44, E4], endpointInt:0, commandInt:0]

dev:7942024-04-03 03:22:11.857errordimIkeaKochbereich sent unexpected Zigbee message: description=catchall: 0000 8032 00 00 0040 00 22D1 00 00 0000 00 00 00000A0109C72D00DE0200000300000000030000D2DE00D2DE00000300000000030000000003000000000300000000030000, msg=[raw:catchall: 0000 8032 00 00 0040 00 22D1 00 00 0000 00 00 00000A0109C72D00DE0200000300000000030000D2DE00D2DE00000300000000030000000003000000000300000000030000, profileId:0000, clusterId:8032, clusterInt:32818, sourceEndpoint:00, destinationEndpoint:00, options:0040, messageType:00, dni:22D1, isClusterSpecific:false, isManufacturerSpecific:false, manufacturerId:0000, command:00, direction:00, data:[00, 00, 0A, 01, 09, C7, 2D, 00, DE, 02, 00, 00, 03, 00, 00, 00, 00, 03, 00, 00, D2, DE, 00, D2, DE, 00, 00, 03, 00, 00, 00, 00, 03, 00, 00, 00, 00, 03, 00, 00, 00, 00, 03, 00, 00, 00, 00, 03, 00, 00], endpointInt:0, commandInt:0]

dev:7922024-04-03 03:22:11.852errordimIkeaAnrichte sent unexpected Zigbee message: description=catchall: 0000 8032 00 00 0040 00 573B 00 00 0000 00 00 00000A0109C72D00DE02B6E10084FF0000030000000003000084FF0084FF78B20078B2000003000000000300000000030000, msg=[raw:catchall: 0000 8032 00 00 0040 00 573B 00 00 0000 00 00 00000A0109C72D00DE02B6E10084FF0000030000000003000084FF0084FF78B20078B2000003000000000300000000030000, profileId:0000, clusterId:8032, clusterInt:32818, sourceEndpoint:00, destinationEndpoint:00, options:0040, messageType:00, dni:573B, isClusterSpecific:false, isManufacturerSpecific:false, manufacturerId:0000, command:00, direction:00, data:[00, 00, 0A, 01, 09, C7, 2D, 00, DE, 02, B6, E1, 00, 84, FF, 00, 00, 03, 00, 00, 00, 00, 03, 00, 00, 84, FF, 00, 84, FF, 78, B2, 00, 78, B2, 00, 00, 03, 00, 00, 00, 00, 03, 00, 00, 00, 00, 03, 00, 00], endpointInt:0, commandInt:0]

1 Like

I have two brand spanking new Parasoll Door/Window Sensor (E2013) sensors.
One connected to repeater > HE and one that is placed on 1,5m from the HE hub itself.
Both sensors drain the aaa battery's extreemly fast.
The sensor that is on 1,5m from the hub drains the battery in two days, the sensor connected to the repeater drais the battery in about a week.

Anyone else have this issue?

1 Like

Sorry to hear that. I have 10 of them, all over the flat, with no battery problems so far.

Please check if you have continuous messages coming from them in the Zigbee Logs: Setting -> Zigbee Details -> View logs. I want to to check if a faulty reporting configuration from the driver is causing the devices to report their state back to the hub more often than normal (they should wake up on their own and report the remaining battery percentage and contact status every 5 hours).

You may want to re-pair as this will also reset them: No need to remove the device from Hubitat, just start the Zigbee pairing from the UI, then 4 pushes in 5 seconds on the link button on the back of the device, then keep them really close (~5 cm) to the hub until the blinking lights go out.

Placed a fresh battery in the one closest to the hub, and re-pair'd it.
The Zigbee log shows:

Summary

dev:65582024-04-03 16:47:55.312infoprofileId:0104, clusterId:0500, sourceEndpoint:02, destinationEndpoint:01 , groupId:0000, lastHopLqi:200, lastHopRssi:-50

dev:65582024-04-03 16:47:51.506infoprofileId:0104, clusterId:0500, sourceEndpoint:02, destinationEndpoint:01 , groupId:0000, lastHopLqi:196, lastHopRssi:-51

dev:65582024-04-03 16:47:50.897infoprofileId:0104, clusterId:0500, sourceEndpoint:02, destinationEndpoint:01 , groupId:0000, lastHopLqi:200, lastHopRssi:-50

dev:65582024-04-03 16:47:49.481infoprofileId:0104, clusterId:0500, sourceEndpoint:02, destinationEndpoint:01 , groupId:0000, lastHopLqi:200, lastHopRssi:-50

dev:65582024-04-03 16:47:49.277infoprofileId:0104, clusterId:0500, sourceEndpoint:02, destinationEndpoint:01 , groupId:0000, lastHopLqi:196, lastHopRssi:-51

dev:65582024-04-03 16:47:48.666infoprofileId:0104, clusterId:0019, sourceEndpoint:01, destinationEndpoint:01 , groupId:0000, lastHopLqi:200, lastHopRssi:-50

dev:65582024-04-03 16:47:45.001infoprofileId:0104, clusterId:0500, sourceEndpoint:02, destinationEndpoint:01 , groupId:0000, lastHopLqi:192, lastHopRssi:-52

dev:65582024-04-03 16:47:42.578infoprofileId:0104, clusterId:0019, sourceEndpoint:01, destinationEndpoint:01 , groupId:0000, lastHopLqi:200, lastHopRssi:-50

dev:65582024-04-03 16:47:40.653infoprofileId:0000, clusterId:0006, sourceEndpoint:00, destinationEndpoint:00 , groupId:0000, lastHopLqi:200, lastHopRssi:-50

dev:65582024-04-03 16:47:35.986infoprofileId:0104, clusterId:0500, sourceEndpoint:02, destinationEndpoint:01 , groupId:0000, lastHopLqi:196, lastHopRssi:-51

dev:65582024-04-03 16:47:31.233infoprofileId:0104, clusterId:0500, sourceEndpoint:02, destinationEndpoint:01 , groupId:0000, lastHopLqi:196, lastHopRssi:-51

dev:65582024-04-03 16:47:27.463infoprofileId:0104, clusterId:0500, sourceEndpoint:02, destinationEndpoint:01 , groupId:0000, lastHopLqi:200, lastHopRssi:-50

dev:65582024-04-03 16:47:25.949infoprofileId:0104, clusterId:0500, sourceEndpoint:02, destinationEndpoint:01 , groupId:0000, lastHopLqi:196, lastHopRssi:-51

dev:65582024-04-03 16:47:23.748infoprofileId:0104, clusterId:0500, sourceEndpoint:02, destinationEndpoint:01 , groupId:0000, lastHopLqi:192, lastHopRssi:-52

dev:65582024-04-03 16:47:14.365infoprofileId:0104, clusterId:0003, sourceEndpoint:02, destinationEndpoint:FF , groupId:0000, lastHopLqi:200, lastHopRssi:-50

dev:65582024-04-03 16:47:12.436infoprofileId:0104, clusterId:0001, sourceEndpoint:01, destinationEndpoint:01 , groupId:0000, lastHopLqi:200, lastHopRssi:-50

dev:65582024-04-03 16:47:11.524infoprofileId:0104, clusterId:0003, sourceEndpoint:01, destinationEndpoint:FF , groupId:0000, lastHopLqi:192, lastHopRssi:-52

dev:65582024-04-03 16:47:11.421infoprofileId:0104, clusterId:0001, sourceEndpoint:01, destinationEndpoint:01 , groupId:0000, lastHopLqi:200, lastHopRssi:-50

dev:65582024-04-03 16:47:10.301infoprofileId:0104, clusterId:0000, sourceEndpoint:01, destinationEndpoint:01 , groupId:0000, lastHopLqi:196, lastHopRssi:-51

dev:65582024-04-03 16:47:08.582infoprofileId:0000, clusterId:8021, sourceEndpoint:00, destinationEndpoint:00 , groupId:0000, lastHopLqi:200, lastHopRssi:-50

dev:65582024-04-03 16:47:07.874infoprofileId:0104, clusterId:0001, sourceEndpoint:01, destinationEndpoint:01 , groupId:0000, lastHopLqi:200, lastHopRssi:-50

dev:65582024-04-03 16:47:07.374infoprofileId:0104, clusterId:0000, sourceEndpoint:01, destinationEndpoint:01 , groupId:0000, lastHopLqi:200, lastHopRssi:-50

dev:65582024-04-03 16:47:07.062infoprofileId:0104, clusterId:0500, sourceEndpoint:02, destinationEndpoint:01 , groupId:0000, lastHopLqi:200, lastHopRssi:-50

dev:65582024-04-03 16:47:05.449infoprofileId:0104, clusterId:0001, sourceEndpoint:01, destinationEndpoint:01 , groupId:0000, lastHopLqi:200, lastHopRssi:-50

dev:65582024-04-03 16:47:04.740infoprofileId:0104, clusterId:0000, sourceEndpoint:01, destinationEndpoint:01 , groupId:0000, lastHopLqi:200, lastHopRssi:-50

dev:65582024-04-03 16:47:04.645infoprofileId:0104, clusterId:0500, sourceEndpoint:02, destinationEndpoint:01 , groupId:0000, lastHopLqi:204, lastHopRssi:-49

dev:65582024-04-03 16:47:04.635infoprofileId:0104, clusterId:0000, sourceEndpoint:01, destinationEndpoint:01 , groupId:0000, lastHopLqi:200, lastHopRssi:-50

dev:65582024-04-03 16:47:03.925infoprofileId:0104, clusterId:0001, sourceEndpoint:01, destinationEndpoint:01 , groupId:0000, lastHopLqi:196, lastHopRssi:-51

dev:65582024-04-03 16:47:03.013infoprofileId:0000, clusterId:8021, sourceEndpoint:00, destinationEndpoint:00 , groupId:0000, lastHopLqi:196, lastHopRssi:-51

dev:65582024-04-03 16:47:00.790infoprofileId:0104, clusterId:0001, sourceEndpoint:01, destinationEndpoint:01 , groupId:0000, lastHopLqi:196, lastHopRssi:-51

dev:65582024-04-03 16:47:00.694infoprofileId:0000, clusterId:8021, sourceEndpoint:00, destinationEndpoint:00 , groupId:0000, lastHopLqi:200, lastHopRssi:-50

dev:65582024-04-03 16:47:00.686infoprofileId:0104, clusterId:0500, sourceEndpoint:02, destinationEndpoint:01 , groupId:0000, lastHopLqi:200, lastHopRssi:-50

dev:65582024-04-03 16:47:00.590infoprofileId:0000, clusterId:8021, sourceEndpoint:00, destinationEndpoint:00 , groupId:0000, lastHopLqi:200, lastHopRssi:-50

dev:65582024-04-03 16:47:00.582infoprofileId:0104, clusterId:0500, sourceEndpoint:02, destinationEndpoint:01 , groupId:0000, lastHopLqi:196, lastHopRssi:-51

dev:65582024-04-03 16:46:58.652infoprofileId:0000, clusterId:0013, sourceEndpoint:00, destinationEndpoint:00 , groupId:0000, lastHopLqi:180, lastHopRssi:-55

dev:65582024-04-03 16:46:35.732infoprofileId:0104, clusterId:0000, sourceEndpoint:01, destinationEndpoint:01 , groupId:0000, lastHopLqi:196, lastHopRssi:-51

dev:65582024-04-03 16:46:34.824infoprofileId:0104, clusterId:0000, sourceEndpoint:01, destinationEndpoint:01 , groupId:0000, lastHopLqi:196, lastHopRssi:-51

dev:65582024-04-03 16:46:33.900infoprofileId:0104, clusterId:0500, sourceEndpoint:02, destinationEndpoint:01 , groupId:0000, lastHopLqi:196, lastHopRssi:-51

dev:65582024-04-03 16:46:33.789infoprofileId:0104, clusterId:0001, sourceEndpoint:01, destinationEndpoint:01 , groupId:0000, lastHopLqi:196, lastHopRssi:-51

dev:65582024-04-03 16:46:32.787infoprofileId:0104, clusterId:0001, sourceEndpoint:01, destinationEndpoint:01 , groupId:0000, lastHopLqi:200, lastHopRssi:-50

dev:65582024-04-03 16:46:32.779infoprofileId:0104, clusterId:0001, sourceEndpoint:01, destinationEndpoint:01 , groupId:0000, lastHopLqi:196, lastHopRssi:-51

dev:65582024-04-03 16:46:31.768infoprofileId:0000, clusterId:8021, sourceEndpoint:00, destinationEndpoint:00 , groupId:0000, lastHopLqi:196, lastHopRssi:-51

dev:65582024-04-03 16:46:30.756infoprofileId:0104, clusterId:0500, sourceEndpoint:02, destinationEndpoint:01 , groupId:0000, lastHopLqi:192, lastHopRssi:-52

dev:65582024-04-03 16:46:29.744infoprofileId:0000, clusterId:8021, sourceEndpoint:00, destinationEndpoint:00 , groupId:0000, lastHopLqi:192, lastHopRssi:-52

dev:65582024-04-03 16:46:29.013infoprofileId:0000, clusterId:0013, sourceEndpoint:00, destinationEndpoint:00 , groupId:0000, lastHopLqi:192, lastHopRssi:-52

nb, just had a look at the contact sensor that is farthest away from the hub, and connected by repeater.
After one week it stil seems to function, battery states still at 100%.
Status page claims 103 messages sinds hub reboot (two days ago)

1 Like

Released version 4.0.0 with the following changes:

Added

How to add the new driver using Hubitat Package Manager

First update to version 4.0.0:

HPM -> Update -> Select "IKEA Zigbee drivers" -> Next

Then install the new driver(s):

HPM -> Modify -> Select "IKEA Zigbee drivers" -> Next -> Tick the new driver -> Next

Fixed

  • Ignore "Mgmt_Rtg_rsp" and "Parent_annce_rsp" messages that are generated when the Hub restarts - @a.mcdear, @hubitrep

Changed

  • E2013: App option to swap "open" / "closed" value for the "contact" attribute
  • Refactor the build system & change file naming scheme to support other manufacturers

Note: While the functionality remains largely unchanged, the code has undergone significant refactoring. It has been running smoothly on my devices for several weeks now, however, there’s a possibility that some elusive bugs might still be present.

Drivers for other non-IKEA devices

  • Aqara Dual Relay Module T2 (DCM-K01)
  • Legrand Connected Outlet (741811)
  • Philips Hue Wall Switch Module (RDM001)
  • Philips Hue Dimmer Switch (RWL022)
  • Swann One Key Fob (SWO-KEF1PA)

Note: The non-IKEA drivers listed above are not in HPM, you can install them manually from Github. I added them in the same repo directory just because I am lazy and used the same build system :slight_smile:


Here's a couple of photos with the new IKEA toy (TRETAKT Smart Plug - no power/energy monitoring) along with its older brother (TRADFRI Control Outlet):


Have fun!

5 Likes

Great job again!:+1:

Do the IKEA Zigbee Group activated devices (bulbs, outlets) report the on/off status back to the HE hub?

1 Like

Yes for the LED driver, Askvader and the 2 plugs. I don't own any bulbs, but I expect them to also work.

You can also control the brightness on the LED driver, and the level is also reported.

1 Like

That's great, some other brands don't do that... IKEA have done it right this time! :slight_smile:

Is it possible to control the groups by creating a Hubitat Group ?

HE Gruup device

1 Like

Nope. I chose UX before functionality (drop-down instead of text input) which goes totally against the Hubitat philosophy :slight_smile:

1 Like

Released version 4.1.0 with the following small changes:

Added

  • Ikea Tretakt Smart Plug: Add option to disable LED indicator on the device, ensuring total darkness
  • Legrand Connected Outlet: Add option to configure LED indicators: always On, always Off, follow device power state

Have fun!

2 Likes

?

you have done it even before we have :joy:
It's still not a option on our own hubs, may pass the driver on to the team :joy:

5 Likes

I got the idea from the zigbee2mqtt converter, but did not like how they implemented it with 2 toggle switches.

I'm still on the firmware that came with the outlet (1021-0011-003E4203). Downloaded the latest version (1021-0011-00534203) from Legrand dev portal and sent an email to Mike to upload it; hope this feature still works after the update.

I am pretty happy with the device so far, not chatty at all while reporting the power (W) and I like the fact that it looks like a "normal" outlet. If the new firmware delivers the same experience, I intend to replace most of my power outlets with it.

3 Likes

Yes i did give him the portal a while ago for some other stuff we have coming. It should do as we are planning on putting it in our hubs. i have asked that they enable some of it by default in future as well to follow the state at least.

Yes i have been pleased with them as well in my samples. It's also good that they have the same on each model for the whole world. So this driver should work find for my UK one. I got a new one a few weeks ago as mine had to go in our office on a live demo. Been meaning to get around to installing it again so this might kick me to do it.

2 Likes

I have no problem with that, code is open source with a very liberal license: The Unlicense.

If you speak to the dev team, I'm would very much like to know what these undocumented attributes (especially the writable "rw-" ones) and commands do :slight_smile::

================================================================================================
In Cluster: 0x0B04 (Electrical Measurement Cluster)
------------------------------------------------------------------------------------------------
▸ 0x0000 | Measurement Type      | req | r-- | map32  | 00000001  | --
▸ 0x0505 | RMS Voltage           | opt | r-- | uint16 | 0000 = 0  | --
▸ 0x0508 | RMS Current           | opt | r-- | uint16 | 0000 = 0  | --
▸ 0x050B | Active Power          | opt | r-- | int16  | 0000 = 0  | --
▸ 0x050F | Apparent Power        | opt | r-- | uint16 | 0000 = 0  | --
▸ 0x0600 | AC Voltage Multiplier | opt | r-- | uint16 | 0000 = 0  | --
▸ 0x0601 | AC Voltage Divisor    | opt | r-- | uint16 | 0000 = 0  | --
▸ 0x0602 | AC Current Multiplier | opt | r-- | uint16 | 0000 = 0  | --
▸ 0x0603 | AC Current Divisor    | opt | r-- | uint16 | 0000 = 0  | --
▸ 0x0604 | AC Power Multiplier   | opt | r-- | uint16 | 0001 = 1  | --
▸ 0x0605 | AC Power Divisor      | opt | r-- | uint16 | 0001 = 1  | --
▸ 0_F000 | ??                    | --  | r-- | enum8  | 00        | --
▸ 0_F001 | ??                    | --  | rw- | bool   | 01 = True | --
▸ 0_F002 | ??                    | --  | rw- | int16  | 0000 = 0  | --
▸ 0_F003 | ??                    | --  | rw- | enum8  | 00        | --
▸ 0_F004 | ??                    | --  | rw- | uint8  | 82 = 130  | --
▸ 0_F005 | ??                    | --  | rw- | uint8  | 00 = 0    | --
▸ 0_FFFD | Cluster Revision      | req | r-- | uint16 | 0001 = 1  | --
------------------------------------------------------------------------------------------------
▸ No received commands
================================================================================================
In Cluster: 0xFC01 (Unknown Cluster)
------------------------------------------------------------------------------------------------
▸ 0_0000 | ?? | -- | rw- | data16 | 0000       | --
▸ 0_0001 | -- | -- | rw- | bool   | 01 = True  | --
▸ 0_0002 | -- | -- | rw- | bool   | 00 = False | --
------------------------------------------------------------------------------------------------
▸ 0_02 | ?? | --
▸ 0_03 | ?? | --
▸ 0_05 | ?? | --
▸ 0_06 | ?? | --
▸ 0_07 | ?? | --
▸ 0_09 | ?? | --
▸ 0_0A | ?? | --
▸ 0_0B | ?? | --
▸ 0_0E | ?? | --
▸ 0_11 | ?? | --
▸ 0_14 | ?? | --
================================================================================================

I could not find any documentation of that, but, unfortunately, this is the usual case with custom Zigbee attributes and commands.

1 Like

Didn't mean the whole lot as our other stuff works on a different way of templates but I'll have a look and it was more a "look others are making it better than we do" :joy:.

I think the main guy running it is with me this week in London, if not with me he's in the meetings so I will ask him then. :crossed_fingers:t2:

1 Like


fingerprint profileId:"0104", endpointId:"01", inClusters:"0000,0003,0004,0005,FC01,0B04,0006,000F", outClusters:"0006,0000,FC01,0005,0019", model:" Mobile outlet", manufacturer:" Legrand"

fingerprint for UK version

@dandanache its odd, the blue light is ON when the device is OFF and OFF when its ON?

I wonder if the extra commands you found can take advantage of the RGB to have a red when off and green or blue when ON.

What i do like about our devices is they all light up when the hub is in join mode.

image

1 Like