[RELEASE] Virtual Keypad

if you need more support, in the keypad manager app, go to the child keypad device, at the bottom of the configuration page, there is a button "get settings for support" and copy that and paste it here so i can see your settings.

Thanks @mbarone for your speedy response. I'm not at a desktop to test anything ATM. That said I can definitely confirm that upon pressing my custom button that nothing occurs in the input display. I don't see a "success" nor an "input denied". .....stu

Hi, I've just logged in remotely, inputted my code and then pressed my activate button. I'm still struggling if you can please help :slight_smile:

Virtual Keypad Child: V0.0.8, Virtual Keypad Device: V1.0.22]
[armDelay:false, changeModes:false, cancelAlertsOnDisarm:false, dataName:Keypad new, includeButtonsCustom:false, buttonsModesIncluded:[Mode-Day, Mode-Evening, Mode-Night, Mode-Away, Mode-Holiday, Mode-Migraine Mode], notify:true, changeHSM:false, armDelaySecondsGroup:[Custom-Arm, Custom-ReArm, Custom-Disarm, HSM-disarm, HSM-armRules, HSM-disarmRules, HSM-disarmAll, HSM-armAll, HSM-cancelAlerts], armDelaySeconds:5, notifyLimit:1, buttonsHSMIncluded:[HSM-disarm, HSM-armRules, HSM-disarmRules, HSM-disarmAll, HSM-armAll, HSM-cancelAlerts], label:Keypad new, defaultModeTrigger:[Mode-Day], logEnable:false, chimeDelay:false, noCodeRequiredDisarmedOnly:false, notifyDevices:[V PUSHOVER DEVICE], availableButtons:[Custom-Activate]]

Thanks for posting the kepad settings, those look ok.

Can you take a look at the keypad parent device event logs. You should be seeing "UserInput" events with "success" or "failed" value for each button press. If these are not happeneing this might be why you are not seeing the inputdisplay feedback after typing the code and pressing the custom-activate button.

Also, can you confirm you have lockCodes set in the keypad device current states.

Ill need to test further with a new keypad device with your settings to see if there is a bug, but generally looks like you have it configured properly.

looking again at your screenshots above. I see a device added to your dashboard for "virtual basic keypad".. do not use the basic version.. that is actually more advanced to use, and probably should be removed from hpm and requires manual install to prevent confusion.

The settings you posted above indicate you have the full version installed, so you might be trying to use devices from both packages on your dashboard which will not work together. I would remove the "virtual basic keypad" and only use the 'virtual keypad' package which is configured by the virtual keypad manager app.

I have carefully read and followed the instructions for installing the virtural keypad:


However when i disarm the system, the Keypad - Main Input Display and the HSM Status do not update to disarmed:

What do I need to do to fix that? When I click on HSM Status then Disarm, they do update to Disarmed.
I have the Disarm button set to Keypad - Main Custom Disarm:

The custom-* buttons do nothing automatically. Those are used to trigger RM rules by turning on then off their switch value when executed.

if you want direct hsm control, you need to use the hsm-disarm specific button on the keypad to interact directly with hsm. If the hsm-* child devices are not on your keypad device, you need to enable direct hsm control in the keypad manager app settings for your keypad device by enabling the toggle under the "virtual keypad hsm options" section and saving the app. The hsm-* buttons should be created automatically if that is toggled on.

I did not find the "virtual keypad hsm options" section. I looked in Devices -> Keypad - Main; Apps -> Virtual Keypad Manager; Apps -> Keypad - Main and in the Dashboard. Where do I find it?

In the app-> virtual keypad manager, go into the keypad child app you created, its the top option in this screenshot after the 'virtual keypad mode options' section

I already had that selected:


In the Dashboard, I have the Disarm button set to this:

It works with requiring a code to press but dose not change the HSM status.

OK, I got it! I had to add "Keypad - Main (HSM-disarm)" in Apps -> Keyboard. Then I was able to select it in the Dashboard -> Keyboard.

I have created a tile that shows asterisks as buttons are pushed:


Is it possible to show the numbers entered instead of asterisks?

It would need a new feature/option to enable number visibility, so that is not supported currently.

Is there a way to change the background color of this tile based on what the tile is displaying? Red for input denied, green for input accepted.

Hi, I've resolved this now. I removed everything and started again. I think I'd somehow crossed over the basic keypad with the advanced keypad. Appreciated and thank you for helping thus far. Amazing piece of kit

I've been trying to get this set up. I've got the json and css configured, but even though it indicates it's arming HSM Away, it never actually does it. Also, when I try to set a pin code in the keypad manager, I get this error: errororg.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'h6OTvZolQk9XuHhUf2nrZXBp32j2EDY05/qMQIcZ6NXJ5ZyHCJ/Dm1oDpmA1+IaC' with class 'java.lang.String' to class 'java.util.Map' on line 678 (method setCode)

On the main keypad device, there is a state that holds the success or failure message, so you could setup a rm trigger or something to watch the keypad for
UserInput: Failed

state getting set and change the color of a tile.

that state resets itself when the inputdisplay resets so you may need your own logic to extend how long you want the color to be changed.. or just watch for the
UserInput: Success

State change to reset it.

The issue with lockcodemanager will need to be asked in that thread, you can also set codes directly on the keypad device until you get that working.
Edit, unless you mean saving a code to the keypad device.. please give a little more info if that is the case, i have not seen this issue.

For the first question, are you using the custom-arm button or the hsm-arm button?

Look at the recent messages in this thread with nelsonh to see the difference and what you should use for your desired functionality

I run into errors when trying to add a code in the keypad device. That's what led me to try the lock code manager. I've been playing with the driver code to add a little more information. Here's the block of code that's failing as well as what displays in the log:

    codeMap = ["name":"${name}", "code":"${code}"]
    data = ["${codeNumber}":codeMap]
        log.debug "1data ${data}"
        log.debug "1enc data ${JsonOutput.toJson(data)}"
    lockCodes << data
    if (optEncrypt) data = encrypt(JsonOutput.toJson(data))
    value = "added"

I was able to get it working by changing the lines in the code to be:

    String sData = data.toString()
    if (optEncrypt) sData = encrypt(JsonOutput.toJson(data)).toString()
    value = "added"

Interesting, looks like it might only be an issue if encrypting is turned on. Thanks for posting the fix, ill try to get an updated version out after testing

1 Like