[RELEASE] IKEA Zigbee drivers

Are those the TRÅDFRI buttons? My local IKEA has them for $10.99 (Last chance to buy).

I'll have to keep an eye on things...

Yep, TRÅDFRI buttons. IKEA is removing all products that use non-rechargeable batteries (e.g. CR2032 coin cells). The TRÅDFRI button was replaced by SOMRIG that uses AAA batteries. I believe that TRÅDFRI buttons are the last to go.

On my local IKEA website, these were "last change to buy" at full price, for some time. When they introduced the new SOMRIG, they pulled the TRÅDFRI buttons from the site and from the shelves. I got them from the "as-is zone" (usually near the checkout lanes) where they sell returned and end-of-line products at good discounts.

1 Like

Thanks! For me, SOMRIG is still $1 less (but I'll check that as-is area next time I'm there).

1 Like

@dandanache awesome drivers :slight_smile:

How is it about firmware update?
Is it possible to see if there is an update for an IKEA device?
Is there a flag been set or some kind of notification, so it is possible to see that an update is awailable?
Would it be possible to do that?

Kindly regards Rasmus

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