Single-Button Selection System for users with limited mobility

Dear,

I am working on a project to assist an individual with limited mobility, including restricted hand movements. To improve accessibility, I would like to create a dashboard featuring six buttons. The interface would cycle through each button in a loop, highlighting the current selection with a red outline (e.g., Button 1 to Button 6). The user could then press a single hardware button to confirm their choice when the desired option is highlighted.

Could you advise whether this is feasible and, if so, how it might be implemented? Any guidance or resources you could provide would be greatly appreciated.

Thank you for your time and support.

Best regards,

Is there a reason for cycling through the buttons and changing the colours?

yes, because the user has limited mobility. He can not move his hands like you and me

Hi Pierre,

Thanks for reaching out and helping others.

I’m thinking this question may be a bit underexposed in this category as usually people presenting projects that are complete or farther along here.

I suggest the ‘configuration’ category may give you access to more of the people writing automatons and scripts, but I didn’t move it for you.

Left the decision up to you as if you feel strongly, it would be OK here as well…

Certainly feasible (the gif makes the movement a bit jerky, sorry about that - it’s quite smooth on the actual dashboard).

CPT2504290159-508x341

I’m sure there are much better ways to do it - this is just an automation running every 13 seconds turning input_booleans on and off in succession.

alias: Test buttons
description: ""
triggers:
  - trigger: time_pattern
    seconds: /13         # Change to the sum of all the delays, plus 1
conditions: []
actions:
  - action: input_boolean.turn_on
    target:
      entity_id: input_boolean.test_1

# Repeat the next section depending on how many buttons there are

  - delay:
      hours: 0
      minutes: 0
      seconds: 2      # Change to whatever delay is preferred by the user
      milliseconds: 0
  - action: input_boolean.turn_off
    target:
      entity_id: input_boolean.test_1
  - action: input_boolean.turn_on
    target:
      entity_id: input_boolean.test_2

# and so on

To get the cycle to repeat itself smoothly, change the automation mode to queued.

A second automation triggered by the physical button could choose an action depending on which input_boolean was “on” at the time.

interesting. Thank you very much

Hi,
Happ y to move it, but I don’t know how

thanks for your help

I would probably use an Input Select instead of Input Booleans. The input_select.select_next action would allow you to cycle based on a Time pattern trigger:

Automation to cycle value of Input Select
alias: Cycle Button Options
description: ""
triggers:
  - trigger: time_pattern
    seconds: /5         # Change to whatever is reasonable for the user
conditions: []
actions:
  - action: input_select.select_next
    target:
      entity_id: input_select.example
Script that fires action based on Chosen option
alias: Choose an Option
fields:
  gen_opt:
    name: Option
    description: The option to run when triggering script from dashboard.
    selector:
      select:
        options:
          - Option 1
          - Option 2
          - Option 3
          - Option 4
          - Option 5
          - Option 6
sequence:
  - variables:
      final_opt: |
        {{ gen_opt | default(states('input_select.example'), true) }}
  - choose:
      - conditions:
          - condition: template
            value_template: "{{ final_opt == 'Option 1' }}"
        sequence:
          #Whatever action goes with this option....
      - conditions:
          - condition: template
            value_template: "{{ final_opt == 'Option 2' }}"
        sequence:
          #Whatever action goes with this option....
Automation triggered by Physical Button
triggers:
  - trigger: state
    entity_id: binary_sensor.physical_button
    to: 'on'
    from: 'off'
    variables:
      choice: "{{states('input_select.example'}}"
conditions: []
actions:
  - action: script.choose_an_option
    data:
      gen_opt: "{{choice}}"
Example Dashboard Card using Custom Button card
square: false
type: grid
cards:
  - type: custom:button-card
    entity: input_select.example
    name: Option 1
    color_type: card
    tap_action:
      action: call-service
      service: script.choose_an_option
      data:
        gen_opt: Option 1
    state:
      - value: Option 1
        color: green
  - type: custom:button-card
    entity: input_select.example
    name: Option 2
    color_type: card
    tap_action:
      action: call-service
      service: script.choose_an_option
      data:
        gen_opt: Option 2
    state:
      - value: Option 2
        color: green
  - type: custom:button-card
    entity: input_select.example
    name: Option 3
    color_type: card
    tap_action:
      action: call-service
      service: script.choose_an_option
      data:
        gen_opt: Option 3
    state:
      - value: Option 3
        color: green
  - type: custom:button-card
    entity: input_select.example
    name: Option 4
    color_type: card
    tap_action:
      action: call-service
      service: script.choose_an_option
      data:
        gen_opt: Option 4
    state:
      - value: Option 4
        color: green
  - type: custom:button-card
    entity: input_select.example
    name: Option 5
    color_type: card
    tap_action:
      action: call-service
      service: script.choose_an_option
      data:
        gen_opt: Option 5
    state:
      - value: Option 5
        color: green
  - type: custom:button-card
    entity: input_select.example
    name: Option 6
    color_type: card
    tap_action:
      action: call-service
      service: script.choose_an_option
      data:
        gen_opt: Option 6
    state:
      - value: Option 6
        color: green