Control LEDs and LED Effects on Inovelli Red and Blue Dimmers, Switches, and Combo Fan / Lights by Floor, Area, Group, Device, or Entity

This blueprint and script can set and clear effects as well as configure the LED or LED strip on Inovelli dimmers, switches, and fan / light combo dimmers from the “Black”, “Red 500”, “Red 800”, and “Blue” series. Devices of different types can be called simultaneously. It will accept entities, the device ID, groups, labels, areas (or area: all ), floors (or floor: 'all' ), and find all Inovelli devices in the house. This blueprint and script can set everything at once—even if the devices are different series and being called from different combinations of sources (e.g. 2 areas, and 3 entities).

Supported Inovelli devices:

Open your Home Assistant instance and show the blueprint import dialog with a specific blueprint pre-filled.

[2025.04.09] Refactored entity selection code for performance; Z2M topic customization; allowed_domains variable.
[2025.04.09] Individual LED Effects (Red 800 and Blue Series only)
[2025.03.30] Selector Mode and Device filters
[2025.03.18] Handling Devices with No Manufacturer or Model ID
[2025.02.23] Labels! (For areas, devices, and entities)
[2025.01.03] ZHA Stability, Better Z2M Entity Detection, and Z2M 2.0.0 Compatibility (and it’s a LOT faster!)
[2024-11-02] Fixed LZW30-SN effect clearing; area and floor selectors.
[2024-07-16] Fixing Effects for Blue Series ZHA and Red 800 Series Devices
[2024-06-23] Floor selector and individual LED control
[2024-03-28] Added ZHA support and brightness levels were converted to float. Devices that support 0 – 100 brightness levels will be multiplied by 10; devices that support 0 – 10 brightness levels will be rounded off.
[2024-01-24] Black series support, correcting some effect values in the Blue series, and some general cleanup.
[2024-01-05] Adding support for Blue Series devices and groups of devices. These groups can be of the light.* or group.* domain, and any combo of Blue or Red series switches, dimmers, or fan / light combo devices.
[2023-05-01] The script will use the areas() function introduced in 2023-04 to accept “area: all”. This will search each area Home Assistant knows about, and apply the settings to all compatible Inovelli devices.
[2022-06-06] Areas and devices no longer need to be lists (entities were already being converted if they were in list format). This should make the script much easier to call from automations and scripts using templates.
[2022-05-17] Fixed a typo that caused an error when setting “pulse” effects on switch devices.

Original discussion thread

Setting the LED indicator

These parameters are all optional and can be configured together or individually (to change the brightness at sunrise but not the color, for example).

- LEDnumber: (Blue Series only; LED 1 .. LED 7 or All) Set to `all` to configure the whole LED bar (default if the parameter is left out) or configure a single LED.
    If specific LEDs have been set, they'll need to be unset before the LED bar will show anything.  The easiest way is to call LEDnumber 'all' with LEDcolor 'all clear'.
- LEDcolor: (int or string) Sets color of the status LED.  If LEDcolor_off is defined and supported by the device, this is only used for "on" status.
    If a "color set" is used like "all unicorn", LEDnumber cannot be set to "LED {n}"; "all" LEDs must be configured or none will be.
- LEDcolor_off: (Red 800 and Blue Series only; int or string) Sets color of status LED when off, for devices that support this feature.
    Note that the Blue Series and Red 800 Series support separate colors for on and off while the Black 500 and Red 500 Series devices do not and will ignore the variable.
    If a "color set" is used like "all unicorn", LEDnumber cannot be set to "LED {n}"; "all" LEDs must be configured or none will be.
- LEDbrightness: (float 0.0 – 10.0) Sets the brightness of the status LED.  If LEDbrightness_off is defined and supported by the device, this is only used for "on" status.
    LEDbrightness is multiplied by 10 or rounded off for each device, depending on whether they support 0 – 100 or 0 – 10 brightness levels.  This was done for backwards compatibility with old automations.
- LEDbrightness_off: (Red 800 and Blue Series only; float 0.0 – 10.0; see note above) Sets the brightness of the status LED when off, for devices that support this feature.

Required for setting LED effects

All four parameters must be passed in order to cange the effect.

- duration: (string) Either "Off", or a whole integer followed by "Seconds", "Minutes", "Hours", "Indefinitely", or "Forever".
- effect: (string) Where older devices and individual LEDs don't support a given effect, that effect has been mapped to something that is supported.
- brightness: (integer 1 – 10) Sets the brightness of the LED's effect
- color: (int or string) Sets color of LED effect and must be one of: "Off", Red, Orange, Lemon, Yellow, Lime, Green, Cyan, Teal, Blue, Purple, Magenta, Light Pink, Pink, Hot Pink, White
    Color sets like "all usa" cannot be used with effects.  I can't think of a way to get all 7 LEDs synchronized for effects like "pulse" or "chase".

Selector Mode:

Select devices that meet ANY requirements (logical OR) or ALL requirements (logical AND). Since the default for selector_mode: is any, you can leave this field out / unselected and get the same result. Blueprints and script calls written before this feature was added do not need to be updated, and will have the same behavior as before.
Turning off the LED bar for everything that’s upstairs, OR ANY fans:
This service call will turn off the LED bar for all Inovelli devices that are upstairs, and also all fans in the house (e.g. upstairs, downstairs, in the garage, or outside).

  service: script.inovelli_led
  data:
    selector_mode: any
    domain: 'fan'
    floor: 'upstairs'
    LEDcolor: 'Off'
    LEDcolor_off: 'Off'

Turning off the LED bar only for fans that are upstairs:
By using selector_mode: 'all', we can now limit the entities to upstairs fans. Fans that are downstairs, or lights that are upstairs will not be changed by this call.

  service: script.inovelli_led
  data:
    selector_mode: all
    domain: 'fan'
    floor: 'upstairs'
    LEDcolor: "Off"
    LEDcolor_off: "Off"

Domain:

Include all entities with domain(s) light., fan., or switch.* or deselect for all. In the background, it uses areas() and selecting all three domains makes it functionally equivalent to calling area: 'all''.
Set the LED bar on all fans in the house to purple:

  service: script.inovelli_led
  data:
    domain: 'fan'
    LEDcolor: 'purple'
    LEDcolor_off: 'purple'

Set the LED bar on all lights and switches in the house to blue:

  service: script.inovelli_led
  data:
    domain: 
      - light
      - switch
    LEDcolor: 'blue'
    LEDcolor_off: 'blue'

Label:

Labels on Inovelli devices and entities, or areas containing Inovelli devices. Labels can be on the entity, device, or area.

Set all bedroom LEDs to a dim red in the evening:

  action: script.inovelli_led
  data:
    LEDcolor: 'RED'
    LEDcolor_off: 'Red'
    LEDbrightness: 2
    LEDbrightness_off: 0.1
    label: `bedroom`

Floor:

Floor names or IDs containing areas with Inovelli devices.

Setting an an effect on all devices upstairs:

    service: script.inovelli_led
    data:
      floor: 'upstairs'
      duration: 'Forever'
      effect: 'CHASE'
      brightness: 8
      color: 'Teal'

Area:

Area names or IDs containing Inovelli devices.

‘area: all’ will find any compatible Inovelli devices in Home Assistant 2023.04 or newer.
Setting an effect on every Inovelli device in the house

    service: script.inovelli_led
    data:
      area: 'all'
      duration: 'Forever'
      effect: 'Fast Blink'
      brightness: 8.7
      color: 'light pink'

String of comma-separated values (improper list format still works)
Setting an effect on all devices in two areas:

    service: script.inovelli_led
    data:
      area: 'Family Room, 7d7a44fe4d0f4bee947c430d2714e45c' 
      duration: 'Forever'
      effect: 'CHASE'
      brightness: 8
      color: 'Teal'

Group:

Group names or IDs for groups containing Inovelli devices. Mix and match types as you like.

Proper list format
Setting a 2min effect on all devices in two groups:

    service: script.inovelli_led
    data:
      group:
        - group.lights_and_switches
        - 0249abdc634c12cbf6cdc06d7a507495
      duration: '2 minutes'
      effect: 'pulse'
      brightness: 8
      color: 'red'

Device:

Device IDs of Inovelli devices. Mix and match types as you like. Devices will only accept the device ID, making them harder to use unless it’s a templated device, like

Mix and match fields:
Clearing an effect on all devices upstairs, in the office, the device that triggered the event, and the front porch:
Since the default behavior for the script is to clear any effects, there’s no need to call effect: 'Clear Effect'.

service: script.inovelli_led
data:
  floor: 'upstairs'
  area: 'office'
  device: '{{ trigger.event.data.device_id }}'
  entity: 'fan.front_porch'

Full LED configuration, using device ID

    service: script.inovelli_led
    data:
      device:
        - 531d79e9270d72d9cab44a4f295967d4
        - ef82d0eb91499feadf45e257c0e5eda1
      LEDcolor: 'blue'
      LEDcolor_off: 'hOt PiNk'
      LEDbrightness: 7
      LEDbrightness_off: 2.5
      LEDnumber: 'all'

Entity:

The light., switch., or fan.* entity for the LED we’re setting.

A 30 sec effect to signal an event, followed by LED 7 (at the top) turning green as an on-going notification:

    service: script.inovelli_led
    data:
      entity: 'light.office'
      LEDcolor: 'green'
      LEDnumber: 'led 7'
      LEDbrightness: 7.5
      LEDbrightness_off: 2.3
      duration: '30 second'
      effect: 'fast blink'
      color: 'green'
      brightness: 7

LEDnumber:

Sets the full LED bar by default or 'all', or specific LEDs (1 – 7) starting at the bottom.

Configuring an LED color set (color sets start with ‘all’ and must be set with all LEDs)
Once an invidivual LED or an LED color set has been configured, it must be cleared. The full LED bar settings will be overridden by the individual LED settings.

    service: script.inovelli_led
    data:
      device:
        - 88f56168bdb28f3ac764fc3d7e3d407b
      LEDnumber: 'All'
      LEDcolor: 'All Unicorn'
      LEDcolor_off: 'All USA'
      LEDbrightness: 8.6
      LEDbrightness_off: 0.4

Configuring an LED color for one LED

    service: script.inovelli_led
    data:
      entity: 'light.office'
      LEDnumber: 'led 4'
      LEDcolor: 'red'

Clearing all individual LED color settings in the house
This will reset the LED bars to red.

    service: script.inovelli_led
    data:
      area: 'all'
      LEDnumber: 'all'
      LEDcolor: 'all clear'
      LEDcolor_off: 'all clear'

LEDcolor:

Sets the color of the LED status bar, which indicates brightness levels of the light.

  • This is not for effects.

LEDcolor_off:

Sets the color of the LED status bar, which indicates brightness levels of the light.

  • Red 800 and Blue Series only. No support on Black, or Red 500 devices.
  • This is not for effects.

LEDbrightness:

Sets the brightness of the LED status when on. 0 means off.

  • This is not for effects.

LEDbrightness_off:

Sets the brightness of the LED status when off. 0 means off.

  • This is not for effects.

LEDnumber_effect:

Sets the effect on the full LED bar by default, or specific LEDs (1 – 7) starting at the bottom.

  • Red800 and Blue Series only. No support on Black or Red 500 series devices.
  • The full LED bar will override individual LEDs (e.g. you won’t see LED 3 through an effect for the full bar)
  • When using duration: forever each LED’s effect will need to be cleared with a separate command.

effect:

Type of effect. (Red and Blue Series only. Black Series devices do not support effects.)

brightness:

Sets the brightness of the LED’s effect. 0 means off.

color:

Color of LED for the effect

duration:

How long the effect will last.

9 Likes

Thanks for publishing this script, saved me so much time and frustration. I thought I was just going to have to go without led Notifications. I’m coming from Hubitat and the driver sets up the led options as devices so you just set your automations to turn on whatever you want by picking notification 1,2 and so on. So this was a big change when switching to HA. I’m wondering if this script will work with the new Blue and future Red switches? Im thinking about ordering some. I’m guessing it won’t work with the Blue because they’re Zigbee?

I’m glad it’s working for you!

It won’t work with the Blue Series, but it wouldn’t be hard to modify the commands to make it work. I don’t have any Blues though, so it would be tricky to test. I handle a lot of corner cases in different firmware versions and I don’t know how to test that without Blue devices. I think my logic was reused for this script for Blue Devices so take a look at that: [Z2M] Inovelli VZM31-SN Blue Series 2-1 Switch LED Notification Script

It’ll work for all of their current Red Series devices, and I think it’ll work for future devices too. I’m waiting on their 5-button controller but I think that’s it for them. They seem to be focusing on the Blue Series Zigbee and Matter devices more these days.

1 Like

I’m curious, should I just input whatever inovelli device I wish to use no matter how many devices I’ll be sending notifications to or is there another way like create a group? meaning to lessen the zwave load?

I don’t think I understand your question completely, so I’ll try to answer it with scattershot.

Let’s say you want to configure three devices with a notification. Each one ultimately needs to receive its own configuration commands over the Z-Wave network. Whether you want everything in a room configured, everything in a group, or you list those devices individually doesn’t matter. It will all get broken out and sent to individual devices. That part can’t be reduced into one over-the-air command for multiple devices, as far as I know.

If you’re only setting effect and duration, that’ll be two commands per device going over the air in the Z-Wave network, even if it’s only one command from Home Assistant to the Z-Wave JS container. If you’re setting effect, color, duration, and brightness all together, then it’ll be set in one bulk parameter command. That would reduce the number of commands flowing from Home Assistant to the Z-Wave JS container, but I’m pretty sure it still gets sent over-the-air as individual commands to the devices. I’m not completely sure if bulk parameters are one command to devices or not. In my automations I set all the parameters each time to ensure the effects are configured correctly. I only have about 55 devices on my network though, so I don’t tend to run into issues with having too much traffic. Even so, when the sun sets, I can see everything in the house turn red, and then get dim–in what looks like two passes. It takes about 20 seconds for everything to change. That’s why I think that bulk parameters are still multiple over-the-air commands, but I’m not 100% sure.

You could save a bit of processing power by listing the entities (e.g. switch.family_room, switch.kitchen). Looping through every device in a room to figure out which entities are Inovelli Reds is less efficient than if you list them. That could be helpful if you’re running a Raspberry Pi and doing a lot of other automations. I’ve never benchmarked it, myself. Listing a room let me add and remove devices without breaking things, and that was more important to me.

1 Like

Lol perfect shot :slight_smile:

I’ve been goofing around with Home Assistant for a little bit, but apparently not long enough to know what the heck I’m doing with your script.

Are there variables in it that I need to change?

This would be awesome for when I trigger my GoodNight scene with the configuration button. I have it wait for 30 seconds before it activates and to have the LED pulse or something during that countdown would be perfect.

Yes, you’ll have to pass it some variables. You can play around with it and get a feel for how it works by clicking “developer tools” in the left-hand navigation pane and then selecting “Services” and selecting the script. There are a number of options you can configure, and then select “Go to YAML mode” to see what the YAML looks like and paste into your automation. I also have several examples in the readme.md, including an automation example (which is rather complicated, now that I think about it).

The service call for what you’re doing would look something like:

         - service: script.inovelli_led_zwavejs
            data:
              area: {{ area_id(trigger.event.data.device_id) }}
              duration: 30 Seconds
              effect: Pulse
              brightness: 4
              color: RED

To clear the effect before the 30 seconds are up, you could have a choose option that calls:

         - service: script.inovelli_led_zwavejs
            data:
              area: {{ area_id(trigger.event.data.device_id) }}

If the script doesn’t have what it needs, the default is to clear effects from the entity, device, or area that’s been called.

Before I bark up the wong tree, will this work with the Black Series (LZW31 - 2nd Gen)?

Here’s the current service I’m trying to see work, but failing:

Your code is right. My script assumes the Red Series, but you can make it work with the Black Series. Just change any reference to “LZW31-SN” to “LZW31”. Looking at the documentation for the Black Series, I’m 90% sure this will work fine. I don’t have any test with though. In my next release I’m adding support for the Blue Series devices, and I can add support for the Black Series too.

This worked well for me with a bunch of Inovelli Red switches. I have them pulse the LED red when my security system is armed to remind us not to open doors without disarming that first.

1 Like
  • Adding support for Inovelli’s “Blue Series” devices, thanks to smenzer!
  • Adding support for devices in groups, thanks to smenzer! These groups can be of the light.* or group.* domain, and any combo of Blue or Red series switches, dimmers, or fan / light combo devices.
1 Like

I opened a branch to support the effects in new Blue Series and Red 800 Series devices. Since I don’t have any of these, I’d like to get feedback from someone who does.

@smenzer would you be able to test the new effects in this branch?

@Mike1082 I saw you requesting this in another conversation. Hopefully you don’t mind that I point this one out to you.

Has anyone looked into the VZW31-SN yet? It looks like there may be some differences. I’m getting this when I try to run the script after modifying it to include my model no: VZW31-SN.

Failed to call service script.inovelli_led_control. Node(node_id=48) - NotFoundError: Configuration parameter with parameter name LED Indicator: Color on node Node(node_id=48) endpoint 0 could not be found

Edit: yeah, it’s different. I guess I’ll start working on this… Z-Wave 800 Series 2-1 Switch - New LED control parameter - #7 by mamber - General Discussion - Inovelli Community

1 Like

Are you using the 800 series branch I opened yesterday, or the master branch code? The error you posted looks like it’s trying to use the LZW31-SN code for your VZW31-SN. The 800 series branch adds code to separate them and the VSW31-SN should use “Default All LED Strip Color When On” which matches what I see in the firmware parameter documentation. If you don’t have the VZW31-SN parameters defined like this, I think you’re not using the 800 series branch from yesterday.

    VZW31SN_effect_bulk: 99
    VZW31SN_effect_color: All LED Strip Effect - Color
    VZW31SN_effect_brightness: All LED Strip Effect - Level
    VZW31SN_effect_duration: All LED Strip Effect - Duration
    VZW31SN_effect_effect: All LED Strip Effect - Effect
    VZW31SN_ledcolor: Default All LED Strip Color When On
    VZW31SN_ledcolor_off: Default All LED Strip Color When Off
    VZW31SN_ledbrightness: Default All LED Strip Brightness When On
    VZW31SN_ledbrightness_off: Default All LED Strip Brightness When Off

1 Like

Wow, looks like you’ve done all the work already! Yes, the new branch works with my VZW31-SN. Thanks for sharing all of this.

Can you confirm everything works? I don’t have any of the new series devices, so I want to be sure the new effects and LED color when off and when on (mine only has one color for both) but also the effect brightness, duration, and LED brightness are working correctly. If they’re all working right, I’ll get a full release out.

I plan to try this over the next couple of days and see if I can figure it out. Since it’s not currently in blueprint form, I just need to copy the Yaml correct?

Yes; that’s right. For anyone else wondering the same thing, here’s a step-by-step:

  • In Home Assistant:
    • Click on “Settings” in the left-hand navigation pane.
    • “Automations & Scenes”
    • “Scripts” near the top in a horizontal menu / tab.
    • Blue, “+ Add Script” button in the lower-right.
    • “Create new script”
    • In the upper-right click the vertical ellipsis (three dot) menu and then “edit in Yaml”.
    • Delete the pre-populated lines.
  • Open a new tab
  • In Github (https://github.com/kschlichter/Home-Assistant-Inovelli-Effects-and-Colors/blob/master/inovelli_led.yaml)
    • Since this hasn’t been merged into master yet, in the left-hand nav pane, under files, there’s a drop-down that says “master”. Change that to 800 series effects.
    • On the right side, click the “copy raw file” in between the “raw” and “download” buttons.
  • In Home Assistant:
    • Paste the contents into the Yaml editor.
    • In the vertical ellipsis select “Edit in Visual Editor”
    • Blue, “Save Script” button in the lower right.

To test the script, you can use “developer tools” → “Services” and type “Inovelli LED Settings and Effects” to use the UI, and “Go to Yaml Mode” to see the code for automations. That code can be modified with templates.

1 Like

I tested it as best I could, effects, duration, static colors all seems to work as expected.

1 Like