[DRIVER] Ring Alarm Keypad G2 Community Driver - Continued

Does anyone know what the button number is for the 'armed away' button? I want to trigger a rule machine rule when armed away is pressed but I don't know what button number maps.

I have tried pressing it and looking at logs/events but it doesn't state the button number. Note that I specifically need the rule triggered when the button is pressed, not when HSM changes to 'armed away' because I don't want to wait for the arming delay before the rule is triggered.

It's number '5', but I don't think that really matters, because the button number is not sent in any event as far as I can tell. You'd have to modify the driver to have a 'lastButton' attribute, or something like that.

1 Like

I had the exact same thing. Commands from Hubitat to the keypad was normal, but keypad to Hubitat was not doing anything. Tried exclude / include multiple times but no luck.

The fix for me was: Exclude, delete from smartstart, reset the keypad twice, reboot Hubitat, smartstart and wait.
It joined, and has been stable for three weeks now.

Been spending a large portion of the day trying to get this ring keypad g2 working with hubitat. Purchased on amazon yesterday so maybe it's got fresh firmware. I don't have any other ring products so I don't think I can check it's firmware. I can send signals to the keypad and it responds reliably. When I arm/disarm in HSM the panel reflects it. I can also arm/disarm SOMETIMES from the panel BUT only immediately after pairing. After a minute or less of testing then BUZZER no more response... I'll put in the code and hit arm/disarm and it does nothing but beep on each key press. I've excluded, reset, included probably 5-10 times lol. Trying something a little different each time. I've even taken out many of my HSM settings to make it as basic as possible. Tried removing the community driver entirely to use Hubitat driver with no luck (so that when I include the keypad it goes straight to hubitat driver instead of community then swapping). Same issues. I've set the codes using lock code manager and also via the device page. I've tried code encryption on/off thinking maybe ring keypad is requiring encryption... but all give me the same result: I can arm/disarm SOMETIMES from the panel BUT only within minutes after pairing and sending the lock codes. After a minute or less of testing then it's like the codes aren't working anymore.

One thing I do see over and over in the error logs, whether using the community and the hubitat driver, is after pressing the configure command I get this error in the logs:
groovy.lang.MissingMethodException: No signature of method: java.lang.String.call() is applicable for argument types: (java.lang.Integer) values: [2]
Possible solutions: take(int), wait(), chars(), any(), wait(long), wait(long, int) on line 110 (method configure)

Maybe something going on there? The keypad isn't able to configure properly?

I also saw this after triggering keypad update status:
groovy.lang.MissingMethodException: No signature of method: user_driver_jkister_Ring_Alarm_Keypad_G2_Community_591.keypadUpdateStatus() is applicable for argument types: (java.lang.String) values: [1]
Possible solutions: keypadUpdateStatus(java.lang.Integer, java.lang.String), keypadUpdateStatus(java.lang.Integer, java.lang.String, java.lang.String) (method keypadUpdateStatus)

Disable the proximity Sensor. It's a bug in the driver with the latest keypad firmware. I'm using them with Home assistant and they work great so must be the hubitat driver. It's been a bug for a long time now.

1 Like

Even that doesn't seem to help. The keypad lights are still coming on and off though so it seems like the proximity sensor didn't actually disable even though I set it under device, save preferences, save device, and press configure trigger. When I press configure it is saying "disarm" on the keypad so that's something? but now even the disarm change in HSM isn't triggering a change on the keypad. Uggg. I'm like 6 hours deep on this and it's driving me bonkers.

You are not alone. I have pretty much all the same problems you describe. Both the built in, and the community driver. Neither works. I went so far as to buy a ring home hub on e-bay so I could check for a firmware update for my keypads. No update available. Community driver says I'm on 2.0. The ring app won't say what the version is, but just "up to date".

I have tried everything you have, pairing with smart start, without smart start. With the community driver available, without it, disable proximity sensor, etc.... Pretty much all the same symptoms you are seeing. Nothing gets the keypad working reliably.

1 Like

As i understand it the problem is about the keypad firmware getting hung up after a motion event is detected. The built in driver does not allow disabling the proximity sensor so you need the community driver. Then very first thing disable the proximity sensor. That is what i heard worked for folks.

It should be paired with S2 security.

As I recall, @bcopeland did some work with the Ring G2 did sensors and the S2 protocol to address some issues related to staying in sync or some such thing.

I really don't know the "rules" for S2, but I'm very suspicious that there are some issues that cause the device and hub to get out of sync... Which effectively locks it up.

I've modified the community driver notably to add more diagnostics and I'm poking around at improving the functionally.

In particular, there's not a good, single "attribute change" that can be relied upon to trigger a rule for the events.

The "last code name" is set for a matching name OR police/fire/medical/successful check mark, etc. But the time of the last code only happens in some cases.

There are a lot of other events that aren't well detected. Including, surfacing the digits entered.

Note that, thus far, my code changes are just local to my hub.

...Rob

I appreciate you actively looking into this and testing. Definitely does seem to be something related to proximity sensor hosing up the device to the point where it can only receive info and not send. Perhaps the driver should have proximity sensor off by default (with a warning to not turn on) until this is resolved.

I do have my keypad paired with S2. Until my last pairing, I had been using smartstart. This last run I used normal zwave device add and added the PIN when prompted. In fact, I detailed my last process and I think I was able to get everything working after disabling proximity AND triggering "keypad reset" command... turning off proximity alone wasn't enough since I was already experiencing the issue. Maybe if I had turned off proximity immediately after pairing before doing anything else it wouldn't have been necessary.

  1. Removed keypad from HSM
  2. Exclude ring keypad by going to settings -> zwave -> exclude -> press the pinhole button on back of ring device briefly.
  3. Factory reset keypad by using pinhole until green radio icon goes red
  4. Backed up hubitat
  5. Rebooted hubitat
  6. Went to device -> add device -> brand ring -> keypad g2 -> start pairing -> plug keypad into power cable to initiate pairing -> enter secure PIN from back of device (do not use smart start z wave thing in mobile app). May need to try a few times until detected.
  7. Add keypad to HSM (with both selectors turned off)
  8. Test arm home and disarm from HSM to see if keypad reflects properly. (CHECK!)
  9. Use lock code manager to send lock codes to keypad
  10. Test arming home from keypad. (FAILED)
  11. Proximity sensor on keypad off.
  12. Press pinhole on back of keypad for a few seconds, but not factory reset. (Necessary? maybe not)
  13. Trigger "Keypad Reset" command from device.
  14. Attempt arming system from keypad (SUCCESS!!)
  15. Attempt disarm from keypad (SUCCESS!!)

Thank you everyone!

I was looking at the topic @bcopeland had on writing Z-Wave Drivers for S2

The "multi-event" code definitely doesn't appear to be in this driver (and, my hacked attempt at adding it made for a mess (somehow, got a "groovy.lang.MissingMethodException: No signature of method: java.lang.String.call() is applicable for argument types: (hubitat.zwave.commands.entrycontrolv1.EntryControlNotification, java.lang.Integer) values: [EntryControlNotification(sequenceNumber:61, dataType:2, eventType:0, eventData:), ...] Possible solutions: wait(), chars(), any(), wait(long, int), take(int), trim() on line 980 (method parse)" error.

I'm such a noob when it comes to the arcane details of S2 and z-wave protocol, that doesn't surprise me that I'd hose it up.

It seems that @jvm33 was tracking well with @bcopeland. Maybe @jvm33 would have some sort of idea.

I put my latest (NOT meant to be ready for use!) code here:

https://raw.githubusercontent.com/robstitt/Ring-G2-Keypad-Driver/main/Ring%20Alarm%20Keypad%20G2%20Community

As I mentioned earlier, the problems I am seeing look for all the world to be somehow tied to things getting out of sync--so the hub and keypad stop talking to each other.

This is correct it's a pain if you don't disable proximity sensor as soon as you pair the Keypad. basically just don't have the keypad facing you. I do experience out of sync issues on Home assistant sometimes it will basically lock up the keypad and you need to send a command from the hub/HA to the keypad to get it working again.

Hi @jkister thanks for this module. Does anyone know how to adjust the keypad siren volume (not chime volume)?

When I change the volSiren number in the device settings, this changes the chime volume but not siren volume.

Thank you for this, being able to turn the proximity sensor off allows this to work great with HSM.

I do have a couple of questions regarding the HSM integration.

  1. Strobe: I assumed that activating the strobe would just "blink" the red bar on the unit. Is this possible? When I tell it to strobe, it sounds the alarm as well. So I'm not noticing any difference between the strobe and alarm.

  2. I've read a couple of threads on the HSM integration. Things work pretty well except for a little confusion on how I should configure things.

Initially I used the Keypad Device options to set the Arm delays. For example, I have the Away Delay set to 40 seconds. But in HSM, when you activate any function from that interface, it overrides the keypad options (?).

What happens with my current set up is that I arm the keypad. HSM knows nothing about this it seems (no log data). The keypad begins countdown as it should.

But once the keypad "arms" only then will HSM begin its countdown and shows "please exit now" status and does its thing. So what I did was set the delay to 1 second so that HSM would arm at the same time the keypad says its armed. BUT if I use any function in HSM control panel the delay settings then become the keypad's settings. So next time I arm via the keypad now its Away/Delay is 1 second as well.

So what I have done is just make them both the same, 40 seconds. This means that even though the keypad says its armed, HSM has another 40 seconds to go before Hubitat is armed.

The logs show the delay (as configured in the keypad) and HSM is sending an arm command (I presume by the log--showing that the keypad is already armed/away, so skipping, etc.

Am I doing something wrong?

[dev:2614](http://hubitat.local/logs#)2023-06-25 10:56:09.257 AM[debug](http://hubitat.local/logs#)In armAway - securityKeypad already set to 'armed away', so skipping.

[dev:2614](http://hubitat.local/logs#)2023-06-25 10:56:09.255 AM[debug](http://hubitat.local/logs#)In armAway (1.2.11) - delay: 40

[dev:2614](http://hubitat.local/logs#)2023-06-25 10:56:09.194 AM[debug](http://hubitat.local/logs#)In changeStatus (1.2.11) - data: set

[dev:2614](http://hubitat.local/logs#)2023-06-25 10:55:29.163 AM[debug](http://hubitat.local/logs#)In exitDelay (1.2.11) - delay: 40

[dev:2614](http://hubitat.local/logs#)2023-06-25 10:55:29.159 AM[debug](http://hubitat.local/logs#)In armAway (1.2.11) - delay: 40

[dev:2614](http://hubitat.local/logs#)2023-06-25 10:55:29.153 AM[debug](http://hubitat.local/logs#)In case 5 - Passed - currentStatus: disarmed

Otherwise I was able to include the device and get up and running with lock code manager, etc. Thank you!!

I'm not sure if I should be doing this, but it works and I'm learning. I don't know what the indicatorId/value is, but the strobe routine basically does the same thing as the siren function.

So what I did playing around with things was this: I muted the Siren volume property using the zwave configuration, activated the siren (indicatorId:0x0C propertyId:2, value: 0xFF) then set the volume back to 10.

Also note that the siren volume value isn't sanitized...it allows any value where it should only be in (0...10) according to the Zwave specs

Anyway, the strobe() function looks like this:

void strobe() {
    if (logEnable) log.debug "In strobe (${version()})"
    eventProcess(name:"alarm", value:"strobe")
    changeStatus("strobe")
    List<String> cmds=[]
    cmds.add(new hubitat.zwave.commands.configurationv1.ConfigurationSet(parameterNumber: 6, size: 1, scaledConfigurationValue: 0).format())
    //cmds.add(zwave.indicatorV3.indicatorSet(indicatorCount:1, value: 0, indicatorValues:[[indicatorId:0x0C, propertyId:2, value:0xFF]]).format())
    cmds.add(zwave.indicatorV3.indicatorSet(indicatorCount:1, value: 0, indicatorValues:[[indicatorId:0x0C, propertyId:2, value:0x00]]).format())
    cmds.add(new hubitat.zwave.commands.configurationv1.ConfigurationSet(parameterNumber: 6, size: 1, scaledConfigurationValue: 10).format())
    sendToDevice(cmds)
}

This makes the strobe option behave the way I would expect (light flashes, but no siren). I can't find any reference to the Ring indicatorSet, and as I really don't know what I'm doing not sure if the groovy code is correct other than it works.

@jkister Was hoping to fork(?) this to make the above modifications, but in testing I found some other things and would like to examine further if possible?

  1. Disarm in the .11 version is skipped if the status is already disarmed. I'm not sure where/when this happens for sure because I've been experimenting, but I've found that I need to reset the status of HSM and connected keypads and can't unless I allow the routine to send the disarmend() no matter what the status is. It seems that the keypad can get stuck or out of sync, then it won't allow me to arm until the keypad thinks its disarmed. Sorry if that doesn't make sense. But if I comment out the logic to always disarm, I can clear the out of sync issues I get from time to time.

  2. I found other codes but I'm new to groovy and way new to zwave command classes. I found codes for example that announce "low temperature and water detected", "water detected", "low temperature detected", "Sensors require bypass" (checkmark flashes), carbon monoixide alert, fire alarm/fire indicator flashes, medical indicator.

For some of these I could see having rules or conditions that trigger these responses.

There are some that I don't think we can use because (low temp, water) causes the "1 3 7 9" numbers to flash and I can't find how to clear these for now, but I can see where these may be of use in the future.

Any ideas and advice are appreciated.

Anything that helps with keypad issues would be awesome.

You need to be careful about submitting multiple commands to do the same thing when the device is already in that state. Don't forget the hub responds to events and if you allow the same event to be passed twice that can have bad results as well.

My example of this is there was a time the code would send multiple instances of arm away and would effectly prevent me from using that state change to trigger actions against fans based on leaving.

Ultimately if you have a system like HSM being controlled by the alarm panel. You probably should have the alarm panel submit the request for the state change to app like HSM. Then it should trigger the panel to match it's state. That said i do understand zwave blips can cause things to go out of sync in that case. But that is also a good indicator that HSM may not have gotten the state upgrade and to do it manually if needed. Think of it like you submit the alarm to go to Arm Away and then it stars to count down even if the hub didn't get the command for some reason, Or you come home and disarm the alarm and you thin all is good, but then the siren goes off because the hub didn't get the event

Thank you so much, your guide helped me to finally set it, though with some modifications and many keyboard resets, etc. and with finally settling on the community driver.

I was wondering you or anyone here knows how to read the events from fire/help/police buttons and what those button numbers are? I have tried 1,2,3 as button numbers but it doesn't work.

Any help is appreciated.

These are button numbers 11, 12 and 13