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