Hey everyone, I made a script that controls the LZW45 Quick Strip Effects.
Zwave 1.4 & OpenZwave
Script
lzw45_quick_strip_effect:
alias: LZW45 Quick Strip Effect
description: Sets quick strip effects for the Inovelli LZW45 LED Strip
mode: restart
fields:
service:
description:
(required) The name of the service.
OpenZwave (Beta) -> 'ozw.set_config_parameter'
OpenZwave (1.4) -> 'zwave.set_config_parameter'
example: ozw.set_config_parameter
lzw45:
description: (required) The entity_id for the lzw45 LED Strip.
example: light.lzw45_light_strip_level
effect:
description: (required) The desired effect - 'off', 'solid', 'chase', 'fast-blink', 'slow-blink', 'fast-fade', 'slow-fade'
example: slow-fade
hue:
description: (exclusive) The Hue. Valid ranges are 0 to 360. You cannot combine this with color_temp.
example: 360
color_temp:
description: (exclusive) The color temperature (2700 - 6500). You cannot combine this with hue.
example: 2700
brightness_pct:
description: (optional) The brightness percent, 0 - 100. Defaults to 100 if omitted.
example: 10
seconds:
description: (optional) Duration of the effect in seconds (0 - 60 seconds). Cannot be combined with 'minutes' or 'hours'.
example: 1
minutes:
description: (optional) Duration of the effect in minutes (0 - 60 minutes). Cannot be combined with 'seconds' or 'hours'.
example: 1
hours:
description: (optional) Duration of the effect in hours (0 - 60 hours). Cannot be combined with 'seconds' or 'minutes'.
example: 1
endless:
description: (optional) Set to true if you want the effect to stay 'forever'.
example: true
variables:
service: >
{{ service | default('ozw.set_config_parameter') }}
node_id: >
{%- if lzw45 is not defined %}
0
{%- else %}
{%- set node_id = state_attr(lzw45, 'node_id') %}
{{ node_id if node_id else 0 }}
{%- endif %}
byte1: >
{%- if hue is defined and color_temp is not defined %}
{%- set hue = hue | int %}
{%- set hue = hue if hue >= 0 else 0 %}
{%- set hue = hue if hue <= 360 else 360 %}
{{ (hue / 360 * 255) | int }}
{%- elif color_temp is defined and hue is not defined %}
{%- set color_temp = color_temp | int %}
{%- set color_temp = color_temp if color_temp >= 2700 else 2700 %}
{%- set color_temp = color_temp if color_temp <= 6500 else 6500 %}
{{ ((color_temp - 2700) / (6500 - 2700) * 255) | int }}
{% else %}
0
{%- endif %}
byte2: >
{%- set pct = (brightness_pct | default(100)) | int %}
{%- if 0 <= pct <= 100 %}
{%- if pct == 100 %}
10
{%- else %}
{{ 128 + pct }}
{%- endif %}
{%- else %}
0
{%- endif %}
byte3: >
{%- set seconds = (seconds | default(0)) | int %}
{%- set minutes = (minutes | default(0)) | int %}
{%- set hours = (hours | default(0)) | int %}
{%- set forever = endless | default(false) %}
{%- if forever %}
255
{%- elif 0 < seconds <= 60 %}
{{ seconds }}
{%- elif 0 < minutes <= 60 %}
{{ minutes + 60 }}
{%- elif 0 < hours <= 60 %}
{{ hours + 120 }}
{%- else %}
0
{%- endif %}
byte4: >
{%- if hue is defined or color_temp is defined %}
{%- set color_type = 64 if color_temp is defined else 0 %}
{%- set effects = { 'off': 0, 'solid': 1, 'chase': 2, 'fast-blink': 3, 'slow-blink': 4, 'fast-fade': 5, 'slow-fade': 6 } %}
{%- set value = 0 %}
{%- set value = value + effects.get(effect, 0) %}
{{ value + color_type }}
{%- else %}
0
{%- endif %}
bytes: >
{{ byte4 * 2**24 + byte3 * 2**16 + byte2 * 2**8 + byte1 }}
sequence:
- condition: template
value_template: "{{ node_id != 0 }}"
- service: "{{ service }}"
data:
node_id: "{{ node_id }}"
parameter: 21
value: "{{ bytes }}"
Service
service: script.lzw45_quick_strip_effect
data:
service: ozw.set_config_parameter
lzw45: light.lzw45_light_strip_level
effect: slow-fade
hue: 360
brightness_pct: 100
seconds: 20
Zwave JS
Script
lzw45_quick_strip_effect:
alias: LZW45 Quick Strip Effect
description: Sets quick strip effects for the Inovelli LZW45 LED Strip
mode: restart
fields:
lzw45:
description: (exclusive) The entity_id for the lzw45 LED Strip.
example: light.lzw45_light_strip_level
effect:
description: (required) The desired effect - 'off', 'solid', 'chase', 'fast-blink', 'slow-blink', 'fast-fade', 'slow-fade'
example: slow-fade
color:
description: (optional) hue or color_temp
example: hue
hue:
description: (exclusive) The Hue. Valid ranges are 0 to 360. You cannot combine this with color_temp.
example: 360
color_temp:
description: (exclusive) The color temperature (2700 - 6500). You cannot combine this with hue.
example: 2700
brightness_pct:
description: (optional) The brightness percent, 0 - 100. Defaults to 100 if omitted.
example: 10
seconds:
description: (optional) Duration of the effect in seconds (0 - 60 seconds). Cannot be combined with 'minutes' or 'hours'.
example: 1
minutes:
description: (optional) Duration of the effect in minutes (0 - 60 minutes). Cannot be combined with 'seconds' or 'hours'.
example: 1
hours:
description: (optional) Duration of the effect in hours (0 - 60 hours). Cannot be combined with 'seconds' or 'minutes'.
example: 1
endless:
description: (optional) Set to true if you want the effect to stay 'forever'.
example: true
variables:
color_type: >
{{ 64 if color == 'color_temp' else 0 }}
byte1: >
{%- if color_type == 0 %}
{%- set hue = hue | int %}
{%- set hue = hue if hue >= 0 else 0 %}
{%- set hue = hue if hue <= 360 else 360 %}
{{ (hue | default(360) / 360 * 255) | int }}
{%- else %}
{%- set color_temp = color_temp | int %}
{%- set color_temp = color_temp if color_temp >= 2700 else 2700 %}
{%- set color_temp = color_temp if color_temp <= 6500 else 6500 %}
{{ ((color_temp | default(2700) - 2700) / (6500 - 2700) * 255) | int }}
{%- endif %}
byte2: >
{%- set pct = (brightness_pct | default(100)) | int %}
{%- if 0 <= pct <= 100 %}
{%- if pct == 100 %}
10
{%- else %}
{{ 128 + pct }}
{%- endif %}
{%- else %}
0
{%- endif %}
byte3: >
{%- set seconds = (seconds | default(0)) | int %}
{%- set minutes = (minutes | default(0)) | int %}
{%- set hours = (hours | default(0)) | int %}
{%- set forever = endless | default(false) %}
{%- if forever %}
255
{%- elif 0 < seconds <= 60 %}
{{ seconds }}
{%- elif 0 < minutes <= 60 %}
{{ minutes + 60 }}
{%- elif 0 < hours <= 60 %}
{{ hours + 120 }}
{%- else %}
0
{%- endif %}
byte4: >
{%- set effect = effect | default('static') | lower | replace(' ', '-') %}
{%- set effects = { 'off': 0, 'solid': 1, 'chase': 2, 'fast-blink': 3, 'slow-blink': 4, 'fast-fade': 5, 'slow-fade': 6 } %}
{%- set value = 0 %}
{%- set value = value + effects.get(effect, 0) %}
{{ value + color_type }}
bytes: >
{{ byte4 * 2**24 + byte3 * 2**16 + byte2 * 2**8 + byte1 }}
sequence:
- condition: template
value_template: "{{ lzw45 is defined }}"
- service: zwave_js.bulk_set_partial_config_parameters
target:
entity_id: "{{ lzw45 }}"
data:
parameter: 21
value: "{{ bytes }}"
Service
service: script.lzw45_quick_strip_effect
data:
lzw45: light.lzw45_light_strip_level
effect: slow-fade
hue: 360
brightness_pct: 100
seconds: 20