[RELEASE] IKEA Zigbee drivers

Hey Dan, I bought a handful of the Inspelning's this afternoon. They did not stock the Tretakts (online only) so I spent the few extra dollars and probably with it anyway. I installed your driver and I must say it is excellent, you do quality work! I can also run my Zigbee Monitor Driver on it and get children and neighbours if I need to know more, so that is a plus.

Thanks!

4 Likes

That is a kinda sexy little plug.

3 Likes

Today one of my IKEA Parasoll went offline. The battery stated 100, health status was offline and powerSource unknown.

No chance to get the sensor back online.

I took out the battery and put the same one in again. The battery dropped to 48, healthStatus changed to online and the sensor works for the moment as expected.

Amazon basics are currently used with the Parasoll.

Then I tried same with a sensor which works fine and healthStatus is online. I took out the battery and put the same one back in again. The battery dropped from 100 to 97.

all others are stuck at 100.

1 Like

Oh, stop it! (... dont stop) :blush:

I stole your idea and put it into the IKEA repeater driver, and I'm not ashamed, not even for a bit :-))

I've read some reports that Parasoll is draining the battery really fast if it encounters some network problems and can't reach the hub. I was really lucky to catch this very situation while I was snooping with a zigbee sniffer and one of my Parasolls was relentlessly spamming its repeater with some low level messages; a battery reset quicly fixed it, no need to re-pair it. I hope IKEA will come up with a firmware fix soon.

I'll check to see if there are any problems with the battery reporting though.

4 Likes

Thanks for all your hard work. And, your drivers are really quality work.

4 Likes

Hi,

I'm trying to use the ikea remote (IKEA Styrbar Remote Control N2 (E2002)) to sync ikea light color bulbs (RADFRI bulb E26 CWS globe 800lm). I have 3 bulbs with zigbee group set. When I press next or previous buttons on the remote, two of the bulbs change to the same color but the third one changes to a completely differente color than the other two. One and off buttons work perfectly for the three bulbs. Could anyone tell me what to do to sync the colors? Thanks in advance!

1 Like

I believe the next/previous buttons just send "move to next/previous scene" commands, but the bulbs are not all on the same current scene.

If this is the case, you can temporarily remove the 3rd bulb from the group, advance the current scene in the first two bulbs to the correct one (this will take some trial and error), then rejoin the 3rd bulb back.

I might be totally wrong though :slight_smile:

I did exactly that by cutting the electricity on the problematic device and advanced the other two to match the one that was diconnected and everything works fine now. Thanks!

1 Like

The power of ikea inspelning often fails.
스크린샷 2024-12-11 232506
스크린샷 2024-12-11 235043

3527.00
I measured it again using a different instrument.
스크린샷 2024-12-11 234436

This is not a symptom on all devices.
I've seen this for a period of time on two devices.

This is due to the fact that there is a problem with the value sent from the ikea product by the observers inside the ST.

This device is back to normal results as shown in the picture below.
image

I don't quite understand what is the problem, but I have a bad cold so my brain might not run at 100% atm :slight_smile:

Does it show 3527.00W when it should show 352.70W?

INSPLENING has a weird twist: when power is below 2000W it reports the power number as it is. When the power goes above 2000W, it send the power number divided by 10.

The first message that reports power above 2000W (and only this first message alone) also includes a marker saying that the multiplier changed to x10; the driver stores this value and does the multiplying x10 for all subsequent messages. It does the same thing (but with the multiplier back at x1) when the power goes below 2000W (e.g. from 2100W to 1900W).

The problem with this weird mechanism is that if the messages containing the multiplier change are lost, the driver is using the wrong multiplier to calculate power values (10 times bigger or 10 times smaller). The "Refresh" command is retrieving the power multiplier from the device.

1 Like

This device makes an error regardless of power.
And this is temporary.
It works fine when you remove it for a while and reconnect it.
If you measure the power with another device in the same situation, it shows a normal 300w range figure.

Hi all,

I have look a punt and bought the TRETAKT socket and remote.

No luck with remote driver.

Any pointers?

1 Like

Remote is Rodret, there's a driver for it; if you use HPM, select the "Modify" option to add/install the correct driver.

Can you be more specific on what you tried and what failed?

1 Like

Legend. Works! ThanQ

1 Like

I'm trying to pair a Rodret, and keep getting stuck at Found a Zigbee device, initializing...

I've tried regular Zigbee pairing, avoiding 3.0 repeaters and with exchange keys in clear. I'm not sure what else I can try on this.

1 Like

You can try the double-luck voodoo trick:

If that fails, you can try to power off the hub (Setting -> Shutdown), wait for the red LED on the hub (shutdown complete), remove the USB power cable, wait 30 seconds, re-insert the USB cable and wait until the hub starts up (green LED). This will reset the Zigbee circuit/board inside the hub, maybe it got stuck in a weird state.

Also keep in mind that all IKEA battery-powered devices need to be paired really close (~5cm) to the hub, otherwise they will complete the pairing, but immediately fall off the network (buttons won't work).

Hope this helps!

1 Like

That worked! Thank you!

I know the remotes need to be close, I've been using the round remotes for a while now... but this thing was sitting on the hub and not pairing...

2 Likes

Released version 5.3.0 with the following small changes:

Added

  • Add driver for Gewiss 2-channel Contact Interface 230V (GWA1502)

Fixed

  • Small fixes for the new UI in Platform Update 2.4.0

Have fun!

3 Likes

Hey there,
Thanks for building these drivers! I've started off with a few of the LYWSD03MMC (Xiaomi Mi Temperature & Humidity Monitor 2) temperature sensors.

Your driver works with this firmware github[.com]/devbis/z03mmc just fine ... but there is a newer fork of the firmware here:
github[.com]/pvvx/ZigbeeTLc (this is the same person who has been doing the BLE custom firmware for these devices).

[I guess I'm too new here to post links!]

I was wondering if you might be able to update the driver to work with pvvx's firmware, it seems like that code is being more actively updated and also might be a bit more efficient with battery power management? It looks like (from a very quick glance) that there are differences in the at least some of the cluster/attributes in the different versions of the firmware.

Edited to add...
I took a swing at this myself and I think I have it working. I have a sensor reporting in as expected, and the custom functions (smiley, temperature offsets) work as expected. The "display off" function seems to just freeze the display instead of blanking it. I'm not sure if that is a firmware bug or not? I've also added the Measurement Interval setting that this version of firmware supports -- so it is possible to have the sensor read the temperature less often, which is supposed to save some battery life.

This is my first time doing anything for hubitat and in groovy, so edits are appreciated! thanks!

Here's the diff from 5.3.0:

< @Field static final String DRIVER_NAME = 'Xiaomi Mi Temperature and Humidity Monitor 2 (LYWSD03MMC) pvvx'
< @Field static final String DRIVER_VERSION = '5.3.0.1'
---
> @Field static final String DRIVER_NAME = 'Xiaomi Mi Temperature and Humidity Monitor 2 (LYWSD03MMC)'
> @Field static final String DRIVER_VERSION = '5.3.0'
36c36
<         fingerprint profileId:'0104', endpointId:'01', inClusters:'0000,0001,0003,0020,0204,0402,0405', outClusters:'0019', model:'LYWSD03MMC-z', manufacturer:'Xiaomi', controllerType:'ZGB' // Firmware: Unknown
---
>         fingerprint profileId:'0104', endpointId:'01', inClusters:'0000,0003,0001,0405,0402,0204', outClusters:'0019', model:'LYWSD03MMC', manufacturer:'Xiaomi', controllerType:'ZGB' // Firmware: Unknown
78,83d77
<         input (
<             name:'measurementInterval', type:'number', title:'Measurement Interval', required:true,
<             description:'Measurement interval (range 3 - 255 seconds, default 10 seconds)',
<             range:'3..255',
<             defaultValue: 10
<         )
136c130
<     cmds += zigbee.writeAttribute(0x0204, 0x0100, DataType.INT16, temperatureDelta)
---
>     cmds += zigbee.writeAttribute(0x0402, 0x0010, DataType.INT16, temperatureDelta)
144c138
<     cmds += zigbee.writeAttribute(0x0204, 0x0101, DataType.INT16, humidityDelta)
---
>     cmds += zigbee.writeAttribute(0x0405, 0x0010, DataType.INT16, humidityDelta)
151c145
<     cmds += zigbee.writeAttribute(0x0204, 0x0106, DataType.ENUM8, enableDisplay ? 0x00 : 0x01)
---
>     cmds += zigbee.writeAttribute(0x0204, 0x0011, DataType.BOOLEAN, enableDisplay ? 0x01 : 0x00)
158,168c152
<     cmds += zigbee.writeAttribute(0x0204, 0x0002, DataType.ENUM8, showSmiley ? 0x00 : 0x01)
< 
<     if (measurementInterval == null) {
<         measurementInterval = 10
<         device.updateSetting 'measurementInterval', [value:measurementInterval, type:'number']
<     }
<     log_info "ߛ️ measurementInterval = ${measurementInterval}"
<     Integer measurementInterval = new BigDecimal(measurementInterval).intValue()
<     cmds += zigbee.writeAttribute(0x0204, 0x0107, DataType.UINT8, measurementInterval)
< 
< 
---
>     cmds += zigbee.writeAttribute(0x0204, 0x0010, DataType.BOOLEAN, showSmiley ? 0x01 : 0x00)
285,289c269,272
<     cmds += zigbee.readAttribute(0x0204, 0x0100) // TemperatureCalibration
<     cmds += zigbee.readAttribute(0x0204, 0x0101) // HumidityCalibration
<     cmds += zigbee.readAttribute(0x0204, 0x0106) // EnableDisplay
<     cmds += zigbee.readAttribute(0x0204, 0x0002) // ShowSmiley
<     cmds += zigbee.readAttribute(0x0204, 0x0107) // MeasurementInterval
---
>     cmds += zigbee.readAttribute(0x0402, 0x0010) // TemperatureCalibration
>     cmds += zigbee.readAttribute(0x0405, 0x0010) // HumidityCalibration
>     cmds += zigbee.readAttribute(0x0204, 0x0011) // EnableDisplay
>     cmds += zigbee.readAttribute(0x0204, 0x0010) // ShowSmiley
474c457
<         case { contains it, [clusterInt:0x0204, commandInt:0x01, attrInt:0x0100] }:
---
>         case { contains it, [clusterInt:0x0402, commandInt:0x01, attrInt:0x0010] }:
481c464
<         case { contains it, [clusterInt:0x0204, commandInt:0x01, attrInt:0x0101] }:
---
>         case { contains it, [clusterInt:0x0405, commandInt:0x01, attrInt:0x0010] }:
488,489c471,472
<         case { contains it, [clusterInt:0x0204, commandInt:0x01, attrInt:0x00106] }:
<             enableDisplay = msg.value == '00'
---
>         case { contains it, [clusterInt:0x0204, commandInt:0x01, attrInt:0x0011] }:
>             enableDisplay = msg.value == '01'
495,496c478,479
<         case { contains it, [clusterInt:0x0204, commandInt:0x01, attrInt:0x0002] }:
<             showSmiley = msg.value == '00'
---
>         case { contains it, [clusterInt:0x0204, commandInt:0x01, attrInt:0x0010] }:
>             showSmiley = msg.value == '01'
500,506d482
< 
<         // Read Attributes: MeasurementInterval
<         case { contains it, [clusterInt:0x0204, commandInt:0x01, attrInt:0x0107] }:
<             device.updateSetting 'measurementInterval', [value:measurementInterval, type:'number']
<             utils_processedZclMessage 'Read Attributes Response', "MeasurementInterval=${msg.value} (${measurementInterval})"
<             return
< 
1 Like

Perfect! Thank you for taking the time to improve the existing code.

I'll add your code in the next release. If there are not overlapping cluster attributes, I'll just write both when preferences are saved, so driver will work with both firmwares.

Unfortunately I don't have any spare devices, so I cannot test it.