Switching from Enbrighten to Inovelli Blue Switches

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.

FYI, there’s several blueprints for controlling the leds across Inovelli switches with Home Assistant available already. Some of those manage them in different ways and can handle red/white/blue series all in one call if you ever expand outside of Zigbee.

  1. Control LEDs and LED Effects on Inovelli Black, Red, Blue, and White Series Devices by Floor, Area, Group, Device ID, or Entity - Blueprints Exchange - Home Assistant Community
  2. ZHA - Inovelli Blue Series 2-1 Switch LED Notification Script - Blueprints Exchange - Home Assistant Community
  3. Lampie: Notifications on Multiple Inovelli Switches - Custom Integrations - Home Assistant Community
1 Like

Thanks for the heads-up! I’m familiar with a blueprint or two already, but I wanted something tailored specifically to my setup and workflow rather than a one-size-fits-all solution. That said, I’ll definitely take a look at what else is out there — especially the ones that can handle multiple series in a single call. Appreciate you sharing!