Inovelli Z-Wave Red Series Notification LED

I can confirm that the script doesn’t work with my LZW30-SN because of the parameter 8 thing. Thanks for pointing us to that GitHub PR @DaveCo1701. I’ll keep an eye on developments there.

Here’s the script I created for this. I’m sure there is a more elegant way to do this, but it works.

switch_light_alert:
  alias: VISUAL ALERT - Switch LED
  sequence:
  - target:
      entity_id:
      - switch.front_porch_light_switch
      - switch.living_room_switch_outlet
      - switch.master_bed_switch_outlet_switch
    data:
      parameter: '8'
      bitmask: 2130706432
      value: 0
    service: zwave_js.set_config_parameter
  - target:
      entity_id:
      - switch.front_porch_light_switch
      - switch.living_room_switch_outlet
      - switch.master_bed_switch_outlet_switch
    data_template:
      parameter: 8
      bitmask: 255
      value: "{% if is_state(\"group.exterior_doors\", \"on\") %}\n  0\n{% elif is_state(\"\
        alarm_control_panel.simplisafe_alarm\", \"disarmed\") and now().hour >= 19\
        \ %}\n  Yellow\n{% elif is_state(\"alarm_control_panel.simplisafe_alarm\"\
        , \"disarmed\") and now().hour <= 6 %}\n  Yellow\n{% else %}\n  0\n{% endif\
        \ %}\n"
    service: zwave_js.set_config_parameter
  - target:
      entity_id:
      - switch.front_porch_light_switch
      - switch.living_room_switch_outlet
      - switch.master_bed_switch_outlet_switch
    data_template:
      parameter: 8
      bitmask: 65280
      value: "{% if is_state(\"group.exterior_doors\", \"on\") %}\n  10\n{% elif is_state(\"\
        alarm_control_panel.simplisafe_alarm\", \"disarmed\") and now().hour >= 19\
        \ %}\n  10\n{% elif is_state(\"alarm_control_panel.simplisafe_alarm\", \"\
        disarmed\") and now().hour <= 6 %}\n  10\n{% else %}\n  0\n{% endif %}\n"
    service: zwave_js.set_config_parameter
  - target:
      entity_id:
      - switch.front_porch_light_switch
      - switch.living_room_switch_outlet
      - switch.master_bed_switch_outlet_switch
    data_template:
      parameter: 8
      bitmask: 16711680
      value: "{% if is_state(\"group.exterior_doors\", \"on\") %}\n  0\n{% elif is_state(\"\
        alarm_control_panel.simplisafe_alarm\", \"disarmed\") and now().hour >= 19\
        \ %}\n  0\n{% elif is_state(\"alarm_control_panel.simplisafe_alarm\", \"disarmed\"\
        ) and now().hour <= 6 %}\n  0\n{% else %}\n  0\n{% endif %}\n"
    service: zwave_js.set_config_parameter
  - target:
      entity_id:
      - switch.front_porch_light_switch
      - switch.living_room_switch_outlet
      - switch.master_bed_switch_outlet_switch
    data_template:
      parameter: 8
      bitmask: 2130706432
      value: "{% if is_state(\"group.exterior_doors\", \"on\") %}\n  3\n{% elif is_state(\"\
        alarm_control_panel.simplisafe_alarm\", \"disarmed\") and now().hour >= 19\
        \ %}\n  3\n{% elif is_state(\"alarm_control_panel.simplisafe_alarm\", \"disarmed\"\
        ) and now().hour <= 6 %}\n  3\n{% else %}\n  0\n{% endif %}\n"
    service: zwave_js.set_config_parameter
  mode: single
4 Likes

Thank you! I will see if I can copy this until Zwave JS is updated and then can leverage BrianHanifins code. Much appreciated

I was thinking about buying the dual fan/light switch but was wondering… I see that obviously the leds take a little work but do the switch/buttons work out of the box? Like recognized in HA and stuff.
Inovelli Z-Wave Fan & Light Switch (Red Series) | ZWave Fan Control & Light Dimmer | Independent Controller of Fan Speed & Light Bulbs https://www.amazon.com/dp/B08665WJ2B/ref=cm_sw_r_cp_api_glt_fabc_VTDWYN3ZSW7XCJRYYV6N

I created a more yaml format version using DaveCo1701 code and using the template for the values here if you scroll down a bit from BrianHanifin : https://brianhanifin.com/posts/inovelli-dimmer-status-led-home-assistant/

It’s not as efficient but I figured the comments for all the parameters are helpful. I only use my notification light currently for one action

switch_light_on:
  alias: VISUAL ALERT - Switch LED On
  sequence:
  - target:
      entity_id: switch.front_door_light
    data:
      parameter: '8'
      bitmask: 2130706432
      value: 0
    service: zwave_js.set_config_parameter
  - target:
      entity_id: switch.front_door_light
    data_template:
      parameter: 8
      bitmask: 255
#Color
      value: Red
    service: zwave_js.set_config_parameter
  - target:
      entity_id: switch.front_door_light
    data_template:
      parameter: 8
      bitmask: 65280
#Level
      value: 10
    service: zwave_js.set_config_parameter
  - target:
      entity_id: switch.front_door_light
    data_template:
      parameter: 8
      bitmask: 16711680
#Duration
      value: 0
    service: zwave_js.set_config_parameter
  - target:
      entity_id: switch.front_door_light
    data_template:
      parameter: 8
      bitmask: 2130706432
#Effect
      value: 1
    service: zwave_js.set_config_parameter
  mode: single
1 Like

Here’s how I’m using the new calls at the moment. It does support both the single param method as well as multiple calls for the other switches. I’ve got a PR in upstream to fix the max value for the lzw31-sn param and see if it should be split apart like the other switches.

It’s also got a set of input_number and template sensor to calculate the value for the duration since that’s not fun to try to do by hand.

2 Likes

With the release of the fixed configs, I’ve updated the above script to use just the named parameters which simplifies the logic immensely. Please note that the zwavejs version is important to make sure the updated configs are there, and I also had to restart Hass in order for it to see the right values.

1 Like

Here’s the original with the bitmasks put in:

1 Like

thanks @firstof9, the code complains about a duplicate “target”
I believe you have forgotten the service call above each target but have to go home and try it.

Extra calls are not required, I’m using the script as is right now and it works perfectly.

i see, i am not sure why it complains for me, i will reload HA and see if this fixes it. thanks for the code again

1 Like

This works for me.
The weird thing is that I am using the script with the 4 separate messages and it works for the switch, fan, and fan light devices but doesnt work for my dimmers. But then i try the script that sends one message it does work on my dimmers and not the rest. So I ended up calling different scripts for now. Anyone else have this issue?

I’ve since adjusted it:

1 Like

Standing on the shoulders of giants, I’ve written a script to configure the indicator color alongside—or separately from—the effects. I use the LED indicator strip more than the effects, and it didn’t look like anybody else was doing this. It should be straightforward to use. The current version of the script is for zwave2mqtt container 2.4.0, but there’s a version that will work with 2.2.0 in the history for the script.

https://github.com/kschlichter/Home-Assistant-Inovelli-Red-Dimmer-Switch

3 Likes

I’m just getting in to Home Assistant. How does something like this get implemented into HA. I’m running HassOS on a Virtualbox VM. Do I add the contents to the configuration.yaml file or include a reference it somehow?

Generally speaking what’s the best way to incorporate files from GitHub into HA?

Sorry for the NewB question.

Everybody has that question at some point. I certainly did at first. You can split up the configuration.yaml so that Hass adds *.yaml files in the /config/scripts subdirectory. I use Docker, so maybe the VM doesn’t use /config but it’ll be a subdirectory of wherever your configuration.yaml file is. The exact line in configuration.yaml looks like:

script: !include_dir_named scripts

Then you can either pull the file from git and link it into that directory, or copy it and paste it into a file called WhateverYouWant.yaml

I’m still holding on to hope that the Node-RED Inovelli Status Manager will get updated for ZwaveJS.

1 Like

I’ve forked the original to add more functionality, I can try to update soon to tailor it to Z-Wave JS

4 Likes

Great tip! I also learn if you want to keep your original scripts file intact, but still include scripts in a subfolder (e.g. “./scripts”) it would look like this:

# Origianl scripts file pointer
script: !include scripts.yaml

# Pointer for new folder
script split: !include_dir_merge_named ./scripts

this ensures nothing breaks, even if you haven’t ever used your scripts file, its good practice to keep it there incase you use a frontend tool that expects it.

That would be awesome I looking forward to this as well. I was able to install into node-red but no changes to lights. Can’t wait for zwavejs to be supported!