# =================================================================== # IKEA BILRESA E2489 Dual Button # Blueprint Template v1.1.0 # # Internal Versioning: # schema_version: 1.1.0 # last_updated: 2026-02-27 # # Changelog: # v1.1.0: Added support for long press actions on press (long_press) # v1.0.3: Added not_from/not_to filters to prevent re-triggering on HA/Matter restarts (https://community.home-assistant.io/t/ikea-bilresa-matter-button-blueprint-for-ikea-matter-over-thread-button-actions-scripts-and-entities/962344/12) # v1.0.2: Initial release # # Power-User Notes: # - This device exposes two event entities, one per physical button. # - You must select the correct event entity for Button 1 and Button 2. # - Each press updates the entity state (timestamp) and sets attributes.event_type. # =================================================================== blueprint: name: IKEA BILRESA E2489 Dual Button (Matter) author: censay description: > Full-featured automation for the IKEA BILRESA E2489 Matter dual-button remote. Supports single press, double press, and long press (on press and on release) for both buttons. Uses event entities exposed by Home Assistant for Matter devices. Single-press actions are prioritized for reliability. domain: automation source_url: https://github.com/censay/haos-blueprints homeassistant: min_version: 2025.12.1 input: target_device: name: BILRESA Button Device description: > Select the IKEA BILRESA E2489 matter device. selector: device: filter: - manufacturer: IKEA of Sweden button1_event: name: Button 1 – Event Entity description: > Select the event entity for Button 1 (for example: event.bilresa_dual_button_button_1_2). selector: entity: domain: event button2_event: name: Button 2 – Event Entity description: > Select the event entity for Button 2 (for example: event.bilresa_dual_button_button_2_2). selector: entity: domain: event # --------------------------------------------------------------- # BUTTON 1 ACTIONS # --------------------------------------------------------------- button1_single: name: Button 1 – Single Press description: Action for Button 1 single press (multi_press_1). default: [] selector: action: {} button1_double: name: Button 1 – Double Press description: Action for Button 1 double press (multi_press_2). default: [] selector: action: {} button1_long_press: name: Button 1 – Long Press (on press) description: Action for Button 1 long press start (long_press). default: [] selector: action: {} button1_long: name: Button 1 – Long Press (on release) description: Action for Button 1 long press completion (long_release). default: [] selector: action: {} # --------------------------------------------------------------- # BUTTON 2 ACTIONS # --------------------------------------------------------------- button2_single: name: Button 2 – Single Press description: Action for Button 2 single press (multi_press_1). default: [] selector: action: {} button2_double: name: Button 2 – Double Press description: Action for Button 2 double press (multi_press_2). default: [] selector: action: {} button2_long_press: name: Button 2 – Long Press (on press) description: Action for Button 2 long press start (long_press). default: [] selector: action: {} button2_long: name: Button 2 – Long Press (on release) description: Action for Button 2 long press completion (long_release). default: [] selector: action: {} # =================================================================== # AUTOMATION LOGIC # =================================================================== variables: button1_entity: !input button1_event button2_entity: !input button2_event trigger: - platform: state id: button1 entity_id: !input button1_event not_from: 'unavailable' not_to: 'unavailable' - platform: state id: button2 entity_id: !input button2_event not_from: 'unavailable' not_to: 'unavailable' # Added not_from/not_to filters to prevent re-triggering on HA/Matter restarts; event entities use timestamp states condition: [] action: - variables: press_type: "{{ trigger.to_state.attributes.event_type }}" trigger_id: "{{ trigger.id }}" - choose: # ------------------------------------------------------------- # BUTTON 1 # ------------------------------------------------------------- - conditions: - condition: template value_template: > {{ trigger_id == 'button1' and press_type == 'multi_press_1' }} sequence: !input button1_single - conditions: - condition: template value_template: > {{ trigger_id == 'button1' and press_type == 'multi_press_2' }} sequence: !input button1_double - conditions: - condition: template value_template: > {{ trigger_id == 'button1' and press_type == 'long_press' }} sequence: !input button1_long_press - conditions: - condition: template value_template: > {{ trigger_id == 'button1' and press_type == 'long_release' }} sequence: !input button1_long # ------------------------------------------------------------- # BUTTON 2 # ------------------------------------------------------------- - conditions: - condition: template value_template: > {{ trigger_id == 'button2' and press_type == 'multi_press_1' }} sequence: !input button2_single - conditions: - condition: template value_template: > {{ trigger_id == 'button2' and press_type == 'multi_press_2' }} sequence: !input button2_double - conditions: - condition: template value_template: > {{ trigger_id == 'button2' and press_type == 'long_press' }} sequence: !input button2_long_press - conditions: - condition: template value_template: > {{ trigger_id == 'button2' and press_type == 'long_release' }} sequence: !input button2_long mode: restart