[RELEASE] Ring Alarm Keypad G2 Community Driver - Enhanced version of Hubitat's driver

Introducing 'Ring Alarm Keypad G2 Community Driver'
Enhanced version of Hubitat's driver

*** No longer maintained by BPTWorld. I've moved all my Ring Keypads over to a Ring hub. ***

Special Thanks to Bryan Copeland (@bcopeland) for writing and releasing this code to the community!

Enhanced Features:

  • Track the 3 emergency buttons - Use them to trigger anything you want with apps like Event Engine.
  • Track any code entered followed by the 'check mark' button. Independent of the Alarm Codes.
  • Added option to set home/away with a single button push. No need to enter in an Alarm Code.
  • Added toggle for Disabling Proximity Sensor. Great for bedrooms and to save battery.
  • Select the default chime tone
  • Play Chime tones from other apps, like Event Engine!

Note to everyone: This is a community driver! If you have any changes, feel free to either contact me or send a pull request.


Apps can be found on my GitHub or by using the Hubitat Package Manager.
(HPM is highly recommended)

When reporting problems...

  • Be sure you are on the latest version. I won't troubleshoot an older version.
  • Turn on debug and screenshot the issue happening in the log. One line or just the error doesn't cut it. I need a log.
  • Post the screenshot of the log with an explanation of the problem.

Thanks

10 Likes

Also in the initial release:

  • Fixed error when arming home from keypad
  • Fixed error when clicking Config
4 Likes

Support for the new driver features have been added to Event Engine! :smiley:

2 Likes

New version on GitHub...

1.0.1 - 11/11/21 - Added toggle for Disabling Proximity Sensor

1 Like

I am going to try this out today and see how this works. will let you know how it goes.

Working great for me so far... haven't accidentally had the police show up or anything!

1 Like

Just installed the Ring Alarm Keypad G2 Community Driver thinking this would solve an ongoing issue i have with cancelling an Arm/Away in progress. If I start the Arm/Away function on the keypad and use the Disarm during the exit delay, the keypad will show disarm, but the arming process will keep going till the end. I have no way to cancel the arm/away once started. I am curious to find out if anyone else is having the same issue.

New version on GitHub...

1.0.2 - 11/12/21 - Fixed armAway not respecting the Disarm command

:smiley:

@bptworld This is a beautiful thing! Works like a charm. Thanks for such a quick fix!

1 Like

Noticed with the 1.0 version my keypad started spuriously announcing HSM mode ("Disarmed") when there was no change in HSM mode (or at least not for the last 20 min or so). Nothing in the logs or events indicted a recent change in mode. Just installed 1.0.2. Will see if the problem persists. Of course just got my flu shot and covid booster so it could be hallucinations :slight_smile:

Mine has always done this, built-in driver or community driver. Only does it when connected to HSM. I didn't have it connected to HSM while working on the driver and never heard it. Reconnected it to HSM and within 10 minutes it did it.

Ha! I got my 3rd Covid shot yesterday (Pfizer). Good times. :wink:

1 Like

Weird. Mine is connected to HSM but I've never noticed it before. Will keep an eye on it. Maybe I just need to shut the volume off :slight_smile:

The driver is now available in HPM. :smiley:

3 Likes

I hve had the same experience. Generally speaking i never hear fthe keypad announce Disarmed unless properly triggered.

Amazing, thank you for working on this!

I'm keeping my fingers crossed for an event to make the keypad "chirp" or "chime" so that I can replace the grating sounds of the Ecolink Siren when any window or door in the house opens.

Curious, I see in your own wish list a request for the same.. what makes this complex? The original Hubitat Gen2 keypad driver also didn't include it but the Gen1 did... Assuming that something is non-obvious to those of us not familiar with Zwave command classes?

Changing the default sounds is possible but beyond my skill set. Hopefully a nice zwave guru will take a look and add it in. :grin:

New version on GitHub...

1.0.3 - 12/07/21 - Attempt to stop keypad from saying disarmed when it is already disarmed
- TONS of little tweaks and fixes.
- Separate delays for Home and Away now work.

1 Like

Isn't just a zwave command to emit a chirp? I wonder how Ring itself emits a chirp when a contact sensor opens.

Sure, but the command looks like this...
sendToDevice(zwave.indicatorV3.indicatorSet(indicatorCount:1, value: 0, indicatorValues:[[indicatorId:0x0C, propertyId:2, value:0xFF]]).format())

It's trying to figure out the values to make it work!

I have 3 ring keypads, all G2 but different firmwares. The older firmware, I can make 7 different sounds. With the newer firmware, I can only make 3. So trying to figure out why it doesn't play the rest.

Edit: solved

Okay, time to call in the big guns. :grin:

I have 3 keypads, all G2 but different firmware.

On the older firmware (hardwareVersion: 1 - firmwareVersion: 1.08) I was able to get 7 sounds to play.

On the newer firmware (hardwareVersion: 3 - firmwareVersion: 1.18) I was able to get the first 3 sounds to play. None of the 'special' tones work (4 through 8).

Any ideas? Thanks

Code
def playTone(tone=null) {
    if (logEnable) log.debug "In playTone - tone: ${tone}"
    if(!tone) { 
        tone = theTone
        if (logEnable) log.debug "In playTone - Tone is NULL, so setting tone to theTone: ${tone}"
    }
    if(tone == "Tone_1") {
        if (logEnable) log.debug "In playTone - Tone 1"    // Siren
        sendToDevice(zwave.indicatorV3.indicatorSet(indicatorCount:1, value: 0, indicatorValues:[[indicatorId:0x0C, propertyId:2, value:0xFF]]).format())
    } else if(tone == "Tone_2") {
        if (logEnable) log.debug "In playTone - Tone 2"    // 3 chirps
        sendToDevice(zwave.indicatorV3.indicatorSet(indicatorCount:1, value: 0, indicatorValues:[[indicatorId:0x0E, propertyId:2, value:0xFF]]).format())
    } else if(tone == "Tone_3") {
        if (logEnable) log.debug "In playTone - Tone 3"    // 4 chirps
        sendToDevice(zwave.indicatorV3.indicatorSet(indicatorCount:1, value: 0, indicatorValues:[[indicatorId:0x0F, propertyId:2, value:0xFF]]).format())
    } else if(tone == "Tone_4") {
        if (logEnable) log.debug "In playTone - Tone 4"    // Navi
        sendToDevice(zwave.indicatorV3.indicatorSet(indicatorCount:1, value: 0, indicatorValues:[[indicatorId:0x60, propertyId:0x09, value:0xFF]]).format())
    } else if(tone == "Tone_5") {
        if (logEnable) log.debug "In playTone - Tone 5"    // Guitar
        sendToDevice(zwave.indicatorV3.indicatorSet(indicatorCount:1, value: 0, indicatorValues:[[indicatorId:0x61, propertyId:0x09, value:0xFF]]).format())
    } else if(tone == "Tone_6") {
        if (logEnable) log.debug "In playTone - Tone 6"    // Windchimes
        sendToDevice(zwave.indicatorV3.indicatorSet(indicatorCount:1, value: 0, indicatorValues:[[indicatorId:0x62, propertyId:0x09, value:0xFF]]).format())
    } else if(tone == "Tone_7") {
        if (logEnable) log.debug "In playTone - Tone 7"    // Doorbell 1
        sendToDevice(zwave.indicatorV3.indicatorSet(indicatorCount:1, value: 0, indicatorValues:[[indicatorId:0x63, propertyId:0x09, value:0xFF]]).format())
    } else if(tone == "Tone_8") {
        if (logEnable) log.debug "In playTone - Tone 8"    // Doorbell 2
        sendToDevice(zwave.indicatorV3.indicatorSet(indicatorCount:1, value: 0, indicatorValues:[[indicatorId:0x64, propertyId:0x09, value:0xFF]]).format())
    }
}

Download the Hubitat app