[Release] Generic Zigbee Drivers with Presence and Recovery

It will be included in the next release. :slight_smile: Thank you for the fingerprint!

2 Likes

My device is an Ikea Tradfri Outlet being used in Belgium.
Thx for all the work you are doing

Get Info

dev:4542020-07-25 11:43:47.641 infoCOPY AND PASTE THIS ROW TO THE DEVELOPER: fingerprint model:"TRADFRI control outlet", manufacturer:"IKEA of Sweden", profileId:"0104", endpointId:"01", inClusters:"0000,0003,0004,0005,0006,0008,1000,FC7C", outClusters:"0005,0019,0020,1000", application:"20"
dev:4542020-07-25 11:43:47.638 traceApplication: 20
dev:4542020-07-25 11:43:47.635 traceModel: TRADFRI control outlet
dev:4542020-07-25 11:43:47.632 traceManufacturer: IKEA of Sweden
dev:4542020-07-25 11:43:47.627 debugGetting info for Zigbee device...

@markus, since you live in China and has many devices, do you have experience with an wall thermostat like this or something similar?

Unfortunately not, I have nothing I could control with those in my home. They wouldn't be hard to write a driver for if I had one, but I don't have anything to connect them to.

A bit about my heating/cooling:
My heating and cooling is something that is not automated in a good way yet. When I moved in here late last year the multi-room AC and electric heaters were already installed. The AC is ducted but only has IR remotes (it's Haier though so I can probably connect a controller). The heaters use the X3D protocol and the bridge for that is not sold here. Even if it was, I'm not sure how easy it would be to connect to it locally. With that said, if I find a good Zigbee product for my Haier AC I will get that. For my heating I don't know yet.

My heating:
The ground floor has floor heating, no need for automatization.
Upstairs I have water radiators. There are 6 valves for 6 radiators, those valves are connected to 6 old fashion wall thermostats in every room, powered by 220V with a dry contact to control the valve.
image
I am looking for 6 smart affordable wall thermostats, powered on 220V + dry contact working on wifi or zigbee to integrate in HE. If it is zigbee, the repeaters of the devices has to be solid because I don't want to breakup my mesh network (Xiaomi, Ikea outlet)
Hard to find an affordable supported device since I need 6 of them...

Not sure about the “+ dry contact” but on my 220V baseboard heaters, I have changed to the Sinopé Zigbee thermostats. What I absolutely adore about those is that there is a community driver available that allows it to show the outside temperature, and you can now turn on and off the display via RM. It is really great! (They have a 3000W and a 4000W version)

https://www.amazon.ca/dp/B0785H4DDG/ref=cm_sw_em_r_mt_dp_L..iFb9P0271G

That said, it most likely won’t work for you since they don’t play well with Xiaomi. I had to put my Xiaomi sensors on a separate mesh as the thermostats would keep kicking them off the mesh.

1 Like

nope, no dry contact.

I guess I need a wifi solution, Shelly told me they are working on it, apparently it is not easy to find something that fits...

1 Like

I like the idea of presence SO I decided to try your driver with one of my CentraLite 3210-L
I was using the generic driver.
fingerprint model:"3210-L", manufacturer:"CentraLite", profileId:"0104", endpointId:"01", inClusters:"0000,0003,0004,0005,0006,0702,0B04,0B05,FC03", outClusters:"0019"

Company: CentraLite
Model: 3210-L
Country: USA

Thanks!

1 Like

I also posted this fingerprint above, post 7 or so. You will lose power reporting unless Markus decides to add it at some point.

1 Like

I saw your post after I posted. I see that a few things are not reported in Markus' driver:

  • ACFrequency : 60
  • power : 0
  • voltage : 122

I'm planning to use frequency and voltage since I have a backup generator and I want to keep an eye on it's output. I may just dedicate a 3210-L to just monitoring.

1 Like

Hi Markus, great job on these drivers. My samsung 2018 outlet/socket looks like fingerprint needs adding, whenever you have a free moment, no hurry, using HE driver for now.

dev:55212020-08-03 05:27:52.934 pm infoCOPY AND PASTE THIS ROW TO THE DEVELOPER: fingerprint model:"outlet", manufacturer:"Samjin", profileId:"0104", endpointId:"01", inClusters:"0000,0003,0004,0005,0006,0009,0B04,0B05", outClusters:"0003,0019", application:"11"

1 Like

@markus Hello. Do you have a generic zigbee driver for Iris V2 motion sensors?

I'd need to find a device using the same clusters as the 3210-L and the Samsung one. They are the standard ones so shouldn't be too hard, but I don't have access to the same gear here as you guys. Does anyone have any Tuya-based Zigbee Plugs with power reporting? I'd love to see the fingerprint of one to know if Tuya makes them according to standard or not.

Added for next release, the fingerprint is not needed for actually running the driver though. It is only used by the system to identify which driver to load for a new device. I also use it to know which clusters a device is using.

I don't know if my Sonoff Zigbee Motion sensor driver would work, but you could try that one. There's basically two "standard" ways of reporting motion, that one uses one of them. The Xiaomi/Aqara Motion sensor is using the other way. The issue is that the power reporting and some other things are very different with the Xiaomi/Aqara gear.

1 Like

I loaded the app, and I am getting "INCOMPLETE - DO NOT SUBMIT THIS - TRY AGAIN: fingerprint model:"null", manufacturer:"CentraLite", profileId:"0104", endpointId:"01", inClusters:"null", outClusters:"null" what does this mean?

COPY AND PASTE THIS ROW TO THE DEVELOPER: fingerprint model:"TRADFRI control outlet", manufacturer:"IKEA of Sweden", profileId:"0104", endpointId:"01", inClusters:"0000,0003,0004,0005,0006,0008,1000,FC7C", outClusters:"0005,0019,0020,1000", application:"20"

Just been giving the generic dimmer driver a whirl with a Tradfri lamp. It all appears to work, save for the ping() function, which doesn't seem to generate anything at all in the debug logs.

dev:182020-08-05 09:24:54.572 infoUnhandled Event IGNORE THIS - description:catchall: 0104 0008 01 01 0040 00 6774 00 00 0000 0B 01 0400 | msgMap:[raw:catchall: 0104 0008 01 01 0040 00 6774 00 00 0000 0B 01 0400, profileId:0104, clusterId:0008, clusterInt:8, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:6774, isClusterSpecific:false, isManufacturerSpecific:false, manufacturerId:0000, command:0B, direction:01, data:[04, 00]]
dev:182020-08-05 09:24:54.501 debugsendZigbeeCommands(cmd=[he cmd 0x6774 0x01 0x0008 0x04 {02 FFFF}, delay 2000])
dev:182020-08-05 09:24:54.497 debugsetLevel(level: 1, adjusted level: 1)
dev:182020-08-05 09:24:54.493 debugdeviceMaxLevel() = 97
dev:182020-08-05 09:24:54.490 debugdeviceMinLevel() = 1
dev:182020-08-05 09:24:54.486 debugsetLevel(level: 1)
dev:182020-08-05 09:24:50.476 infoUnhandled Event IGNORE THIS - description:catchall: 0104 0008 01 01 0040 00 6774 00 00 0000 0B 01 0400 | msgMap:[raw:catchall: 0104 0008 01 01 0040 00 6774 00 00 0000 0B 01 0400, profileId:0104, clusterId:0008, clusterInt:8, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:6774, isClusterSpecific:false, isManufacturerSpecific:false, manufacturerId:0000, command:0B, direction:01, data:[04, 00]]
dev:182020-08-05 09:24:50.400 debugsendZigbeeCommands(cmd=[he cmd 0x6774 0x01 0x0008 0x04 {1E FFFF}, delay 2000])
dev:182020-08-05 09:24:50.396 debugsetLevel(level: 12, adjusted level: 12)
dev:182020-08-05 09:24:50.392 debugdeviceMaxLevel() = 97
dev:182020-08-05 09:24:50.389 debugdeviceMinLevel() = 1
dev:182020-08-05 09:24:50.386 debugsetLevel(level: 12)
dev:182020-08-05 09:24:46.272 infoUnhandled Event IGNORE THIS - description:catchall: 0104 0008 01 01 0040 00 6774 00 00 0000 0B 01 0400 | msgMap:[raw:catchall: 0104 0008 01 01 0040 00 6774 00 00 0000 0B 01 0400, profileId:0104, clusterId:0008, clusterInt:8, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:6774, isClusterSpecific:false, isManufacturerSpecific:false, manufacturerId:0000, command:0B, direction:01, data:[04, 00]]
dev:182020-08-05 09:24:46.191 debugsendZigbeeCommands(cmd=[he cmd 0x6774 0x01 0x0008 0x04 {02 FFFF}, delay 2000])
dev:182020-08-05 09:24:46.187 debugsetLevel(level: 1, adjusted level: 1)
dev:182020-08-05 09:24:46.183 debugdeviceMaxLevel() = 97
dev:182020-08-05 09:24:46.180 debugdeviceMinLevel() = 1
dev:182020-08-05 09:24:46.176 debugsetLevel(level: 1)
dev:182020-08-05 09:22:40.280 debugBIND RESPONSE CLUSTER EVENT
dev:182020-08-05 09:22:40.249 debugBIND RESPONSE CLUSTER EVENT
dev:182020-08-05 09:22:40.246 debugdirty model = TRADFRI bulb E14 W op/ch 400lm, clean model=TRADFRI bulb E14 W opch 400lm
dev:182020-08-05 09:22:40.240 debugModel Name Received
dev:182020-08-05 09:22:40.234 infoModel Name Received - description:read attr - raw: 6774010000460500421E545241444652492062756C62204531342057206F702F6368203430306C6D, dni: 6774, endpoint: 01, cluster: 0000, size: 46, attrId: 0005, encoding: 42, command: 01, value: 1E545241444652492062756C62204531342057206F702F6368203430306C6D | parseMap:[raw:6774010000460500421E545241444652492062756C62204531342057206F702F6368203430306C6D, dni:6774, endpoint:01, cluster:0000, size:46, attrId:0005, encoding:42, command:01, value:TRADFRI bulb E14 W op/ch 400lm, clusterInt:0, attrInt:5]
dev:182020-08-05 09:22:40.225 debugdeviceMinLevel() = 1
dev:182020-08-05 09:22:40.206 debugdeviceMaxLevel() = 97
dev:182020-08-05 09:22:40.202 infoDimmer - description:read attr - raw: 67740100080A00002005, dni: 6774, endpoint: 01, cluster: 0008, size: 0A, attrId: 0000, encoding: 20, command: 01, value: 05 | parseMap:[raw:67740100080A00002005, dni:6774, endpoint:01, cluster:0008, size:0A, attrId:0000, encoding:20, command:01, value:05, clusterInt:8, attrInt:0, valueParsed:5]
dev:182020-08-05 09:22:40.174 debugsendOnOffEvent(endpoint=1, state=true)
dev:182020-08-05 09:22:40.169 infoOn/Off Button press - description:read attr - raw: 67740100060A00001001, dni: 6774, endpoint: 01, cluster: 0006, size: 0A, attrId: 0000, encoding: 10, command: 01, value: 01 | parseMap:[raw:67740100060A00001001, dni:6774, endpoint:01, cluster:0006, size:0A, attrId:0000, encoding:10, command:01, value:01, clusterInt:6, attrInt:0, valueParsed:true]
dev:182020-08-05 09:22:39.984 debugsendZigbeeCommands(cmd=[he raw 0x6774 1 0x01 0x0000 {10 00 00 05 00}, delay 2000, he raw 0x6774 1 0x01 0x0006 {10 00 00 00 00}, delay 2000, he raw 0x6774 1 0x01 0x0008 {10 00 00 00 00}, delay 2000, zdo bind 6774 0x01 0x01 0x0006 {000B3CFFFEFAE2E3} {}, delay 200, zdo bind 6774 0x01 0x01 0x0008 {000B3CFFFEFAE2E3} {}, delay 200, zdo send 6774 0x01 0x01, delay 200])
dev:182020-08-05 09:22:39.976 debugrefresh cmd: [he raw 0x6774 1 0x01 0x0000 {10 00 00 05 00}, delay 2000, he raw 0x6774 1 0x01 0x0006 {10 00 00 00 00}, delay 2000, he raw 0x6774 1 0x01 0x0008 {10 00 00 00 00}, delay 2000, zdo bind 6774 0x01 0x01 0x0006 {000B3CFFFEFAE2E3} {}, delay 200, zdo bind 6774 0x01 0x01 0x0008 {000B3CFFFEFAE2E3} {}, delay 200, zdo send 6774 0x01 0x01, delay 200]
dev:182020-08-05 09:22:39.909 debugManufacturer Name Received
dev:182020-08-05 09:22:39.894 debugdirty model = TRADFRI bulb E14 W opch 400lm, clean model=TRADFRI bulb E14 W opch 400lm
dev:182020-08-05 09:22:39.889 infoManufacturer Name Received - description:read attr - raw: 6774010000260400420E494B4541206F662053776564656E, dni: 6774, endpoint: 01, cluster: 0000, size: 26, attrId: 0004, encoding: 42, command: 01, value: 0E494B4541206F662053776564656E | parseMap:[raw:6774010000260400420E494B4541206F662053776564656E, dni:6774, endpoint:01, cluster:0000, size:26, attrId:0004, encoding:42, command:01, value:IKEA of Sweden, clusterInt:0, attrInt:4]
dev:182020-08-05 09:22:39.801 debugsendZigbeeCommands(cmd=[he raw 0x6774 1 0x01 0x0000 {10 00 00 04 00}, delay 2000])
dev:182020-08-05 09:22:39.790 debugrecoveryMode: Slow
dev:182020-08-05 09:22:39.731 infoRecovery feature ENABLED
dev:182020-08-05 09:22:39.725 debugstartCheckEventInterval()
dev:182020-08-05 09:22:39.636 infogetDriverVersion() = v0.8.1.0801
dev:182020-08-05 09:22:39.632 debugrefresh() model='TRADFRI bulb E14 W opch 400lm'
dev:182020-08-05 09:22:39.623 infoupdated()
dev:182020-08-05 09:22:29.830 infoDimmer - description:read attr - raw: 67740100080A00002005, dni: 6774, endpoint: 01, cluster: 0008, size: 0A, attrId: 0000, encoding: 20, command: 01, value: 05 | parseMap:[raw:67740100080A00002005, dni:6774, endpoint:01, cluster:0008, size:0A, attrId:0000, encoding:20, command:01, value:05, clusterInt:8, attrInt:0, valueParsed:5]
dev:182020-08-05 09:22:29.823 infoModel Name Received - description:read attr - raw: 6774010000460500421E545241444652492062756C62204531342057206F702F6368203430306C6D, dni: 6774, endpoint: 01, cluster: 0000, size: 46, attrId: 0005, encoding: 42, command: 01, value: 1E545241444652492062756C62204531342057206F702F6368203430306C6D | parseMap:[raw:6774010000460500421E545241444652492062756C62204531342057206F702F6368203430306C6D, dni:6774, endpoint:01, cluster:0000, size:46, attrId:0005, encoding:42, command:01, value:TRADFRI bulb E14 W op/ch 400lm, clusterInt:0, attrInt:5]
dev:182020-08-05 09:22:29.801 infoOn/Off Button press - description:read attr - raw: 67740100060A00001001, dni: 6774, endpoint: 01, cluster: 0006, size: 0A, attrId: 0000, encoding: 10, command: 01, value: 01 | parseMap:[raw:67740100060A00001001, dni:6774, endpoint:01, cluster:0006, size:0A, attrId:0000, encoding:10, command:01, value:01, clusterInt:6, attrInt:0, valueParsed:true]
dev:182020-08-05 09:22:29.712 infoManufacturer Name Received - description:read attr - raw: 6774010000260400420E494B4541206F662053776564656E, dni: 6774, endpoint: 01, cluster: 0000, size: 26, attrId: 0004, encoding: 42, command: 01, value: 0E494B4541206F662053776564656E | parseMap:[raw:6774010000260400420E494B4541206F662053776564656E, dni:6774, endpoint:01, cluster:0000, size:26, attrId:0004, encoding:42, command:01, value:IKEA of Sweden, clusterInt:0, attrInt:4]
dev:182020-08-05 09:22:29.518 infoRecovery feature ENABLED
dev:182020-08-05 09:22:29.420 infogetDriverVersion() = v0.8.1.0801
dev:182020-08-05 09:22:29.412 infoupdated()
dev:182020-08-05 09:22:04.820 infoON/OFF CATCHALL CLUSTER EVENT - description:catchall: 0104 0006 01 01 0040 00 6774 00 00 0000 0B 01 0100 | parseMap:[raw:catchall: 0104 0006 01 01 0040 00 6774 00 00 0000 0B 01 0100, profileId:0104, clusterId:0006, clusterInt:6, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:6774, isClusterSpecific:false, isManufacturerSpecific:false, manufacturerId:0000, command:0B, direction:01, data:[01, 00]]
dev:182020-08-05 09:22:03.016 infoON/OFF CATCHALL CLUSTER EVENT - description:catchall: 0104 0006 01 01 0040 00 6774 00 00 0000 0B 01 0000 | parseMap:[raw:catchall: 0104 0006 01 01 0040 00 6774 00 00 0000 0B 01 0000, profileId:0104, clusterId:0006, clusterInt:6, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:6774, isClusterSpecific:false, isManufacturerSpecific:false, manufacturerId:0000, command:0B, direction:01, data:[00, 00]]
dev:182020-08-05 09:21:50.276 infoUnhandled Event IGNORE THIS - description:catchall: 0104 0008 01 01 0040 00 6774 00 00 0000 0B 01 0400 | msgMap:[raw:catchall: 0104 0008 01 01 0040 00 6774 00 00 0000 0B 01 0400, profileId:0104, clusterId:0008, clusterInt:8, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:6774, isClusterSpecific:false, isManufacturerSpecific:false, manufacturerId:0000, command:0B, direction:01, data:[04, 00]]
dev:182020-08-05 09:21:45.587 infoUnhandled Event IGNORE THIS - description:catchall: 0104 0008 01 01 0040 00 6774 00 00 0000 0B 01 0400 | msgMap:[raw:catchall: 0104 0008 01 01 0040 00 6774 00 00 0000 0B 01 0400, profileId:0104, clusterId:0008, clusterInt:8, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:6774, isClusterSpecific:false, isManufacturerSpecific:false, manufacturerId:0000, command:0B, direction:01, data:[04, 00]]
dev:182020-08-05 09:21:35.118 infoUnhandled Event IGNORE THIS - description:catchall: 0104 0008 01 01 0040 00 6774 00 00 0000 0B 01 0400 | msgMap:[raw:catchall: 0104 0008 01 01 0040 00 6774 00 00 0000 0B 01 0400, profileId:0104, clusterId:0008, clusterInt:8, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:6774, isClusterSpecific:false, isManufacturerSpecific:false, manufacturerId:0000, command:0B, direction:01, data:[04, 00]]
dev:182020-08-05 09:21:29.001 infoUnhandled Event IGNORE THIS - description:catchall: 0104 0008 01 01 0040 00 6774 00 00 0000 0B 01 0400 | msgMap:[raw:catchall: 0104 0008 01 01 0040 00 6774 00 00 0000 0B 01 0400, profileId:0104, clusterId:0008, clusterInt:8, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:6774, isClusterSpecific:false, isManufacturerSpecific:false, manufacturerId:0000, command:0B, direction:01, data:[04, 00]]
dev:182020-08-05 09:21:24.172 infoUnhandled Event IGNORE THIS - description:catchall: 0104 0008 01 01 0040 00 6774 00 00 0000 0B 01 0400 | msgMap:[raw:catchall: 0104 0008 01 01 0040 00 6774 00 00 0000 0B 01 0400, profileId:0104, clusterId:0008, clusterInt:8, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:6774, isClusterSpecific:false, isManufacturerSpecific:false, manufacturerId:0000, command:0B, direction:01, data:[04, 00]]
dev:182020-08-05 09:21:19.238 infoON/OFF CATCHALL CLUSTER EVENT - description:catchall: 0104 0006 01 01 0040 00 6774 00 00 0000 0B 01 0100 | parseMap:[raw:catchall: 0104 0006 01 01 0040 00 6774 00 00 0000 0B 01 0100, profileId:0104, clusterId:0006, clusterInt:6, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:6774, isClusterSpecific:false, isManufacturerSpecific:false, manufacturerId:0000, command:0B, direction:01, data:[01, 00]]
dev:182020-08-05 09:21:16.878 infoON/OFF CATCHALL CLUSTER EVENT - description:catchall: 0104 0006 01 01 0040 00 6774 00 00 0000 0B 01 0000 | parseMap:[raw:catchall: 0104 0006 01 01 0040 00 6774 00 00 0000 0B 01 0000, profileId:0104, clusterId:0006, clusterInt:6, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:6774, isClusterSpecific:false, isManufacturerSpecific:false, manufacturerId:0000, command:0B, direction:01, data:[00, 00]]

I don't know if any of that is useful given that there's nothing relevant to my message there, but I promise I was pressing the ping button! :wink:

COPY AND PASTE THIS ROW TO THE DEVELOPER: fingerprint model:"3320-L", manufacturer:"CentraLite", profileId:"0104", endpointId:"01", inClusters:"0000,0001,0003,0020,0402,0500,0B05", outClusters:"0019"

Is the enablePing setting enabled? Otherwise that command does nothing. In the next version it will say so in the logs if activated manually while still disabled.

Thank you, I'll add it to the list. :slight_smile:

Yes, just tried it again and it worked on Lamp 1, then pressed a second time and nothing. Is there a timeout on the ping function?

dev:182020-08-06 09:42:46.213 infoManufacturer Name Received - description:read attr - raw: 6774010000260400420E494B4541206F662053776564656E, dni: 6774, endpoint: 01, cluster: 0000, size: 26, attrId: 0004, encoding: 42, command: 01, value: 0E494B4541206F662053776564656E | parseMap:[raw:6774010000260400420E494B4541206F662053776564656E, dni:6774, endpoint:01, cluster:0000, size:26, attrId:0004, encoding:42, command:01, value:IKEA of Sweden, clusterInt:0, attrInt:4]

Tried Lamp 2 and got nothing in the log.

Tried Lamp 3 and got all this!

dev:162020-08-06 09:44:57.848 infoModel Name Received - description:read attr - raw: 9E05010000460500421E545241444652492062756C62204531342057206F702F6368203430306C6D, dni: 9E05, endpoint: 01, cluster: 0000, size: 46, attrId: 0005, encoding: 42, command: 01, value: 1E545241444652492062756C62204531342057206F702F6368203430306C6D | parseMap:[raw:9E05010000460500421E545241444652492062756C62204531342057206F702F6368203430306C6D, dni:9E05, endpoint:01, cluster:0000, size:46, attrId:0005, encoding:42, command:01, value:TRADFRI bulb E14 W op/ch 400lm, clusterInt:0, attrInt:5]
dev:162020-08-06 09:44:57.711 infoManufacturer Name Received - description:read attr - raw: 9E05010000260400420E494B4541206F662053776564656E, dni: 9E05, endpoint: 01, cluster: 0000, size: 26, attrId: 0004, encoding: 42, command: 01, value: 0E494B4541206F662053776564656E | parseMap:[raw:9E05010000260400420E494B4541206F662053776564656E, dni:9E05, endpoint:01, cluster:0000, size:26, attrId:0004, encoding:42, command:01, value:IKEA of Sweden, clusterInt:0, attrInt:4]
dev:162020-08-06 09:44:57.588 infoping()
1 Like

Yes, maximum once every 25 minutes, and that is if there has not been any other traffic coming in during those 25 minutes. I guess I should add some more log messages so that it made more clear :stuck_out_tongue:

EDIT: The Beta version of the three drivers that implement ping in that way now has additional log messages.

1 Like