Zooz ZEN34 - Zwave-JS

Hey All -
I didn’t end up using hold down here, but instead set a group association between this and a dimmer, so now if I hold it down, it dims the same light as the wired dimmer.

However this was really important - I realized that this automation was running EVERY time that a z-wave device was being triggered (I literally turned on a random light switch for a coat closet and this triggered). I thought it was odd, and it seems the trigger in the code is set to run for exactly that - ANY z wave js notification.

I updated this to the following to target the trigger to this device ONLY:

trigger:
  - platform: event
    event_type: zwave_js_value_notification
    event_data:
      device_id: !input zwave_device
1 Like

Here is another blueprint that has the functionality you might be looking for when you hold down…

1 Like

Thanks for posting your blueprint @kylerw! It would have taken me days and days to figure all of this out.

Also, thanks to those that posted about the ‘KeyHeldDown’ issue. I was able to update the blueprint with this quick change.

This is such a great community!

I am very new at Blueprint on HA and unfortunately confused about how to import the correct version for Zwave JS. I have 2 of these :

ID: 64

Status: Asleep

Ready: Yes

Highest security: S2 Authenticated

Z-Wave Plus: Version 2

ID: 65

Status: Asleep

Ready: Yes

Highest security: None

Z-Wave Plus: Version 2

The idea is to activate Kitchen Ceiling Switch with Upper paddle for ON and Lower paddle for OFF.
Could someone PLEASE help configure the correct Blueprint so that I just have to do a copy/paste, with as few manual inputs from me as possible ? I am not really interested in multiple clicks on the paddles. Simple ON and OFF are what I need. If there is a simpler solution with Visual Editor, then even better.

Hi everyone. I’m new here and trying to better understand the blueprint behavior. Does this blue print allow me to hold down a button and it repeatedly continues to dim? Or do I need to hold down, let go, hold down, etc.?

Are you still using this version ?
I have seven ZEN34 and I tried to use your blueprint.

I found that the device selector seems buggy when selecting more than one ZEN34.

  1. there is no way to prune the list (once you add 5 for example, can’t go back to 1 or 2)
  2. the “save” button doesn’t show when modifying the list
  3. worst of all, the devices selected the first time around aren’t saved properly. When editing the automation afterwards, I get a completely different list of ZEN34.

Are you seeing any of these issues ? I doubt these bugs are due to the blueprint, but I’d love a workaround.

here you guys go–i forked off another dude’s blueprint to make dimming/modifying brightness a little more intuitive. press and hold the top/bottom rocker buttons and it’ll dim the light(s) selected.

you can even do a buncha regular taps while you’re at it.

so for example/inspiration, here’s what i’m doing with my switches:

x1 top - turn on lights
x1 bottom - turn off lights
x2 top - set/turn lights on to 100% brightness
x2 bottom - set/turn lights on to 1% brightness
top/bottom hold until release - make selected lights lighter or dimmer

this was my first blueprint and i literally blew through an entire saturday trying to get it everything i wanted it to so have fun yall

1 Like

Hi @computergreek. Thanks for putting this together. I’m trying to get this working, but every time I try to import the blueprint I get the error in this image. Any thoughts on what I’m doing wrong? I’m new to blueprints…

Hey @computergreek, could you modify your blueprint so it doesn’t require a dimmable light to be used with the blueprint? I only have 2 on/off switches I’m using with the switch so I don’t need the dimming functionality when holding down the switch, but I had to link a dimmable bulb to it for the automation to compile/save.

howdy @jakabo27 i just tried playing around with it for a couple hours to do what you asked but couldn’t get it to work.
here’s the original script i forked my copy over from that doesn’t require anything relevant to lights dimming that i think you’ll find to be useful.

try pasting this link when trying to import that blueprint:

https://gist.github.com/computergreek/847ad5194168cf3f26a0c908acc9431c

it didn’t give me any trouble

It worked just fine once I upgraded my HA version from 2022.08…

:man_facepalming:

I tried to adapt one version of this blueprint for the ZEN76, which is pretty similar to the ZEN34, but wired. My interest was two-fold :

  1. support selecting multiple switches . This works.
  2. support looping with holding the top or bottom buttons . This doesn’t work with the ZEN76, for some reason. The action is only executed once when holding a button, and is not repeated, unlike on the ZEN34.

Here is the adapted blueprint I’m using :

blueprint:
  name: Zooz ZEN76 Remote scene control with hold support.
  description: |
    Use the Zooz ZEN76 remote to trigger Scenes and control devices based on varying scenes. 

    This Blueprint is currently configured for the zwaveJS platform.

  domain: automation

  input:
    zwave_devices:
      name: Zooz ZEN76
      description: "List of available Zooz ZEN76 switches."
      selector:
        device:
          integration: zwave_js
          manufacturer: Zooz
          model: ZEN76
          multiple: true

    1x_tap_up:
      name: Tap up 1x
      selector:
        action:
      default: []
    1x_tap_down:
      name: Tap down 1x
      selector:
        action:
      default: []
    2x_tap_up:
      name: Tap up 2x
      selector:
        action:
      default: []
    2x_tap_down:
      name: Tap down 2x
      selector:
        action:
      default: []
    3x_tap_up:
      name: Tap up 3x
      selector:
        action:
      default: []
    3x_tap_down:
      name: Tap down 3x
      selector:
        action:
      default: []
    4x_tap_up:
      name: Tap up 4x
      selector:
        action:
      default: []
    4x_tap_down:
      name: Tap down 4x
      selector:
        action:
      default: []
    5x_tap_up:
      name: Tap up 5x
      selector:
        action:
      default: []
    5x_tap_down:
      name: Tap down 5x
      selector:
        action:
      default: []
    hold_up:
      name: Hold up
      selector:
        action:
      default: []
    is_loop_for_hold_up:
      name: Key Up/On held loop?
      description: Asserts whether you want to loop the held action until the button is released which could simulate the impact of a dimmer switch
      selector:
        boolean:
      default: []
    hold_down:
      name: Hold down
      selector:
        action:
      default: []
    is_loop_for_hold_down:
      name: Key Down/On held loop?
      description: Asserts whether you want to loop the held action until the button is released which could simulate the impact of a dimmer switch
      selector:
        boolean:
      default: []
    key_up_released:
      name: Key Up/On released
      description: Action to run, when the up button is released.
      default: []
      selector:
        action:
    key_down_released:
      name: Key Down/Off released
      description: Action to run, when the down button is released.
      default: []
      selector:
        action:

mode: restart
max_exceeded: silent
variables:
  logger: blueprint.zwave_scene_activation
  device_ids: !input zwave_devices
  key_up_scene_id: "Scene 001"
  key_down_scene_id: "Scene 002"
  is_loop_for_hold_up: !input "is_loop_for_hold_up"
  is_loop_for_hold_down: !input "is_loop_for_hold_down"

trigger:
  - platform: event
    event_type: zwave_js_value_notification
condition: "{{ trigger.event.data.device_id in device_ids }}"

action:
  - variables:
      scene_id: "{{trigger.event.data.label}}"
      key_pressed: "{{trigger.event.data.value}}"
      value_raw: "{{trigger.event.data.value_raw}}"
  - choose:
      # IF triggered node_id is zwave_nodeid
      - conditions:
          - condition: template
            value_template: "{{ trigger.event.data.device_id in device_ids }}"
        sequence:
          - choose:
              # IF 1x tap up
              - conditions:
                  - condition: template
                    value_template: "{{ scene_id == key_up_scene_id and (key_pressed == 'KeyPressed' or value_raw == 0) }}"
                sequence: !input 1x_tap_up
              # IF 1x tap down
              - conditions:
                  - condition: template
                    value_template: "{{ scene_id == key_down_scene_id and (key_pressed == 'KeyPressed' or value_raw == 0) }}"
                sequence: !input 1x_tap_down
              # IF 2x tap up
              - conditions:
                  - condition: template
                    value_template: "{{ scene_id == key_up_scene_id and (key_pressed == 'KeyPressed2x' or value_raw == 3) }}"
                sequence: !input 2x_tap_up
              # IF 2x tap down
              - conditions:
                  - condition: template
                    value_template: "{{ scene_id == key_down_scene_id and (key_pressed == 'KeyPressed2x' or value_raw == 3) }}"
                sequence: !input 2x_tap_down
              # IF 3x tap up
              - conditions:
                  - condition: template
                    value_template: "{{ scene_id == key_up_scene_id and (key_pressed== 'KeyPressed3x' or value_raw == 4) }}"
                sequence: !input 3x_tap_up
              # IF 3x tap down
              - conditions:
                  - condition: template
                    value_template: "{{ scene_id == key_down_scene_id and (key_pressed == 'KeyPressed3x' or value_raw == 4) }}"
                sequence: !input 3x_tap_down
              # IF 4x tap up
              - conditions:
                  - condition: template
                    value_template: "{{ scene_id == key_up_scene_id and (key_pressed== 'KeyPressed4x' or value_raw == 5) }}"
                sequence: !input 4x_tap_up
              # IF 4x tap down
              - conditions:
                  - condition: template
                    value_template: "{{ scene_id == key_down_scene_id and (key_pressed == 'KeyPressed4x' or value_raw == 5) }}"
                sequence: !input 4x_tap_down
              # IF 5x tap up
              - conditions:
                  - condition: template
                    value_template: "{{ scene_id == key_up_scene_id and (key_pressed == 'KeyPressed5x' or value_raw == 6) }}"
                sequence: !input 5x_tap_up
              # IF 5x tap down
              - conditions:
                  - condition: template
                    value_template: "{{ scene_id == key_down_scene_id and (key_pressed == 'KeyPressed5x' or value_raw == 6) }}"
                sequence: !input 5x_tap_down
              - conditions:
                  - condition: template
                    value_template: '{{ scene_id == key_up_scene_id and (key_pressed == "KeyReleased" or value_raw == 1 ) }}'
                sequence: !input "key_up_released"
              - conditions:
                  - condition: template
                    value_template: '{{ scene_id == key_down_scene_id and (key_pressed == "KeyReleased" or value_raw == 1 ) }}'
                sequence: !input "key_down_released"
              - conditions:
                  - condition: template
                    value_template: '{{ scene_id == key_up_scene_id and (key_pressed == "KeyHeldDown" or value_raw == 2) }}'
                sequence:
                  # if looping is enabled, loop the action indefinitely
                  # repeat until the automation is restarted ie. when the corresponding release message is received
                  - repeat:
                      sequence:
                        !input "hold_up"
                      until: "{{ not is_loop_for_hold_up }}"

              - conditions:
                  - condition: template
                    value_template: '{{ scene_id == key_down_scene_id and (key_pressed == "KeyHeldDown" or value_raw == 2)}}'
                sequence:
                  # if looping is enabled, loop the action indefinitely
                  # repeat until the automation is restarted ie. when the corresponding release message is received
                  - repeat:
                      sequence:
                        !input "hold_down"
                      until: "{{ not is_loop_for_hold_down }}"

            # ELSE: unhandled label/value
            default:
              - service: system_log.write
                data:
                  level: debug
                  logger: "{{ logger }}"
                  message: "Activated scene '{{ trigger.event.data.scene_label }}' ({{ trigger.event.data.label }}) with value '{{ trigger.event.data.scene_value_label }}' ({{ trigger.event.data.value }}) for node '{{ zwave_nodeid }}' ({{ trigger.event.data.node_id }})"
    # ELSE: unhandled zwave event
    default: []

Does anyone have any idea how to support “loop” on the ZEN76 ? Is it a software issue or a hardware limitation ?

This is what I was looking for! Thanks!

Can you create a downloadable Blueprint in Visual Editor? I am not a champ at Yaml.

One issue with your dimmer features added, if you are controlling a light that isn’t dimmable, you cannot save the blueprint. It would be nice to have a single blueprint which works for either dimmable or non dimmable lights versus managing two seperate ones. Any way we can add a enable for dimming to control that functionality?

This is a great blueprint. Thanks to @kylerw . Any chance you want to pick up some ZEN37s and work your magic for those, too? They are like the ZEN34 but with four scene buttons with multi-click capabilities. They are working okay without a blueprint but sort of a pain to set up all the automations manually.

Do you have one? If so, please post the key mappings. I’m reworking some of my Zooz BPs, and can add it to the list.

According to the manual, Scenes are mapped as:

Upper Main: Scene 001
Lower Main: Scene 002
Lower Left: Scene 003
Lower Right: Scene 004

But if you can confirm the scene, value, and value_raw mappings for each button press, I should be able to put something together.

1 Like

Any chance the blueprint for the Minoston MR40Z will work for the Zooz Zen37? It looks like the same thing except for the rechargeable battery.

  input:
    minoston_mr40z:
      name: Minoston MR40Z
      description: The Minoston MR40Z to interact with.
      selector:
        device:
          integration: zwave_js
          manufacturer: Minoston
          model: MR40Z

You’d probably need to change this section (at minimum) to make the selector allow this Zooz device. Assuming the button events are the same, I guess it should work? I don’t have one of these, so I can’t really help much.