Skip to content

Instantly share code, notes, and snippets.

@PaulAntonDeen
Created October 31, 2021 15:05
Show Gist options
  • Select an option

  • Save PaulAntonDeen/4089539eb42f7bcf11a945630c38fec4 to your computer and use it in GitHub Desktop.

Select an option

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'
@jerbob92

Copy link
Copy Markdown

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)

@jerbob92

jerbob92 commented Nov 28, 2021

Copy link
Copy Markdown

@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 :)

@PaulAntonDeen

Copy link
Copy Markdown
Author

Great, glad you solved it!

@Bolti81

Bolti81 commented Apr 8, 2022

Copy link
Copy Markdown

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

@jerbob92

Copy link
Copy Markdown

@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.

@antonov124

Copy link
Copy Markdown

Hello Paul, is it possible to change the code from ZHA to Z2M?

@PaulAntonDeen

PaulAntonDeen commented May 24, 2023 via email

Copy link
Copy Markdown
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment