Ring Keypad - Scene Controller

Devices that support central scenes generate events when certain buttons are pressed. These events can then be used as triggers in your automations. Some of the events that devices generate includes Single Press, Double Press, Press and Hold, Release, and so on.

While the ring keypad doesn’t generate central scene events it does generate events that can be used in a fashion similar to a scene controller.

One other thing I recommend you do is change the key cache values. The keypad caches the keys that are pressed then sends them when the timeout is met or the number of keys is pressed. For example the default timeout value is 4 and the default key cache size is 8. This means I would I have press 8 numbers before an event is generated or press less than 8 numbers and wait 4 seconds after the last number is pressed before an event is generated. For maximum responsiveness I set my timeout to 1 and the key cache size to 4.

Entry Control

Screenshot 2025-01-12 at 10-10-04 Settings – Home Assistant

Open your Home Assistant instance and show the blueprint import dialog with a specific blueprint pre-filled.

blueprint:
  name: Ring Keypad Scenes
  description: Lets you use the Ring Keypad Like a Scene Controller.
  domain: automation
  input:
    ring_keypad:
      name: Ring Keypad
      description: The Ring Keypad to use in this blueprint.
      selector:
        device:
          integration: zwave_js
          manufacturer: Ring
          model: 4AK1SZ


    automation_mode:
      name: Automation mode
      description: See https://www.home-assistant.io/docs/automation/modes/
      default: single
      selector:
        select:
          options:
            - single
            - restart
            - queued
            - parallel


    number_1_1:
      name: Number 1 Pressed
      description: Action to run when number 1 is pressed once.
      default: []
      selector:
        action: {}
    number_2_1:
      name: Number 2 Pressed 
      description: Action to run when number 2 is pressed once.
      default: []
      selector:
        action: {}
    number_3_1:
      name: Number 3 Pressed
      description: Action to run when number 3 is pressed once.
      default: []
      selector:
        action: {}
    number_4_1:
      name: Number 4 Pressed 
      description: Action to run when number 4 is pressed once.
      default: []
      selector:
        action: {}
    number_5_1:
      name: Number 5 Pressed
      description: Action to run when number 5 is pressed once.
      default: []
      selector:
        action: {}
    number_6_1:
      name: Number 6 Pressed 
      description: Action to run when number 6 is pressed once.
      default: []
      selector:
        action: {}
    number_7_1:
      name: Number 7 Pressed
      description: Action to run when number 7 is pressed once.
      default: []
      selector:
        action: {}
    number_8_1:
      name: Number 8 Pressed 
      description: Action to run when number 8 is pressed once.
      default: []
      selector:
        action: {}
    number_9_1:
      name: Number 9 Pressed
      description: Action to run when number 9 is pressed once.
      default: []
      selector:
        action: {}
    number_0_1:
      name: Number 0 Pressed 
      description: Action to run when number 0 is pressed once.
      default: []
      selector:
        action: {}

    number_1_2:
      name: Number 1 Pressed 2x
      description: Action to run when number 1 is pressed twice.
      default: []
      selector:
        action: {}
    number_2_2:
      name: Number 2 Pressed 2x 
      description: Action to run when number 2 is pressed twice.
      default: []
      selector:
        action: {}
    number_3_2:
      name: Number 3 Pressed 2x
      description: Action to run when number 3 is pressed twice.
      default: []
      selector:
        action: {}
    number_4_2:
      name: Number 4 Pressed 2x 
      description: Action to run when number 4 is pressed twice.
      default: []
      selector:
        action: {}
    number_5_2:
      name: Number 5 Pressed 2x
      description: Action to run when number 5 is pressed twice.
      default: []
      selector:
        action: {}
    number_6_2:
      name: Number 6 Pressed 2x 
      description: Action to run when number 6 is pressed twice.
      default: []
      selector:
        action: {}
    number_7_2:
      name: Number 7 Pressed 2x
      description: Action to run when number 7 is pressed twice.
      default: []
      selector:
        action: {}
    number_8_2:
      name: Number 8 Pressed 2x 
      description: Action to run when number 8 is pressed twice.
      default: []
      selector:
        action: {}
    number_9_2:
      name: Number 9 Pressed 2x
      description: Action to run when number 9 is pressed twice.
      default: []
      selector:
        action: {}
    number_0_2:
      name: Number 0 Pressed 2x 
      description: Action to run when number 0 is pressed twice.
      default: []
      selector:
        action: {}

    number_1_held:
      name: Number 1 Held
      description: Action to run when number 1 is held.
      default: []
      selector:
        action: {}
    number_2_held:
      name: Number 2 Held 
      description: Action to run when number 2 is held.
      default: []
      selector:
        action: {}
    number_3_held:
      name: Number 3 Held
      description: Action to run when number 3 is held.
      default: []
      selector:
        action: {}
    number_4_held:
      name: Number 4 Held 
      description: Action to run when number 4 is held.
      default: []
      selector:
        action: {}
    number_5_held:
      name: Number 5 Held
      description: Action to run when number 5 is held.
      default: []
      selector:
        action: {}
    number_6_held:
      name: Number 6 Held 
      description: Action to run when number 6 is held.
      default: []
      selector:
        action: {}
    number_7_held:
      name: Number 7 Held
      description: Action to run when number 7 is held.
      default: []
      selector:
        action: {}
    number_8_held:
      name: Number 8 Held 
      description: Action to run when number 8 is held.
      default: []
      selector:
        action: {}
    number_9_held:
      name: Number 9 Held
      description: Action to run when number 9 is held.
      default: []
      selector:
        action: {}
    number_0_held:
      name: Number 0 Held 
      description: Action to run when number 0 is held.
      default: []
      selector:
        action: {}

    disarm_all:
      name: Disarm All Button Pressed 
      description: Action to run when the Disarm All button is pressed.
      default: []
      selector:
        action: {}
    home:
      name: Home Button Pressed 
      description: Action to run when the Home button is pressed.
      default: []
      selector:
        action: {}
    away:
      name: Away Button Pressed 
      description: Action to run when the Away button is pressed.
      default: []
      selector:
        action: {}
    enter:
      name: Enter Button Pressed 
      description: Action to run when the Enter button is pressed.
      default: []
      selector:
        action: {}
    cancel:
      name: Cancel Button Pressed 
      description: Action to run when the Cancel button is pressed.
      default: []
      selector:
        action: {}
    medical:
      name: Medical Button Pressed
      description: Action to run when the Medical button is pressed.
      default: []
      selector:
        action: {}
    fire:
      name: Fire Button Pressed
      description: Action to run when the Fire button is pressed.
      default: []
      selector:
        action: {}
    police:
      name: Police Button Pressed 
      description: Action to run when the Police button is pressed.
      default: []
      selector:
        action: {}





trigger:
  platform: event
  event_type: zwave_js_notification
  event_data:
    command_class_name: Entry Control
    device_id: !input ring_keypad
action:
  - choose:
      - conditions: "{{ trigger.event.data.event_data == '1' }}"
        sequence: !input number_1_1
      - conditions: "{{ trigger.event.data.event_data == '2' }}"
        sequence: !input number_2_1
      - conditions: "{{ trigger.event.data.event_data == '3' }}"
        sequence: !input number_3_1
      - conditions: "{{ trigger.event.data.event_data == '4' }}"
        sequence: !input number_4_1
      - conditions: "{{ trigger.event.data.event_data == '5' }}"
        sequence: !input number_5_1
      - conditions: "{{ trigger.event.data.event_data == '6' }}"
        sequence: !input number_6_1
      - conditions: "{{ trigger.event.data.event_data == '7' }}"
        sequence: !input number_7_1
      - conditions: "{{ trigger.event.data.event_data == '8' }}"
        sequence: !input number_8_1
      - conditions: "{{ trigger.event.data.event_data == '9' }}"
        sequence: !input number_9_1
      - conditions: "{{ trigger.event.data.event_data == '0' }}"
        sequence: !input number_0_1

      - conditions: "{{ trigger.event.data.event_data == '11' }}"
        sequence: !input number_1_2
      - conditions: "{{ trigger.event.data.event_data == '22' }}"
        sequence: !input number_2_2
      - conditions: "{{ trigger.event.data.event_data == '33' }}"
        sequence: !input number_3_2
      - conditions: "{{ trigger.event.data.event_data == '44' }}"
        sequence: !input number_4_2
      - conditions: "{{ trigger.event.data.event_data == '55' }}"
        sequence: !input number_5_2
      - conditions: "{{ trigger.event.data.event_data == '66' }}"
        sequence: !input number_6_2
      - conditions: "{{ trigger.event.data.event_data == '77' }}"
        sequence: !input number_7_2
      - conditions: "{{ trigger.event.data.event_data == '88' }}"
        sequence: !input number_8_2
      - conditions: "{{ trigger.event.data.event_data == '99' }}"
        sequence: !input number_9_2
      - conditions: "{{ trigger.event.data.event_data == '00' }}"
        sequence: !input number_0_2

      - conditions: "{{ trigger.event.data.event_data == 'A' }}"
        sequence: !input number_1_held
      - conditions: "{{ trigger.event.data.event_data == 'B' }}"
        sequence: !input number_2_held
      - conditions: "{{ trigger.event.data.event_data == 'C' }}"
        sequence: !input number_3_held
      - conditions: "{{ trigger.event.data.event_data == 'D' }}"
        sequence: !input number_4_held
      - conditions: "{{ trigger.event.data.event_data == 'E' }}"
        sequence: !input number_5_held
      - conditions: "{{ trigger.event.data.event_data == 'F' }}"
        sequence: !input number_6_held
      - conditions: "{{ trigger.event.data.event_data == 'G' }}"
        sequence: !input number_7_held
      - conditions: "{{ trigger.event.data.event_data == 'H' }}"
        sequence: !input number_8_held
      - conditions: "{{ trigger.event.data.event_data == 'I' }}"
        sequence: !input number_9_held
      - conditions: "{{ trigger.event.data.event_data == '@' }}"
        sequence: !input number_0_held

      - conditions: "{{ trigger.event.data.event_type_label == 'Disarm all' }}"
        sequence: !input disarm_all
      - conditions: "{{ trigger.event.data.event_type_label == 'Home' }}"
        sequence: !input home
      - conditions: "{{ trigger.event.data.event_type_label == 'Away' }}"
        sequence: !input away
      - conditions: "{{ trigger.event.data.event_type_label == 'Enter' }}"
        sequence: !input enter
      - conditions: "{{ trigger.event.data.event_type_label == 'Cancel' }}"
        sequence: !input cancel
      - conditions: "{{ trigger.event.data.event_type_label == 'Medical alert' }}"
        sequence: !input medical
      - conditions: "{{ trigger.event.data.event_type_label == 'Fire' }}"
        sequence: !input fire
      - conditions: "{{ trigger.event.data.event_type_label == 'Police' }}"
        sequence: !input police


mode: single
max_exceeded: silent

1 Like

Hello Cornell Williams,

Thanks for contributing to the community with a new Blueprint.

I have a suggestion for you. Many people who are not familiar with directory structures will have problems installing this without the Home Assistant MY tools.

Adding a MY link for this Blueprint to your top post would help them a lot.

Here is the link to make that.
Create a link – My Home Assistant

Thanks for that I was wondering how that worked.

I think that fixed it?

1 Like