Control LEDs and LED Effects on Inovelli Black, Red, Blue, and White Series Devices by Floor, Area, Group, Device ID, or Entity

action: script.porch_lightswitch_blueblink
data: {}

service call info:
This step was not executed and so no further trace information is available.

Where it seems to fail is before it gets to the first service call:

Iteration 1

Executed: April 13, 2025 at 4:36:46 PM
Result:

result: false

Iteration 2

Executed: April 13, 2025 at 4:36:46 PM
Result:

result: false

Iteration 3

Executed: April 13, 2025 at 4:36:46 PM
Result:

result: false

Iteration 4

Executed: April 13, 2025 at 4:36:47 PM
Result:

result: false

conditions/0

Iteration 1

[Unknown condition]
Executed: April 13, 2025 at 4:36:46 PM
Result:

result: false entities:

conditions/0

Iteration 2

[Unknown condition]
Executed: April 13, 2025 at 4:36:46 PM
Result:

result: false entities:

conditions/0

Iteration 3

[Unknown condition]
Executed: April 13, 2025 at 4:36:46 PM
Result:

result: false entities:

conditions/0

Iteration 4

[Unknown condition]
Executed: April 13, 2025 at 4:36:47 PM
Result:

result: false entities:

Oddly enough it looks like it worked on one of my black z wave 500 series but not my inovelli blues with z2m

Can you send the changed variables?

Iteration 1

repeat:
first: true
index: 1
last: false
item:
device_type: LZW30
call_type: zwave_js
entities:
- switch.guest_bathroom_fan_switch
- switch.master_bathroom_fan
- switch.master_bathroom_toilet_fan_switch
- switch.guest_bathroom_fan_switch
- switch.master_bathroom_fan
- switch.master_bathroom_toilet_fan_switch
Iteration 2

repeat:
first: false
index: 2
last: false
item:
device_type: LZW31
call_type: zwave_js
entities:
Iteration 3

repeat:
first: false
index: 3
last: false
item:
device_type: LZW30SN
call_type: zwave_js
entities:
- switch.lindas_bathroom_fan_switch
- switch.kids_bathroom_fan_switch
- switch.entrance_hallway_closet_switch
- switch.sunroom_ceiling_fan_switch
- switch.lindas_bathroom_fan_switch
- switch.kids_bathroom_fan_switch
- switch.entrance_hallway_closet_switch
- switch.sunroom_ceiling_fan_switch
Iteration 4

repeat:
first: false
index: 4
last: false
item:
device_type: LZW31SN
call_type: zwave_js
entities:
- light.gabriellas_closet_light_switch
- light.guest_bedroom_closet_light
- light.side_garage_light_switch
- light.gabriellas_closet_light_switch
- light.guest_bedroom_closet_light
- light.side_garage_light_switch
Iteration 5

repeat:
first: false
index: 5
last: false
item:
device_type: LZW36_light
call_type: zwave_js
entities:
Iteration 6

repeat:
first: false
index: 6
last: false
item:
device_type: LZW36_fan
call_type: zwave_js
entities:
Iteration 7

repeat:
first: false
index: 7
last: false
item:
device_type: VZW31SN
call_type: zwave_js
effects: 15
entities:
Iteration 8

repeat:
first: false
index: 8
last: false
item:
device_type: VZM31SN
call_type: z2m
effects: medium_blink
entities:
- light.front_porch_light_switch
Iteration 9

effects: medium_blink
repeat:
first: false
index: 9
last: false
item:
device_type: VZM35SN
call_type: z2m
effects: medium_blink
entities:
Iteration 10

effects: medium_blink
repeat:
first: false
index: 10
last: false
item:
device_type: VZM31SN
call_type: zha
effects: 15
entities:
Iteration 11

effects: medium_blink
repeat:
first: false
index: 11
last: true
item:
device_type: VZM35SN
call_type: zha
effects: 15
entities:

  1. Go to “Settings” (left-hand nav bar) → “Automations & Scenes” → “Scripts” (horizontal menu at the top) → select the script (whatever you named it).
  2. Click “Traces” (upper-right corner).
  3. All the way back up at the top, click the top bubble in the left column and then “changed variables” in the bottom half of the column on the right. Send the top of that (everything before color_set:) and the bottom (from floor: invalid down).

For me, it looks like this:

Changed variables top:

this:
  entity_id: script.inovelli_led
  state: 'off'
  attributes:
    last_triggered: '2024-12-08T14:42:56.273765+00:00'
    mode: parallel
    current: 0
    max: 100
    friendly_name: Inovelli LED Settings and Effects
  last_changed: '2024-12-08T21:43:05.858628+00:00'
  last_reported: '2024-12-08T21:43:05.858628+00:00'
  last_updated: '2024-12-08T21:43:05.858628+00:00'
  context:
    id: 01JEM3KRC209N1C70R79AJJNSM
    parent_id: null
    user_id: null
effect: chase medium
brightness: 10
color: red
duration: forever
entity:
  - light.lzw31sn_500dimmer

changed variables bottom:

floor: invalid
area: invalid
group: invalid
device: invalid
entities_from_floor: []
entities_from_area: []
entities_from_group: []
entities_from_device: []
entities_from_entity:
  - light.lzw31sn_500dimmer
all_selected_entities:
  - light.lzw31sn_500dimmer
context:
  id: 01JEM3M3G18E5BM6MJSG5J0YTA
  parent_id: null
  user_id: 0fde3f07079c4ffb9a19109e66b667d7
LEDnumber: all
LEDcolor: no change
LEDcolor_off: no change
LEDbrightness: 11
LEDbrightness_off: 11

The service you’re calling is script.inovelli_effects. Did you modify my code to change the name, or are you trying to call the script generated by the blueprint? You can’t change the parameters to the saved blueprint script—it just calls the blueprint which uses the variables you saved it with initially. It looks like that might be what you’re trying to do here:

Tried adjusting that but still no luck. The weird part is nothing is getting sent to the device log. I’m trying to switch over from node red and can get it to work there but not throught this script for some reason.

I do have instructions for installing the script version. Using that, you can pass dynamic values and templates.

Only thing I did was change the script name at the time of saving. I’ve tried again without renaming the script and I end up with the same result with the blue z2ms not working. I followed the directions on github for both the script and the blueprint but both do not seem to be working for my blue series. The old black series z waves seem to work without issue.

I’d have to see the changed variables text to help. If you can send me that whole text, I might be able to see what’s going on.

this:
  entity_id: script.inovelli_led_settings_and_effects
  state: 'off'
  attributes:
    last_triggered: '2025-04-14T23:32:38.887011+00:00'
    mode: parallel
    current: 0
    max: 100
    friendly_name: Inovelli LED Settings and Effects
  last_changed: '2025-04-14T23:32:38.909156+00:00'
  last_reported: '2025-04-14T23:32:38.909156+00:00'
  last_updated: '2025-04-14T23:32:38.909156+00:00'
  context:
    id: 01JRVABMB5PPN2A59V89HF4WM4
    parent_id: null
    user_id: 10388c3b78fb476c8957eecf682dcf61
entity:
  - light.front_porch_light_switch
selector_mode: any
domain: invalid
label: invalid
floor: invalid
area: invalid
group: invalid
device: invalid
allowed_domains:
  - fan
  - light
  - switch
entities_from_domain:
  - invalid
label_list: []
areas_from_label: invalid
devices_from_label: invalid
entities_from_label: invalid
entities_from_floor:
  - invalid
entities_from_area:
  - invalid
entities_from_group:
  - invalid
entities_from_device:
  - invalid
entities_from_entity:
  - light.front_porch_light_switch
all_selected_entities:
  - light.front_porch_light_switch
context:
  id: 01JRVACQFQ3MQRNPG2GSCH1VVY
  parent_id: null
  user_id: 10388c3b78fb476c8957eecf682dcf61
LEDnumber: all
LEDcolor_off: no change
LEDnumber_effect: all
effect: clear effect
brightness: 11
color: no change
duration: 0

Breaking Change

  • The domain variable introduced in the 2025.04.09 release would include all entities of a certain domain, and simultaneously limit entity domains from other filters (e.g. area:) to that domain. This release changes the behavior so that the domain variable includes all entities from the selected domain and does not limit others. I’ve introduced a new variable, allowed_domains to limit all filters to specific domain types.
  • This release of the script and blueprint will require Home Assistant 2025.04 or newer.

New features

  • New Templates for Selectors, Blueprint Accepts Variables, Z2M Topic Variable by @kschlichter in New Templates for Selectors, Blueprint Accepts Variables, Z2M Topic Variable by kschlichter · Pull Request #53 · kschlichter/Home-Assistant-Inovelli-Effects-and-Colors · GitHub
    • I re-wrote the code to select entities (e.g. floor, area, label, etc) and removed the for loops. This should be significantly faster on low-power systems like Raspberry Pi. I’d like to hear if that’s actually the case. It was a few dozen hours’ worth of work, so I hope it’s faster.
  • The blueprint now accepts templated inputs!
    • Previously my blueprint needed to me modified and saved for each option you wanted—it needed one to set up colors for day, another for night, one to start an effect, one to clear the effect, etc. That’s no longer the case.
    • The blueprint can now be saved as a blank script and inputs can be passed from automations, just like the script.
    • This should be SIGNIFICANTLY more usable, and allow for script calls like:
      service: script.inovelli_led
      data:
        domain: 'fan'
        LEDcolor: "{{ iif(is_state('sensor.day_or_night','day'),'blue','red') }}"
        LEDbrightness: "{{ iif(is_state('sensor.day_or_night','day'),8,3) }}"
        LEDbrightness_off: "{{ iif(is_state('sensor.day_or_night','day'),3,.1) }}"
      
    • New variable: allowed_domains – this will limit entities to the specified domain(s) for all filters.
      • For example, this combo will set all fans on the first floor to the color purple:
          service: script.inovelli_led
          data:
            allowed_domains: 'fan'
            floor: 'first floor'
            LEDcolor: 'purple'
            LEDcolor_off: 'purple'
        
      • While this combo will set all fans, and all entities (including fans, lights, and switches) on the first floor to purple:
          service: script.inovelli_led
          data:
            domain: 'fan'
            floor: 'first floor'
            LEDcolor: 'purple'
            LEDcolor_off: 'purple'
        
      • Or, add selector_mode into the mix and set all fans on the first floor (but NOT lights or switches on the first floor, or fans on other floors) to purple (this is a bit slower but functionally equivalent to the first example, however there are more powerful ways to use it):
          service: script.inovelli_led
          data:
            selector_mode: `all`
            domain: 'fan'
            floor: 'first floor'
            LEDcolor: 'purple'
            LEDcolor_off: 'purple'
        
    • New variable: z2m_topic – if you have custom topics in zigbee2mqtt you can specify that. It defaults to zigbee2mqtt if you leave it blank. This is not a breaking change.

Full Changelog: Comparing 2025.04.09...2025.04.23 · kschlichter/Home-Assistant-Inovelli-Effects-and-Colors · GitHub

1 Like

The release today includes the z2m_topic variable to fix this issue for you, @bgreet

1 Like

I wanted an easy way to template the individual LED colors based on various things, so I’ve added LEDcolor_custom in release 2025.05.09:

What’s Changed

  • Add a variable to receive custom color sets. Format is a dictionary:
    • {'led 1':255,'led 2':255,'led 3':255,'led 4':255,'led 5':255,'led 6':255,'led 7':255,'all':0}
  • Removed color sets from effects, since they don’t seem to be supported on any devices.
  • Fixed a bug which caused individual LED colors to attempt to be set on Z-Wave devices, resulting in errors.
  • Added examples for clearing effects
  • Added individual LED effect examples
  • Documented custom color sets for LEDcolor (LEDcolor_off is the same).

Full Changelog: Comparing 2025.04.23...2025.05.09 · kschlichter/Home-Assistant-Inovelli-Effects-and-Colors · GitHub

LEDcolor_custom:

Sets the color of the LED status bar to a custom dictionary, which indicates brightness levels of the light.

  • example: {'led 1':255,'led 2':255,'led 3':255,'led 4':255,'led 5':255,'led 6':255,'led 7':255,'all':0}
    • example above clears settings for all individual LEDs and sets the LED bar to red.
  • Needs LEDcolor: all custom on and LEDnumber: all (or left out)
  • Custom color sets:
    • Blue Series only.
    • Setting LEDcolor will not override the individual LED colors.
action: script.inovelli_led
data:
  LEDnumber: All
  LEDcolor_custom: >-
    {'led 1':25,'led 2':75,'led 3':125,'led 4':150,'led 5':175,'led 6':200,'led 7':250,'all':0}
  entity:
    - light.office
  LEDcolor: All Custom On

I’ve added support for White Series Matter devices. I dislike how this was implemented and it feels like a hack but Matter still has some limitations that seem to be difficult for Inovelli to work around.

  • LED bar can change color so it displays the dim level of the device. This is done through a select.* entity and guessing at the name. If you’ve changed the name of your light or select entities, this will break. One needs to start with light. and end with _light_1 while the other needs to start with select. and end with led_color. The rest of the object_id needs to match. Here’s what the entities look like for the device in my lab, so you have an example:
    • light.white_series_smart_2_1_switch_light_1
    • light.white_series_smart_2_1_switch_light_6
    • select.white_series_smart_2_1_switch_led_color
  • LED bar color when off is not supported (not possible).
  • LED bar brightness and brightness when off is not supported (not possible).
  • The only effect supported is “solid”, which is done with a secondary light.* entity. This name doesn’t need to match the primary light.* entity like the LED bar color switch.* entity does.
1 Like

Added support for:
* VZM30-SN Blue Series On/Off Switch
* Brightness is now correctly evaluated for effects.
* Duration is no longer required for the main effect stream (but defaults to 0sec so you’ll just get a blink off and back on).
* Entity selector has small improvements (but I still wish it was possible to filter for model).

Thank you, TerribleTesla, for your help testing this!

Hi. I used this blueprint as a starting point for an integration I’ve created for orchestrating notifications, Lampie.

I only have Blue switches, and need a bit of help to get this working for Red & White switches as well as Zigbee2MQTT.

I figured asking here may be a good idea since this blueprint covers all of the switch types (and those in the conversation are probably interested in notifications).

If you use any of those and are interested in helping, here’s a link to the comment with the details:

Thanks in advance for considering!

If you’ve updated to Zigbee2MQTT v2.6.1, you’ll need to pull the latest version of the blueprint and script in order to clear effects or use the off effect.

1 Like

Hi. Appreciate this blueprint. I have a couple of simple orientation questions regarding how it can be used on Inovelli White dimmers.

It appears to only change the color when the secondary “light (6)” entity is turned on. That seems OK and does what I need. But how should I be using the script? I’m just trying to turn the LED bar to solid red after an event trigger. Would I just run the script manually, one time, to permanently change the LED color for the second light entity? Is it permenant? If that’s the case, I can just use an automation to trigger on/off action for the second light entity. That’s all I need really.

Or should I be calling the script for to push a color change as an action in an automation and ignore the second light entity?

Appreciate the help!

Thanks for checking out the blueprint script! Sorry it took me so long to get back to you; it took me awhile to remember how the White Series devices worked. It’s not straightforward. Also, I found a bug in the code (which you might have been hitting) and published a new release today. Be sure to pull the latest blueprint before running any of the commands below.

To change the color of the LED bar that indicates the dim level of the load—light(1)—you would use something like this to permanently change the color:

action: script.inovelli_led
data:
  entity:
    - light.white_series_smart_2_1_switch_light_1
  LEDnumber: All
  LEDcolor: Lime
  LEDbrightness: 8.1

If you want to indicate an event, you might use light(6) and the effect section for that. In this example it’ll turn pink for 30 seconds and then turn off (showing the LED bar that indicates the dim level of the load), but you could change that to forever. This LED bar only supports the solid effect and nothing else. When something is set and the load changes (e.g. the device is turned off), the effect will turn off, you’ll see the load LED bar dimming, and then the effect will reappear. Play around with it a bit and it should make more sense.

action: script.inovelli_led
data:
  entity:
    - light.white_series_smart_2_1_switch_light_6
  effect: Solid
  brightness: 8
  color: Pink
  duration: 30 Seconds

To clear the effect after forever, you’d just call the script with the effect entity alone:

action: script.inovelli_led
data:
  entity:
    - light.white_series_smart_2_1_switch_light_6

…or just turn off the light with a light.turn_off action, like you suggested.

Alternatively, you could template the color to reflect the alert:

action: script.inovelli_led
data:
  entity:
    - light.white_series_smart_2_1_switch_light_1
  LEDnumber: All
  LEDcolor: "{{ iif(is_state('sensor.front_door','on'),'red','blue') }}"
  LEDbrightness: 8.0

In that example, you’d need to trigger on any state change for sensor.front_door and re-call this script. It should turn the light(1) LED bar red when the door is open and blue when it’s closed.

I think there are several ways to do what you’re trying to do, so hopefully that gets you started with some ideas. Both of the method’s you’ve suggested are valid.

… I can just use an automation to trigger on/off action for the second light entity. That’s all I need really.

Or should I be calling the script for to push a color change as an action in an automation and ignore the second light entity?"

1 Like

Just awesome. Thanks for that explanation. Super nice of you!

When using the “indefinite” duration, how do I end the effect and bring things back to the prior (default) state? The LED colors on my switches vary; some default blue, some green, etc. If I run another version of the script using “clear”, the effect stops, but the color does not revert to the prior (default) color.

The use case is alerting. In HA, whenever a water leak is detected (or some other very bad thing), the goal is for all switches to start flashing red. Once the issue is resolve, everything should go back to normal.

Thanks!

Can you send me the code you’re using to set the effect and clear it?

BTW, sorry I missed your question 5 days ago. I don’t remember seeing the notification.