How to: Quietcool 3 speed whole house fan using Zooz zen16 multirelay switch!

I recently had a quietcool fan installed, and this thing is pretty great! Trouble is that it’s sold with this sort of RF companion remote that doesnt make home automation easy, and their sales folks opine about having to learn about new technologies when asked about home automation.

Their wiring diagram makes it pretty clear:

Essentially there are power wires and speed wires. Shared ground, and shared neutral.
The power wires stay connected all the time, and the thing to attach the relay to is the 3 speed wires. There’s blue, red and yellow, and each corresponds to a speed.

Here’s the wiring diagram i made (shoddily)

And here’s what it looks like in meatspace:


I used some extra wiring I bought at home depot to create the extra leads required for the hot wire. I just used one wire nut and put those three, plus the bit from the romex into it to fork that out, so essentially what we have here is a relay system that lets you select which relay to turn on, and whichever one goes on, that sets the fan speed. White from the fan goes to white on the romex, and same with ground - the only stuff going into the relay is the hot wire (black) and the three colored speed wires.

I wasn’t sure what would happen if I gave more than one speed wire power at the same time, so I wrote an automation to make sure only one relay could be on at a time:

alias: whole_house_fan_relay_rules
description: makes sure only one relay can be on at a time.
trigger:
  - platform: state
    entity_id:
      - switch.multirelay_2
    id: relay1_on
    from: "off"
    to: "on"
  - platform: state
    entity_id:
      - switch.multirelay_2_2
    from: "off"
    to: "on"
    id: relay2_on
  - platform: state
    entity_id:
      - switch.multirelay_3
    from: "off"
    to: "on"
    id: relay3_on
condition: []
action:
  - if:
      - condition: trigger
        id: relay1_on
    then:
      - type: turn_off
        device_id: b8400563518b0e56437de44f632f485e
        entity_id: switch.multirelay_2_2
        domain: switch
      - type: turn_off
        device_id: b8400563518b0e56437de44f632f485e
        entity_id: switch.multirelay_3
        domain: switch
  - if:
      - condition: trigger
        id: relay2_on
    then:
      - type: turn_off
        device_id: b8400563518b0e56437de44f632f485e
        entity_id: switch.multirelay_2
        domain: switch
      - type: turn_off
        device_id: b8400563518b0e56437de44f632f485e
        entity_id: switch.multirelay_3
        domain: switch
  - if:
      - condition: trigger
        id: relay3_on
    then:
      - type: turn_off
        device_id: b8400563518b0e56437de44f632f485e
        entity_id: switch.multirelay_2
        domain: switch
      - type: turn_off
        device_id: b8400563518b0e56437de44f632f485e
        entity_id: switch.multirelay_2_2
        domain: switch
mode: single

After that, I created a script to run behind the scenes of what would be a button:

alias: fan_cycle
sequence:
  - if:
      - condition: state
        entity_id: switch.multirelay_2
        state: "on"
    then:
      - service: switch.turn_off
        data: {}
        target:
          entity_id: switch.multirelay_2
      - service: switch.turn_on
        data: {}
        target:
          entity_id: switch.multirelay_2_2
      - stop: ""
  - if:
      - condition: state
        entity_id: switch.multirelay_2_2
        state: "on"
    then:
      - service: switch.turn_off
        data: {}
        target:
          entity_id: switch.multirelay_2_2
      - service: switch.turn_on
        data: {}
        target:
          entity_id: switch.multirelay_3
      - stop: ""
  - if:
      - condition: state
        entity_id: switch.multirelay_3
        state: "on"
    then:
      - service: switch.turn_off
        data: {}
        target:
          entity_id: switch.multirelay_3
      - stop: ""
  - if:
      - condition: state
        entity_id: switch.multirelay_2
        state: "off"
      - condition: state
        entity_id: switch.multirelay_2_2
        state: "off"
      - condition: state
        entity_id: switch.multirelay_3
        state: "off"
    then:
      - service: switch.turn_on
        data: {}
        target:
          entity_id: switch.multirelay_2
      - stop: ""
mode: single
icon: mdi:fan

Then I created a button that would cycle through all the relays, giving me a single button I can use from the mobile HA app on android to set the fan speed!

type: custom:mushroom-template-card
entity: script.fan_cycle
primary: Whole house fan
secondary: >-
  {% if is_state('switch.multirelay_2', 'on') %} Low {% endif %} {% if
  is_state('switch.multirelay_2_2', 'on') %} Medium {% endif %} {% if
  is_state('switch.multirelay_3', 'on') %} High {% endif %} {% if
  is_state('switch.multirelay_2', 'off') and is_state('switch.multirelay_2_2',
  'off') and is_state('switch.multirelay_3', 'off') %} off {% endif %} {% if
  is_state('switch.whole_house_fan', 'on') %} :: Master On {% else %} :: Master
  Off {% endif %}
icon: mdi:fan
icon_color: |-
  {% if states('switch.multirelay_2') == 'on' %}
  yellow
  {% endif %}
  {% if states('switch.multirelay_2_2') == 'on' %}
  orange
  {% endif %}
  {% if states('switch.multirelay_3') == 'on' %}
  red

And the finished result!:
image

It totally works great, and I’ve even been able to create some automations that will fire the fan if the environmental conditions suit correctly in that gray-area between needing to run the AC and ‘the fan is good enough’.

happy hacking!

2 Likes

Oh, that extra bit there about ‘master on’ is there because I have an GE enbrighten outlet that the fan is connected to, and I was using that as a master on/off switch before I setup the multirelay. I left it in place, and so now that functions as a sort of safety switch in the event the relay loses its mind or something else bad happens - I can cut power to the whole system.

1 Like

I just setup a variation of this in my house. I used a zen17 and only a two speed fan. The relay is configured to be a fan controller so it deals with the “only power one contact at a time” issue automatically. I wanted it to work like a fan in the rest of the system so I created a template fan device for it.

image

fan:
  - platform: template
    fans:
      house_fan:
        friendly_name: "House Fan"
        value_template: "{{ states('switch.fan_relay') }}"
        percentage_template: >
          {% if is_state('switch.fan_relay', 'off') %} 0
          {% elif is_state('switch.fan_relay_2', 'on') %} 50
          {% else %} 100
          {% endif %}
        turn_on:
            service: switch.turn_on
            entity_id: switch.fan_relay
        turn_off:
            service: switch.turn_off
            entity_id: switch.fan_relay
        speed_count: 2
        set_percentage:
          - service: switch.turn_{{ 'on' if percentage > 0 else 'off' }}
            target:
              entity_id: >
                {% if percentage == 0 %} switch.fan_relay
                {% elif percentage == 50 %} switch.fan_relay_2
                {% else %} switch.fan_relay_2_2
                {% endif %}

Lovelace Card config

type: tile
entity: fan.house_fan
features:
  - type: fan-speed
2 Likes

is your fan with an RF or bluetooth module? I have the bluetooth version from them and am attempting to automate it through HA

i have their ‘attic fan’ which is bluetooth only, and i would ABSOLUTELY LOVE to import that into HA. If you wanna test stuff, color me interested.

1 Like

Have you thought about putting in a delay for swapping speeds? Have a 1-2 second delay to allow one relay to turn off before the other one turns on?

I will try to work on it, but my knowledge level is fairly casual when it comes to some of the more advanced HA options.

i havent had to, because the safety script part turns off one relay before it turns on the next one, and that action introduces a 1-2 second delay on its own