Skip to content

Climate Mode

Jason Rhubottom edited this page Aug 5, 2026 · 7 revisions

Climate mode

⚠️ Start with Basic Mode First Climate mode adds significant complexity with temperature thresholds, presence detection, and weather conditions. We recommend configuring Basic mode first and ensuring it works correctly before enabling Climate mode features.

Temperature Unit Consistency Required: All temperature sensors must use the same unit system (Β°C or Β°F). The integration does not automatically convert between units. See Known Limitations for details.

Climate mode enables the Climate handler (priority 50), which sits above glare zone (45) and solar (40) in the pipeline. It uses indoor temperature, presence, weather, and light sensors to choose a strategy. Decisions are made in priority order; the first matching condition wins.

Extreme heat is the one exception that sits above everything else. When an outdoor temperature threshold is configured and exceeded, the Extreme Heat rule holds the cover closed (or at a position you choose) for the whole operating window, regardless of sun position, presence, or season, pre-empting even winter heating. It is off by default. See Extreme heat below.

Fall-through on comfortable sunny days: When someone is home, the temperature is within the comfortable range, and it's a sunny day, Climate has no heating or cooling work to do and deliberately returns no result. The pipeline falls through to the Glare Zone handler (priority 45), which lowers the blind further if a floor zone is in the sun's path, and then the Solar handler (priority 40) for standard sun-tracking. This means sun-position calculations live in a single place rather than being duplicated inside Climate. The Decision Trace will show climate: matched=False, reason=deferred glare-control to solar/glare handlers in this case.

Which temperature decides the season

Two things trip people up here, and both surface the same way: it is clearly hot outside, but the status still reports the comfort range.

Only one sensor drives the season. The winter/summer decision reads a single temperature, and by default that is the Indoor Temperature Entity. Each cover exposes an Outside Temperature switch that hands the season decision to the Outdoor Temperature Entity instead β€” but that entity is disabled by default in the registry, so you have to enable it first (the cover's device page β†’ "+N entities not shown") before you can turn it on. Until then, 35 Β°C outside means nothing to the season if the room is sitting at 23 Β°C.

Summer needs both gates. Summer is driving temperature > Maximum Comfort Temperature AND outdoor temperature > Outdoor Temperature Threshold. Winter carries no second gate β€” it is just driving temperature < Minimum Comfort Temperature. Set the Outdoor Temperature Threshold higher than it actually gets outside and summer never activates, however warm the room is.

The Climate Status sensor's attributes show what the integration sees: indoor_temperature, outdoor_temperature, and temp_switch (false means indoor is driving). The diagnostics download adds climate_conditions.is_summer and is_winter next to them.

graph TD
  A[("fa:fa-sun Sun data")] --> PIPE

  subgraph PIPE ["Override Pipeline (highest priority wins)"]
    direction TB
    P1["Custom-position safety slot active? (priority 100)"] -->|Yes| R_FORCE["Fixed position"]
    P1 -->|No| P2["Weather override active?"]
    P2 -->|Yes| R_WEATHER["Safe retract position"]
    P2 -->|No| P3["Manual override active?"]
    P3 -->|Yes| R_MANUAL["Hold position"]
    P3 -->|No| P4["Motion timeout active?"]
    P4 -->|Yes| R_MOTION["Default position"]
    P4 -->|No| P5["Cloud suppression active?\n(lux / irradiance / weather)"]
    P5 -->|Yes| R_CLOUD["Default position"]
    P5 -->|No| MODE{"Climate mode\nenabled?"}
  end

  MODE -->|No| SOLAR
  MODE -->|Yes| EH

  subgraph CLIMATE ["Climate handler (priority 50)"]
    direction TB
    EH{"Extreme heat?\n(outside temp >\nthreshold)"}
    EH -->|Yes| EH_H["Hold position\n(default 0% β€” fully closed)"]
    EH -->|No| CA
    CA{"Presence\ndetected?"}

    CA -->|Yes / no sensor| CP1{"Winter?\n(temp < min comfort\n+ sun in window)"}
    CP1 -->|Yes| CP_W["100% β€” fully open\n(solar heating)"]
    CP1 -->|No| CP1B{"Winter insulation?\n(temp < min comfort,\nsun not in window,\ninsulation enabled)"}
    CP1B -->|Yes| CP_I["0% β€” fully closed\n(insulation)"]
    CP1B -->|No| CP2{"Low light?\n(lux/irradiance below\nthreshold or not sunny)"}
    CP2 -->|Yes| CP_L["Default position"]
    CP2 -->|No| CP3{"Summer?\n(temp > max comfort\n+ transparent blind)"}
    CP3 -->|Yes| CP_S["0% β€” fully closed\n(heat blocking)"]
    CP3 -->|No| CP_G(["No result β€” defer to\nGlare Zone / Solar"])

    CA -->|No| CN1{"Sun within\nacceptance angle?"}
    CN1 -->|No| CN_INS{"Winter insulation?\n(temp < min comfort\n+ insulation enabled)"}
    CN_INS -->|Yes| CN_I["0% β€” fully closed\n(insulation)"]
    CN_INS -->|No| CN_D["Default position"]
    CN1 -->|Yes| CN_LL{"Low light?\n(lux/irradiance below\nthreshold or not sunny)"}
    CN_LL -->|Yes| CN_LD["Default position"]
    CN_LL -->|No| CN2{"Summer?\n(temp > max comfort)"}
    CN2 -->|Yes| CN_S["0% β€” fully closed"]
    CN2 -->|No| CN3{"Winter?\n(temp < min comfort)"}
    CN3 -->|Yes| CN_W["100% β€” fully open"]
    CN3 -->|No| CN_D2["Default position"]
  end

  CP_G --> GLARE

  subgraph GLARE ["Glare Zone handler (priority 45, vertical blinds only)"]
    direction TB
    G1{"Active zone\nin sun's path?"}
    G1 -->|Yes| G2["Lower blind to\nshield floor zone"]
    G1 -->|No| G3(["No result β€” defer to Solar"])
  end

  G3 --> SOLAR
  GLARE --> SOLAR

  subgraph SOLAR ["Solar handler (priority 40)"]
    direction TB
    B1{"Sun in field\nof view?"}
    B1 -->|Yes| B2["Calculated sun-tracking position"]
    B1 -->|No| B3["Default / sunset position"]
  end
Loading

Climate strategies

Extreme heat (both paths, evaluated before everything else): Outdoor temperature above the configured extreme-heat threshold β†’ hold at the extreme-heat position (default 0%, fully closed). This is checked first in every strategy table, so it overrides winter heating, summer cooling, low-light, and glare fall-through alike. It ignores sun position, sun acceptance angle, presence, and season. Off by default; see Extreme heat.

  • With Presence (or no presence entity configured): The objective is to reduce glare while providing daylight. Conditions are evaluated in this priority order:

    1. Winter heating: Indoor temperature below the minimum comfort threshold and sun in front of the window β†’ open to 100% for passive solar heating. Takes priority over all other conditions except extreme heat.
    2. Winter insulation: Indoor temperature below the minimum comfort threshold, sun is not in front of the window, and the "Close for insulation" option is enabled β†’ close to 0% to retain heat.
    3. Low light: Light levels are low (lux/irradiance below threshold) or weather is not sunny β†’ default position to maximise daylight. Applies in all seasons, including summer.
    4. Summer cooling: Indoor temperature above the maximum comfort threshold and the "Transparent blind" option is enabled β†’ close to 0% to block heat while still allowing diffused light through sheer fabric. If "Transparent blind" is off (opaque blind), this step is skipped and the calculated sun-tracking position is used instead.
    5. Glare control / fall-through: All other conditions (comfortable temperature, sunny day) β†’ Climate returns no result and the pipeline falls through to Glare Zone (priority 45, if a protected floor zone is in the sun's path) and then Solar (priority 40, for standard sun-tracking position). This keeps sun-position calculations in a single place rather than duplicating them inside Climate.

      Behaviour change (v2.18.0, #231): Before this fix, the climate handler returned a solar-tracking position for the glare-control case, which prevented the pipeline from ever reaching the Glare Zone handler. Glare zones configured alongside climate mode with presence detection now take effect as documented.

  • Without Presence: The objective is energy efficiency; glare and daylight are not considered.

    • Sun in front of window and low light (lux/irradiance below threshold or not sunny) β†’ default position
    • Sun in front of window and summer (temp > max comfort) β†’ 0% (block heat)
    • Sun in front of window and winter (temp < min comfort) β†’ 100% (gain solar heat)
    • Sun not in window, winter, and "Close for insulation" enabled β†’ 0% (retain heat)
    • Otherwise β†’ default position

Transparent blind: A "transparent blind" is a see-through cover: sheer curtains, light-filtering roller shades, or any fabric you can see through. Enable this option if your blind lets light through even when fully closed. With it enabled, the integration closes the blind fully in summer to block solar heat gain while still allowing diffused light into the room. Leave it disabled for blackout blinds, wooden blinds, or any opaque cover; those already block direct sun at the calculated position without needing to close fully.

Note: The "Transparent blind" option only affects the With Presence path in Climate mode during summer conditions. The Without Presence path always closes to 0% in summer regardless of this setting.

Weather integration: A weather entity can be configured to identify sunny conditions (default states: sunny, windy, partlycloudy, cloudy, customisable). Winter heating (priority 1) activates regardless of weather or light levels.

Tilted blinds: Follow the same strategies, with these differences in summer mode: slats are set to 45Β° (found optimal for heat blocking while maintaining some light) when presence is detected, and to 0% (fully closed) when no presence is detected.

Extreme heat

Extreme heat mode addresses a case normal summer cooling cannot: a heatwave where the wall keeps radiating heat into the room long after the sun has left the window. Summer cooling only closes the cover while the sun is geometrically within the sun acceptance angle, so once the sun moves on, the cover reopens even though it is still 40Β°C outside. Extreme heat mode instead holds the cover closed all day.

Configure it with two options in Temperature & Climate (see Configuration β€” Climate):

  • Extreme heat threshold (outside) (temp_extreme_heat): the outdoor temperature above which the mode activates. Blank disables it (the default). It reads the outside temperature sensor in that sensor's own unit, and accepts either a fixed number or a Home Assistant Jinja2 template that evaluates to a number, re-evaluated every update cycle, exactly like the comfort thresholds.
  • Extreme heat hold position (extreme_heat_position): the position the cover holds while active. Blank means fully closed (0%). Set a partial value such as 30% if a fully dark room is too much, which is a common compromise when someone is home. On tilt covers this value is the slat angle percentage.

How it behaves:

  • It pre-empts every other climate strategy, including winter heating. It sits at the top of all four strategy tables, so a heatwave morning that is still briefly cool (say 6am at 28Β°C on a day heading to 41Β°C) holds closed rather than opening for solar gain the moment winter-heating logic would otherwise fire.
  • It is independent of the sun, presence, and season. No sun acceptance angle check, no presence check, no summer/winter gate. Only the outdoor temperature matters.
  • It is bounded by your operating time window, not a literal 24/7 lock. Like the rest of Climate mode (priority 50), it only acts between your configured start and end times. Within that window it holds all day regardless of where the sun is; outside the window the cover follows its normal end-of-day and sunset behaviour. If you need a genuine round-the-clock hold that ignores the time window, use a custom position safety slot (priority 100) instead.
  • It still respects your minimum and maximum position limits and rides the same tilt, inverse-state, and awning handling as summer cooling, so an awning retracts and an inverted cover inverts correctly.

The Decision Trace and the climate_status diagnostic report the active strategy as Extreme Heat, so you can confirm at a glance that the hold is coming from Climate mode rather than a custom slot.

🏠 Home Β· ✨ Features Β· πŸ“° What's New

Buy Me A Coffee

πŸš€ Getting Started

🧠 Core Concepts

πŸ“ Cover Types

βš™οΈ Configuration

πŸ”Œ Entities & Services

πŸ› οΈ Operations

πŸ”§ Advanced Use Cases

🎨 Dashboard

πŸ§ͺ Testing & Simulation

πŸ“š Reference

πŸ‘©β€πŸ’» For Developers

Clone this wiki locally