Skip to content

Free-cooling (economizer) opportunity

camber.freecooling quantifies the opportunity an economizer fault leaves on the table — the business case that funds the fix. Where the outdoor_air_fraction rule detects misbehavior, this counts how many hours ran mechanical cooling while it was cool enough to cool for free, and (given a cooling-power series and a price) the recoverable energy and dollars.

flowchart LR
  oat["oat"] --> avail{"OAT below high_limit_f (free cooling available)"}
  cool["cool_valve"] --> mech{"mechanical cooling running (> active_thresh)"}
  avail -- yes --> mech
  mech -- yes --> hours["hours_missed"]
  kw["cooling_kw"] --> energy["recoverable_kwh (x recover_frac)"]
  hours --> energy
  price["price_per_kwh"] --> savings["savings_usd"]
  energy --> savings
Free-cooling hours are missed when it is cool out yet mechanical cooling runs; power and price value them.

from camber.freecooling import free_cooling_opportunity

opp = free_cooling_opportunity(
    oat, cool_valve, cooling_kw=chiller_kw, high_limit_f=65, recover_frac=0.7, price_per_kwh=0.15
)
opp.hours_missed, opp.recoverable_kwh, opp.savings_usd  # e.g. 286 h, 10010 kWh, $1502

Free cooling is available when OAT is below high_limit_f and missed when it's available yet mechanical cooling runs (cooling_signal > active_thresh). With cooling_kw the missed-hours energy is summed; recover_frac is the share an economizer could offset; price_per_kwh (caller-supplied) values it. Without power the result is hours-only; without a price the energy is reported and savings is NaN — nothing is fabricated. Pairs with camber.fault_economics (fault → dollars).