Home Assistant has a way of quietly teaching you where the edges are.

You don’t usually notice them on day one. You notice them after years of living with your automations — when something mostly works, but never quite works right.

That’s exactly what happened with exhaust fan automation in my house.


The Setup I Used to Have (and Why It Worked)

For a long time, I relied on basschipper’s Generic Hygrostat custom integration:

https://github.com/basschipper/homeassistant-generic-hygrostat

It did something critical that most solutions still don’t:

It understood behavior, not just thresholds.

Humidity wasn’t treated as a simple “too high / too low” value. It reacted well to showers, stabilized correctly afterward, and didn’t randomly fire during storms or humid summer nights.

It worked well enough that I never thought about exhaust fans again — which is exactly what good Home Assistant automation should do.

Unfortunately, that integration stopped being maintained over two years ago, and as Home Assistant evolved, it eventually stopped working entirely.

At some point, I had to move on.


The Problem with the Home Assistant Core Hygrostat

Home Assistant now includes a Generic Hygrostat in core:

https://www.home-assistant.io/integrations/generic_hygrostat/

But here’s the uncomfortable truth:

That integration is not designed for exhaust fans.

It’s designed to control humidifiers and dehumidifiers. Conceptually, it behaves like a thermostat:

  • Humidity above X → turn on
  • Humidity below Y → turn off

That’s fine for appliances designed to add or remove moisture.

It’s a blunt instrument for exhaust fans.

Why?

Because absolute humidity is the wrong signal.

Humidity can be high because:

  • It’s raining
  • It’s summer
  • The windows are open
  • The house is naturally humid

What you actually care about in a bathroom is:

Is humidity rising quickly right now?

That single distinction changes everything, because...

Key Reasons for Bathroom Exhaust Fans:

  • Moisture Control & Mold Prevention: Showers create significant humidity that condenses on walls and ceilings, leading to mold, mildew, peeling paint, and damaged drywall. Fans remove this moisture before it can cause problems.
  • Odor & Germ Removal: They pull unpleasant smells and airborne germs out of the room, replacing them with fresher air, which is essential for comfort and hygiene.
  • Protecting Building Materials: By keeping the environment dry, fans prevent wood rot, warped doors, rusted fixtures, and damage to insulation.
  • Improved Air Quality & Comfort: They clear foggy mirrors and prevent the air from feeling heavy and damp, making the bathroom a more pleasant space.
  • Code Requirements: Many building codes require proper ventilation in bathrooms, often mandating a fan or window to ensure health and safety standards are met.because condensation (and mold) don't appear just because humidity is high, they appear because there is a significant difference between two areas and their relative humidity.

Rate of Change Is the Signal That Matters

A shower causes a rapid rise in humidity.
Ambient conditions usually don’t.

If you only watch absolute humidity:

  • Fans turn on when they shouldn’t
  • Fans turn off too early
  • Or worse, never turn off at all

The Home Assistant core hygrostat does not account for rate of change. At all.

And after years of trying to tune around that limitation, I stopped fighting it.


Why I Built a Home Assistant Blueprint Instead

Rather than patching together workarounds in individual automations, I decided to build what I actually wanted — once — and reuse it everywhere.

So I built a Home Assistant Automation Blueprint that:

  • Uses a Derivative sensor to detect humidity rate of change
  • Falls back to traditional thresholds if no rate sensor exists
  • Supports optional:
    • Shower-mode latch booleans
    • Sleep-hours inhibition
    • Maximum runtime safety timers
  • Respects manual fan control
  • Uses modern HA YAML conventions (plural triggers, conditions, actions)
  • Is reusable across bathrooms, laundry rooms, or anywhere humidity spikes matter

Most importantly:

It behaves the way a human expects an exhaust fan to behave.


This Is for Home Assistant Users — Full Stop

This Blueprint is:

  • Written specifically for Home Assistant
  • Designed around HA helpers, sensors, and timers
  • Meant to be installed, configured, and tuned through HA’s UI
  • Documented so you understand why each parameter exists

This isn’t a generic script. It’s not a one-off automation.
It’s a reusable building block for real Home Assistant installations.


The Blueprint Is Open Source

I’ve published the Blueprint on GitHub and will be maintaining it there going forward:

https://github.com/pickering/HA_Blueprints

This is the first Blueprint in that repository, and it sets the tone for what’s coming next:

  • Practical
  • Behavior-driven
  • Explicitly documented
  • Built from real-world HA usage, not theory

Closing Thought

If you’ve ever thought:

“Why does my bathroom fan feel dumb?”

You’re not wrong.

Humidity thresholds alone aren’t enough — and Home Assistant gives us the tools to do better.

So I did.

If you're interested in doing something similar here are the humidity sensors I use in my home: SONOFF SNZB-02P Zigbee Temperature Humidity Sensor