Flood of Z-Wave events

I have an automation set to run a script when pressing the top button of any of my 7 ZEN34 scene controllers. The script sends my phone a notification, and runs the circulation pump (which is on a Wifi switch) for one minute.

This morning, around 7am, I got a flood of notifications - dozens of them - and the pump run for 6 minutes in a row. The same thing happened at 1pm. I haven’t made any change to any automation in the last few days. I was asleep at 7am, and so was my husband. Nobody could have pressed the switch once, never mind dozens of times. My phone was on silent - I saw the notifications later when I woke up.

What’s going on here ? Seems like ghosts in the Z-wave signal.
How can I determine which scene controller it was that generated this notification flood, short of splitting my automation into 7 different ones, and waiting for the problem to happen again ?

For now, I disabled this automation, but not having it means waiting about 2.5 minutes for hot water vs 1 minute with the pump (house is big with very long pipes).

FYI, here is the automation (from a blueprint) :

mode: restart
max_exceeded: silent
variables:
  logger: blueprint.zwave_scene_activation
  device_ids:
    - 1a081a1c11d642920ceea2961d3a26d5
    - 13e23e8cd8484be5d95103103310cc97
    - 882c42f6547c7bafd030cb88ad4b58d3
    - e523e2c8911bed076e8bc0b49a05c0a2
    - e09b5e05e9a460e2a84edd90c0794c59
    - 7080d40351ff3b22a0e867abddd49dcf
    - 4679a1b3c9ca4bbd303dfb8643b12aa7
  key_up_scene_id: Scene 001
  key_down_scene_id: Scene 002
  is_loop_for_hold_up: false
  is_loop_for_hold_down: false
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:
      - conditions:
          - condition: template
            value_template: '{{ trigger.event.data.device_id in device_ids }}'
        sequence:
          - choose:
              - conditions:
                  - condition: template
                    value_template: >-
                      {{ scene_id == key_up_scene_id and (key_pressed ==
                      'KeyPressed' or value_raw == 0) }}
                sequence:
                  - service: script.1663379903786
                    data: {}
              - conditions:
                  - condition: template
                    value_template: >-
                      {{ scene_id == key_down_scene_id and (key_pressed ==
                      'KeyPressed' or value_raw == 0) }}
                sequence: []
              - conditions:
                  - condition: template
                    value_template: >-
                      {{ scene_id == key_up_scene_id and (key_pressed ==
                      'KeyPressed2x' or value_raw == 3) }}
                sequence: []
              - conditions:
                  - condition: template
                    value_template: >-
                      {{ scene_id == key_down_scene_id and (key_pressed ==
                      'KeyPressed2x' or value_raw == 3) }}
                sequence: []
              - conditions:
                  - condition: template
                    value_template: >-
                      {{ scene_id == key_up_scene_id and (key_pressed==
                      'KeyPressed3x' or value_raw == 4) }}
                sequence: []
              - conditions:
                  - condition: template
                    value_template: >-
                      {{ scene_id == key_down_scene_id and (key_pressed ==
                      'KeyPressed3x' or value_raw == 4) }}
                sequence: []
              - conditions:
                  - condition: template
                    value_template: >-
                      {{ scene_id == key_up_scene_id and (key_pressed==
                      'KeyPressed4x' or value_raw == 5) }}
                sequence: []
              - conditions:
                  - condition: template
                    value_template: >-
                      {{ scene_id == key_down_scene_id and (key_pressed ==
                      'KeyPressed4x' or value_raw == 5) }}
                sequence: []
              - conditions:
                  - condition: template
                    value_template: >-
                      {{ scene_id == key_up_scene_id and (key_pressed ==
                      'KeyPressed5x' or value_raw == 6) }}
                sequence: []
              - conditions:
                  - condition: template
                    value_template: >-
                      {{ scene_id == key_down_scene_id and (key_pressed ==
                      'KeyPressed5x' or value_raw == 6) }}
                sequence: []
              - conditions:
                  - condition: template
                    value_template: >-
                      {{ scene_id == key_up_scene_id and (key_pressed ==
                      "KeyReleased" or value_raw == 1 ) }}
                sequence: []
              - conditions:
                  - condition: template
                    value_template: >-
                      {{ scene_id == key_down_scene_id and (key_pressed ==
                      "KeyReleased" or value_raw == 1 ) }}
                sequence: []
              - conditions:
                  - condition: template
                    value_template: >-
                      {{ scene_id == key_up_scene_id and (key_pressed ==
                      "KeyHeldDown" or value_raw == 2) }}
                sequence:
                  - repeat:
                      sequence: []
                      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:
                  - repeat:
                      sequence: []
                      until: '{{ not is_loop_for_hold_down }}'
            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 }})
    default: []
id: '1685831631249'
alias: Scene controllers run circulation pump upon top paddle 1x press
description: ''

Prolly gonna have to crank logs up to debug and then capture the action to review when/if it happens again.

I’ve seen particular Z-Wave devices trigger without a change in state which looks to me like Z-Wave JS mis-interpreting a sleeping battery device waking up. My garage door sensor occasionally triggers Closed at odd times - and it’s definitely not mechanical movement.

If you’re seeing several devices signalling, I guess it could be an unreliable mesh and changing RF propagation (e.g. batteries warming up after a colder night, interference disappearing - check RSSI and add more mains devices?) or even a mesh heal.

As for the automation, you can change it to only trigger after 5mins of a state, and make it only run once - both will reduce multiple floods of triggers.

As has been mentioned, the only way to know is a debug log.

Thanks. I enabled debug logs in Z-Wave JS. It seems to retain only one page of logs, though, or a very minimal amount. Is there a way to keep all the log information (until disk is full, there is plenty of space).

Thanks. I don’t know which device is signaling as it’s one automation for 7 scene controller devices. Changing it to trigger after only 5 minutes isn’t practical for this particular automation - the circulation pump is time sensitive.
Also, the blueprint I’m using for the ZEN34 switch doesn’t support delays.
Lastly, a “button hold” would be a different type of event than “button press 1x” I believe, which is what I’m currently using.
I have enabled debug log, but am not confident these are actually being collected.

If you are still using core add-on then you’re going to have a difficult time: https://www.home-assistant.io/integrations/zwave_js/#how-to-access-the-z-wave-logs. That process is not reasonable for most problems because it requires keeping a browser open in the log window indefinitely to capture the problem. Once you leave the page the logs are lost.

If you are using Z-Wave JS UI, then it keeps 7 days of log files that you can download at any time: https://zwave-js.github.io/zwave-js-ui/#/troubleshooting/generating-logs?id=driver-logs. This is reason enough to switch.

Thanks. I switched to Z-wave JS UI a week ago at the same time as I migrated my devices to the ZST39 stick.

In that case, you’re good. Just make sure you have enabled logging to file with Debug level, as explained in that link.

It sounds like you are looking at the console logs from the add-on? In that case, the add-on logs only include a very short window of time.

Yes, I was looking at the console log. I just enabled “log to file” in Z-wave JS UI. Where exactly does the log file end up on the file system? I checked the explorer view, but there is nothing in the “logs” directory.
Does the add-on need to be restarted ?

Edit: never mind, forgot to click “save” . The logs are there.

OK, it just happened again. It shows in the log at 21:37 . It appears to be Node 036 generating the traffic. That’s one of my ZEN34, the one in the kitchen. I’ll take it out of that automation, and see if the flood happens again.

1 Like

I had it happen again with a wired ZEN76 700 series this time. Much more annoying as I don’t know which breaker it’s on to reset the power. I didn’t want to reset power to the whole house, so I did a factory reset of the switch. I had to modify the 3 automations that used it.
I have 17 of these switches (3 700 series, 14 800 series) and so far this only happened on a single switch.
This flood behavior was extremely annoying as the scenes that were flooding were triggering audio playback on a Chromecast audio, and also alternately turning the amplifier on and off.
After the factory reset, all is good now. Note that I have set parameters 10 and 17 on the ZEN76 to enable scene control, and triple tap.

Have you opened a support ticket with Zooz?

I do wonder if this is a mechanical issue, like dust in the tap sensor, surface contamination?

PeteRage,
I had filed a ticket with Zooz when it happened with one of my 7 ZEN34. The solution for that case was to replace that unit. It hasn’t happened again. I will file a ticket for this ZEN76 also.

As far as dust, if this was the case, the factory reset of the switch wouldn’t have resolved it, IMO, if that was the root cause. The issue started yesterday and the flood only stopped after that factory reset.
There is another Zooz switch in that same wall box, a ZEN32 scene controller, and it’s not experiencing this or any other problem. FYI, this box is very close to my controller, about 3ft, though there is a wall in between.

1 Like

thanks, i have not use a zooz wall switch yet, but I have one sitting on my desk I’m planning on using - and just trying to understand what I should watch out for. Sounds like I need to create a “switch flipping monitor”. When you saw the flood - was it dozens a seconds, dozens a minute?

Yesterday with the ZEN76, it was more like one every minute or so, more like if there had been a ghost pressing the switch back and forth. Not quite as much of a “flood” as I saw with the ZEN34 a few months back. But unsolicited events nevertheless, as if someone had pressed the switch, even though that wasn’t the case. I have automations setup for top paddle 2x & 3x, as well as bottom paddle 2x, and all were triggered.
I think if you run into this, you’ll know when automations trigger on their own. And the event Logbook in HA will pretty clearly point the culprit.

1 Like