Zooz ZEN32 Scene Controller for Timed Exhaust Fan Control

Open your Home Assistant instance and show the blueprint import dialog with a specific blueprint pre-filled.

This blueprint supports the Zooz ZEN32 Scene Controller with the Z-Wave JS integration to control an exhaust fan (like in a bathroom). It supports several modes:

  • On without a time set
  • 60 minutes
  • 45 minutes
  • 30 minutes
  • 20 minutes
  • 10 minutes
  • Off

The LED indicator on the scene controller will update to show what state it is in, so you can label the buttons and it will let a user see how much time, at most, is left before it turns off. It copies the behavior of non-smart timers for fans that many might already have installed in their bathrooms.

You can see the automation source code on GitHub: https://github.com/sdwilsh/ha-zen32-exhaust-fan-blueprint


This blueprint requires a Timer entity to track the remaining time on the fan, as well as a Switch entity that controls the fan (which can be the scene controller’s on/off switch).

Issues or Suggestions

Feel free to post here, or create an issue in the GitHub repository.

Original Inspiration

I got the original concept from u/louislamore in this Reddit thread.


Really nice work! I like your idea of switching the lights on and off as time decreases.

The only change is make is making the times parameters.
In my case I prefer 5, 10, 15, 30 and 1 hour for the big button (which I configured directly in the parameter)

It’s certainly doable to make that work, I just didn’t want to add that complexity for my initial version. I filed #12 to track the feature request, but it might be a bit before I get to it.

1 Like

I was thinking about it last night… replacing the minutes by variables shouldn’t be hard (could be an options input)… but I think validations would need to be added to make sure that the times selected go in increments (from button 1 to 5) to maintain the functionality, that’d make it more complicated to test.

Overall, again… great work! I’ve replaced my automation and I’m using your blueprint now… I didn’t have the light transition and it’s a really good idea you had there!

1 Like

One way to simplify it would be to have a simple “max time” setting, and then reasonable intervals based on that. To start, just have a max time of 30 and 60 minutes with the two breakdowns.

With that said, I think the most useful thing to do is make it user programmable. Sadly, there’s no way to do “validations” per se of blueprint inputs, so it’d have to be a check and error message to the log if it were misconfigured.

@sdwilsh I took a stab at forking your blueprint to adjust it to my needs.
I added 5 duration inputs and modified the code to read the times from there.

Also, I have my ZEN32 hardwired to the fan, it looks like when pressing the big button is was triggering the scene control and turning off the fan, but the timer would still be running and the other lights would be on.
I fixed that by introducing the else statement on the code and forcing an event OFF state, I’m not sure it’s the right way, but I tested it and it worked :slight_smile:

  - conditions:
    - condition: trigger
      id: zwave_scene_5
    - if:
      - condition: device
        type: is_on
        device_id: !input scene_controller
        entity_id: !input fan_switch
        domain: switch
        service: timer.start
          duration: !input button5_duration
          entity_id: !input fan_timer
          scene_controller: !input scene_controller
          fan_switch: !input fan_switch
          fan_timer: !input fan_timer
          new_state: 'OFF'

I’ve learned quite a lot from your code on handling blueprints, never done that before, so thank you!!

Feel free to open a PR and we can work on merging that into the repository!

I’ve learned quite a lot from your code on handling blueprints, never done that before, so thank you!!

This was my first blueprint, so I can relate :smiley: