Last active
March 7, 2026 16:03
-
-
Save narendraj9/0b35c21454946caf0b19920067390319 to your computer and use it in GitHub Desktop.
BILRESA scroll wheel (media controls)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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