Why I Switched from Enbrighten to Inovelli Blue Series — and the LED Notification Script That Came With It
I’ve been running Home Assistant with ZHA for a while now and had 12 Enbrighten (Jasco) Zigbee wall switches throughout the house. They’re decent switches and the price is hard to argue with. But I kept running into the same problem — after a power outage or even just a tripped breaker, several of them would drop off the Zigbee mesh and stop responding to HA entirely. The fix was always the same: find the right breaker, flip it off, count to ten, flip it back on.
That sounds minor until it isn’t. My wife can’t do it, doesn’t want to do it, and frankly shouldn’t have to. When I’m not home and the porch light stops responding, that’s not a smart home — that’s an extra chore with extra steps.
I built an unavailability automation to detect and alert when a switch goes offline and attempt a ZHA reconfigure automatically, which helped. But the outdoor switches — porch chandelier, front yard post light, coach lights — were tripping regularly enough in Florida storm season that it was still a real problem. That was the breaking point.
Why Not Zooz?
I know what you’re thinking. Zooz Z-Wave switches are well-regarded, reliable, and generally cheaper than Inovelli. I looked at them seriously. Two problems: first, adding Z-Wave means adding a Z-Wave coordinator on top of my existing ZHA Zigbee setup — more infrastructure for a handful of switches. Second, and this is the one that actually settled it — Zooz doesn’t have then in stock in Almond. My wife has opinions about switch colors. Almond is the color throughout the house. Discussion over.
Why Inovelli Blue Series?
The Inovelli Blue Series drops straight into ZHA — no new coordinator, no parallel mesh to manage. It extends the Zigbee network I already have. More importantly, the community has documented consistently better power-restore rejoin behavior compared to Enbrighten. Where Jasco switches often sit orphaned after a power event, the Inovellis come back on their own.
I replaced 8 switches total:
-
Porch Chandelier — VZM31-SN dimmer
-
Front Yard Post Light — VZM31-SN dimmer
-
Coach Lights — VZM30-SN on/off (set to on/off mode via Parameter 258)
-
Bedroom Fan Lights — VZM31-SN dimmer
-
Bedroom Fans — VZM35-SN fan switch (two fans on one switch, within the 2.5A rating)
-
Family Room Fan — VZM35-SN fan switch
-
Garage LED Lights — VZM30-SN on/off
-
Office Outlet — VZM30-SN on/off
They’re in Almond. The wife approves. We’re done here.
The LED Bar
Once the switches were in I wanted to actually use the LED notification bar for something practical. The LED bar is one of those features that looks like a gimmick until you realize you can use it as a persistent, silent status display — garage door left open after sunset, away mode active, switch just recovered from a power event.
The ZHA service call to control it is zha.issue_zigbee_cluster_command against cluster 64561 with params (not args — that one cost me an evening). After working through the correct format I ended up with a reusable HA script that handles all LEDs or individual LEDs, all 20 effects, named colors, and named switches by friendly name — so automations just call the script and I never have to touch a raw IEEE address in an automation again.
I did not write this script myself. I used Claude (Anthropic’s AI) to build it, debug it, and work through the ZHA cluster command format. Several iterations were needed to get the params key structure right and confirm that command 1 handles all LEDs while command 3 handles individual ones. Sharing it here in case it saves someone else the same debugging session.
The Script
alias: Inovelli LED Notification
description: >-
Sets the LED bar on any Inovelli Blue Series switch by name. Supports all
LEDs or individual LED selection. Effects marked with * only work in all-LED
mode and fall back to Solid on individual LEDs. Update this script to change
LED behavior across all automations that call it — no automation edits needed.
fields:
switch_name:
name: Switch
description: Select the Inovelli switch to control.
required: true
example: Porch Chandelier
selector:
select:
options:
- label: Porch Chandelier
value: "aa:bb:cc:ff:fe:dd:ee:01"
- label: Front Yard Post Light
value: "aa:bb:cc:ff:fe:dd:ee:02"
- label: Switch 3
value: "aa:bb:cc:ff:fe:dd:ee:03"
- label: Switch 4
value: "aa:bb:cc:ff:fe:dd:ee:04"
led:
name: LED Selection
description: >-
All LEDs controls the full bar. Individual LEDs numbered 1 (bottom) to 7
(top). Effects with * only work in All LEDs mode.
required: true
default: all
example: all
selector:
select:
options:
- label: All LEDs
value: all
- label: LED 1 - bottom
value: "0"
- label: LED 2
value: "1"
- label: LED 3
value: "2"
- label: LED 4 - middle
value: "3"
- label: LED 5
value: "4"
- label: LED 6
value: "5"
- label: LED 7 - top
value: "6"
color:
name: Color
description: LED color.
required: true
default: "0"
example: "0"
selector:
select:
options:
- label: Red
value: "0"
- label: Orange
value: "21"
- label: Yellow
value: "42"
- label: Lime Green
value: "64"
- label: Green
value: "85"
- label: Teal
value: "106"
- label: Cyan
value: "127"
- label: Light Blue
value: "148"
- label: Blue
value: "170"
- label: Violet
value: "191"
- label: Purple
value: "212"
- label: Pink
value: "221"
- label: Hot Pink
value: "234"
- label: White
value: "255"
effect:
name: Effect
description: >-
LED animation effect. Effects marked with * only work in All LEDs mode
and fall back to Solid on individual LEDs.
required: true
default: "1"
example: "1"
selector:
select:
options:
- label: Solid
value: "1"
- label: Fast blink
value: "2"
- label: Slow blink
value: "3"
- label: Pulse
value: "4"
- label: Chase
value: "5"
- label: Open / close
value: "6"
- label: Small to big
value: "7"
- label: Aurora
value: "8"
- label: Slow falling *
value: "9"
- label: Medium falling *
value: "10"
- label: Fast falling *
value: "11"
- label: Slow rising *
value: "12"
- label: Medium rising *
value: "13"
- label: Fast rising *
value: "14"
- label: Medium blink *
value: "15"
- label: Slow chase *
value: "16"
- label: Fast chase *
value: "17"
- label: Fast siren *
value: "18"
- label: Slow siren *
value: "19"
- label: Off (clear notification)
value: "0"
intensity:
name: Intensity
description: Brightness of the LED bar.
required: true
default: "80"
example: "80"
selector:
select:
options:
- label: Low (20%)
value: "20"
- label: Medium (50%)
value: "50"
- label: High (80%)
value: "80"
- label: Full (100%)
value: "100"
duration:
name: Duration
description: How long the effect runs. Indefinite stays on until cleared with Off effect.
required: true
default: "10"
example: "10"
selector:
select:
options:
- label: 5 seconds
value: "5"
- label: 10 seconds
value: "10"
- label: 30 seconds
value: "30"
- label: 1 minute
value: "60"
- label: 2 minutes
value: "120"
- label: 4 minutes
value: "240"
- label: Indefinite (until cleared)
value: "255"
icon: mdi:led-strip-variant
mode: parallel
max: 20
sequence:
- variables:
single_led_safe: [0, 1, 2, 3, 4, 5, 6, 7, 8]
v_ieee: "{{ switch_name }}"
v_color: "{{ color | int(0) }}"
v_intensity: "{{ intensity | int(80) }}"
v_duration: "{{ duration | int(10) }}"
v_effect_raw: "{{ effect | int(1) }}"
v_led: "{{ led }}"
- variables:
v_command: "{{ 1 if v_led == 'all' else 3 }}"
v_effect: >-
{{ v_effect_raw if (v_led == 'all' or v_effect_raw in single_led_safe)
else 1 }}
v_led_number: "{{ 0 if v_led == 'all' else v_led | int(0) }}"
- choose:
- conditions:
- condition: template
value_template: "{{ v_led == 'all' }}"
sequence:
- action: zha.issue_zigbee_cluster_command
data:
ieee: "{{ v_ieee }}"
endpoint_id: 1
cluster_id: 64561
cluster_type: in
command: 1
command_type: server
manufacturer: 4655
params:
led_color: "{{ v_color }}"
led_level: "{{ v_intensity }}"
led_duration: "{{ v_duration }}"
led_effect: "{{ v_effect }}"
- conditions:
- condition: template
value_template: "{{ v_led != 'all' }}"
sequence:
- action: zha.issue_zigbee_cluster_command
data:
ieee: "{{ v_ieee }}"
endpoint_id: 1
cluster_id: 64561
cluster_type: in
command: 3
command_type: server
manufacturer: 4655
params:
led_number: "{{ v_led_number }}"
led_color: "{{ v_color }}"
led_level: "{{ v_intensity }}"
led_duration: "{{ v_duration }}"
led_effect: "{{ v_effect }}"
Key things to replace:
Replace the switch labels and IEEE addresses in the dropdown with your own devices. Find the IEEE address on the device page in ZHA under the device’s Zigbee information.
Happy to answer questions. Credit for working through the ZHA cluster format and building the automation infrastructure goes to Claude — I just pushed the buttons and told it what I needed.