-
-
Save PaulAntonDeen/4089539eb42f7bcf11a945630c38fec4 to your computer and use it in GitHub Desktop.
blueprint: | |
name: ZHA - Ecodim, 4 Channel remote | |
description: 'Control any light using the Ecodim remote on ZHA' | |
domain: automation | |
input: | |
remote: | |
name: Remote controller | |
description: Remote to use | |
selector: | |
device: | |
integration: zha | |
manufacturer: EcoDim | |
model: ED-10014 | |
light_1: | |
name: Light row 1 | |
description: The lights that will be controlled with row 1 | |
selector: | |
target: | |
entity: | |
domain: light | |
light_2: | |
name: Light row 2 | |
description: The lights that will be controlled with row 2 | |
selector: | |
target: | |
entity: | |
domain: light | |
light_3: | |
name: Light row 3 | |
description: The lights that will be controlled with row 3 | |
selector: | |
target: | |
entity: | |
domain: light | |
light_4: | |
name: Light row 4 | |
description: The lights that will be controlled with row 4 | |
selector: | |
target: | |
entity: | |
domain: light | |
step_size: | |
name: Step Size | |
description: The % step each dimming step takes | |
default: 10 | |
selector: | |
number: | |
min: 5 | |
max: 25 | |
unit_of_measurement: '%' | |
step_delay: | |
name: Step Delay | |
description: The time between dimming steps (ms) | |
default: 1000 | |
selector: | |
number: | |
min: 100 | |
max: 2000 | |
unit_of_measurement: 'milliseconds' | |
source_url: https://gist.github.com/ronaldt80/85b9119a8f36bfca19a7011a12a9d2da | |
mode: restart | |
max_exceeded: silent | |
trigger: | |
- platform: event | |
event_type: zha_event | |
event_data: | |
device_id: !input 'remote' | |
action: | |
- variables: | |
command: '{{ trigger.event.data.command }}' | |
cluster_id: '{{ trigger.event.data.cluster_id }}' | |
endpoint_id: '{{ trigger.event.data.endpoint_id }}' | |
args: '{{ trigger.event.data.args }}' | |
step_size: !input 'step_size' | |
- choose: | |
- conditions: | |
- "{{ command == 'on' }}" | |
- "{{ cluster_id == 6 }}" | |
- "{{ endpoint_id == 1 }}" | |
sequence: | |
- service: light.turn_on | |
target: !input 'light_1' | |
data: | |
transition: 1 | |
- conditions: | |
- "{{ command == 'off' }}" | |
- "{{ cluster_id == 6 }}" | |
- "{{ endpoint_id == 1 }}" | |
sequence: | |
- service: light.turn_off | |
target: !input 'light_1' | |
data: | |
transition: 1 | |
- conditions: | |
- "{{ command == 'move_with_on_off' }}" | |
- "{{ cluster_id == 8 }}" | |
- "{{ endpoint_id == 1 }}" | |
- "{{ args == [0, 50]}}" | |
sequence: | |
repeat: | |
while: | |
- condition: template | |
value_template: "{{ repeat.index < (100 / step_size)|int }}" | |
sequence: | |
- service: light.turn_on | |
target: !input 'light_1' | |
data: | |
transition: 1 | |
brightness_step_pct: !input 'step_size' | |
- delay: | |
milliseconds: !input 'step_delay' | |
- conditions: | |
- "{{ command == 'move_with_on_off' }}" | |
- "{{ cluster_id == 8 }}" | |
- "{{ endpoint_id == 1 }}" | |
- "{{args == [1, 50]}}" | |
sequence: | |
repeat: | |
while: | |
- condition: template | |
value_template: "{{ repeat.index < (100 / step_size)|int }}" | |
sequence: | |
- service: light.turn_on | |
target: !input 'light_1' | |
data: | |
transition: 1 | |
brightness_step_pct: "{{ step_size * -1 }}" | |
- delay: | |
milliseconds: !input 'step_delay' | |
- conditions: | |
- "{{ command == 'stop' }}" | |
- "{{ cluster_id == 8 }}" | |
- "{{ endpoint_id == 1 }}" | |
sequence: | |
- service: light.turn_on | |
target: !input 'light_1' | |
- conditions: | |
- "{{ command == 'on' }}" | |
- "{{ cluster_id == 6 }}" | |
- "{{ endpoint_id == 2 }}" | |
sequence: | |
- service: light.turn_on | |
target: !input 'light_2' | |
data: | |
transition: 1 | |
- conditions: | |
- "{{ command == 'off' }}" | |
- "{{ cluster_id == 6 }}" | |
- "{{ endpoint_id == 2 }}" | |
sequence: | |
- service: light.turn_off | |
target: !input 'light_2' | |
data: | |
transition: 1 | |
- conditions: | |
- "{{ command == 'move_with_on_off' }}" | |
- "{{ cluster_id == 8 }}" | |
- "{{ endpoint_id == 2 }}" | |
- "{{ args == [0, 50]}}" | |
sequence: | |
repeat: | |
while: | |
- condition: template | |
value_template: "{{ repeat.index < (100 / step_size)|int }}" | |
sequence: | |
- service: light.turn_on | |
target: !input 'light_2' | |
data: | |
transition: 1 | |
brightness_step_pct: !input 'step_size' | |
- delay: | |
milliseconds: !input 'step_delay' | |
- conditions: | |
- "{{ command == 'move_with_on_off' }}" | |
- "{{ cluster_id == 8 }}" | |
- "{{ endpoint_id == 2 }}" | |
- "{{args == [1, 50]}}" | |
sequence: | |
repeat: | |
while: | |
- condition: template | |
value_template: "{{ repeat.index < (100 / step_size)|int }}" | |
sequence: | |
- service: light.turn_on | |
target: !input 'light_2' | |
data: | |
transition: 1 | |
brightness_step_pct: "{{ step_size * -1 }}" | |
- delay: | |
milliseconds: !input 'step_delay' | |
- conditions: | |
- "{{ command == 'stop' }}" | |
- "{{ cluster_id == 8 }}" | |
- "{{ endpoint_id == 2 }}" | |
sequence: | |
- service: light.turn_on | |
target: !input 'light_2' | |
- conditions: | |
- "{{ command == 'on' }}" | |
- "{{ cluster_id == 6 }}" | |
- "{{ endpoint_id == 3 }}" | |
sequence: | |
- service: light.turn_on | |
target: !input 'light_3' | |
data: | |
transition: 1 | |
- conditions: | |
- "{{ command == 'off' }}" | |
- "{{ cluster_id == 6 }}" | |
- "{{ endpoint_id == 3 }}" | |
sequence: | |
- service: light.turn_off | |
target: !input 'light_3' | |
data: | |
transition: 1 | |
- conditions: | |
- "{{ command == 'move_with_on_off' }}" | |
- "{{ cluster_id == 8 }}" | |
- "{{ endpoint_id == 3 }}" | |
- "{{ args == [0, 50]}}" | |
sequence: | |
repeat: | |
while: | |
- condition: template | |
value_template: "{{ repeat.index < (100 / step_size)|int }}" | |
sequence: | |
- service: light.turn_on | |
target: !input 'light_3' | |
data: | |
transition: 1 | |
brightness_step_pct: !input 'step_size' | |
- delay: | |
milliseconds: !input 'step_delay' | |
- conditions: | |
- "{{ command == 'move_with_on_off' }}" | |
- "{{ cluster_id == 8 }}" | |
- "{{ endpoint_id == 3 }}" | |
- "{{args == [1, 50]}}" | |
sequence: | |
repeat: | |
while: | |
- condition: template | |
value_template: "{{ repeat.index < (100 / step_size)|int }}" | |
sequence: | |
- service: light.turn_on | |
target: !input 'light_3' | |
data: | |
transition: 1 | |
brightness_step_pct: "{{ step_size * -1 }}" | |
- delay: | |
milliseconds: !input 'step_delay' | |
- conditions: | |
- "{{ command == 'stop' }}" | |
- "{{ cluster_id == 8 }}" | |
- "{{ endpoint_id == 3 }}" | |
sequence: | |
- service: light.turn_on | |
target: !input 'light_3' | |
- conditions: | |
- "{{ command == 'on' }}" | |
- "{{ cluster_id == 6 }}" | |
- "{{ endpoint_id == 4 }}" | |
sequence: | |
- service: light.turn_on | |
target: !input 'light_4' | |
data: | |
transition: 1 | |
- conditions: | |
- "{{ command == 'off' }}" | |
- "{{ cluster_id == 6 }}" | |
- "{{ endpoint_id == 4 }}" | |
sequence: | |
- service: light.turn_off | |
target: !input 'light_4' | |
data: | |
transition: 1 | |
- conditions: | |
- "{{ command == 'move_with_on_off' }}" | |
- "{{ cluster_id == 8 }}" | |
- "{{ endpoint_id == 4 }}" | |
- "{{ args == [0, 50]}}" | |
sequence: | |
repeat: | |
while: | |
- condition: template | |
value_template: "{{ repeat.index < (100 / step_size)|int }}" | |
sequence: | |
- service: light.turn_on | |
target: !input 'light_4' | |
data: | |
transition: 1 | |
brightness_step_pct: !input 'step_size' | |
- delay: | |
milliseconds: !input 'step_delay' | |
- conditions: | |
- "{{ command == 'move_with_on_off' }}" | |
- "{{ cluster_id == 8 }}" | |
- "{{ endpoint_id == 4 }}" | |
- "{{args == [1, 50]}}" | |
sequence: | |
repeat: | |
while: | |
- condition: template | |
value_template: "{{ repeat.index < (100 / step_size)|int }}" | |
sequence: | |
- service: light.turn_on | |
target: !input 'light_4' | |
data: | |
transition: 1 | |
brightness_step_pct: "{{ step_size * -1 }}" | |
- delay: | |
milliseconds: !input 'step_delay' | |
- conditions: | |
- "{{ command == 'stop' }}" | |
- "{{ cluster_id == 8 }}" | |
- "{{ endpoint_id == 4 }}" | |
sequence: | |
- service: light.turn_on | |
target: !input 'light_4' |
@PaulAntonDeen I have removed the transition: 1
from all sequences in my fork and that seemed to do the trick, not sure why though.
Edit: might be just the light bulb misbehaving: https://community.home-assistant.io/t/tradfri-transition/17530/25
Script is quite usable without the transition: 1
too, so thanks again :)
Great, glad you solved it!
I just did some changes to your script locally to work with a very similar device (I think it is the same) from Sunricher.
I am having some issues with it dimming though. Any ideas? p.s. the Transition: 1 change works for all bulbs,
It picks up the same event for the dim up and down.
"command": "move_with_on_off",
"args": [
0,
50
ZG2833K8_EU05 from Sunricher
@Bolti81 I also had this issue, I think it's due to some change in how HA serializes the args and now it doesn't match anymore.
Change all the
- "{{args == [0, 50]}}"
lines to:
- '{{ args == ''[<MoveMode.Up: 0>, 50]'' }}'
and change all the
- "{{args == [1, 50]}}"
lines to:
- '{{ args == ''[<MoveMode.Down: 1>, 50]'' }}'
I don't love it, it would probably be better to pass args literally so that it doesn't get stringified, but this works for now while I improve the script.
Hello Paul, is it possible to change the code from ZHA to Z2M?
Thanks for this! Helps me a lot!
However, it doesn't always turn on all lights for me, while if I manually turn on/off that single light it always works, any idea? (it's an IKEA lightbulb, the others are not)