Skip to content

Temp Control

Willem edited this page Jun 29, 2026 · 3 revisions

Temp Control (Bypass)

Temperature-based bypass management for free cooling and heating retention.

Overview

Temp Control is an automation feature that actively manages the FAN bypass to keep indoor temperature near a comfort setpoint. It supports two modes of actuation:

  • Free Cooling – When indoor is too warm and outdoor air is cooler, opens the bypass to bring in fresh cool air.
  • Heating Retention – When indoor is too cold, closes the bypass to retain warmth.

The feature integrates with the shared FanSpeedArbiter (for fan speed during cooling) and the ZoneDemandRegistry (for per-area zone valve control).

How It Works

Bypass State Machine

Temp Control operates a state machine with three active modes plus a disabled state:

Mode Bypass Command Fan Speed Description
idle fan_bypass_auto No demand Indoor is within comfort band
cooling fan_bypass_open Requested via arbiter Indoor too warm, outdoor can cool
heating_retention fan_bypass_close No demand Indoor too cold, retain heat
disabled fan_bypass_auto No demand Temp control switch is off

Decision Logic (Single-Target Mode)

When no sensor_control areas are configured, the decision is based on indoor vs comfort temperature:

  1. Heating retention triggers when:

    • indoor_temp <= comfort_temp - comfort_delta_activate
  2. Cooling triggers when:

    • indoor_temp >= comfort_temp + comfort_delta_activate
    • outdoor_temp >= min_outdoor_temp (safety floor)
    • outdoor_temp <= indoor_temp - cooling_delta_activate
  3. Otherwise: idle

Hysteresis

To prevent rapid mode switching, hysteresis is applied based on the previous mode:

  • If previously cooling, stays cooling until indoor_temp < comfort_temp + comfort_delta_deactivate
  • If previously heating, stays heating until indoor_temp > comfort_temp - comfort_delta_deactivate

Min-Interval Guard

A configurable minimum interval (min_bypass_mode_interval_seconds, default 180s) prevents rapid bypass changes. If a mode change would occur within this interval, the previous mode is kept.

Dewpoint Guard (Condensation Protection)

When dewpoint_guard_enabled is True, Temp Control adds a condensation safety check before forcing bypass open for cooling.

Why it's needed:

When bypass is open, cold outdoor air flows through the supply ducts. Ducts and internal surfaces cool down towards the supply air temperature. If warm, humid indoor air contacts those cold surfaces and supply_temp < indoor_dewpoint + margin, condensation forms on cold ducts/surfaces.

How it works:

  1. Indoor dewpoint is calculated from indoor_temp + indoor_rh using the Magnus formula:

    a = 17.62, b = 243.12
    gamma = (a * T) / (b + T) + ln(RH / 100)
    dewpoint = (b * gamma) / (a - gamma)
    
  2. If supply_temp < indoor_dewpoint + dewpoint_margin_c, the desired mode is forced back to idle (bypass auto) and zone demands are cleared.

Why indoor (not outdoor) dewpoint:

The condensation risk is indoor moisture condensing on cold supply surfaces. Outdoor air at 6°C/100% RH has dewpoint 6°C, but when it enters a 22°C house it warms up and RH drops to ~30% — that air itself won't cause condensation. The relevant comparison is: how cold do surfaces get (supply_temp) vs. how much moisture is already in the house (indoor_dewpoint).

Important note on supply_temp:

The guard relies on supply_temp reflecting the actual supply air temperature after bypass open. When bypass is open (no heat recovery), supply_temp should approach outdoor_temp. If supply_temp is not available or not updating (e.g. sensor unavailable), the guard may not trigger as expected. Ensure sensor.<device>_supply_temp is populated.

Tuning:

  • Start with dewpoint_margin_c = 1.0 (conservative).
  • Increase if the guard blocks cooling too often.
  • Decrease if condensation still occurs.

Multi-Zone Per-Area Comfort

When sensor_control areas are configured with temperature entities, each area is evaluated independently:

  1. Per-area evaluation: Each area with a temperature_entity is evaluated against its own comfort temperature (or the FAN global comfort as fallback).
  2. Aggregation: Cooling has priority — if any area needs cooling, the house cools. If any area needs heating retention (and none need cooling), the house retains heat.
  3. Zone demands: For areas that need actuation, zone demands are published via ZoneDemandRegistry (DemandSource.OTHER) so the ZoneCoordinator opens valves for those areas.

Per-Area Comfort Temperature

Each area sensor can optionally specify a comfort_temperature_entity:

  • Any HA entity that provides a numeric state: input_number, number, sensor, climate current temperature, etc.
  • If not configured, falls back to the FAN's global comfort parameter (param 75).
  • This allows different rooms to have different target temperatures.

Global Comfort Temperature Entity

In addition to per-area comfort temperature, you can configure a global comfort temperature entity that overrides the FAN's param_75 for all areas that don't have their own comfort_temperature_entity. This is configured under FAN Configuration → Internal Fan Sensors → Comfort temperature (Temperature Control).

This is useful when:

  • Your FAN doesn't support 2411 parameters (param_75 is unavailable)
  • You want to use a dynamic comfort temperature from a thermostat, schedule, or input_number helper

The entity can be any HA entity with a numeric state (e.g. input_number.my_comfort, sensor.thermostat_target, climate.living_room).

Comfort Temperature Resolution Priority

Comfort temp is resolved with this priority:

  1. Area sensor comfort_temperature_entity — if set, use that entity's value (per-area)
  2. Global comfort_temp_entity (FAN Configuration → Internal Fan Sensors) — if set, use that entity's value
  3. FAN global comfort temperature (param 75) — fallback when no comfort entity is configured

When comfort temp is unavailable (no entity configured and param_75 is unavailable), the automation sets the status to waiting_for_comfort_temp instead of silently skipping the device. The HVAC Fan Card will show this status so you know comfort temp is missing.

Fan Speed Coordination

During cooling, Temp Control sets a fan speed demand via the FanSpeedArbiter:

  • Priority: 20 (lower than CO2 Control and Humidity Control)
  • Speed: Configurable via the select.temp_control_desired_speed_{device_id} entity
  • Conflict resolution: The arbiter resolves conflicts — highest priority wins. If CO2 Control or Humidity Control also demand a speed, theirs takes precedence.
  • Non-cooling modes: Temp Control clears its speed demand when not cooling.

Manual Override Safety Net

Temp Control has three layers of protection against conflicts with manual bypass operation:

Layer 1: Card Button Handlers

When the user presses a bypass button on the HVAC Fan Card, the card turns off the temp_control switch before sending the manual command. This prevents temp_control from immediately overriding the manual action.

Layer 2: Arbiter Manual Override

The FanSpeedArbiter tracks manual override state. When is_manual_override_active is true, temp_control skips processing for that device. Pressing Auto on the card clears the manual override and calls _reconcile_startup_states to re-evaluate.

Layer 3: State-Based Detection

Temp Control listens to the bypass position entity (binary_sensor.*_bypass_position). If the bypass changes externally (no temp_control command within the last 10 seconds), temp_control is automatically turned off. This catches:

  • Physical bypass changes
  • External service calls
  • Unit-native auto mode changes

Entities

Temp Control creates the following entities per FAN device:

Entity Type Description
switch.temp_control_{device_id} switch Enable/disable temp control
select.temp_control_desired_speed_{device_id} select Desired fan speed during cooling (low/medium/high)
binary_sensor.temp_control_active_{device_id} binary_sensor Whether temp control is actively managing the bypass
sensor.temp_control_status_{device_id} sensor Current mode (idle/cooling/heating_retention/disabled)

Configuration

Config Flow Parameters

Parameter Default Description
comfort_delta_activate 1.0 Temperature delta from comfort to trigger mode change
comfort_delta_deactivate 0.5 Temperature delta from comfort to exit mode (hysteresis)
cooling_delta_activate 1.0 Required indoor-outdoor delta to start cooling
cooling_delta_deactivate 0.5 Required indoor-outdoor delta to stop cooling
min_outdoor_temp 10.0 Safety floor — don't cool if outdoor is below this
min_bypass_mode_interval_seconds 180 Minimum seconds between bypass mode changes
default_desired_speed high Default fan speed during cooling
dewpoint_guard_enabled false Enable condensation protection (see below)
dewpoint_margin_c 1.0 Safety margin (°C) added to indoor dewpoint for the guard

Setup

  1. Enable Temp Control in the Ramses Extras config flow for your FAN device.
  2. Configure the threshold/hysteresis parameters.
  3. Optionally configure sensor_control areas with temperature entities for per-area comfort.
  4. The HVAC Fan Card will show a "Temp control" button in the bypass row.

Integration with Other Features

Sensor Control

Temp Control uses SensorControlResolver to obtain indoor/outdoor temperature entities. If external sensors are configured via FAN Configuration, those are used instead of the internal FAN sensors.

Humidity Control & CO2 Control

All three automations coexist via the FanSpeedArbiter:

  • CO2 Control has highest priority
  • Humidity Control has medium priority
  • Temp Control has lowest priority (20)
  • Only one speed demand is active at a time (highest wins)

ZoneCoordinator

When multi-zone per-area comfort is used, Temp Control publishes zone demands via ZoneDemandRegistry. The ZoneCoordinator resolves demands from all sources (Humidity Control, CO2 Control, Temp Control) and opens/closes zone valves accordingly.

HVAC Fan Card Integration

The HVAC Fan Card shows:

  • A "Temp control" button in the bypass row to toggle the feature on/off
  • A status indicator in the right panel (grouped with Balance and CO2) showing compact status like:
    • Temp → Off
    • Temp → On + Idle
    • Temp → On + Cooling
    • Temp → On + Retain Heat
  • Highlighted (blue glow) when actively controlling bypass
  • The current mode in the card's status section

When temp_control is active and cooling, the card reflects the bypass open state and the requested fan speed.

Back to: Home Prev: CO2 Control Next: FAN Configuration (Sensor Control)

Clone this wiki locally