OpenAIR Local Mode Simulator

Move people between rooms and watch how the fan and valves respond

Settings

Fan

15%
speed
Demand: 0.00 Smoothed: 0.00

Valve Positions


Demand per Room

How to use

Rooms & sliders

Each room has a COâ‚‚ slider (or humidity in the Bathroom). Drag them to manually set air quality. Use Presets to jump to realistic scenarios like sleeping or dinner. The Outside card sets the incoming air quality used by the ventilator.

People & COâ‚‚

Drag the family avatars (👩 👨 🧒 👧) between rooms. Each person slowly raises the CO₂ in their room. People outside don't affect air quality. In the Bathroom, hit 🚿 Shower to spike humidity to 85%.

Ventilator & valves

The simulation runs continuously. Each room's demand combines a P term (immediate response) and an I term (accumulated past error), then EMA-smoothed. Fan speed follows the worst room. Valves open proportionally to each room's demand — bad rooms get fresh air first, good rooms get the minimum.


How it works

1. Demand per room (PI controller)

Each room computes a signed normalized error for CO₂ and humidity: (value − target) / (max − target). The P term is this error clamped to [0, 1] — immediate response. The I term is an accumulator that grows when the sensor stays above target and drains when it drops below. Combined: demand = clamp(P + I × Ki, 0, 1), then EMA-smoothed. Set Ki scale to 0 to disable the I term.

2. Fan speed

Fan demand equals the highest room's PI demand, then EMA-smoothed. A single bad room is enough to spin the fan up. Fan speed is mapped linearly from Fan min to Fan max based on this demand. The I term means a room that stays slightly bad for many minutes will gradually escalate the fan speed.

3. Valve positions

Each valve opens proportionally to its room's demand relative to the fan's normalised demand: valve = valve_min + (room_demand / fan_demand) × (valve_max − valve_min). Rooms that caused the fan to spin up get fully open valves; rooms with low demand get the minimum opening. A dead band (fan demand < 5%) opens all valves fully to distribute air evenly and prevent hunting near the setpoint.