Skip to content

Humidity Control

devin edited this page Oct 21, 2026 · 8 revisions

Humidity Control (Balance)

Automatic ventilation based on humidity levels and spikes.

Overview

Humidity Control monitors humidity conditions and automatically increases fan speed when needed to prevent condensation, mold, and maintain air quality. It uses both balance mode (comparing indoor/outdoor absolute humidity) and spike detection for area-specific moisture events.

Key principle: The system compares indoor and outdoor absolute humidity to ensure that extra ventilation really makes sense - it won't ventilate with humid outdoor air when trying to reduce indoor humidity.

How It Works

Balance Mode

The system compares absolute humidity (g/m³) between indoor and outdoor air:

  • Indoor absolute humidity – Calculated from indoor temperature and humidity
  • Outdoor absolute humidity – Calculated from outdoor temperature and humidity
  • Ventilation decision – Fan runs when indoor exceeds outdoor by the activation threshold

Why this matters: Traditional humidity control might ventilate even when outdoor air is more humid than indoor air, making the problem worse. By comparing absolute humidity values, the system ensures ventilation only happens when it will actually help reduce indoor humidity levels.

Example comparison:

Scenario 1: Ventilation makes sense
- Indoor: 20°C, 60% RH → 10.4 g/m³ absolute humidity
- Outdoor: 15°C, 40% RH → 5.1 g/m³ absolute humidity
- Decision: VENTILATE (outdoor air is drier)

Scenario 2: Ventilation would be counterproductive  
- Indoor: 20°C, 60% RH → 10.4 g/m³ absolute humidity
- Outdoor: 25°C, 80% RH → 15.5 g/m³ absolute humidity
- Decision: DON'T VENTILATE (outdoor air is more humid)

Area Spike Detection

The system detects humidity spikes in specific areas – sudden increases indicating activities like showering:

Bathroom area sensor:  55%  →  Normal
During shower:          85%  →  SPIKE DETECTED
                          ↓
                   Fan speed increases
                          ↓
              Humidity returns to normal

Spike detection uses:

  • Rise threshold – Percentage increase to trigger (default 10%)
  • Window minutes – Time window to evaluate the spike (default 3 min)
  • Spike: Ignore Outdoor – Per-area toggle; when enabled, the area spike triggers extraction regardless of outdoor absolute humidity (default: off)
  • Area sensors – Configured in FAN Configuration (Sensor Control) with spike detection enabled

The Spike: Ignore Outdoor toggle is available per area sensor, so you can configure the bathroom to ignore outdoor humidity while the kitchen still respects it. See Spike: Ignore Outdoor below for the decision logic.

Area High-Humidity Trigger

In addition to rise-based spike detection, each area sensor has a Trigger on High Humidity toggle (default: off). When enabled, the area demands dehumidification whenever its RH exceeds relative_humidity_maximum (default 60%) — no historical rise is required. This is what makes the fan react when you enable the feature while a room is already humid (e.g. right after a shower), where a spike detector armed too late would see no "rise".

The same absolute-humidity safety check applies as for spikes: the area's absolute humidity must exceed max(indoor_abs, outdoor_abs + offset) — or just indoor_abs when Spike: Ignore Outdoor is enabled for that area.

Indoor Humidity Spike Detection

In addition to area sensor spikes, the system can detect spikes on the indoor humidity source itself (typically the WTW/FAN unit's built-in humidity sensor or an externally configured indoor humidity entity). This is useful when you want spike-based extraction based on the central indoor humidity reading rather than per-area sensors.

Indoor spike detection is configured in FAN Configuration (Sensor Control) → Internal Fan Sensors group, with these settings:

  • Spike enabled – Toggle indoor spike detection on/off (default: off)
  • Spike rise percent – Percentage rise above baseline to trigger (default: 10%)
  • Spike window minutes – Time window for baseline comparison (default: 5 min)
  • Spike: Ignore Outdoor – When enabled, the spike triggers extraction regardless of outdoor absolute humidity (default: off)

Spike: Ignore Outdoor

By default, both indoor and area spike detection are gated on the outdoor absolute humidity: a spike only triggers extraction when the spike source's absolute humidity exceeds outdoor_abs + offset. This prevents bringing more humid outdoor air inside when ventilation would make things worse.

However, for use cases like bathroom extraction, you may want the fan to extract unconditionally on a humidity spike — regardless of outdoor conditions. The Spike: Ignore Outdoor option bypasses the outdoor comparison. It is available in two places:

  • Indoor humidity source (global for the indoor spike) — configured in Sensor Control → Internal Fan Sensors
  • Per-area sensor (individual for each area spike) — configured in Sensor Control → Area Sensors
Default (spike_ignore_outdoor = off):
  Indoor spike: indoor_abs > outdoor_abs + offset → EXTRACT
  Indoor spike: indoor_abs <= outdoor_abs + offset → SKIP
  Area spike:   area_abs > max(indoor_abs, outdoor_abs + offset) → EXTRACT
  Area spike:   area_abs <= max(indoor_abs, outdoor_abs + offset) → SKIP

Ignore outdoor (spike_ignore_outdoor = on):
  Indoor spike: indoor_abs > 0 → EXTRACT (regardless of outdoor)
  Area spike:   area_abs > indoor_abs → EXTRACT (still must exceed indoor)

For area spikes with spike_ignore_outdoor enabled, the indoor_abs comparison is kept (ventilation should still help vs. the rest of the house), but the outdoor_abs + offset part is dropped.

Both toggles are also available in the HVAC Fan Card settings (see HVAC Fan Card).

Note: When spike_ignore_outdoor is on, the WTW unit will still partially filter moisture from incoming air (as long as the bypass is closed), and dry indoor air is transported to the moist room. The additional moisture spread across the whole house volume is typically negligible compared to the benefit of controlled extraction in the wet room.

Recovery — When the Fan Drops Back

An active boost does not wait for humidity to fall all the way back to the pre-shower baseline. Once a trigger (area spike, area high-humidity, or indoor spike) is active, it is re-evaluated roughly once a minute and is cleared — returning the fan to normal — as soon as either condition holds:

Trigger Boost ends when
Area spike / high-humidity Area RH ≤ relative_humidity_maximum (default 60%), or area absolute humidity ≤ outdoor_abs + offset
Indoor spike Indoor RH ≤ relative_humidity_maximum (default 60%), or indoor absolute humidity ≤ outdoor_abs + offset

In other words: the fan keeps boosting until the triggering sensor's RH is back at or below your maximum humidity setting. With the default 60%, a bathroom that triggered at 85% RH stays boosted until it recovers to 60%.

Notes:

  • With Spike: Ignore Outdoor enabled for a source, the outdoor absolute-humidity check is skipped during recovery — the boost then ends purely on the RH threshold.
  • relative_humidity_maximum is number.relative_humidity_maximum_{device_id} — raise it to boost longer, lower it to end the boost sooner.
  • Balance mode has no separate recovery path: the high-indoor-RH decision re-evaluates continuously and simply stops demanding ventilation once the effective indoor RH is back in range (see Multi-source aggregation for how the "effective" indoor reading is composed).

Configuration

Prerequisites

  1. Configure FAN Configuration (Sensor Control) first:

    • Set up indoor temperature and humidity sensors
    • Set up outdoor temperature and humidity sensors
    • Configure area sensors with spike detection enabled
  2. Enable Humidity Control feature for your FAN device

Settings

The feature provides these configurable entities:

Entity Type Purpose Default
switch.dehumidify_{device_id} Switch Enable/disable humidity control Off
number.relative_humidity_minimum_{device_id} Number Minimum humidity threshold 40%
number.relative_humidity_maximum_{device_id} Number Maximum humidity threshold 60%
number.absolute_humidity_offset_{device_id} Number Offset for calculations 0.4 g/m³
binary_sensor.dehumidifying_active_{device_id} Binary Sensor Shows when active —

Area Sensor Configuration

Configure area sensors in Sensor Control for spike detection:

area_sensors:
  - area_id: bathroom
    temperature_entity: sensor.bathroom_temp
    humidity_entity: sensor.bathroom_humidity
    trigger_on_high_humidity: true  # Also boost whenever RH > max (no rise needed)
    weight: 1.0  # Weight in "weighted" aggregation (see Sensor Control)
    spike_rise_percent: 15  # Trigger at 15% rise
    spike_window_minutes: 5  # Check over 5 minutes
    enabled: true

Example Scenario

1. Shower starts → Bathroom area humidity rises rapidly
        ↓
2. Area spike detected (>15% increase in 5 min window)
        ↓
3. Humidity Control enters spike_boost mode
        ↓
4. Fan speed increases via fan-speed arbiter
        ↓
5. Zone valve opens (if zones configured)
        ↓
6. Shower ends → Humidity gradually drops
        ↓
7. Fan returns to normal once the area RH is back at/below
   relative_humidity_maximum (see Recovery above)

Integration with Zones

When zones are configured:

  • The triggering zone (from area sensor mapping) opens to maximum position
  • Other zones maintain balanced airflow
  • Fan speed increases based on the humidity demand
  • Zone demand is registered through the zone demand registry

Entities

Humidity Control creates these entities:

Entity Type Purpose
switch.dehumidify_{device_id} Switch Enable/disable humidity control
number.relative_humidity_minimum_{device_id} Number Minimum humidity threshold
number.relative_humidity_maximum_{device_id} Number Maximum humidity threshold
number.absolute_humidity_offset_{device_id} Number Offset for calculations
binary_sensor.dehumidifying_active_{device_id} Binary Sensor Shows when dehumidification is active

Provided by Default Feature:

Entity Type Purpose
sensor.indoor_absolute_humidity_{device_id} Sensor Calculated indoor absolute humidity
sensor.outdoor_absolute_humidity_{device_id} Sensor Calculated outdoor absolute humidity

Services

The feature provides internal services (not exposed to HA):

  • async_activate_dehumidification – Turn on dehumidification
  • async_deactivate_dehumidification – Turn off dehumidification
  • async_set_min_humidity – Set minimum threshold
  • async_set_max_humidity – Set maximum threshold
  • async_set_offset – Set humidity offset
  • async_get_status – Get current status

These are used internally by the automation logic.

Best Practices

Sensor Placement

  • Place humidity sensors near expected moisture sources
  • Avoid direct airflow from ventilation ducts
  • Ensure outdoor sensor is shielded from rain

Threshold Tuning

  • Start with default thresholds
  • Adjust based on your home's characteristics:
    • Older homes with poorer insulation → Lower thresholds
    • Well-ventilated modern homes → Higher thresholds
    • Very humid climates → Higher thresholds

Seasonal Adjustments

  • Summer: Outdoor humidity often high; system may ventilate less
  • Winter: Large indoor/outdoor differences; ventilation more aggressive
  • Consider automating threshold changes by season

Troubleshooting

"Humidity spikes not detected"

Check:

  • Area sensors are configured in FAN Configuration (Sensor Control)
  • Spike detection is enabled for the area
  • spike_rise_percent and spike_window_minutes are set appropriately
  • Sensor update frequency is sufficient
  • For indoor spikes: indoor humidity spike detection is enabled in Sensor Control → Internal Fan Sensors
  • For indoor spikes: the indoor absolute humidity must exceed outdoor_abs + offset unless Spike: Ignore Outdoor is enabled

"Fan doesn't increase during spike"

Check:

  • switch.dehumidify_{device_id} is enabled
  • Fan control mode is not manual_override
  • CO2 Control is not currently active (has higher priority)
  • Check binary_sensor.dehumidifying_active_{device_id} state

"Constant spike mode"

Check:

  • Area sensor may be stuck or reporting incorrect values
  • Spike window may be too long
  • Consider adjusting spike_rise_percent threshold

"Balance mode not working"

Check:

  • Indoor and outdoor sensors are configured
  • Absolute humidity sensors are available
  • Check activation/deactivation thresholds in configuration

Device Native Logic vs Ramses Extras

Important: FAN devices often have their own built-in humidity control logic. Ramses Extras aims to improve upon this with more sophisticated balance mode that compares indoor and outdoor absolute humidity to ensure ventilation actually makes sense.

However, the device's native humidity logic remains as a fallback:

  • When Ramses Extras is active and online, it takes priority
  • If your network goes down or Ramses Extras becomes unavailable, the FAN device will fall back to its own built-in humidity control
  • This ensures basic moisture protection continues even if Home Assistant or network issues occur

This dual-layer approach provides the best of both worlds: enhanced automation with balance mode when available, and reliable fallback protection when not.

Comparison with CO2 Control

Aspect Humidity Control CO2 Control
Trigger Balance mode & area spikes CO2 thresholds
Priority Medium High
Use case Bathrooms, kitchens Bedrooms, offices
Response Spike_boost & balance modes Threshold-based
Both active Higher fan speed wins CO2 wins if conflict

Control Modes

The automation uses these control modes:

  • idle – No humidity control active
  • balance – Balancing indoor/outdoor absolute humidity
  • spike_boost – Responding to area humidity spike
  • manual – Dehumidification switch manually turned on

Back to: Home | Prev: CO2 Control | Next: Temp Control (Bypass)

Clone this wiki locally