Some hardware links on this page are affiliate links. As an Amazon Associate I earn from qualifying purchases. We may earn a commission if you buy through them, at no extra cost to you. See the affiliate disclosure.
Passive cooling only works when someone opens the sash at the right hour and shuts it before the evening air, the wind, or the rain undoes it. This pack watches indoor temperature, outdoor temperature, a weather entity, and the contacts on the openings you list. It advises open when the outdoor air is usefully cooler and every listed contact is shut. It advises close when an opening is still open and the benefit is gone. It can push a notification, speak the same line, or both. It does not move a motor.
Entity ids are blueprint inputs. Do not publish which openings are in the list.
Drying a room by absolute humidity is humidity window-vent guide. A nag to close an already-open window, with the wait scaled by how cold it is outside, is open-window reminder, temperature-scaled wait. Shutting the heat pump while a sash is open is window-open climate pause. This one is the “open it now for cooling” advisor.
What problem it solves
You want one clear open or close suggestion for passive cooling, using temperature, wind, and bad weather, only while somebody is home to act on it.
How it works
Contacts use the usual device class: on is open. An unknown or unavailable contact blocks both advices so a dead radio does not tell you every window is shut.
- Open — every selected contact is closed, indoor temperature is at or above a floor (default 22.7 °C), outdoor temperature is at or above its own floor (default 10 °C) and at least a gap cooler than indoor (default 1.0 °C), the weather state is not rain, heavy rain, snow, sleet, thunder, thunder and rain, or hail, and wind is under a limit (default 12, in whatever unit the weather entity already uses). Those conditions have to hold for a stable period (default 5 minutes).
- Close — at least one selected contact is open, and any of these is true for the same stable period: indoor has fallen to a close floor (default 22.0 °C), outdoor has fallen below its close floor (default 8 °C), outdoor is no longer cooler by a smaller gap (default 0.3 °C), the weather is in the bad list, or wind is at or above the limit.
- Morning and evening — a morning time (default 06:45) runs the same open or close tests once. An evening time (default 22:10) advises close whenever something in the list is still open, even if the air is still cool. Quiet hours wrap those checks (default 06:30 to 22:15). Outside that window the automation does not speak.
- Someone home — at least one selected
personmust behome. An empty house gets no advisory. - Delivery — notification targets, TTS on media players, or both. At least one path has to be configured or the run stops. The spoken line and the push state the reason (cooler outside, wind, rain, indoor target reached, evening check). Language is Danish, English, or German. The pack notes use English.
The template triggers fire when a condition becomes true and stays true for the stable minutes. They do not repeat every sensor tick. mode: single drops a second run if one is already in progress.
Needs Home Assistant 2024.6 or newer.
Hardware notes
- Contacts. Every opening you are willing to be nagged about. Leave a hopper you never use off the list. The close message names the ones that are open, so name the entities after the opening, not after a person.
- Indoor temperature. A room sensor, or one sensor that speaks for the house if you only have one zone. The ESP32-C6 climate sensor covers a room that has none.
- Outdoor and weather. Outdoor temperature wants device class
temperature. Wind and the rain/snow state come from aweatherentity (wind_speedattribute and the state). A city station lags a sheltered patio. A local outdoor sensor plus a weather integration for the condition is the better split. - Voice. Any
ttsentity and one or moremedia_players you already have. Leave TTS off and use notify only if you do not want speech. - People. Real
personentities. A device tracker that is not wrapped in a person will not satisfy the home check.
Snippet
The pack ships the blueprint. This is the open test in miniature, with inputs standing in for the numbers:
trigger:
- platform: template
id: open_for_cooling
value_template: >
{% set indoor = states(indoor_temp) | float(none) %}
{% set outdoor = states(outdoor_temp) | float(none) %}
{{ indoor is not none and outdoor is not none
and indoor >= open_indoor_min
and outdoor >= outdoor_open_min
and outdoor <= indoor - cool_gap
and is_state(window_group, 'off') }}
for:
minutes: !input stable_minutes
condition:
- condition: state
entity_id: !input someone_home
state: "home"
action:
- service: !input notify_service
data:
title: "Open windows"
message: >
Outside is {{ states(outdoor_temp) }} °C,
{{ (states(indoor_temp) | float - states(outdoor_temp) | float) | round(1) }} °C cooler.
open_indoor_min, outdoor_open_min, and cool_gap are the blueprint’s number inputs. The real blueprint also checks wind, the bad-weather list, unavailable contacts, the active hours, and the close / morning / evening branches. A window_group that is off means every member is closed.
Setup outline
- Import the blueprint. Select the indoor sensor, the outdoor sensor, the weather entity, the contacts, and at least one person.
- Turn notifications on and point them at a phone. Leave TTS off until the push text looks right. Set the language to English unless you want Danish or German.
- Leave the temperature defaults for a day, then move the indoor open floor to the temperature where you actually want air. Remember the wind limit uses the weather entity’s unit. Twelve miles per hour and twelve metres per second are not the same knob.
- Test the open path with the contacts closed and a template outdoor sensor cooler than the room. Test the close path by opening one contact and raising the template outdoor sensor. Run the evening trigger from the trace with a contact open and confirm it advises close even when the air is still cool.
Troubleshooting
- Never advises open. A contact is open or
unavailable, nobody ishome, the hour is outside the active window, wind is already over the limit, or the weather state is in the bad list. Check each one in the trace. A weather entity with nowind_speedattribute makes the wind test fail closed (the template treats a missing attribute as 0, which would pass the wind check — a missing attribute is not your problem; a wrong unit is). - Advises open in a storm. The integration’s state string is not one of
rainy,pouring,snowy,snowy-rainy,lightning,lightning-rainy, orhail. Some providers use a different word. Read the state in Developer Tools. - Close spam.
mode: singleand the templatefor:should speak once per episode. A contact that bounces re-arms the trigger. Debounce the contact. - Evening nag while you meant to leave it open. The evening trigger advises close whenever any selected contact is open. Take that opening off the list, or move the evening time.
- TTS silent, push works. TTS is off, the engine entity is empty, or no media player was selected. Both the boolean and the targets have to be set. At least one of notify or TTS must be ready or the action stops.
- Import error on an old copy. The first upload of this blueprint had a broken template. Re-import from the raw URL in the credits. A later copy loads.
Credits
Based on the community blueprint Climate ventilation advisory (forum thread). This write-up is an original overview of the temperature, wind, and weather advisory: open when outdoor air will cool the room, close when it will not, with an evening check that does not wait for the numbers.