Home assistant HVAC - 3 speed fans

I’m new to HA but have been battling away for the last few weeks installing and setting it up and enjoying every minute of it :slight_smile:

As a bit of background I’m an electrician and HVAC installer and am hoping to be able to use HA in some domestic ventilation control projects this year.

This is where I’ve got to with my climate page so far:

Its a work in progress so I’d love any feedback or suggestions as I’d like to get it as polished as I can before I install it anywhere else! It will eventually have some co2 and humidity readings. I’m just waiting for some parts to arrive!

The one thing I’m really struggling with is trying to control a 3 speed fan by thermostat. I’ve read a lot of posts and theres a few that come close to doing what I want to do but I haven’t been able to get anything to work yet!

I’d basically just like to be able to switch the 3 speeds of the fan depending on temperature setpoints from sensors. I know I can do this through lots of code and automations but I’m still a bit novice for this. I’m thinking it would be really great if there was a custom climate platform for a 3 speed fan and also a custom thermostat that allowed the three speeds to be switched at variable set points. Can anyone give me a push in the right direction with this?

1 Like

Only to point out this https://www.home-assistant.io/integrations/generic_thermostat/ if you have not already seen it!

But I think you will have to do via automations rather than any existing climate component.

I am just off to bed, but by the morning there may be a solution and/or I may have time to offer more suggestions.

I’m afraid that you are probably going to have to develop some h/w to control the fan speed with as @nickrout suggests added automation.

One solution would be to build and interface using a microcontroller (i.e. NodeMCU, D1-Mini, or equivalent…) and s/w that I think will help you immensely i.e. ESPHome https://esphome.io/components/fan/speed.html

One of my previous projects was to control extraction fans in various bathrooms when my ‘Fresh Air vent’ opens and the HVAC fan engages.

Hope this helps

@nickrout Thanks for the reply

Yea I’m using the generic thermostat to control the heat transfer fan at the moment but am only able to switch one of its speeds. It would be great if the generic thermostat could automatically switch 3 speeds. Maybe I’ll start a feature request.

Looks like automations may be my best option at the moment. I’d really like to have some visual representation of it though. I guess I could use some custom buttons that change colour dependant on state. Will keep working on it!

You could use a slider or input for setting target temps.

@bastero

I’m currently using a Denkovi smartden maxi io. Its perfect for the application as it has 4 hard wired temperature inputs, additional digital and analog inputs and 8 240v relays plus a wired network connection.

Yea, it looks like I’m going to have to improve my yaml skills!

This sounds pretty cool! Exactly the kind of things I’ll be needing to achieve in future. Currently I have a centralised heat recovery ventilation system which does all the extract and supply air but I’m only able to switch one speed of it! Also a 3 speed heat transfer fan which again, I can only switch 1 speed. I have to be quite careful though as the relays need to be interlocked in s/w as applying voltage to two speeds is really bad for the fans. Which is why I need to make sure I get the code right.

Thanks for your help

Yea I haven’t done a slider yet. Maybe its time I figured it out.

I dont really need to adjust the target temperature. What I’m trying to do basically is have a set temp, say 22 degrees c. As the measured temp is approaching that say, 21 degrees fan comes on low. Measured temp gets to 22, fan switches to medium. 23 degrees, fan switches to high. Then in lovelace some indication as to wether the fan is off/l/m/h. It would just make my life so much easier if there was a climate entity/thermostat solution to this to save me time if I’m doing this on a regular basis but seems like I’m going to have to do it the hard way!

I think you are looking at the wrong integrations - you should be thinking fan not climate https://www.home-assistant.io/integrations/#fan in particular https://www.home-assistant.io/integrations/fan.template/

EDIT also Lovelace Custom Fan Card Example

Yea, I went down that path at one point and created a template fan with 3 speeds switching outputs of my relays but then didnt seem to be able to use fan.templatefan in generic thermostat to control based on temperature.

That custom fan card is really nice will definitley look at using that! although still not sure if its able to automatically switch fans? am i missing something?

Looks like we’re in the same time zone :slight_smile:

New Zealand, currently 13 hours in front of UTC, yes we get the day first.

So you have fan control in home assistant, and you can set the fan speed to off, low, medium and high? And you have a temperature sensor?

trigger:
  platform: state
  entity_id: sensor.temperature
  to: 21
action: 
   - service: fan.set_speed
     data:
        entity_id: fan.templatefan
        speed: low
1 Like

I have this so far but haven’t had it running yet, still need to write the scripts.

fan:        
  - platform: template
    fans:
      heat_transfer:
        friendly_name: "Heat Transfer"
        value_template: "{{ states('fan.heat_transfer', 'on') }}"
        speed_template: "{{ states('fan.heat_transfer.speeds') }}"
        turn_on:
          service_template: >
            {% if speed == 'High' %}
              script.heat_transfer_high
            {% elif speed == 'Medium' %}
              script.heat_transfer_medium
            {% elif speed == 'Low' %}
              script.heat_transfer_low
            {% else %}
              shell.command.heat_transfer_low
            {% endif %}
        turn_off:
          service: script.heat_transfer_off
        set_speed:
          service_template: >
            {% if speed == 'High' %}
              script.heat_transfer_high
            {% elif speed == 'Medium' %}
              script.heat_transfer_med
            {% elif speed == 'Low' %}
              script.heat_transfer_low
            {% else %}
              script.heat_transfer_low
            {% endif %}
        speeds:
          - 'High'
          - 'Medium'
          - 'Low'

hope this will work.

trigger:
  platform: state
  entity_id: sensor.temperature
  to: 21
action: 
   - service: fan.set_speed
     data:
        entity_id: fan.templatefan
        speed: low

now that I see it written like that it doesnt seem as hard as I think I was expecting it to be. then I can use the custom fan card which will hopefully change the fan buttons colour depending on which state its in.

Thanks for your help! I think i can make a workable solution with all this and I guess once Ive done it once it shouldnt be hard to replicate in future.

I use a presence sensor to trigger the automation for my fans. Then, based on sensor temp, automatically adjust. This works great for things like z-wave fan switches but is more difficult for fans that do not report state - RF remote, for example.

Here is my repo
one of my fan speed sensor configs
and here is the automation config that I use to control the fan.

After reading thru this post, I may re-evaluate what I am doing and compare the complexity but for now, this works for me quite well.

Hi Jonny,

Have you got your project working with 3 speed fans?

Regards
Sandro Peixoto

Curious if he got it working as well. I was looking to do the same sort of project. My HVAC has a 5 speed fan but you have to set it to a fixed speed (1 of the 5). Variable speed blowers for HVAC work dynamically and receive commands to change the fan speed based on how close they are to the set-point. Would like to do the same thing and make my HVAC system a little smarter.

Down here in the south, if your HVAC cools too quickly, you will have a cold humid room. So what you want is to knock down the temp quickly and then work down the humidity. You do this by controlling the fan speed. (In case anyone is wondering why you would want that)