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).

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
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