Repository navigation
Humidity Control
Automatic ventilation based on humidity levels and spikes.
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.
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)
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.
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.
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)
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_outdooris 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.
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_maximumisnumber.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).
-
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
-
Enable Humidity Control feature for your FAN device
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 | — |
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: true1. 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)
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
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 |
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.
- Place humidity sensors near expected moisture sources
- Avoid direct airflow from ventilation ducts
- Ensure outdoor sensor is shielded from rain
- 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
- Summer: Outdoor humidity often high; system may ventilate less
- Winter: Large indoor/outdoor differences; ventilation more aggressive
- Consider automating threshold changes by season
Check:
- Area sensors are configured in FAN Configuration (Sensor Control)
- Spike detection is enabled for the area
-
spike_rise_percentandspike_window_minutesare 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 + offsetunless Spike: Ignore Outdoor is enabled
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
Check:
- Area sensor may be stuck or reporting incorrect values
- Spike window may be too long
- Consider adjusting
spike_rise_percentthreshold
Check:
- Indoor and outdoor sensors are configured
- Absolute humidity sensors are available
- Check activation/deactivation thresholds in configuration
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.
| 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 |
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)
- Feature Catalog
- CO2 Control
- Humidity Control (Balance)
- Temp Control (Bypass)
- FAN Configuration (Sensor Control)
- HVAC Fan Card
- Floorplan Helper
- Ramses Debugger
-
Device Simulator -
⚠️ Use only on dedicated system/container - Default Feature
- Hello World (Developer Example)