Skip to content

Instantly share code, notes, and snippets.

@narendraj9
Last active March 7, 2026 16:03
Show Gist options
  • Select an option

  • Save narendraj9/0b35c21454946caf0b19920067390319 to your computer and use it in GitHub Desktop.

Select an option

Save narendraj9/0b35c21454946caf0b19920067390319 to your computer and use it in GitHub Desktop.
BILRESA scroll wheel (media controls)
blueprint:
name: BILRESA Scroll Wheel (Media Player Controller)
description: Control a media player using the different layers of an IKEA BILRESA scroll wheel.
domain: automation
input:
target_player:
name: Media Player
description: The media player to control.
selector:
entity:
domain: media_player
layer_1_up:
name: Layer 1 - Scroll Up Event (Button 1)
description: Event entity for Layer 1 scrolling up. Usually controls volume up.
selector:
entity:
domain: event
default: null
layer_1_down:
name: Layer 1 - Scroll Down Event (Button 2)
description: Event entity for Layer 1 scrolling down. Usually controls volume down.
selector:
entity:
domain: event
default: null
layer_1_click:
name: Layer 1 - Click Event (Button 3)
description: Event entity for Layer 1 center click. Usually controls play/pause.
selector:
entity:
domain: event
default: null
layer_2_up:
name: Layer 2 - Scroll Up Event (Button 4)
description: Event entity for Layer 2 scrolling up. Usually controls next track.
selector:
entity:
domain: event
default: null
layer_2_down:
name: Layer 2 - Scroll Down Event (Button 5)
description: Event entity for Layer 2 scrolling down. Usually controls previous track.
selector:
entity:
domain: event
default: null
layer_3_click:
name: Layer 3 - Click Event (Button 6)
description: Event entity for Layer 3 center click. Configure any action below.
selector:
entity:
domain: event
default: null
layer_3_action:
name: Layer 3 - Action
description: Action to perform when Layer 3 is clicked.
selector:
action:
default: null
layer_3_up:
name: Layer 3 - Scroll Up Event (Button 7)
description: Event entity for Layer 3 scrolling up.
selector:
entity:
domain: event
default: null
layer_3_up_action:
name: Layer 3 - Scroll Up Action
description: Action to perform when scrolling up on Layer 3.
selector:
action:
default: null
layer_3_down:
name: Layer 3 - Scroll Down Event (Button 8)
description: Event entity for Layer 3 scrolling down.
selector:
entity:
domain: event
default: null
layer_3_down_action:
name: Layer 3 - Scroll Down Action
description: Action to perform when scrolling down on Layer 3.
selector:
action:
default: null
mode: queued
trigger:
- trigger: state
entity_id: !input layer_1_up
id: layer_1_up
- trigger: state
entity_id: !input layer_1_down
id: layer_1_down
- trigger: state
entity_id: !input layer_1_click
id: layer_1_click
- trigger: state
entity_id: !input layer_2_up
id: layer_2_up
- trigger: state
entity_id: !input layer_2_down
id: layer_2_down
- trigger: state
entity_id: !input layer_3_click
id: layer_3_click
- trigger: state
entity_id: !input layer_3_up
id: layer_3_up
- trigger: state
entity_id: !input layer_3_down
id: layer_3_down
condition: []
action:
- choose:
- conditions:
- condition: trigger
id: layer_1_up
- condition: template
value_template: "{{ trigger.to_state is not none and trigger.to_state.entity_id is not none }}"
sequence:
- action: media_player.volume_up
target:
entity_id: !input target_player
- conditions:
- condition: trigger
id: layer_1_down
- condition: template
value_template: "{{ trigger.to_state is not none and trigger.to_state.entity_id is not none }}"
sequence:
- action: media_player.volume_down
target:
entity_id: !input target_player
- conditions:
- condition: trigger
id: layer_1_click
- condition: template
value_template: "{{ trigger.to_state is not none and trigger.to_state.entity_id is not none }}"
sequence:
- action: media_player.media_play_pause
target:
entity_id: !input target_player
- conditions:
- condition: trigger
id: layer_2_up
- condition: template
value_template: "{{ trigger.to_state is not none and trigger.to_state.entity_id is not none }}"
sequence:
- action: media_player.media_next_track
target:
entity_id: !input target_player
- conditions:
- condition: trigger
id: layer_2_down
- condition: template
value_template: "{{ trigger.to_state is not none and trigger.to_state.entity_id is not none }}"
sequence:
- action: media_player.media_previous_track
target:
entity_id: !input target_player
- conditions:
- condition: trigger
id: layer_3_click
- condition: template
value_template: "{{ trigger.to_state is not none and trigger.to_state.entity_id is not none and layer_3_action is not none }}"
sequence:
- action: !input layer_3_action
- conditions:
- condition: trigger
id: layer_3_up
- condition: template
value_template: "{{ trigger.to_state is not none and trigger.to_state.entity_id is not none and layer_3_up_action is not none }}"
sequence:
- action: !input layer_3_up_action
- conditions:
- condition: trigger
id: layer_3_down
- condition: template
value_template: "{{ trigger.to_state is not none and trigger.to_state.entity_id is not none and layer_3_down_action is not none }}"
sequence:
- action: !input layer_3_down_action
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment