[RELEASE] IKEA Zigbee drivers

I'm still debating if this is a feature or a nuisance after recently having some problems in pairing (or repairing one of those bulbs). Probably lost patience, but still...there is some behavior unique to these bulbs (the ones that came as a set with button). Of course I couldn't use them with the HE hub at all before the firmware upgrade (for which I'm grateful)...but it seems the group binding feature can run you amuck in a HE environment if you're not careful.

1 Like

You actually could use them before the update to firmware, and I did for a bit. BUT, it was tricky to do. You had to pair to the hub first and then do the direct binding. You also had to be willing to have the button be useless in HE (paired as a "thing"). This allowed you to have limited functionality of the button. If it was one of the 5 button remotes, On/OFF and Dim worked, that was it. This just was not that useful since it is not ST and everything is local anyhow.


Just bought 2 White Spectrum (CT) lights. Don't need them but I wanted to play with them.

  • LED2101G4: Tradfri Bulb E14 WS Globe 470lm
  • LED1949C5: Tradfri Bulb E14 WS Candle Opal 470lm

I have no idea about light quality compared to other bulbs (e.g. Hue), but the Zigbee firmware implementation is awesome! The price is also good, I saw that new products (with better energy ratings) are even cheaper than old ones.

Everything is implemented according to Zigbee specs and it also correctly implements brightness level and color temperature pre-staging without the need for any "tricks". So I am able to set level and temperature while the lights are off (and they stay off), and when turned on, it uses the updated values, without flickering or rapid changes. Pretty awesome!

I started the work on a driver :slight_smile: I should probably also get some Color White Spectrum (RGBCT) bulbs.


Awesome :slight_smile:
How about the E27 and GU10 bulbs?
If I can be of any assistance in tracing etc., please let me know.

1 Like

The plan is to add 3 drivers:

  • IKEA Dimmable Light - for Tradfri fixed cold/warm bulbs + LED drivers
  • IKEA White Spectrum Light - for Tradfri bulbs with adjustable white tone bulbs (CCT)
  • IKEA Color White Spectrum Light - For Tradfri RGBCCT bulbs + Ormanas LED strip

I expect that the connection type (E13, E27, GU10) should not matter, but you never know. If you feel brave, a beta version is available in a Github branch for the first 2 drivers: Ikea_DIM-Light.groovy and Ikea_WS-Light.groovy.


I wonder if would be possible to set all channels to 100% brightness. For example, typically for CCT led controllers, when you set 100% brighness and 'neutral' temperature, then WW and CW channels are set to 50% power. I have some led drivers, including cct and rgbcct, tried to use them with Philps Hue app, and it is not possible to set 100% potential power output.

1 Like

Unfortunately I don't think that this kind of control is possible using Zigbee commands.

I would like to give it a go, but I won't be near the location for a week.
Didn't know, that you already had beta drivers :slight_smile:

1 Like

Do you have any like RGB + W controllers? There seems to be no build in drivers that allows you to control the RGB and W separately.

I have some of these and you can use the BIT switch to make the device change. This would work for CT or RGB + W (which i have) or 4 separate dimm channels (i also have) but not easy way to control it.

Any ideas or way you could help?

1 Like

I'm hoping that someone might be able to help me with Vallhorn motion sensors.
I paired 2 of them but they're not displaying the motion events.

This is what I see on the device page. I did pair the 2 devices next to my hub and no luck, I also put them back into pairing mode and the hub found them again and still no luck. I removed them and added them back.
I made sure to hit the configure button and save preferences.
When I hit configure the powerSource changes to unknown and then it goes back to battery when I hit refresh so I'm a bit stumped as to what to try next.
I'm using a C7 hub

Here's also my last logs from the device in case there's anything there that might give a clue to what's going wrong for me.

dev:9152024-04-09 22:58:31.605infoI Toilet Motion 🛠️ logLevel = Debug
dev:9152024-04-09 22:58:31.550infoI Toilet Motion saving preferences ...
dev:9152024-04-09 22:57:23.889debugI Toilet Motion ▶ Processed ZCL message: type=Read Attributes Response, cluster=0x0000, attribute=0x000A, value=4532313334
dev:9152024-04-09 22:57:23.887debugI Toilet Motion update data value: type=E2134
dev:9152024-04-09 22:57:23.884debugI Toilet Motion msg=[[raw:6776010000140A0041054532313334, dni:6776, endpoint:01, cluster:0000, size:14, attrId:000A, encoding:41, command:01, value:4532313334, clusterInt:0, attrInt:10, endpointInt:1, commandInt:1]]
dev:9152024-04-09 22:57:23.881debugI Toilet Motion description=[read attr - raw: 6776010000140A0041054532313334, dni: 6776, endpoint: 01, cluster: 0000, size: 14, attrId: 000A, encoding: 41, command: 01, value: 054532313334]
dev:9152024-04-09 22:57:23.086debugI Toilet Motion ▶ Processed ZDO message: type=Mgmt_Bind_rsp, totalEntries=3, startIndex=0, devices=[Unknown (000D6F00163EEC05)], groups=[]
dev:9152024-04-09 22:57:23.084infoI Toilet Motion current group bindings: None
dev:9152024-04-09 22:57:23.082infoI Toilet Motion current device bindings: None
dev:9152024-04-09 22:57:23.079debugI Toilet Motion found binding for device Unknown (000D6F00163EEC05) on cluster 0x0001
dev:9152024-04-09 22:57:23.077debugI Toilet Motion found binding for device Unknown (000D6F00163EEC05) on cluster 0x0406
dev:9152024-04-09 22:57:23.075debugI Toilet Motion found binding for device Unknown (000D6F00163EEC05) on cluster 0x0400
dev:9152024-04-09 22:57:23.003debugI Toilet Motion msg=[[raw:catchall: 0000 8033 00 00 0040 00 6776 00 00 0000 00 00 B600030003EB8EF0FEFF141A880100040305EC3E16006F0D0001EB8EF0FEFF141A880106040305EC3E16006F0D0001EB8EF0FEFF141A880101000305EC3E16006F0D0001, profileId:0000, clusterId:8033, clusterInt:32819, sourceEndpoint:00, destinationEndpoint:00, options:0040, messageType:00, dni:6776, isClusterSpecific:false, isManufacturerSpecific:false, manufacturerId:0000, command:00, direction:00, data:[B6, 00, 03, 00, 03, EB, 8E, F0, FE, FF, 14, 1A, 88, 01, 00, 04, 03, 05, EC, 3E, 16, 00, 6F, 0D, 00, 01, EB, 8E, F0, FE, FF, 14, 1A, 88, 01, 06, 04, 03, 05, EC, 3E, 16, 00, 6F, 0D, 00, 01, EB, 8E, F0, FE, FF, 14, 1A, 88, 01, 01, 00, 03, 05, EC, 3E, 16, 00, 6F, 0D, 00, 01], endpointInt:0, commandInt:0]]
dev:9152024-04-09 22:57:22.993debugI Toilet Motion description=[catchall: 0000 8033 00 00 0040 00 6776 00 00 0000 00 00 B600030003EB8EF0FEFF141A880100040305EC3E16006F0D0001EB8EF0FEFF141A880106040305EC3E16006F0D0001EB8EF0FEFF141A880101000305EC3E16006F0D0001]
dev:9152024-04-09 22:57:22.991debugI Toilet Motion ▶ Processed ZCL message: type=Read Attributes Response, cluster=0x0000, attribute=0x0005, value=VALLHORN Wireless Motion Sensor
dev:9152024-04-09 22:57:22.984debugI Toilet Motion update data value: model=VALLHORN Wireless Motion Sensor
dev:9152024-04-09 22:57:22.923debugI Toilet Motion msg=[[raw:6776010000480500421F56414C4C484F524E20576972656C657373204D6F74696F6E2053656E736F72, dni:6776, endpoint:01, cluster:0000, size:48, attrId:0005, encoding:42, command:01, value:VALLHORN Wireless Motion Sensor, clusterInt:0, attrInt:5, endpointInt:1, commandInt:1]]
dev:9152024-04-09 22:57:22.919debugI Toilet Motion description=[read attr - raw: 6776010000480500421F56414C4C484F524E20576972656C657373204D6F74696F6E2053656E736F72, dni: 6776, endpoint: 01, cluster: 0000, size: 48, attrId: 0005, encoding: 42, command: 01, value: 1F56414C4C484F524E20576972656C657373204D6F74696F6E2053656E736F72]
dev:9152024-04-09 22:57:21.939debugI Toilet Motion ▶ Processed ZCL message: type=Read Attributes Response, cluster=0x0000, attribute=0x0001, value=01
dev:9152024-04-09 22:57:21.935debugI Toilet Motion update data value: softwareBuild=1.0.57
dev:9152024-04-09 22:57:21.932debugI Toilet Motion update data value: manufacturer=IKEA of Sweden
dev:9152024-04-09 22:57:21.929debugI Toilet Motion ▶ Processed ZCL message: type=Read Attributes Response, BatteryPercentage=85%
dev:9152024-04-09 22:57:21.926debugI Toilet Motion update data value: hwVersion=01
dev:9152024-04-09 22:57:21.924debugI Toilet Motion battery is 85% full [digital]
dev:9152024-04-09 22:57:21.921debugI Toilet Motion update data value: application=01
dev:9152024-04-09 22:57:21.919debugI Toilet Motion msg=[[raw:67760100010A210020AA, dni:6776, endpoint:01, cluster:0001, size:0A, attrId:0021, encoding:20, command:01, value:AA, clusterInt:1, attrInt:33, endpointInt:1, commandInt:1]]
dev:9152024-04-09 22:57:21.905debugI Toilet Motion msg=[[raw:677601000050010020010300002001040000420E494B4541206F662053776564656E0040004206312E302E3537, dni:6776, endpoint:01, cluster:0000, size:50, attrId:0001, encoding:20, command:01, value:01, clusterInt:0, attrInt:1, additionalAttrs:[[value:01, encoding:20, attrId:0003, consumedBytes:4, attrInt:3], [value:IKEA of Sweden, encoding:42, attrId:0004, consumedBytes:17, attrInt:4], [value:1.0.57, encoding:42, attrId:4000, consumedBytes:9, attrInt:16384]], endpointInt:1, commandInt:1]]
dev:9152024-04-09 22:57:21.902debugI Toilet Motion description=[read attr - raw: 67760100010A210020AA, dni: 6776, endpoint: 01, cluster: 0001, size: 0A, attrId: 0021, encoding: 20, command: 01, value: AA]
dev:9152024-04-09 22:57:21.896debugI Toilet Motion description=[read attr - raw: 677601000050010020010300002001040000420E494B4541206F662053776564656E0040004206312E302E3537, dni: 6776, endpoint: 01, cluster: 0000, size: 50, attrId: 0001, encoding: 20, command: 01, value: 010300002001040000420E494B4541206F662053776564656E0040004206312E302E3537]
dev:9152024-04-09 22:57:21.556debugI Toilet Motion ◀ Sending Zigbee messages: [he raw 0x6776 1 0x01 0x0001 {10 00 00 21 00}, delay 1000, he raw 0x6776 0x00 0x00 0x0033 {57 00} {0x0000}]
dev:9152024-04-09 22:57:21.552warnI Toilet Motion refreshing device state (auto) ...
dev:9152024-04-09 22:57:20.893debugI Toilet Motion ▶ Processed ZCL message: type=Read Attributes Response, PowerSource=03
dev:9152024-04-09 22:57:20.891infoI Toilet Motion power source is battery [digital]

Thanks very much for all the drivers, I bought a bunch of the new Ikea devices at the weekend when I saw that they were supported and I got the Somrig remote to work, the parasoll contact sensors, the badring water sensor, the air quality sensor, but having a lot of trouble with the motion sensor.

1 Like

Sorry about that, my bad! You did everything right, by the book. And you also discovered a bug in the Vallhorn driver 4.1.0. Thank you for this!

For a temporary fix, please replace the code of the Vallhorn driver (Hubitat UI -> Drivers code) with the last working version 3.9.0 from here: E2134.groovy. Then re-pair the devices.

1 Like

I have a bunch of Ikea zigbee CT bulbs in my fleet of smart bulbs.

I'll take a look at the drivers tonight.


That worked. Thank you very much for the fast turnaround with a fix. I can confirm that everything is working well with the 3.9.0 Valhorn driver

1 Like

The air sensor seems to be quite chatty. quite a lot of reports in the space of a few minutes.
Today it's the humidity that's toggling back and forth between 2 values.
Yesterday it was the temperature that was going up and down by 1 degree supposedly.

Any idea if this can be tweaked in any way? I don't believe that it will eat up flash space as only a limited amount of events will be stored, but if I'm going to use something like Hubigraphs to monitor my temperature and humidity then it that will get filled with a lot of data

I've noticed it's very chatty too. Mine's been running for 6+ months now, doesn't seem to be hurting anything so I haven't dug too much into trying to tweak anything.

It does indeed look chatty, but the values are changing, so.... I have Shelly devices that send info even if the value has not changed, now that's chatty :wink:

1 Like

I’ve set my device to “warning” logging to avoid seeing frequent value changes in the logs. However, this isn’t ideal. The IKEA Zigbee implementation, usually reliable, falls short with this device, failing to accurately translate datapoints from the Sensirion SEN54 sensor.

Two potential solutions exist for this issue:

  1. Set a minimum reporting interval (e.g., 1 minute) to limit data reports.
  2. Establish a minimum reporting threshold (e.g., 5 units) to report only significant changes.

I prefer the second method, but due to the “Single precision” / Float (0x39) data type for PM25 and VOC, I couldn’t set the thresholds. As a workaround, I used the first method with a 10-second interval, which could be increased.

For temperature and humidity, the device is set to report immediate changes with a 1℃ / 1%RH threshold. However, the sensor values fluctuate rapidly (e.g., 25℃ -> 26℃ -> 25℃ -> 26℃ -> …). Should probably use the same workaround as for PM25 and VOC, but I abhor workaround :slight_smile:

This is an excellent driver. Thank you.
I was wondering if I could make a request, could you change (or add) healthStatus (online/offline) to Presence status? It appears Hubitat has functions that use that setting - for example, the presence template in the dashboard app or presence in the notification app (I use it to let me know when a switch drops from my network)

1 Like

@vlad.shev, presence status at specific area have persons, carrying a mobile phone or Samsung presence sensor or other mobile tag.

The device online or offline status to the hub is presented in many community drivers with the healthStatus attribute.

It will be a better approach if Hubitat add the healthStatus attribute to the HE inbuilt boards.


For dashboards you can use the "Attribute" template with the "healthStatus" attribute.

For the in-built "Notifications" app, you are right, there is no solution as of right now. I believe you can raise a feature request for the Hubitat team to add support for the "HealthCheck" capability. This is an official Hubitat capability and I believe that it makes sense to be supported in the "Notifications" app.

I totally agree with this.

1 Like