- Add single/all LED control, special color presets to Inovelli LED script

This commit is contained in:
nwithan8 2023-08-10 18:06:54 -06:00
parent 9d9e06e38b
commit dbf029e6b0
1 changed files with 130 additions and 20 deletions

View File

@ -17,9 +17,26 @@ fields:
integration: zha
manufacturer: Inovelli
model: VZM31-SN
led:
name: LED
description: Which LED to program (LED 1 is the bottom-most LED)
required: false
selector:
select:
options:
- "All"
- "LED 1"
- "LED 2"
- "LED 3"
- "LED 4"
- "LED 5"
- "LED 6"
- "LED 7"
default: "All"
effect:
name: Effect
description: Effect to use
description: >
Effect to use. Some effects cannot be used on a single LED; if an invalid match is provided, the effect will be overriden to "Solid"
required: true
selector:
select:
@ -47,6 +64,7 @@ fields:
- "Fast Chase"
- "Open-Close"
- "Small-Big"
default: "Solid"
duration:
name: Duration
@ -67,13 +85,35 @@ fields:
color:
name: Color
description: The color the light should be, (0-254, 255 for white)
required: true
required: false
selector:
number:
min: 0
max: 255
color_preset:
name: Color Preset
description: Special color preset to use (overrides color setting and LED selection)
required: false
selector:
select:
options:
- "Rainbow"
variables:
led_values:
"all": -1
"led 1": 0
"led 2": 1
"led 3": 2
"led 4": 3
"led 5": 4
"led 6": 5
"led 7": 6
led: '{{ led|default("all") }}'
led_value: >-
{{ led_values[led | lower] | int }}
# Main + legacy effects mapping
effect_values:
"off": 0
@ -98,26 +138,96 @@ variables:
"slow siren": 19
"open-close": 6
"small-big": 7
effect: '{{ effect|default("clear") }}'
effect_value: >-
{{ effect_values[effect | lower] | int }}
# Only 0-8 can be used to set a single LED
max_single_led_effect: 8
effect: '{{ effect|default("solid") }}'
effect_value: >
{% set val = effect_values[effect | lower] | int %}
{% if val > max_single_led_effect %}
{% set val = 1 %}
{% endif %}
{{ val }}
color: "{{ color|default(255) }}"
special_color_preset: '{{ color_preset|default("none") }}'
use_special_color_preset: >
{{ special_color_preset != "none" }}
normal_payload: >
{% if led_value == -1 %}
{% set payload_data = {
"led_effect": effect_value,
"led_color": color,
"led_level": level,
"led_duration": duration,
} %}
{% else %}
{% set payload_data = {
"led_number": led_value,
"led_effect": effect_value,
"led_color": color,
"led_level": level,
"led_duration": duration,
} %}
{% endif %}
{{ payload_data }}
special_colors_orders:
"none": []
"rainbow": [222, 189, 166, 94, 53, 25, 0]
special_color_order: >
{{ special_colors_orders[special_color_preset | lower] }}
sequence:
- service: zha.issue_zigbee_cluster_command
data:
ieee: >
{{ (device_attr(switch, "identifiers")|list).0.1 }}
endpoint_id: 1
cluster_id: 64561
cluster_type: in
command: 1
command_type: server
args:
- "{{ effect_value }}"
- "{{ color }}"
- "{{ level }}"
- "{{ duration }}"
manufacturer: 4655
- choose:
# Single color for one or all LEDs
- conditions:
- condition: template
value_template: >
{{ not use_special_color_preset }}
sequence:
- service: zha.issue_zigbee_cluster_command
data:
ieee: >
{{ (device_attr(switch, "identifiers")|list).0.1 }}
endpoint_id: 1
cluster_id: 64561
cluster_type: in
# 1 = all LEDs, 3 = specific LED
command: >
{{ iif(led_value == -1, 1, 3) }}
command_type: server
params: "{{ normal_payload }}"
manufacturer: 4655
# Special color preset for all LEDs
- conditions:
- condition: template
value_template: >
{{ use_special_color_preset }}
sequence:
- repeat:
count: "{{ special_color_order | count }}"
sequence:
- service: zha.issue_zigbee_cluster_command
data:
ieee: >
{{ (device_attr(switch, "identifiers")|list).0.1 }}
endpoint_id: 1
cluster_id: 64561
cluster_type: in
# 1 = all LEDs, 3 = specific LED
command: 3
command_type: server
# Index starts at 1 like an idiot
params:
"led_number": "{{ repeat.index - 1}}"
"led_effect": "{{ effect_value }}"
"led_color": "{{ special_color_order[repeat.index - 1] | int }}"
"led_level": "{{ level }}"
"led_duration": "{{ duration }}"
manufacturer: 4655
mode: single
max_exceeded: silent