commit bef38247853aadc6ef9664c306b46aa157729c0a Author: Damien Rubio Date: Tue Feb 20 14:48:37 2024 +0100 feat(ikea-rodret): init with existing gists diff --git a/ikea-rodret_E2201_ZHA-Z2M_control-anything.yaml.yaml b/ikea-rodret_E2201_ZHA-Z2M_control-anything.yaml.yaml new file mode 100644 index 0000000..889892e --- /dev/null +++ b/ikea-rodret_E2201_ZHA-Z2M_control-anything.yaml.yaml @@ -0,0 +1,412 @@ +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 \ No newline at end of file diff --git a/ikea-rodret_E2201_ZHA-Z2M_control-light.yaml.yaml b/ikea-rodret_E2201_ZHA-Z2M_control-light.yaml.yaml new file mode 100644 index 0000000..284e08d --- /dev/null +++ b/ikea-rodret_E2201_ZHA-Z2M_control-light.yaml.yaml @@ -0,0 +1,222 @@ +blueprint: + name: IKEA Rodret Dimmer Light Control (ZHA/Z2M) + description: "## Control Light with IKEA RODRET Dimmer remote (v1.0) + + + 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** button to turn on the light (Optional: set the target brightness + by enabling **Helper - Force Brightness** and setting a **Helper - Brightness** value) + + - Press the **off** button to turn off the light + + - Press and hold the **on** button to increase the brightness + + - Press and hold the **off** button to decrease the brightness down to 1% + " + 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 + light: + name: Light + description: Light to control + selector: + entity: + filter: + domain: light + multiple: false + helper_force_brightness: + name: Helper - Force brightness + description: Force the brightness to value below when light turns on. + default: false + selector: + boolean: {} + helper_brightness: + name: Helper - Brightness + description: + Target light brightness when turning on. Requires **Helper - Force brightness** + to be enabled. + default: 50 + selector: + number: + unit_of_measurement: "%" + min: 1.0 + max: 100.0 + step: 1.0 + mode: slider +mode: restart +max_exceeded: silent +trigger_variables: + z2m_base_topic: !input base_topic + z2m_controller: !input remote_name + zha_controller: !input remote_device +trigger: + - platform: event + event_type: zha_event + event_data: + device_id: "{{ zha_controller }}" + 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_controller }}" + 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_controller }}" + 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_controller }}" + 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_controller }}" + command: stop_with_on_off + endpoint_id: 1 + cluster_id: 8 + id: release-zha + - platform: mqtt + topic: "{{ z2m_base_topic ~ '/' ~ z2m_controller ~ '/action' }}" + payload: "brightness_stop" + id: release-z2m +action: + - variables: + helper_force_brightness: !input helper_force_brightness + helper_hold_delay: 0.05 + helper_hold_dim_step: 5 + light: !input light + - choose: + - conditions: + - condition: trigger + id: + - press-on-zha + - press-on-z2m + sequence: + - choose: + - conditions: "{{ helper_force_brightness }}" + sequence: + - service: light.turn_on + target: + entity_id: !input light + data: + transition: 1 + brightness_pct: !input helper_brightness + default: + - service: light.turn_on + target: + entity_id: !input light + data: + transition: 1 + - conditions: + - condition: trigger + id: + - press-off-zha + - press-off-z2m + sequence: + - service: light.turn_off + target: + entity_id: !input light + data: + transition: 1 + - conditions: + - condition: trigger + id: + - hold-on-zha + - hold-on-z2m + sequence: + - repeat: + while: + - condition: trigger + id: + - hold-on-zha + - hold-on-z2m + sequence: + - parallel: + - service: light.turn_on + target: + entity_id: !input light + data: + brightness_step_pct: "{{ helper_hold_dim_step }}" + - delay: "{{ helper_hold_delay }}" + - conditions: + - condition: trigger + id: + - hold-off-zha + - hold-off-z2m + sequence: + - repeat: + while: + - condition: template + value_template: + "{{ state_attr(light, 'brightness') | int / 255 > helper_hold_dim_step/100 + }}" + sequence: + - parallel: + - service: light.turn_on + data: + brightness_step_pct: "{{ helper_hold_dim_step | int * -1 }}" + target: + entity_id: !input light + - delay: "{{ helper_hold_delay }}" + - service: light.turn_on + data: + brightness_pct: 1 + target: + entity_id: !input light \ No newline at end of file