A script blueprint to control the LED notification bar on the Inovelli VZM31-SN or VZM35-SN Blue Series 2-1 Switch via ZHA. This script is based on the Z2M-equivalent script and templates shared on Inovelli’s forums.
Features:
- Only need to create one script using the blueprint
- All variables, including target switch, are passed when calling the script rather than when configuring it, allowing you to reuse the same script for any Inovelli switch
- Select from different preset animations + off and clear
- Provide custom color, brightness and duration for each script call
Requirements
- ZHA (for Zigbee2MQTT, see this blueprint)
- An Inovelli VZM31-SN (Light) or VZM35-SN (Fan) Blue Series 2-1 Switch added to your ZigBee network in Home Assistant
Blueprint
# This blueprint will allow you to make one generic script, and pass in all variables, including target switch, effect, colors, etc. on each call.
# Users do NOT need to set up a per-device copy of this script.
blueprint:
name: Inovelli Notification LED (ZHA)
description: >-
A script that sets the notification LED bar of an Inovelli light switch.
source_url: https://raw.githubusercontent.com/nwithan8/configs/main/home_assistant/blueprints/scripts/inovelli_notification_led_zha.yaml
domain: script
fields:
switch:
name: Inovelli Switch
description: Which light switch to program
required: true
selector:
device:
filter:
- integration: zha
manufacturer: Inovelli
model: VZM31-SN
- integration: zha
manufacturer: Inovelli
model: VZM35-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. 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:
# 'Chase' is legacy, but still supported (equates to 'Medium Chase')
options:
- "Off"
- "Clear"
- "Solid"
- "Slow Blink"
- "Medium Blink"
- "Fast Blink"
- "Pulse"
- "Aurora"
- "Slow Falling"
- "Medium Falling"
- "Fast Falling"
- "Slow Rising"
- "Medium Rising"
- "Fast Rising"
- "Slow Siren"
- "Fast Siren"
- "Chase"
- "Slow Chase"
- "Medium Chase"
- "Fast Chase"
- "Open-Close"
- "Small-Big"
default: "Solid"
duration:
name: Duration
description: How long the effect should last, in seconds (1-254, 255 for indefinite)
required: true
selector:
number:
min: 1
max: 255
level:
name: Intensity
description: How intense the light should be, percentage (0-100)
required: true
selector:
number:
min: 0
max: 100
color:
name: Color
description: The color the light should be, (0-254, 255 for white)
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:
- "Warm"
- "Cool"
- "Rainbow"
- "Police"
variables:
all_led_mode_value: -1
led_values:
"all": >
{{ all_led_mode_value }}
"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
"clear": 255
"solid": 1
"slow blink": 3
"medium blink": 15
"fast blink": 2
"pulse": 4
"aurora": 8
"slow falling": 9
"medium falling": 10
"fast falling": 11
"slow rising": 12
"medium rising": 13
"fast rising": 14
"chase": 5
"slow chase": 16
"medium chase": 5
"fast chase": 17
"fast siren": 18
"slow siren": 19
"open-close": 6
"small-big": 7
# Only 0-8 + 255 can be used to set a single LED
single_led_compatible_effect_values:
- 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 255
effect: '{{ effect|default("solid") }}'
effect_value: >
{% set val = effect_values[effect | lower] | int %}
{% if led_value != all_led_mode_value and val not in single_led_compatible_effect_values %}
{% set val = effect_values["solid"] | int %}
{% endif %}
{{ val }}
color: "{{ color|default(255) }}"
special_color_preset: '{{ color_preset|default("none") }}'
use_special_color_preset: >
{{ special_color_preset != "none" }}
# Max 7 colors, starting from the bottom LED
special_colors_orders:
"none": [ ]
"warm": [ 45, 38, 31, 23, 17, 10, 0 ]
"cool": [ 56, 73, 98, 119, 151, 175, 187]
"rainbow": [222, 189, 166, 94, 53, 25, 0]
"police": [165, 165, 255, 255, 255, 0, 0]
special_color_order: >
{{ special_colors_orders[special_color_preset | lower] }}
sequence:
- 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: >
{% 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 }}
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
Install
- Click the “Import Blueprint” button above and follow the instructions to import the blueprint into your Home Assistant.
- Click “Create Script” from the Blueprint. No configuration is needed. You only need one copy of this script, so name it something generic such as “Inovelli LED Notification”
Usage
- Call the script via a service call in an automation, in Developer Tools, or in another script.
- Select the target Inovelli switch from the drop down.
- Select the target LED or
All
to apply the effect to all LEDs (there are 7 LEDs in the light bar)- Defaults to
All
- Defaults to
- Select the specific effect from the drop down.
- Some effects can only be applied to all LEDs instead of a single LED. If an invalid pair is selected, the effect will be overridden to “Solid”
- Indicate the specific duration (in seconds), intensity (percentage) and color with the sliders.
- Select a color for the LED(s)
- Use this calculator to determine the color value
- Optionally, select a color preset instead.
- A color preset will be applied to all LEDs (overrides the individual LED selection)
Changelog:
- June 8, 2023: Initial release
- Aug 10, 2023:
- Add additional effects (thanks @emergent )
- Improve effect calculation (a lot less repetitive code!)
- Aug 10, 2023 (again):
- Add ability to set single LED or all LEDs (thanks @diegomorales17 )
- Add custom color presets (e.g. “rainbow”)
- Handle errors where only certain effects are available in single-LED mode versus all-LED mode
- Aug 11, 2023:
- Add
Warm
,Cool
andPolice
custom color presets - Improve handling single- versus all-LED effects
- Add
- Oct 31, 2023:
- Remove model restriction, enabling VZM35-SN usage
- Oct 23, 2024:
- Improve model filtering (don’t allow non-ZHA Inovelli switches)
Thanks
- @zanixmechanix for his Z2M version of this script
- Inovelli community members for their insight into controlling Inovelli LEDs via ZHA
- @Eric_Inovelli for Inovelli’s fantastic documentation on their forums