Zigbee Lock User Code addition

I’m still working on it, but now my lock has completely stopped working with smart things. Haven’t even done anything different just stopped working 6 days ago. so peeved…

Any progress on this. Can I help work on it?

just use this smartapp works great

That’s for zwave. This thread is for zigbee locks. Should be able to use the same SmartApp once someone creates a working device handler for zigbee locks that includes setting codes.

you’re right… my bad … sorry

So I’m going to take a stab at writing this. Was looking for some information. Is there more detail on the “lock code” capability? I don’t see it in the documentation anymore. All I can find is this reference.

We’ve started taking a stab at this in our lab. Will report back once we see some progress. More difficult than i expected. Need to study the zigbee guide

So the code I have has no issues deleting or setting codes. Also it pulls the user and pin length settings from attributes on the lock. The problem I have is how to retrieve a pin. I am not sure if there is something different I need to do to retrieve data from a command versus an attribute. I am executing

zigbee.command(CLUSTER_DOORLOCK, DOORLOCK_CMD_USER_CODE_GET, "${zigbee.convertToHexString(codeNumber.toInteger(),2)}00")

     trace parse() --- description: catchall: 0104 0101 01 01 0140 00 4554 00 00 0000 0B 01 0681
     cmds: [st cmd 0x4554 1 257 6 {0300}, delay 200]

where codeNumber is the user slot number. The response returned is the same for all users no matter if a PIN is set or not (only the last digit is a 0 if I send an invalid user format). Unfortunately that data does not contain the set PIN so I don’t know how to retrieve it. As I have never worked with groovy or ZigBee before I’ve been fighting with a lot of trial and error.

Perhaps someone in the user community can point me to how to retrieve the data returned from a command.

1 Like

It’s not uncommon for locks not to return pin code data due to security reasons. If you look at the z wave lock implementation you’ll notice the same thing.

Well that would make sense. I’m trying my best to implement lock codes but as I don’t have documentation on that capability, I’m just guessing the inputs and outputs of the commands.

I would guess requestCode should return a code, so that is what I was trying to implement. Do you then have the DTH encrypt and store the pins somehow or just return that the function is not available?

Unfortunately it appears that I can’t even run the command to tell if a PIN is set or not. That at least would be something.

Edit: I’ve found that to get this to work an Attribute needs to be enabled. The Yale locks set this attribute to read only so it can’t be changed.

Actually what I would recommend to have a consistent performance across the DH types and compatibility with existing smart apps, copy the user Pin MGMT code from the z wave handler and just implement the pin code reporting configuration and pin code setting / deleting commands and you should be done. We have done this in our lab with @tpmanley help just haven’t finished it up yet but that would be simplest way forward with maximum reuse and compatibility.

Have you configured the lock reporting?

Depends on what needs to be reported. I’ll take a look at the PIN management code.

Everything that needs to be reported is done automatically (no binding needed). You just have to know how to parse the responses. I’ll work on that.

1 Like

I’m hoping to have a mostly working version by next week at the latest. Is there someone who can test this with a kwikset ZigBee lock? I can PM them with the code when I’m done.

I have finished my initial version of this DTH

Have you had any luck with your ZigBee DTH? @tpmanley @RBoy. This works for me but it is not perfect. Trying to make some enhancements and clean things up.

1 Like

Hey congrats and fabulous work, our DTH is still in progress, we’ve had to put it on backburner for a while due to other priorities but we want it get it done by EOY with additional features hopefully.

I just installed your DH on my zigbee Kwikset lock . It works great but there is one addition that I wish you could make. I noticed that my zwave lock reports user codes to CoRE but yours does not. The advantage is that i can program specific events in CoRE when a certain lock code is entered. As it is now with the zigbee lock I can only program events if that specific door is opened with anyone’s code. I like the zigbee locks better because for some reason they work more consistently with my network.

I do report the user code used as based on specification but it may be different than what you are expecting. Could you show me the CoRE Piston you are using?

Well i never actually finished the piston because i stalled out when i got to the user screen and all that it had there was the “none” option. I could back up and change to my zwave lock and i have a list of numbers on that page that i assume represent users even though the users and codes are not listed with the numbers. I never finished the piston with either one so it could be that neither one of them work. I started with
Basic Piston
Condition 1
Garage Man Door


Changes to



By user code (s)
Tap to set

When i press tap to set here the screen has no numbers to select from but it does when I use the z wave lock. I am using lock manager from ethayer along with his DH for zwave and your for zigbee. Also with the interaction function i have tried all three options there.