ZEN32 Scene Controller - Z-Wave JS

Just got one of these installed and couldn’t find a blueprint on the exchange. Hopefully this saves someone a little time.

Open your Home Assistant instance and show the blueprint import dialog with a specific blueprint pre-filled.
EDIT: Replaced with updates/improvements @blhoward2 made

blueprint:
  name: ZEN32 (Z-Wave JS)
  description: Create automations for the Zooz ZEN32 switch using the Z-Wave JS integration.
  domain: automation
  input:
    zooz_switch:
      name: Zooz Switch
      description: List of available Zooz ZEN32 switches.
      selector:
        device:
          filter:
            - integration: zwave_js
              manufacturer: Zooz
              model: ZEN32
            - integration: zwave_js
              manufacturer: Zooz
              model: ZEN32 800LR
          multiple: false
    scene_5:
      name: Scene 5 - Pressed Once
      description: Action to run when button is pressed once.
      default: []
      selector:
        action:
    scene_1:
      name: Scene 1 - Pressed Once
      description: Action to run when button is pressed once.
      default: []
      selector:
        action:
    scene_2:
      name: Scene 2 - Pressed Once
      description: Action to run when button is pressed once.
      default: []
      selector:
        action:
    scene_3:
      name: Scene 3 - Pressed Once
      description: Action to run when button is pressed once.
      default: []
      selector:
        action:
    scene_4:
      name: Scene 4 - Pressed Once
      description: Action to run when button is pressed once.
      default: []
      selector:
        action:
    scene_5h:
      name: Scene 5 - Held
      description: Action to run when button is held.
      default: []
      selector:
        action:
    scene_1h:
      name: Scene 1 - Held
      description: Action to run when button is held.
      default: []
      selector:
        action:
    scene_2h:
      name: Scene 2 - Held
      description: Action to run when button is held.
      default: []
      selector:
        action:
    scene_3h:
      name: Scene 3 - Held
      description: Action to run when button is held.
      default: []
      selector:
        action:
    scene_4h:
      name: Scene 4 - Held
      description: Action to run when button is held.
      default: []
      selector:
        action:
    scene_5r:
      name: Scene 5 - Released
      description: Action to run when button is released.
      default: []
      selector:
        action:
    scene_1r:
      name: Scene 1 - Released
      description: Action to run when button is released.
      default: []
      selector:
        action:
    scene_2r:
      name: Scene 2 - Released
      description: Action to run when button is released.
      default: []
      selector:
        action:
    scene_3r:
      name: Scene 3 - Released
      description: Action to run when button is released.
      default: []
      selector:
        action:
    scene_4r:
      name: Scene 4 - Released
      description: Action to run when button is released.
      default: []
      selector:
        action:
    scene_52:
      name: Scene 5 - Pressed 2x
      description: Action to run when button is pressed twice.
      default: []
      selector:
        action:
    scene_12:
      name: Scene 1 - Pressed 2x
      description: Action to run when button is pressed twice.
      default: []
      selector:
        action:
    scene_22:
      name: Scene 2 - Pressed 2x
      description: Action to run when button is pressed twice.
      default: []
      selector:
        action:
    scene_32:
      name: Scene 3 - Pressed 2x
      description: Action to run when button is pressed twice.
      default: []
      selector:
        action:
    scene_42:
      name: Scene 4 - Pressed 2x
      description: Action to run when button is pressed twice.
      default: []
      selector:
        action:
    scene_53:
      name: Scene 5 - Pressed 3x
      description: Action to run when button is pressed three times.
      default: []
      selector:
        action:
    scene_13:
      name: Scene 1 - Pressed 3x
      description: Action to run when button is pressed three times.
      default: []
      selector:
        action:
    scene_23:
      name: Scene 2 - Pressed 3x
      description: Action to run when button is pressed three times.
      default: []
      selector:
        action:
    scene_33:
      name: Scene 3 - Pressed 3x
      description: Action to run when button is pressed three times.
      default: []
      selector:
        action:
    scene_43:
      name: Scene 4 - Pressed 3x
      description: Action to run when button is pressed three times.
      default: []
      selector:
        action:
    scene_54:
      name: Scene 5 - Pressed 4x
      description: Action to run when button is pressed four times.
      default: []
      selector:
        action:
    scene_14:
      name: Scene 1 - Pressed 4x
      description: Action to run when button is pressed four times.
      default: []
      selector:
        action:
    scene_24:
      name: Scene 2 - Pressed 4x
      description: Action to run when button is pressed four times.
      default: []
      selector:
        action:
    scene_34:
      name: Scene 3 - Pressed 4x
      description: Action to run when button is pressed four times.
      default: []
      selector:
        action:
    scene_44:
      name: Scene 4 - Pressed 4x
      description: Action to run when button is pressed four times.
      default: []
      selector:
        action:
    scene_55:
      name: Scene 5 - Pressed 5x
      description: Action to run when button is pressed five times.
      default: []
      selector:
        action:
    scene_15:
      name: Scene 1 - Pressed 5x
      description: Action to run when button is pressed five times.
      default: []
      selector:
        action:
    scene_25:
      name: Scene 2 - Pressed 5x
      description: Action to run when button is pressed five times.
      default: []
      selector:
        action:
    scene_35:
      name: Scene 3 - Pressed 5x
      description: Action to run when button is pressed five times.
      default: []
      selector:
        action:
    scene_45:
      name: Scene 4 - Pressed 5x
      description: Action to run when button is pressed five times.
      default: []
      selector:
        action:
  source_url: https://community.home-assistant.io/t/zen32-scene-controller-z-wave-js/292610
mode: single
max_exceeded: silent
variables:
  device_id: !input 'zooz_switch'
trigger:
- platform: event
  event_type: zwave_js_value_notification
condition: '{{ trigger.event.data.device_id == device_id }}'
action:
- variables:
    property_key_name: '{{ trigger.event.data.property_key_name }}'
    label: '{{ trigger.event.data.label }}'
    command_class_name: '{{ trigger.event.data.command_class_name }}'
    value: '{{ trigger.event.data.value }}'
- service: logbook.log
  data:
    name: 'Z-Wave JS'
    message: 'received event: {{ command_class_name }} - {{ value }} - {{ label }}'
- choose:
  - conditions: '{{ property_key_name == ''001'' and value == ''KeyPressed'' }}'
    sequence: !input 'scene_1'
  - conditions: '{{ property_key_name == ''001'' and value == ''KeyHeldDown'' }}'
    sequence: !input 'scene_1h'
  - conditions: '{{ property_key_name == ''001'' and value == ''KeyReleased'' }}'
    sequence: !input 'scene_1r'
  - conditions: '{{ property_key_name == ''001'' and value == ''KeyPressed2x'' }}'
    sequence: !input 'scene_12'
  - conditions: '{{ property_key_name == ''001'' and value == ''KeyPressed3x'' }}'
    sequence: !input 'scene_13'
  - conditions: '{{ property_key_name == ''001'' and value == ''KeyPressed4x'' }}'
    sequence: !input 'scene_14'
  - conditions: '{{ property_key_name == ''001'' and value == ''KeyPressed5x'' }}'
    sequence: !input 'scene_15'
  - conditions: '{{ property_key_name == ''002'' and value == ''KeyPressed'' }}'
    sequence: !input 'scene_2'
  - conditions: '{{ property_key_name == ''002'' and value == ''KeyHeldDown'' }}'
    sequence: !input 'scene_2h'
  - conditions: '{{ property_key_name == ''002'' and value == ''KeyReleased'' }}'
    sequence: !input 'scene_2r'
  - conditions: '{{ property_key_name == ''002'' and value == ''KeyPressed2x'' }}'
    sequence: !input 'scene_22'
  - conditions: '{{ property_key_name == ''002'' and value == ''KeyPressed3x'' }}'
    sequence: !input 'scene_23'
  - conditions: '{{ property_key_name == ''002'' and value == ''KeyPressed4x'' }}'
    sequence: !input 'scene_24'
  - conditions: '{{ property_key_name == ''002'' and value == ''KeyPressed5x'' }}'
    sequence: !input 'scene_25'
  - conditions: '{{ property_key_name == ''003'' and value == ''KeyPressed'' }}'
    sequence: !input 'scene_3'
  - conditions: '{{ property_key_name == ''003'' and value == ''KeyHeldDown'' }}'
    sequence: !input 'scene_3h'
  - conditions: '{{ property_key_name == ''003'' and value == ''KeyReleased'' }}'
    sequence: !input 'scene_3r'
  - conditions: '{{ property_key_name == ''003'' and value == ''KeyPressed2x'' }}'
    sequence: !input 'scene_32'
  - conditions: '{{ property_key_name == ''003'' and value == ''KeyPressed3x'' }}'
    sequence: !input 'scene_33'
  - conditions: '{{ property_key_name == ''003'' and value == ''KeyPressed4x'' }}'
    sequence: !input 'scene_34'
  - conditions: '{{ property_key_name == ''003'' and value == ''KeyPressed5x'' }}'
    sequence: !input 'scene_35'
  - conditions: '{{ property_key_name == ''004'' and value == ''KeyPressed'' }}'
    sequence: !input 'scene_4'
  - conditions: '{{ property_key_name == ''004'' and value == ''KeyHeldDown'' }}'
    sequence: !input 'scene_4h'
  - conditions: '{{ property_key_name == ''004'' and value == ''KeyReleased'' }}'
    sequence: !input 'scene_4r'
  - conditions: '{{ property_key_name == ''004'' and value == ''KeyPressed2x'' }}'
    sequence: !input 'scene_42'
  - conditions: '{{ property_key_name == ''004'' and value == ''KeyPressed3x'' }}'
    sequence: !input 'scene_43'
  - conditions: '{{ property_key_name == ''004'' and value == ''KeyPressed4x'' }}'
    sequence: !input 'scene_44'
  - conditions: '{{ property_key_name == ''004'' and value == ''KeyPressed5x'' }}'
    sequence: !input 'scene_45'
  - conditions: '{{ property_key_name == ''005'' and value == ''KeyPressed'' }}'
    sequence: !input 'scene_5'
  - conditions: '{{ property_key_name == ''005'' and value == ''KeyHeldDown'' }}'
    sequence: !input 'scene_5h'
  - conditions: '{{ property_key_name == ''005'' and value == ''KeyReleased'' }}'
    sequence: !input 'scene_5r'
  - conditions: '{{ property_key_name == ''005'' and value == ''KeyPressed2x'' }}'
    sequence: !input 'scene_52'
  - conditions: '{{ property_key_name == ''005'' and value == ''KeyPressed3x'' }}'
    sequence: !input 'scene_53'
  - conditions: '{{ property_key_name == ''005'' and value == ''KeyPressed4x'' }}'
    sequence: !input 'scene_54'
  - conditions: '{{ property_key_name == ''005'' and value == ''KeyPressed5x'' }}'
    sequence: !input 'scene_55'

Edit #2: Include ZEN32 800LR

16 Likes

I just got one of these set up and this makes using the scene buttons a breeze.

Thanks for putting this one together!

1 Like

Thanks for creating this. I’m trying to use it, but getting the following error in the logs:

Error while executing automation automation.zen32_z_wave_js: UndefinedError: ‘trigger’ is undefined

I see the Z wave events firing if I listen for zwave_js_event, but the actions don’t run, even if I click ‘run actions’ within the automation.

Would love to hear if anyone else has run into this. Thanks!

Sorry you’re having trouble with the blueprint. I’ve seen a similar issue if I create a scene via the UI then later delete it also via the UI. Sometimes, Home Assistant doesn’t actually delete the automation for that scene. It just replaces everything with empty strings. Check automations.yaml for automations using the blueprint zen32_zwave_js and delete any scenes with those empty strings.

Example:

      scene_1:
      - service: ''
        target:
          entity_id: ''

Thanks for the reply. I checked my automations.yaml and there is only 1 automation.

- id: '1617840180502'
  alias: ZEN32 (Z-Wave JS)
  description: ''
  use_blueprint:
    path: fxlt/zen32-scene-controller-z-wave-js.yaml
    input:
      scene_1:
      - service: light.toggle
        target:
          entity_id: light.kitchen_main_lights
      zooz_switch: 7098a49d7a1481a49cff12c2a97c8224

So I’m now getting this error in the log:

“Error while executing automation automation.zen32_z_wave_js: UndefinedError: ‘dict object’ has no attribute ‘event’”

Thanks so much again for your reply

There’s a breaking change with latest update of Z-Wave JS.

As of 2021.4.1, the blueprint needs to be updated.

Replace:

trigger:
  - platform: event
    event_type: zwave_js_event

with:

trigger:
  - platform: event
    event_type: zwave_js_value_notification
1 Like

That’s really odd… I have scene exactly like this and it just works. The only difference I could see (besides the ids) is your zooz_switch lines is at the bottom, while mine is directly under input.

I’ve fixed the breaking change, and improved the logging section:

blueprint:
  name: ZEN32 (Z-Wave JS)
  description: Create automations for the Zooz ZEN32 switch using the Z-Wave JS integration.
  domain: automation
  input:
    zooz_switch:
      name: Zooz Switch
      description: List of available Zooz ZEN32 switches.
      selector:
        device:
          integration: zwave_js
          manufacturer: Zooz
          model: ZEN32
    scene_5:
      name: Scene 5 - Pressed Once
      description: Action to run when button is pressed once.
      default: []
      selector:
        action:
    scene_1:
      name: Scene 1 - Pressed Once
      description: Action to run when button is pressed once.
      default: []
      selector:
        action:
    scene_2:
      name: Scene 2 - Pressed Once
      description: Action to run when button is pressed once.
      default: []
      selector:
        action:
    scene_3:
      name: Scene 3 - Pressed Once
      description: Action to run when button is pressed once.
      default: []
      selector:
        action:
    scene_4:
      name: Scene 4 - Pressed Once
      description: Action to run when button is pressed once.
      default: []
      selector:
        action:
    scene_5h:
      name: Scene 5 - Held
      description: Action to run when button is held.
      default: []
      selector:
        action:
    scene_1h:
      name: Scene 1 - Held
      description: Action to run when button is held.
      default: []
      selector:
        action:
    scene_2h:
      name: Scene 2 - Held
      description: Action to run when button is held.
      default: []
      selector:
        action:
    scene_3h:
      name: Scene 3 - Held
      description: Action to run when button is held.
      default: []
      selector:
        action:
    scene_4h:
      name: Scene 4 - Held
      description: Action to run when button is held.
      default: []
      selector:
        action:
    scene_5r:
      name: Scene 5 - Released
      description: Action to run when button is released.
      default: []
      selector:
        action:
    scene_1r:
      name: Scene 1 - Released
      description: Action to run when button is released.
      default: []
      selector:
        action:
    scene_2r:
      name: Scene 2 - Released
      description: Action to run when button is released.
      default: []
      selector:
        action:
    scene_3r:
      name: Scene 3 - Released
      description: Action to run when button is released.
      default: []
      selector:
        action:
    scene_4r:
      name: Scene 4 - Released
      description: Action to run when button is released.
      default: []
      selector:
        action:
    scene_52:
      name: Scene 5 - Pressed 2x
      description: Action to run when button is pressed twice.
      default: []
      selector:
        action:
    scene_12:
      name: Scene 1 - Pressed 2x
      description: Action to run when button is pressed twice.
      default: []
      selector:
        action:
    scene_22:
      name: Scene 2 - Pressed 2x
      description: Action to run when button is pressed twice.
      default: []
      selector:
        action:
    scene_32:
      name: Scene 3 - Pressed 2x
      description: Action to run when button is pressed twice.
      default: []
      selector:
        action:
    scene_42:
      name: Scene 4 - Pressed 2x
      description: Action to run when button is pressed twice.
      default: []
      selector:
        action:
    scene_53:
      name: Scene 5 - Pressed 3x
      description: Action to run when button is pressed three times.
      default: []
      selector:
        action:
    scene_13:
      name: Scene 1 - Pressed 3x
      description: Action to run when button is pressed three times.
      default: []
      selector:
        action:
    scene_23:
      name: Scene 2 - Pressed 3x
      description: Action to run when button is pressed three times.
      default: []
      selector:
        action:
    scene_33:
      name: Scene 3 - Pressed 3x
      description: Action to run when button is pressed three times.
      default: []
      selector:
        action:
    scene_43:
      name: Scene 4 - Pressed 3x
      description: Action to run when button is pressed three times.
      default: []
      selector:
        action:
    scene_54:
      name: Scene 5 - Pressed 4x
      description: Action to run when button is pressed four times.
      default: []
      selector:
        action:
    scene_14:
      name: Scene 1 - Pressed 4x
      description: Action to run when button is pressed four times.
      default: []
      selector:
        action:
    scene_24:
      name: Scene 2 - Pressed 4x
      description: Action to run when button is pressed four times.
      default: []
      selector:
        action:
    scene_34:
      name: Scene 3 - Pressed 4x
      description: Action to run when button is pressed four times.
      default: []
      selector:
        action:
    scene_44:
      name: Scene 4 - Pressed 4x
      description: Action to run when button is pressed four times.
      default: []
      selector:
        action:
    scene_55:
      name: Scene 5 - Pressed 5x
      description: Action to run when button is pressed five times.
      default: []
      selector:
        action:
    scene_15:
      name: Scene 1 - Pressed 5x
      description: Action to run when button is pressed five times.
      default: []
      selector:
        action:
    scene_25:
      name: Scene 2 - Pressed 5x
      description: Action to run when button is pressed five times.
      default: []
      selector:
        action:
    scene_35:
      name: Scene 3 - Pressed 5x
      description: Action to run when button is pressed five times.
      default: []
      selector:
        action:
    scene_45:
      name: Scene 4 - Pressed 5x
      description: Action to run when button is pressed five times.
      default: []
      selector:
        action:
  source_url: https://community.home-assistant.io/t/zen32-scene-controller-z-wave-js/292610
mode: single
max_exceeded: silent
variables:
  device_id: !input 'zooz_switch'
trigger:
- platform: event
  event_type: zwave_js_value_notification
condition: '{{ trigger.event.data.device_id == device_id }}'
action:
- variables:
    property_key_name: '{{ trigger.event.data.property_key_name }}'
    label: '{{ trigger.event.data.label }}'
    command_class_name: '{{ trigger.event.data.command_class_name }}'
    value: '{{ trigger.event.data.value }}'
- service: logbook.log
  data:
    name: 'Z-Wave JS'
    message: 'received event: {{ command_class_name }} - {{ value }} - {{ label }}'
- choose:
  - conditions: '{{ property_key_name == ''001'' and value == ''KeyPressed'' }}'
    sequence: !input 'scene_1'
  - conditions: '{{ property_key_name == ''001'' and value == ''KeyHeldDown'' }}'
    sequence: !input 'scene_1h'
  - conditions: '{{ property_key_name == ''001'' and value == ''KeyReleased'' }}'
    sequence: !input 'scene_1r'
  - conditions: '{{ property_key_name == ''001'' and value == ''KeyPressed2x'' }}'
    sequence: !input 'scene_12'
  - conditions: '{{ property_key_name == ''001'' and value == ''KeyPressed3x'' }}'
    sequence: !input 'scene_13'
  - conditions: '{{ property_key_name == ''001'' and value == ''KeyPressed4x'' }}'
    sequence: !input 'scene_14'
  - conditions: '{{ property_key_name == ''001'' and value == ''KeyPressed5x'' }}'
    sequence: !input 'scene_15'
  - conditions: '{{ property_key_name == ''002'' and value == ''KeyPressed'' }}'
    sequence: !input 'scene_2'
  - conditions: '{{ property_key_name == ''002'' and value == ''KeyHeldDown'' }}'
    sequence: !input 'scene_2h'
  - conditions: '{{ property_key_name == ''002'' and value == ''KeyReleased'' }}'
    sequence: !input 'scene_2r'
  - conditions: '{{ property_key_name == ''002'' and value == ''KeyPressed2x'' }}'
    sequence: !input 'scene_22'
  - conditions: '{{ property_key_name == ''002'' and value == ''KeyPressed3x'' }}'
    sequence: !input 'scene_23'
  - conditions: '{{ property_key_name == ''002'' and value == ''KeyPressed4x'' }}'
    sequence: !input 'scene_24'
  - conditions: '{{ property_key_name == ''002'' and value == ''KeyPressed5x'' }}'
    sequence: !input 'scene_25'
  - conditions: '{{ property_key_name == ''003'' and value == ''KeyPressed'' }}'
    sequence: !input 'scene_3'
  - conditions: '{{ property_key_name == ''003'' and value == ''KeyHeldDown'' }}'
    sequence: !input 'scene_3h'
  - conditions: '{{ property_key_name == ''003'' and value == ''KeyReleased'' }}'
    sequence: !input 'scene_3r'
  - conditions: '{{ property_key_name == ''003'' and value == ''KeyPressed2x'' }}'
    sequence: !input 'scene_32'
  - conditions: '{{ property_key_name == ''003'' and value == ''KeyPressed3x'' }}'
    sequence: !input 'scene_33'
  - conditions: '{{ property_key_name == ''003'' and value == ''KeyPressed4x'' }}'
    sequence: !input 'scene_34'
  - conditions: '{{ property_key_name == ''003'' and value == ''KeyPressed5x'' }}'
    sequence: !input 'scene_35'
  - conditions: '{{ property_key_name == ''004'' and value == ''KeyPressed'' }}'
    sequence: !input 'scene_4'
  - conditions: '{{ property_key_name == ''004'' and value == ''KeyHeldDown'' }}'
    sequence: !input 'scene_4h'
  - conditions: '{{ property_key_name == ''004'' and value == ''KeyReleased'' }}'
    sequence: !input 'scene_4r'
  - conditions: '{{ property_key_name == ''004'' and value == ''KeyPressed2x'' }}'
    sequence: !input 'scene_42'
  - conditions: '{{ property_key_name == ''004'' and value == ''KeyPressed3x'' }}'
    sequence: !input 'scene_43'
  - conditions: '{{ property_key_name == ''004'' and value == ''KeyPressed4x'' }}'
    sequence: !input 'scene_44'
  - conditions: '{{ property_key_name == ''004'' and value == ''KeyPressed5x'' }}'
    sequence: !input 'scene_45'
  - conditions: '{{ property_key_name == ''005'' and value == ''KeyPressed'' }}'
    sequence: !input 'scene_5'
  - conditions: '{{ property_key_name == ''005'' and value == ''KeyHeldDown'' }}'
    sequence: !input 'scene_5h'
  - conditions: '{{ property_key_name == ''005'' and value == ''KeyReleased'' }}'
    sequence: !input 'scene_5r'
  - conditions: '{{ property_key_name == ''005'' and value == ''KeyPressed2x'' }}'
    sequence: !input 'scene_52'
  - conditions: '{{ property_key_name == ''005'' and value == ''KeyPressed3x'' }}'
    sequence: !input 'scene_53'
  - conditions: '{{ property_key_name == ''005'' and value == ''KeyPressed4x'' }}'
    sequence: !input 'scene_54'
  - conditions: '{{ property_key_name == ''005'' and value == ''KeyPressed5x'' }}'
    sequence: !input 'scene_55'

5 Likes

Thanks for this works great!

Hey guys,
Fairly new to all this.
I have loaded the blueprint for the ZEN32. However the only button I see in the logbook is the main relay button. The 4 scene buttons when pressed dont show anything in the log book.

Any ideas?

Hi Tucker! The scene switch is a little funny, the only “switch” in Home Assistant is the “relay” in the switch. This relay is usually controlled by the big button on the front (can be changed using the configuration parameters). Each of the small buttons and multi-presses on any of the buttons trigger a “scene change” which is not a switch or a log book entry it is an event.

The easiest place to look for the “scene changes” is to go to the “Developer Tools” → “Events”. This is also one of the places to check for problems with this blueprint. On the right hand side there should be a column listing “available events” check for something labeled zwave. If it is “zwave_js_event” then you can import the blueprint use the forum url (but be warned that in the future when you update HASS to a new version that blueprint will break) if it is “zwave_js_value_notification” then you are going to need to copy and manually create the version by @blhoward2 (here).

That events page is the best place to check if everything is working. So in the “Listen to events” and type in zwave_js_value_notification (or the previous name) and choose “start listening”. Then go push the buttons on your scene controller, you should see them show up in the listener, if you don’t see them then there are other issues.

Now that you know the events are showing up, you should be able to create an automation from the blueprint for that switch. Then in the blueprint you can assign actions for when that button is pushed.

Hope that helps.
Matt

Hey Matt,
Thank you! That was the trick. I needed to update that event_type: zwave_js_value_notification
I could see this switch/scene controller being real nice for people.

In my case, I have a number of LED strips around the house but didn’t have a easy way for your every day person to control them in a old school method.

Example: I have LED strip under my kitchen island, but currently couldn’t control outside of HA or phone app.
So I am going to swap out the kitchen light switch with the ZEN32. Then setup the 4 scene buttons for pre assigned island LED colors so your every day person can just push a button to turn them on/off.

I know the ZEN32 is a fairly new unit on the market. Do you think this will eventually be built into HA or will it always require the blueprint and modifying after upgrades?

1 Like

So I took this a little bit farther for anyone interested in Node-Red option.
Made a sub flow now that I understand how the event information works :slight_smile:
Gets to be a lot of outputs since each button has 5 pushes.

image

[{"id":"3985bb90.d67e54","type":"subflow","name":"ZEN32 scenes ZwaveJS","info":"","category":"","in":[{"x":60,"y":180,"wires":[{"id":"fe008dc7.1d271"}]}],"out":[{"x":840,"y":80,"wires":[{"id":"46310b70.e20634","port":0}]},{"x":840,"y":120,"wires":[{"id":"46310b70.e20634","port":1}]},{"x":840,"y":160,"wires":[{"id":"46310b70.e20634","port":2}]},{"x":840,"y":200,"wires":[{"id":"46310b70.e20634","port":3}]},{"x":840,"y":240,"wires":[{"id":"46310b70.e20634","port":4}]},{"x":840,"y":300,"wires":[{"id":"54e15801.d11ee8","port":0}]},{"x":840,"y":340,"wires":[{"id":"54e15801.d11ee8","port":1}]},{"x":840,"y":380,"wires":[{"id":"54e15801.d11ee8","port":2}]},{"x":840,"y":420,"wires":[{"id":"54e15801.d11ee8","port":3}]},{"x":840,"y":460,"wires":[{"id":"54e15801.d11ee8","port":4}]},{"x":840,"y":520,"wires":[{"id":"8c9608dc.26b058","port":0}]},{"x":840,"y":560,"wires":[{"id":"8c9608dc.26b058","port":1}]},{"x":840,"y":600,"wires":[{"id":"8c9608dc.26b058","port":2}]},{"x":840,"y":640,"wires":[{"id":"8c9608dc.26b058","port":3}]},{"x":840,"y":680,"wires":[{"id":"8c9608dc.26b058","port":4}]},{"x":840,"y":740,"wires":[{"id":"5fbe928d.fa05fc","port":0}]},{"x":840,"y":780,"wires":[{"id":"5fbe928d.fa05fc","port":1}]},{"x":840,"y":820,"wires":[{"id":"5fbe928d.fa05fc","port":2}]},{"x":840,"y":860,"wires":[{"id":"5fbe928d.fa05fc","port":3}]},{"x":840,"y":900,"wires":[{"id":"5fbe928d.fa05fc","port":4}]},{"x":840,"y":960,"wires":[{"id":"19d15a6.6a2fca6","port":0}]},{"x":840,"y":1000,"wires":[{"id":"19d15a6.6a2fca6","port":1}]},{"x":840,"y":1040,"wires":[{"id":"19d15a6.6a2fca6","port":2}]},{"x":840,"y":1080,"wires":[{"id":"19d15a6.6a2fca6","port":3}]},{"x":840,"y":1120,"wires":[{"id":"19d15a6.6a2fca6","port":4}]}],"env":[],"meta":{},"color":"#DDAA99","outputLabels":["Main - 1 Press","Main - 2 Press","Main - 3 Press","Main - 4 Press","Main - 5 Press","Scene 1 - 1 Press","Scene 1 - 2 Press","Scene 1 - 3 Press","Scene 1 - 4 Press","Scene 1 - 5 Press","Scene 2 - 1 Press","Scene 2 - 2 Press","Scene 2 - 3 Press","Scene 2 - 4 Press","Scene 2 - 5 Press","Scene 3 - 1 Press","Scene 3 - 2 Press","Scene 3 - 3 Press","Scene 3 - 4 Press","Scene 3 - 5 Press","Scene 4 - 1 Press","Scene 4 - 2 Press","Scene 4 - 3 Press","Scene 4 - 4 Press","Scene 4 - 5 Press"]},{"id":"fe008dc7.1d271","type":"switch","z":"3985bb90.d67e54","name":"Scene ID Button","property":"payload.event.property_key_name","propertyType":"msg","rules":[{"t":"eq","v":"005","vt":"str"},{"t":"eq","v":"001","vt":"num"},{"t":"eq","v":"002","vt":"num"},{"t":"eq","v":"003","vt":"num"},{"t":"eq","v":"004","vt":"str"}],"checkall":"true","repair":false,"outputs":5,"x":240,"y":180,"wires":[["46310b70.e20634"],["54e15801.d11ee8"],["8c9608dc.26b058"],["5fbe928d.fa05fc"],["19d15a6.6a2fca6"]],"outputLabels":["Main Button","Scene 1","Scene 2","Scene 3","Scene 4"]},{"id":"54e15801.d11ee8","type":"switch","z":"3985bb90.d67e54","name":"Scene Key 1","property":"payload.event.value_raw","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"num"},{"t":"eq","v":"3","vt":"num"},{"t":"eq","v":"4","vt":"num"},{"t":"eq","v":"5","vt":"num"},{"t":"eq","v":"6","vt":"num"}],"checkall":"true","repair":false,"outputs":5,"x":690,"y":380,"wires":[[],[],[],[],[]],"outputLabels":["1 Press","2 Press","3 Press","4 Press","5 Press"]},{"id":"33b55a97.ca0466","type":"comment","z":"3985bb90.d67e54","name":"Zooz ZEN32 - 5/3/2021","info":"","x":140,"y":20,"wires":[]},{"id":"46310b70.e20634","type":"switch","z":"3985bb90.d67e54","name":"Main Relay","property":"payload.event.value_raw","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"num"},{"t":"eq","v":"3","vt":"num"},{"t":"eq","v":"4","vt":"num"},{"t":"eq","v":"5","vt":"num"},{"t":"eq","v":"6","vt":"num"}],"checkall":"true","repair":false,"outputs":5,"x":690,"y":160,"wires":[[],[],[],[],[]],"outputLabels":["1 Press","2 Press","3 Press","4 Press","5 Press"]},{"id":"8c9608dc.26b058","type":"switch","z":"3985bb90.d67e54","name":"Scene Key 2","property":"payload.event.value_raw","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"num"},{"t":"eq","v":"3","vt":"num"},{"t":"eq","v":"4","vt":"num"},{"t":"eq","v":"5","vt":"num"},{"t":"eq","v":"6","vt":"num"}],"checkall":"true","repair":false,"outputs":5,"x":690,"y":600,"wires":[[],[],[],[],[]],"outputLabels":["1 Press","2 Press","3 Press","4 Press","5 Press"]},{"id":"5fbe928d.fa05fc","type":"switch","z":"3985bb90.d67e54","name":"Scene Key 3","property":"payload.event.value_raw","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"num"},{"t":"eq","v":"3","vt":"num"},{"t":"eq","v":"4","vt":"num"},{"t":"eq","v":"5","vt":"num"},{"t":"eq","v":"6","vt":"num"}],"checkall":"true","repair":false,"outputs":5,"x":690,"y":820,"wires":[[],[],[],[],[]],"outputLabels":["1 Press","2 Press","3 Press","4 Press","5 Press"]},{"id":"19d15a6.6a2fca6","type":"switch","z":"3985bb90.d67e54","name":"Scene Key 4","property":"payload.event.value_raw","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"num"},{"t":"eq","v":"3","vt":"num"},{"t":"eq","v":"4","vt":"num"},{"t":"eq","v":"5","vt":"num"},{"t":"eq","v":"6","vt":"num"}],"checkall":"true","repair":false,"outputs":5,"x":690,"y":1040,"wires":[[],[],[],[],[]],"outputLabels":["1 Press","2 Press","3 Press","4 Press","5 Press"]},{"id":"f18ec9d8.e1cbf8","type":"comment","z":"3985bb90.d67e54","name":"Each Output Represents a Key Press","info":"","x":190,"y":60,"wires":[]}]
5 Likes

No. Scene events are stateless messages meant to be reacted to, which is what the blueprint does.

@tsukraw , I tried to copy your flow into my Node-Red in HA but it does not seem to display correctly. The import seems to work but I don’t get any of the nodes or flow lines to display. I just get a blank flow page. Any idea if it may be related to the size of the flow?

@Papester
So the code i provided only loads the subflow “The second picture”.
This should add it in the nodes list labeled a “ZEN32 scenes Zwave.SJ”

Here is the code for the first screen shot where have the nodes that utilize the sub flow.
Let me know if this works for you.

[{"id":"3985bb90.d67e54","type":"subflow","name":"ZEN32 scenes ZwaveJS","info":"","category":"","in":[{"x":60,"y":180,"wires":[{"id":"fe008dc7.1d271"}]}],"out":[{"x":840,"y":80,"wires":[{"id":"46310b70.e20634","port":0}]},{"x":840,"y":120,"wires":[{"id":"46310b70.e20634","port":1}]},{"x":840,"y":160,"wires":[{"id":"46310b70.e20634","port":2}]},{"x":840,"y":200,"wires":[{"id":"46310b70.e20634","port":3}]},{"x":840,"y":240,"wires":[{"id":"46310b70.e20634","port":4}]},{"x":840,"y":300,"wires":[{"id":"54e15801.d11ee8","port":0}]},{"x":840,"y":340,"wires":[{"id":"54e15801.d11ee8","port":1}]},{"x":840,"y":380,"wires":[{"id":"54e15801.d11ee8","port":2}]},{"x":840,"y":420,"wires":[{"id":"54e15801.d11ee8","port":3}]},{"x":840,"y":460,"wires":[{"id":"54e15801.d11ee8","port":4}]},{"x":840,"y":520,"wires":[{"id":"8c9608dc.26b058","port":0}]},{"x":840,"y":560,"wires":[{"id":"8c9608dc.26b058","port":1}]},{"x":840,"y":600,"wires":[{"id":"8c9608dc.26b058","port":2}]},{"x":840,"y":640,"wires":[{"id":"8c9608dc.26b058","port":3}]},{"x":840,"y":680,"wires":[{"id":"8c9608dc.26b058","port":4}]},{"x":840,"y":740,"wires":[{"id":"5fbe928d.fa05fc","port":0}]},{"x":840,"y":780,"wires":[{"id":"5fbe928d.fa05fc","port":1}]},{"x":840,"y":820,"wires":[{"id":"5fbe928d.fa05fc","port":2}]},{"x":840,"y":860,"wires":[{"id":"5fbe928d.fa05fc","port":3}]},{"x":840,"y":900,"wires":[{"id":"5fbe928d.fa05fc","port":4}]},{"x":840,"y":960,"wires":[{"id":"19d15a6.6a2fca6","port":0}]},{"x":840,"y":1000,"wires":[{"id":"19d15a6.6a2fca6","port":1}]},{"x":840,"y":1040,"wires":[{"id":"19d15a6.6a2fca6","port":2}]},{"x":840,"y":1080,"wires":[{"id":"19d15a6.6a2fca6","port":3}]},{"x":840,"y":1120,"wires":[{"id":"19d15a6.6a2fca6","port":4}]}],"env":[],"meta":{},"color":"#DDAA99","outputLabels":["Main - 1 Press","Main - 2 Press","Main - 3 Press","Main - 4 Press","Main - 5 Press","Scene 1 - 1 Press","Scene 1 - 2 Press","Scene 1 - 3 Press","Scene 1 - 4 Press","Scene 1 - 5 Press","Scene 2 - 1 Press","Scene 2 - 2 Press","Scene 2 - 3 Press","Scene 2 - 4 Press","Scene 2 - 5 Press","Scene 3 - 1 Press","Scene 3 - 2 Press","Scene 3 - 3 Press","Scene 3 - 4 Press","Scene 3 - 5 Press","Scene 4 - 1 Press","Scene 4 - 2 Press","Scene 4 - 3 Press","Scene 4 - 4 Press","Scene 4 - 5 Press"]},{"id":"fe008dc7.1d271","type":"switch","z":"3985bb90.d67e54","name":"Scene ID Button","property":"payload.event.property_key_name","propertyType":"msg","rules":[{"t":"eq","v":"005","vt":"str"},{"t":"eq","v":"001","vt":"num"},{"t":"eq","v":"002","vt":"num"},{"t":"eq","v":"003","vt":"num"},{"t":"eq","v":"004","vt":"str"}],"checkall":"true","repair":false,"outputs":5,"x":240,"y":180,"wires":[["46310b70.e20634"],["54e15801.d11ee8"],["8c9608dc.26b058"],["5fbe928d.fa05fc"],["19d15a6.6a2fca6"]],"outputLabels":["Main Button","Scene 1","Scene 2","Scene 3","Scene 4"]},{"id":"54e15801.d11ee8","type":"switch","z":"3985bb90.d67e54","name":"Scene Key 1","property":"payload.event.value_raw","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"num"},{"t":"eq","v":"3","vt":"num"},{"t":"eq","v":"4","vt":"num"},{"t":"eq","v":"5","vt":"num"},{"t":"eq","v":"6","vt":"num"}],"checkall":"true","repair":false,"outputs":5,"x":690,"y":380,"wires":[[],[],[],[],[]],"outputLabels":["1 Press","2 Press","3 Press","4 Press","5 Press"]},{"id":"33b55a97.ca0466","type":"comment","z":"3985bb90.d67e54","name":"Zooz ZEN32 - 5/3/2021","info":"","x":140,"y":20,"wires":[]},{"id":"46310b70.e20634","type":"switch","z":"3985bb90.d67e54","name":"Main Relay","property":"payload.event.value_raw","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"num"},{"t":"eq","v":"3","vt":"num"},{"t":"eq","v":"4","vt":"num"},{"t":"eq","v":"5","vt":"num"},{"t":"eq","v":"6","vt":"num"}],"checkall":"true","repair":false,"outputs":5,"x":690,"y":160,"wires":[[],[],[],[],[]],"outputLabels":["1 Press","2 Press","3 Press","4 Press","5 Press"]},{"id":"8c9608dc.26b058","type":"switch","z":"3985bb90.d67e54","name":"Scene Key 2","property":"payload.event.value_raw","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"num"},{"t":"eq","v":"3","vt":"num"},{"t":"eq","v":"4","vt":"num"},{"t":"eq","v":"5","vt":"num"},{"t":"eq","v":"6","vt":"num"}],"checkall":"true","repair":false,"outputs":5,"x":690,"y":600,"wires":[[],[],[],[],[]],"outputLabels":["1 Press","2 Press","3 Press","4 Press","5 Press"]},{"id":"5fbe928d.fa05fc","type":"switch","z":"3985bb90.d67e54","name":"Scene Key 3","property":"payload.event.value_raw","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"num"},{"t":"eq","v":"3","vt":"num"},{"t":"eq","v":"4","vt":"num"},{"t":"eq","v":"5","vt":"num"},{"t":"eq","v":"6","vt":"num"}],"checkall":"true","repair":false,"outputs":5,"x":690,"y":820,"wires":[[],[],[],[],[]],"outputLabels":["1 Press","2 Press","3 Press","4 Press","5 Press"]},{"id":"19d15a6.6a2fca6","type":"switch","z":"3985bb90.d67e54","name":"Scene Key 4","property":"payload.event.value_raw","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"num"},{"t":"eq","v":"3","vt":"num"},{"t":"eq","v":"4","vt":"num"},{"t":"eq","v":"5","vt":"num"},{"t":"eq","v":"6","vt":"num"}],"checkall":"true","repair":false,"outputs":5,"x":690,"y":1040,"wires":[[],[],[],[],[]],"outputLabels":["1 Press","2 Press","3 Press","4 Press","5 Press"]},{"id":"f18ec9d8.e1cbf8","type":"comment","z":"3985bb90.d67e54","name":"Each Output Represents a Key Press","info":"","x":190,"y":60,"wires":[]},{"id":"b0776f72.909e2","type":"tab","label":"Scene-export","disabled":false,"info":""},{"id":"d9473beb.de9c58","type":"server-events","z":"b0776f72.909e2","name":"zwave_js_value_notification","server":"8d399f83.3bc09","event_type":"zwave_js_value_notification","exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"waitForRunning":true,"x":160,"y":200,"wires":[["bcb031ab.43f3"]]},{"id":"bcb031ab.43f3","type":"switch","z":"b0776f72.909e2","name":"Zen32 Switch","property":"payload.event.node_id","propertyType":"msg","rules":[{"t":"eq","v":"11","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":380,"y":200,"wires":[["861c77b3.db4728"]]},{"id":"861c77b3.db4728","type":"subflow:3985bb90.d67e54","z":"b0776f72.909e2","name":"Zen32","env":[],"x":530,"y":200,"wires":[[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]]},{"id":"8d399f83.3bc09","type":"server","name":"Home Assistant","addon":true}]
1 Like

Got it. Thanks for your help and effort towards this flow.

Anyone know if there’s a way to disable the multi-presses? I notices that pressing the main relay has a slight delay, and activating it through HA actually seems way faster. I’m guessing this is because it has to leave a slight gap for multi-presses. I’d love to get rid of that, as I’m not a big multi-press fan and will probably only have 5 scenes.

My guess is that this responsibility would lie with ZWaveJS, I believe they’d need to set up this device profile as something that shows as 5 switches (or more).

I think some Zooz switches have a configuration bit to do something like you describe, but I don’t see it for this one. You can e-mail the support people at Zooz asking about it, they have been very responsive to my e-mails an inquiries in the past.