[RELEASE] Enhanced ZigBee Keypad Device Handler - Centralite, UEI, IRIS, Xfinity, Scout

@ToddS I think the issue is that the default options for the keypad when the DH is setup are not valid to be saved. I removed all of the decimal points and was able to save everything without issue.


Yeah it looks like a bug in the ST Android mobile app, it should not be using a decimal point or even allow the user to enter a decimal . (the default values don’t contain decimal points but the ST Android app seems to be adding it by itself)

You should report it to ST support that the ST Android Classic app doesn’t honor honor the input type number in a DTH preferences and instead adds a decimal to the default integer value, which then leads the page throws an error while trying to save it.

EDIT: In your report to ST support reference ticket #595080 so hopefully they can prioritize it based on demand (this is a regression bug)

@maddie I found out that my problem was a webcore piston messing up my setup. I paused it and everything is working as it should be. Thank you for your reply.

1 Like

Will panic mode works?

If your question is does the DTH report (and display) when the Panic button on a supported keypad is pressed, yes, the DTH does that. It is reported as a button pressed event (button no 1).
You need a SmartApp that makes use of that button pressed event to do something with it (like trigger an alarm etc).

1 Like

Enhanced ZigBee Keypad Lock - Version 01.03.01

  • Added support for AA Alkaline and Rechargeable (NiMH/NiCd) batteries for UEI Keypads, select the correct battery type in the device preferences page for accurate battery level reporting
  • Optimized single beep for UEI Keypads

The UEI/XHK1 keypads use 4 AA batteries and last about 3-8 times longer than the other Keypads which use 2 CR123A batteries.

Real-time Updates With SmartLocks

TIP: While this device handler is compatible with SmartLocks, if you would like to see real time updates to the dashboard in Smart Locks (locking, unlock etc), change the name of the device handler in metadata section around line 62 from

name: “Enhanced ZigBee Keypad Lock”


name: “ZigBee Lock”

Save and Publish -> viola, real time updates in SmartLocks

1 Like

Hey @RBoy, @maddie, I’m trying to figure out some odd behavior here with the Iris CentraLite 3405-X keypad and the current status it displays.

I’m currently using the @RBoy Keypad DTH and the v07.07.06 Lock User Manager app. I’m using the app in a manner to allow for special keypad users at 4 digits while allowing the external locks to have more than 4 digits - this part is all working fine. In the app I have the Manage Users -> [keypad users] -> Custom actions -> Keypad Unlock actions -> Control SHM/ADT using keypad option enabled. I also have the General Settings -> Lock/unlock actions -> [keypad device] -> Keypad Unlock Actions -> Disarm Smart Home Monitor option enabled and the inverse Arm Smart Home Monitor to Away enabled on the Lock actions. On the keypad, when I enter the code and do an Off (Disarm), Partial (Arm-stay), or On (Arm-Away), the SHM transitions and the Iris status light is green when SHM is Disarmed and red when Armed. So far so good.

The issue is when the SHM transitions either through a manual state change in the ST app or by a phrase (Good Night!, Goodbye!, I’m Back!, etc.) the keypad doesn’t update to show the current status and it just stays in whatever mode it was last put into. So, for instance, I execute Goodbye! and SHM transitions to Armed-Away but the keypad still shows as Green / Disarmed.

I attempted to resolve this by having the various phrases execute a lock on the keypad (just like it does on the door locks) but that doesn’t seem to do anything.

In the IDE logging, when I do say a manual transaction in the ST app from Armed-Away to Disarmed, no events are written to the keypad device’s log. But, when I do a Disarm from the keypad, the SHM Disarms and I see "Sending acknowledgeArmRequest(0) " and then “Sending status to device, Arm mode: disarmed” messages in the device log.

Is there something off here or am I missing something?

That is expected behavior. DTH’s by ST’s design cannot subscribe to events (for example changing of SHM states). Hence when you manually change the SHM state the DTH doesn’t know about it and consequently it cannot change the keypad current state. It’s upto the apps (SHM) to update the keypad state.

Apps like SHM Delay on the other hand subscribe to the SHM state and update the keypad state when they detect a change. I can log this change request for LUM but the with an unlimited number of custom use actions it may be impractical to implement this.

An easy fix for this would be create a CoRE/WebCoRE piston that monitors the state of SHM and updates the keypad state with SHM.

Thanks Maddie. I thought I had read that somewhere but in this Community soup I must have lost it.

One thing I don’t quite understand is that if I have the LUM issue lock to the keypad, I do see a “Executing lock() for device [name of keypad]” but the visible state of the keypad doesn’t change. Could another alternate solution be to simply rev the DTH to update its status when it gets a lock()?

I really like the LUM app so I would love to submit an RFE to propagate status to the managed devices but I agree there is some complexity there.

So would you recommend WebCoRE over the RBoy SHM Routines, Notifications and Actions solution? Or did you mean someone else’s SHM Delay (this is my guess)? I have used WebCoRE but never used that particular RBoy app or the other “3rd-party” one so I’m curious.

Not sure what you mean by this. The lock state of the keypad updates after executing the lock command. If the screen state on the mobile doesn’t change that would likely be an issue with the ST mobile rendering server and you may need to refresh your screen or close/restart the app.

It was a bit unclear the way I wrote that but what I was mentally thinking/hoping at the time was that if I issued a lock then the DTH would initiate the SHM arm sequence on the keypad and update the visible state on the keypad itself. That probably should be the case since locking a non-physical keypad doesn’t really mean anything.

But the way the DTH is written now, it doesn’t have the capability to issue the ZigBee command to change its own visible status, even if the SHM is armed as you already mentioned. Debugging the DTH tells me it is more than possible but honestly the code is a bit of a mess in spots (missing/misnamed enum variables in the sendStatusToDevice() function for example). I was able to force it issue a command to physically change its own state but the effort would be in getting a state machine that tracks the mode carefully.

Enhanced ZigBee Keypad Lock - Version 01.05.04

The Iris v3 IL021 keypads use 4 AA batteries (Lithium, Alkaliine or NiMh/NiCD)
It also has a unique built in 80dB Alarm feature which can be activated through the tamper switch or through SmartThings UI/SmartApps as an Alarm capability device


  • This device does NOT use a pin/user code to Arm (ON/Partial). You press the ON/Partial button directly to arm it
  • To Disarm enter the 4 digit pin and press the OFF button
  • After installing the DTH/device, open the device preferences page (gear icon on the top right corner) and set the battery type (default is Lithium but many devices ship with Alkaline).

A SmartApp like Lock User Management or SHM Delay etc is required to arm/disarm SHM directly from the keypad.

Real-time Updates With SmartLocks

TIP: While this device handler is compatible with SmartLocks, if you would like to see real time updates to the dashboard in Smart Locks (locking, unlock etc), change the name of the device handler in metadata section around line 68 from

name: “Enhanced ZigBee Keypad Lock”


name: “ZigBee Lock”

Save and Publish -> viola, real time updates in SmartLocks


I can’t get my v3 iris IL021 keypad to arm stay or partial from the keypad. I can disarm but not arm. If you press either of the buttons it just says “Invalid Pin”. Anyone have any success getting a V3 Iris keypad to work properly?

The V3 device behaves differently from the V2 devices. From the release post above:

I’m a bit confused here regarding the lack of a pin for arming on the V3, by simply tapping the On or Partial key. The V2 also has this feature, but it has to be activated when using SHM Delay by adding a user pin 0000. This is because the keypad hardware sends 0000 as the pin when pressing the On or Partial key without entering a pin.

Are you saying the V3 cant be armed using pin numbers? Auto arming without a pin something I won’t use, since anyone with access to the keypad is able to arm the system.


The keypad does not use codes for Arming (away or partial).
However if SHM Delay requires a pin we can have the DTH report 0000 as the default pin when armed using this keypad model.

This won’t impact the functionality of other apps such as Lock User Managment or SmartLocks and they will continue to work (i.e. direct arming without pin codes but need a pin code to disarm)

Do note however that the keypad does not accept or report a pin while arming as this is how the hardware is designed.

I don’t like the fact that anyone can arm the system. It makes no sense to me.

This contradicts the device’s product description

  • Arm and disarm your Iris smart home security system with personalized access codes for several users
  • Receive alerts from Iris when a user arms or disarms your system

I’d say that being able to have PIN-less arming is fine as I don’t see a disadvantage other than a child doing it and causing the sirens to go off and so on. Granted you might want to know who armed it but really all you probably care about is that it is armed.

In other news, I just dumped the V2 Centralite and got the V3 iMagic GreatStar (really, WTF?). It’s acting odd (misbehaving and seems to have a poor connection) for me with the @RBoy DTH but I’ll need to collect some more data and possibly do a reset before I comment further.

@maddie I’m having little to no joy with the Iris v3 Keypad. I did a reset and the behavior is the same afterwards so something is funny…either I am doing something wrong, there is something up with the way that the keypad is working with Lock User Manager, or maybe a bad unit.

I did the join per the updated instructions at the top of the thread. Unit blinks blue, I pair, and then I set the battery option (Alkaline). To keep it simple I am using the latest Lock User Management for these tests and I set up a new user that is only applicable to the keypad and at the bottom of the user profile I select the Custom actions/notifications and have Unlock Actions options “Disarm SHM” and “Control SHM” as well as Lock Actions options “Arm SHM to Away” and “Control SHM” all enabled and that is it. At this point the battery light glows green, the Iris logo purple, and the pairing light is off when I wave my hand in front of the keypad. In the IDE, I get motion active events. All is seemingly good.

DTH Use:
From the device view, if I press either the Beep or Alarm button, the device responds as expected. I can also see the current temp and battery without issue. If I do a lock, the SHM tells me it is Armed (Stay). If I do an unlock, the SHM tells me it is Disarmed. Seems good so far.

Keypad Use:
With the SHM Disarmed, I press the On button on the keypad and SHM tells me it is Armed (Away) and the DTH shows Locked. I then enter the user code and Off but nothing appears in the logs except some Motion Active events. I also notice that the On, Partial, and Off buttons all blink red at the same time. This seemed odd to me but after some period of time (or keystrokes, not sure) I tried it again and it disarmed. I tried this a few times and each time, the On button works immediately and the Off button does seemingly nothing. No errors in the IDE for the DTH or LUM. At some random point later, the unlock does work.

I’m at a loss. It’s like the keypad goes into some mode and has to do a reset before it will talk to the hub again or something but I just don’t know.

When all 3 lights (On, Partial and Off) are blinking, this means the keypad has lost communication with the zigbee mesh. This is confirmed by your first statement that nothing appears in the logs. If the keypad is connected to the mesh you should always see a log entry, even if the code is invalid. We internally refer to this as a “stuck” keypad.
There are a few ways to “unstuck” the keypad (i.e. resume communication with the mesh)

  1. Bring the keypad closer to the hub
  2. Remove the battery from the keypad for a few seconds and then re-insert it (this forces it to reestablish a connection). Then tap the refresh tile on your ST mobile app to resync the settings
  3. Finally reboot the hub and check your ZigBee mesh repeaters or maybe add one

The v3 keypad is little more sensitive to the mesh than the v2. I’ll also update the instructions in the first post to reflect to how handle a “stuck” keypad which has lost comms.