Files
ha-blueprints/ikea_E2201-E2213_ZHA-Z2M_control-light.yaml
Damien f5c2b9d6e1 feat: smoothen transition when dimming light (#9)
* feat: add transition when dimming light

* chore: add sections to simplify the blueprint

* chore: hardcode source_url

* feat: rework dimming down mechanism

* chore: add CODEOWNERS
2024-12-20 14:34:04 +01:00

356 lines
10 KiB
YAML

blueprint:
homeassistant:
min_version: 2024.10.0
author: damru
domain: automation
name: IKEA Rodret (E2201) or IKEA Somrig (E2213) Light control (ZHA/Z2M)
description: >
## Control a light with **IKEA RODRET** or **IKEA SOMRIG** remotes
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 **on** (Rodret) or **1 dot** (Somrig) to turn on the light
(Optional: set the target brightness by enabling **Force Brightness** and setting a **Brightness** value)
- Press **off** (Rodret) or **2 dots** (Somrig) to turn off the light
- Hold **on** (Rodret) or **1 dot** button to increase the brightness
- Hold **off** (Rodret) or **2 dots** button to decrease the brightness down to 1%
source_url: https://github.com/damru/ha-blueprints/blob/main/ikea_E2201-E2213_ZHA-Z2M_control-light.yaml
input:
remote_device:
name: Remote
description: >
IKEA remote (Rodret, Somrig) to use.
default: ""
selector:
device:
filter:
- integration: zha
manufacturer: IKEA of Sweden
model: RODRET Dimmer
- integration: zha
manufacturer: IKEA of Sweden
model: SOMRIG shortcut button
- integration: mqtt
manufacturer: IKEA
model: RODRET wireless dimmer/power switch (E2201)
- integration: mqtt
manufacturer: IKEA
model: SOMRIG shortcut button (E2213)
multiple: false
light:
name: Light
description: Light to control
selector:
entity:
filter:
domain: light
multiple: false
brightness_section:
name: Brightness
icon: mdi:lightbulb-on-50
collapsed: true
input:
helper_force_brightness:
name: Force brightness
description: Force the brightness to **Brightness** value when light turns on.
default: false
selector:
boolean: {}
helper_brightness:
name: Brightness
description:
Target light brightness when turning on. Requires **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
triggers:
# RODRET - E2201
- trigger: event
event_type: zha_event
event_data:
device_id: !input remote_device
command: "on"
cluster_id: 6
endpoint_id: 1
id: press-on-zha-e2201
- trigger: device
domain: mqtt
device_id: !input remote_device
type: action
subtype: "on"
id: press-on-z2m-e2201
- trigger: event
event_type: zha_event
event_data:
device_id: !input remote_device
command: "off"
cluster_id: 6
endpoint_id: 1
id: press-off-zha-e2201
- trigger: device
domain: mqtt
device_id: !input remote_device
type: action
subtype: "off"
id: press-off-z2m-e2201
- trigger: event
event_type: zha_event
event_data:
device_id: !input remote_device
command: "move_with_on_off"
cluster_id: 8
endpoint_id: 1
args: [0, 83]
id: hold-on-zha-e2201
- trigger: device
domain: mqtt
device_id: !input remote_device
type: action
subtype: "brightness_move_up"
id: hold-on-z2m-e2201
- trigger: event
event_type: zha_event
event_data:
device_id: !input remote_device
command: "move"
cluster_id: 8
endpoint_id: 1
args: [1, 83, 0, 0]
id: hold-off-zha-e2201
- trigger: device
domain: mqtt
device_id: !input remote_device
type: action
subtype: "brightness_move_down"
id: hold-off-z2m-e2201
- trigger: event
event_type: zha_event
event_data:
device_id: !input remote_device
command: stop_with_on_off
endpoint_id: 1
cluster_id: 8
id: release-zha-e2201
- trigger: device
domain: mqtt
device_id: !input remote_device
type: action
subtype: "brightness_stop"
id: release-z2m-e2201
# SOMRIG - E2213
- trigger: event
event_type: zha_event
event_data:
device_id: !input remote_device
command: "short_release"
endpoint_id: 1
id: press-dots1-zha-e2213
- trigger: device
domain: mqtt
device_id: !input remote_device
type: action
subtype: "1_short_release"
id: press-dots1-z2m-e2213
- trigger: event
event_type: zha_event
event_data:
device_id: !input remote_device
command: "short_release"
endpoint_id: 2
id: press-dots2-zha-e2213
- trigger: device
domain: mqtt
device_id: !input remote_device
type: action
subtype: "2_short_release"
id: press-dots2-z2m-e2213
- trigger: event
event_type: zha_event
event_data:
device_id: !input remote_device
command: "multi_press_complete"
endpoint_id: 1
id: double-press-dots1-zha-e2213
- trigger: device
domain: mqtt
device_id: !input remote_device
type: action
subtype: "1_double_press"
id: double-press-dots1-z2m-e2213
- trigger: event
event_type: zha_event
event_data:
device_id: !input remote_device
command: "multi_press_complete"
endpoint_id: 2
id: double-press-dots2-zha-e2213
- trigger: device
domain: mqtt
device_id: !input remote_device
type: action
subtype: "2_double_press"
id: double-press-dots2-z2m-e2213
- trigger: event
event_type: zha_event
event_data:
device_id: !input remote_device
command: "long_press"
endpoint_id: 1
id: hold-dots1-zha-e2213
- trigger: device
domain: mqtt
device_id: !input remote_device
type: action
subtype: "1_long_press"
id: hold-dots1-z2m-e2213
- trigger: event
event_type: zha_event
event_data:
device_id: !input remote_device
command: "long_press"
endpoint_id: 2
id: hold-dots2-zha-e2213
- trigger: device
domain: mqtt
device_id: !input remote_device
type: action
subtype: "2_long_press"
id: hold-dots2-z2m-e2213
- trigger: event
event_type: zha_event
event_data:
device_id: !input remote_device
command: "long_release"
endpoint_id: 1
id: release-hold-dots1-zha-e2213
- trigger: device
domain: mqtt
device_id: !input remote_device
type: action
subtype: "1_long_release"
id: release-hold-dots1-z2m-e2213
- trigger: event
event_type: zha_event
event_data:
device_id: !input remote_device
command: "long_release"
endpoint_id: 2
id: release-hold-dots2-zha-e2213
- trigger: device
domain: mqtt
device_id: !input remote_device
type: action
subtype: "2_long_release"
id: release-hold-dots2-z2m-e2213
actions:
- variables:
helper_force_brightness: !input helper_force_brightness
helper_hold_delay: 0.1
helper_hold_dim_step: 4
light: !input light
- choose:
- conditions:
- condition: trigger
id:
- press-on-zha-e2201
- press-on-z2m-e2201
- press-dots1-zha-e2213
- press-dots1-z2m-e2213
sequence:
- choose:
- conditions: "{{ helper_force_brightness }}"
sequence:
- action: light.turn_on
target:
entity_id: !input light
data:
brightness_pct: !input helper_brightness
default:
- action: light.turn_on
target:
entity_id: !input light
data: {}
- conditions:
- condition: trigger
id:
- press-off-zha-e2201
- press-off-z2m-e2201
- press-dots2-zha-e2213
- press-dots2-z2m-e2213
sequence:
- action: light.turn_off
target:
entity_id: !input light
data: {}
- conditions:
- condition: trigger
id:
- hold-on-zha-e2201
- hold-on-z2m-e2201
- hold-dots1-zha-e2213
- hold-dots1-z2m-e2213
sequence:
- repeat:
while:
- condition: trigger
id:
- hold-on-zha-e2201
- hold-on-z2m-e2201
- hold-dots1-zha-e2213
- hold-dots1-z2m-e2213
sequence:
- parallel:
- action: light.turn_on
target:
entity_id: !input light
data:
brightness_step_pct: "{{ helper_hold_dim_step }}"
transition: "{{ helper_hold_delay }}"
- delay: "{{ helper_hold_delay }}"
- conditions:
- condition: trigger
id:
- hold-off-zha-e2201
- hold-off-z2m-e2201
- hold-dots2-zha-e2213
- hold-dots2-z2m-e2213
sequence:
- variables:
brightness_pct: "{{ iif(is_state(light, 'on'), state_attr(light, 'brightness'), 0) * 100 / 255 }}"
total_iterations_to_zero: "{{ (brightness_pct / helper_hold_dim_step) | round(0, 'ceil') }}"
- repeat:
count: "{{ total_iterations_to_zero - 1 }}"
sequence:
- parallel:
- action: light.turn_on
target:
entity_id: !input light
data:
brightness_step_pct: "{{ helper_hold_dim_step | int * -1 }}"
transition: "{{ helper_hold_delay }}"
- delay: "{{ helper_hold_delay }}"
- action: light.turn_on
target:
entity_id: !input light
data:
brightness_pct: 1
transition: "{{ helper_hold_delay }}"