Advanced Ring Keypad V2 Blueprint for Home Assistant (Alarmo)
This blueprint synchronizes a Ring Keypad V2 with Home Assistant and Alarmo. It builds upon previous work from ImSorryButWho but includes significantly more advanced features like environmental alarms, post-alarm warnings, customizable panic buttons, and rich mobile notifications.
Features
Full Alarmo Sync: Perfectly syncs Armed, Disarmed, Arming (Exit Delay), and Pending (Entry Delay) states.
Custom Alarmo Mode Mapping: You can independently map the keypad’s physical “Arm Home” and “Arm Away” buttons to specific Alarmo modes, including Home, Away, Night, Vacation, or Custom.
Actionable Mobile Notifications (Optional): Receive interactive iOS/Android notifications directly synced with your alarm.
Dynamic Buttons: Notification action buttons automatically inherit your configured keypad_arm_home_mapping and keypad_arm_away_mapping choices.
Persistent Resend Logic: Intercepts mobile_app_notification_cleared events. If you accidentally swipe away an active alarm notification, it automatically resends to ensure you don’t lose access to the quick actions.
Platform Enhancements: Leverages Android custom channels, UI colors, dynamic status icons, and custom vibration patterns, as well as iOS thread-id/apns-collapse-id grouping. (Disclaimer: not all advanced visual features work on all phones/OS versions).
Auto Force Arm on Open Sensors (Optional): If arming fails due to open sensors, a customizable countdown timer will begin. If left unresolved, the blueprint automatically bypasses the open sensors and force arms the system. The countdown can be canceled pressing the cancel option in the notification.
S2 Security Collision Workaround: Includes a customizable delay toggle (0-3 seconds) to prevent the Z-Wave race condition (#4879) that causes the keypad to flash a red network error and fail to update its status when disarming.
Bypasses Z-Wave JS Limits: Uses raw invoke_cc_api commands to bypass Home Assistant’s strict indicator filters, ensuring all special alarms actually work.
Environmental Alarms (Optional): Connect your environmental sensors (Smoke, CO, Moisture, Gas, Heat). If any of these trigger, the keypad will sound the loud, permanent Fire/CO siren until disarmed. You can leave this blank if you don’t have any, and the blueprint will still work perfectly.
Smart “Post-Alarm” Warning: If your burglar alarm triggers while you are away, the siren will sound. When the alarm times out and re-arms itself (make sure this is enabled in Alarmo), the keypad will flash the Medical button as a silent warning/indicator. When you come home, you instantly know an incident occurred before you even enter your code!
Custom Panic Buttons: Map any Home Assistant action to the physical Fire, Police, and Medical buttons on the keypad (Requires holding the button down for 3 seconds).
Local Panic Sirens: Independent toggles allow you to choose whether holding a panic button also activates the keypad’s internal siren/flashing lights, turning it into a true standalone panic station.
Instant Silence “Kill-Switch”: Typing your code and pressing ‘Disarm’ will instantly force the keypad to silence any sounding sirens, regardless of the current state of Alarmo.
Brute Force Protection: Triggers the burglar alarm if someone tries to guess your PIN and fails too many times while the system is armed.
Credits
A huge thank you to ImSorryButWho for the original research on Z-Wave command classes and the foundational blueprint. This advanced version builds upon that foundation to fix silent alarms, synchronization race-conditions, add custom button mapping, interactable nottifications, optionally auto force arm on unresolved open sensors after a set delay.
Prerequisites
A Ring Keypad V2 paired via Z-Wave JS. IMPORTANT: It MUST be paired using S2 Security (S2 Access Control). If it is paired with no security or legacy S0, the keypad buttons and sirens will not function correctly!
Alarmo installed and configured in Home Assistant. (If you use environmental sensors, be sure to add them to Alarmo’s environmental category too).
Alarmo “Disarm after triggering” option disabled.
Counter Helper (Optional): If you wish to use the Brute Force Protection feature, you must create a Counter helper in Home Assistant (instructions below).
Installation
The easiest way to install this blueprint is by clicking the import button below:
Manual installation:
If you prefer to install it manually:
In Home Assistant, go to your config/blueprints/automation folder.
Create a new file called ring_keypad_v2_advanced.yaml and paste the raw code from this repository.
Go to Developer Tools → YAML → Reload Automations.
Setting up Brute Force Protection (Optional)
To enable the feature that triggers the alarm after too many failed PIN attempts, you need to create a simple Counter Helper in Home Assistant:
Go to Settings → Devices & Services → Helpers or click the helpers button below.
Click + Create Helper and select Counter.
Name it something like “Keypad Failed Attempts” and leave the rest as default.
When setting up this blueprint, toggle “Brute Force Protection” to true, select your newly created Counter entity, and choose your maximum allowed attempts.
How the Post-Alarm Warning Works
The Ring Keypad hardware prioritizes the Burglar siren. To ensure the post-alarm warning works, this blueprint will:
Wait for Alarmo’s siren timer to expire.
Officially send the “Armed Away/Home” command to the keypad to kill the siren.
Wait exactly 6 seconds for the keypad to finish its voice prompt (“Away and Armed”).
Send the raw invoke_cc_api command to flash the Medical light permanently until you disarm the system.
Note on Panic Buttons
To prevent conflicting states, the physical Fire, Police, and Medical buttons are programmed to be ignored if your alarm system is currently in the pending (Entry Delay) or triggered (Siren Sounding) states.
Support / Issue Reports
If you run into a problem or want to report an issue, please open a ticket on: GitHub Issues
noticed the S2 security collision. Thanks to that find, I think I’ve found a solution. I’ve added a 3 second delay between Alarmo disarming and sending the disarm command back to the Ring Keypads. I added -delay: "00:00:03" after line 225 in @ImSorryButWho 's Ring Alarm Sync Blueprint.
Custom Alarmo Mode Mapping: You can independently map the keypad’s physical “Arm Home” and “Arm Away” buttons to specific Alarmo modes, including Home, Away, Night, Vacation, or Custom.
S2 Security Collision Workaround: Includes a customizable delay toggle (0-3 seconds) to prevent the Z-Wave race condition (#4879) that causes the keypad to flash a red network error and fail to update its status when disarming.
@Ryckie thanks for sharing this new blueprint. I had to rebuild my zwave network from scratch and found you improved blueprint over the original.
I face one small issue: I have three keypads (front door, back door and upstairs). When I arm the system and have to ignore a sensor warning the ‘approve / okay’ button fires three times. Once for the approval and twice flashing the full keyboard as the button press is illegal in that state.
It looks like the other two keypads trigger something as well during a state change. Any idea how to fix this?
Hey, I’m unsure with what you mean exactly with the firing 3 times part. How did you set it up? 3 automations with each time a different keypad set? Could you explain a little more in detail please? And if possible please try and check if this happens with the ImSorryButWho’s version of the blueprint as well. Unfortunately I only have 1 keypad to test. So I’d need more info. Thank you
feat: add actionable mobile notifications & Auto force arm for unresolved open sensors after a failed arm attempt.
Integrated iOS/Android compatible actionable notifications directly into the Ring Keypad V2 logic (optional feature).
Implemented dynamic actionable buttons (“Disarm”, “Arm [Mode]”) that automatically inherit the user’s configured Ring Keypad keypad_arm_home_mapping and keypad_arm_away_mapping variables.
Added persistent notification resend logic: automation intercepts mobile_app_notification_cleared events and automatically resends swiped notifications to all selected devices. (I couldn’t find a way to resend it only to the device who swiped it away.)
Included all platform-specific mobile app enhancements, including Android custom channels, UI colors, dynamic status icons, vibration patterns, and iOS thread-id/apns-collapse-id grouping. Disclaimer: not all features work on all phones.
Included an optional configurable Auto Force Arm feature for unresolved open sensors.
Requesting IOS users to test the newly added features as I don’t own such device to test.
S2 Security Collision Workaround: Includes a customizable delay toggle (0-3 seconds) to prevent the Z-Wave race condition (#4879) that causes the keypad to flash a red network error and fail to update its status when disarming.
I still had this issue with the 3 second delay sometimes. When arming and disarming the alarm keypad.
I have no idea as im not facing this problem myself. If you want, I could give you the code to set a 5 second delay ao you can try with that? But I’m not sure that’s such a nice experience.
Hey @Ryckie,
I’m currently experiencing something strange, the keypad doesn’t play the pending sound anymore. I’m referring to pulsing sound that is played during the entry/exit delay. It looks like Alarmo sends the pending status to the blueprint, but then no sound is played. It’s quite difficult to check the logs on the automation side, as traces have been disabled.
It appears that the blueprint doesn’t process the pending message anymore, it used to work so I don’t know what changed. I also tried it with the older blueprint by ImSorryButWho, it also doesn’t play the pending sound anymore.
This is not urgent, so feel free to put it on your backlog, we created a short workaround to alert us that the alarm is pending. I’m currently flashing the hallway lights.
Here are some logs, the issue looks to be on the 2-135-0-17-timeout and 2-135-0-18-timeout parameters.
Logger: homeassistant.components.automation.ring_keypad_v2_with_alarmo_environmentals_actionable_notifications
Source: helpers/script.py:2291
Integration: Automation (documentation, issues)
First occurred: September 8, 2026 at 6:08:58 PM (63 occurrences)
Last logged: 9:23:51 AM
Ring Keypad V2 with Alarmo & Environmentals & Actionable Notifications: Choose at step 1: choice 5: Error executing script. Error for choose at pos 2: Node(node_id=2) - NotFoundError: Value 2-135-0-18-timeout not found on node Node(node_id=2)
Ring Keypad V2 with Alarmo & Environmentals & Actionable Notifications: Error executing script. Error for choose at pos 1: Node(node_id=2) - NotFoundError: Value 2-135-0-18-timeout not found on node Node(node_id=2)
Ring Keypad V2 with Alarmo & Environmentals & Actionable Notifications: Choose at step 1: choice 5: Choose at step 2: choice 4: Error executing script. Error for call_service at pos 1: Node(node_id=2) - NotFoundError: Value 2-135-0-17-timeout not found on node Node(node_id=2)
Ring Keypad V2 with Alarmo & Environmentals & Actionable Notifications: Choose at step 1: choice 5: Error executing script. Error for choose at pos 2: Node(node_id=2) - NotFoundError: Value 2-135-0-17-timeout not found on node Node(node_id=2)
Ring Keypad V2 with Alarmo & Environmentals & Actionable Notifications: Error executing script. Error for choose at pos 1: Node(node_id=2) - NotFoundError: Value 2-135-0-17-timeout not found on node Node(node_id=2)
Logger: homeassistant.components.automation.ring_keypad_v2_with_alarmo_environmentals_actionable_notifications
Source: components/automation/__init__.py:806
Integration: Automation (documentation, issues)
First occurred: September 8, 2026 at 6:08:58 PM (21 occurrences)
Last logged: 9:23:51 AM
Error while executing automation automation.ring_keypad_v2_with_alarmo_environmentals_actionable_notifications: Node(node_id=2) - NotFoundError: Value 2-135-0-18-timeout not found on node Node(node_id=2)
Error while executing automation automation.ring_keypad_v2_with_alarmo_environmentals_actionable_notifications: Node(node_id=2) - NotFoundError: Value 2-135-0-17-timeout not found on node Node(node_id=2)
Thank you, what firmware version is on your ring keypad? I’m using Firmware: 2.0.0 without issues personally. I think the newer firmware version might have changed something.
But anyways, I managed to fix it by completely removing the device from Zwave and did a factory reset on the keypad itself. Basically a fresh install, now it works again.
It’s still odd that all of the sudden it didn’t process 2 commands correctly. Maybe just a ghost in the machine, who knows? At least it’s fixed for me.