blueprint: name: IKEA Rodret Dimmer Controls (ZHA/Z2M) description: "## Control anything with IKEA RODRET Dimmer remote (v1.2) Only for use with [ZHA](https://www.home-assistant.io/integrations/zha/) or Zigbee2MQTT (cf [MQTT](https://www.home-assistant.io/integrations/mqtt) + [Z2M addon](https://www.zigbee2mqtt.io/guide/installation/03_ha_addon.html)). Available controls: - Press the **on** or **off** buttons - Double press the **on** or **off** buttons (optional) in **Helper - Double press delay** interval. When disabled, there will be no delay for the simple press actions - Press and hold the **on**/**off** buttons. Actions will be executed every **Helper - Hold delay**, but maximum **Helper - Max number of loops** times. " domain: automation input: remote_device: name: (ZHA) Remote description: IKEA remote to use. **_Choose if you are using ZHA._** default: "" selector: device: filter: integration: zha manufacturer: IKEA of Sweden model: RODRET Dimmer multiple: false remote_name: name: (Zigbee2MQTT) Remote Name description: The name of the controller (e.g. IKEA Rodret). **_Choose if you are using Zigbee2MQTT._** default: "" base_topic: name: (Zigbee2MQTT) Base mqtt topic description: The topic configured in [Z2M addon](https://www.zigbee2mqtt.io/guide/usage/mqtt_topics_and_messages.html). default: zigbee2mqtt on_press_action: name: On - Single press action description: Choose action(s) to run when **on** button is pressed. default: [] selector: action: {} off_press_action: name: Off - Single press action description: Choose action(s) to run when **off** button is **pressed**. default: [] selector: action: {} on_hold_action: name: On - Hold action description: Choose action(s) to run when **on** button is **pressed and hold**. default: [] selector: action: {} off_hold_action: name: Off - Hold action description: Choose action(s) to run when **off** button is **pressed and hold**. default: [] selector: action: {} on_double_press: name: On - Double press event description: Choose whether or not to expose the virtual **double press** event for the **on** button. Turn this on if you are providing an action for the **on** button double press event. default: false selector: boolean: {} on_double_press_action: name: On - Double press action description: Choose action(s) to run when pressing the **on** button twice in **Helper - Double press delay** interval. **On - Double press event** must be exposed. default: [] selector: action: {} off_double_press: name: Off - Double press event description: Choose whether or not to expose the virtual **double press** event for the **off** button. Turn this on if you are providing an action for the **off** button double press event. default: false selector: boolean: {} off_double_press_action: name: Off - Double press action description: Choose action(s) to run when pressing the **off** button twice in **Helper - Double press delay** interval. **Off - Double press event** must be exposed. default: [] selector: action: {} helper_double_press_delay: name: Helper - Double press delay description: Max delay between the first and the second button press for the **Double press events**. Provide a value only if you are using a double press action. Increase this value if you notice that the double press action is not triggered properly. default: 250 selector: number: unit_of_measurement: milliseconds min: 100.0 max: 5000.0 step: 10.0 mode: slider helper_hold_delay: name: Helper - Hold delay description: Delay between the execution of the **Hold** action(s). default: 250 selector: number: unit_of_measurement: milliseconds min: 100.0 max: 5000.0 step: 10.0 mode: slider helper_max_loops: name: Helper - Max number of loops description: Maximum number of loops when holding down a button. default: 20 selector: number: min: 1.0 max: 1000.0 step: 1.0 mode: slider mode: single max_exceeded: silent trigger_variables: z2m_base_topic: !input base_topic z2m_controller: !input remote_name zha_remote: !input remote_device trigger: - platform: event event_type: zha_event event_data: device_id: "{{ zha_remote }}" command: "on" cluster_id: 6 endpoint_id: 1 id: press-on-zha - platform: mqtt topic: "{{ z2m_base_topic ~ '/' ~ z2m_controller ~ '/action' }}" payload: "on" id: press-on-z2m - platform: event event_type: zha_event event_data: device_id: "{{ zha_remote }}" command: "off" cluster_id: 6 endpoint_id: 1 id: press-off-zha - platform: mqtt topic: "{{ z2m_base_topic ~ '/' ~ z2m_controller ~ '/action' }}" payload: "off" id: press-off-z2m - platform: event event_type: zha_event event_data: device_id: "{{ zha_remote }}" command: "move_with_on_off" cluster_id: 8 endpoint_id: 1 args: [0, 83] id: hold-on-zha - platform: mqtt topic: "{{ z2m_base_topic ~ '/' ~ z2m_controller ~ '/action' }}" payload: "brightness_move_up" id: hold-on-z2m - platform: event event_type: zha_event event_data: device_id: "{{ zha_remote }}" command: "move" cluster_id: 8 endpoint_id: 1 args: [1, 83, 0, 0] id: hold-off-zha - platform: mqtt topic: "{{ z2m_base_topic ~ '/' ~ z2m_controller ~ '/action' }}" payload: "brightness_move_down" id: hold-off-z2m - platform: event event_type: zha_event event_data: device_id: "{{ zha_remote }}" endpoint_id: 1 cluster_id: 8 command: stop_with_on_off id: release-zha - platform: mqtt topic: "{{ z2m_base_topic ~ '/' ~ z2m_controller ~ '/action' }}" payload: "brightness_stop" id: release-z2m action: - variables: on_double_press: !input on_double_press off_double_press: !input off_double_press zha_remote: !input remote_device z2m_base_topic: !input base_topic z2m_controller: !input remote_name - choose: - conditions: - condition: trigger id: - press-on-zha - press-on-z2m sequence: - if: - condition: template value_template: "{{ on_double_press }}" then: - choose: - conditions: - condition: trigger id: - press-on-zha sequence: - wait_for_trigger: - platform: event event_type: zha_event event_data: device_id: "{{ zha_remote }}" command: "on" cluster_id: 6 endpoint_id: 1 timeout: milliseconds: !input helper_double_press_delay continue_on_timeout: true - if: - condition: template value_template: "{{ wait.trigger.idx is defined }}" then: !input on_double_press_action else: !input on_press_action - conditions: - condition: trigger id: - press-on-z2m sequence: - wait_for_trigger: - platform: mqtt topic: "{{ z2m_base_topic ~ '/' ~ z2m_controller ~ '/action' }}" payload: "on" timeout: milliseconds: !input helper_double_press_delay continue_on_timeout: true - if: - condition: template value_template: "{{ wait.trigger.idx is defined }}" then: !input on_double_press_action else: !input on_press_action else: !input on_press_action - conditions: - condition: trigger id: - press-off-zha - press-off-z2m sequence: - if: - condition: template value_template: "{{ off_double_press }}" then: - choose: - conditions: - condition: trigger id: - press-off-zha sequence: - wait_for_trigger: - platform: event event_type: zha_event event_data: device_id: "{{ zha_remote }}" command: "off" cluster_id: 6 endpoint_id: 1 timeout: milliseconds: !input helper_double_press_delay continue_on_timeout: true - if: - condition: template value_template: "{{ wait.trigger.idx is defined }}" then: !input off_double_press_action else: !input off_press_action - conditions: - condition: trigger id: - press-off-z2m sequence: - wait_for_trigger: - platform: mqtt topic: "{{ z2m_base_topic ~ '/' ~ z2m_controller ~ '/action' }}" payload: "off" timeout: milliseconds: !input helper_double_press_delay continue_on_timeout: true - if: - condition: template value_template: "{{ wait.trigger.idx is defined }}" then: !input off_double_press_action else: !input off_press_action else: !input off_press_action - conditions: - condition: trigger id: - hold-on-zha - hold-on-z2m sequence: - repeat: count: !input helper_max_loops sequence: - parallel: - sequence: !input on_hold_action - sequence: - choose: - conditions: - condition: trigger id: - hold-on-zha sequence: - wait_for_trigger: - platform: event event_type: zha_event event_data: device_id: "{{ zha_remote }}" command: "stop_with_on_off" cluster_id: 8 endpoint_id: 1 timeout: milliseconds: !input helper_hold_delay continue_on_timeout: true - if: - condition: template value_template: "{{ wait.trigger.idx is defined }}" then: - stop: button released - conditions: - condition: trigger id: - hold-on-z2m sequence: - wait_for_trigger: - platform: mqtt topic: "{{ z2m_base_topic ~ '/' ~ z2m_controller ~ '/action' }}" payload: "brightness_stop" timeout: milliseconds: !input helper_hold_delay continue_on_timeout: true - if: - condition: template value_template: "{{ wait.trigger.idx is defined }}" then: - stop: button released - conditions: - condition: trigger id: - hold-off-zha - hold-off-z2m sequence: - repeat: count: !input helper_max_loops sequence: - parallel: - sequence: !input off_hold_action - sequence: - choose: - conditions: - condition: trigger id: - hold-off-zha sequence: - wait_for_trigger: - platform: event event_type: zha_event event_data: device_id: "{{ zha_remote }}" command: "stop_with_on_off" cluster_id: 8 endpoint_id: 1 timeout: milliseconds: !input helper_hold_delay continue_on_timeout: true - if: - condition: template value_template: "{{ wait.trigger.idx is defined }}" then: - stop: button released - conditions: - condition: trigger id: - hold-off-z2m sequence: - wait_for_trigger: - platform: mqtt topic: "{{ z2m_base_topic ~ '/' ~ z2m_controller ~ '/action' }}" payload: "brightness_stop" timeout: milliseconds: !input helper_hold_delay continue_on_timeout: true - if: - condition: template value_template: "{{ wait.trigger.idx is defined }}" then: - stop: button released