Pandas cookbook

71 rules as pandas functions: the reference twin of the SQL cookbook, for notebooks, CSV studies and the parity tests (parity). The function behind each rule is in open_fdd/rules/cookbook_catalog.py. The 6 rules without a twin are marked SQL only.

Conventions

  • Input is a DataFrame with a UTC DatetimeIndex and one Haystack-role column per signal, all in SI (table below). The rules never convert units or guess a scale.
  • run_rule(rule_id, df, params=..., poll_seconds=300) returns status (PASS, FAULT, SKIPPED_MISSING_ROLES, …), fault_hours (h), and the raw_fault and confirmed_fault boolean masks. Set df.attrs["equipment_id"] and df.attrs["equipment_type"].
  • The runner applies the operational gate and the confirm delay (confirm_min, minutes). Parameter keys match the SQL catalog.
import pandas as pd
from open_fdd.rules import run_rule

# one day on a 5-minute grid, UTC timestamps, every value SI (°C, Pa, L/s, kW; commands 0-1)
idx = pd.date_range("2026-01-05", periods=288, freq="5min", tz="UTC", name="timestamp_utc")
df = pd.DataFrame({"duct-static-pressure": 150.0, "duct-static-pressure-sp": 250.0, "fan-cmd": 1.0}, index=idx)
df.attrs.update(equipment_id="equip-1", equipment_type="AHU")

result = run_rule("FC1", df, params={"confirm_min": 5})
print(result.status, result.fault_hours)

Duct static (Pa) sits 100 Pa under its setpoint while the fan runs: low static at full fan.

Units convention

  • Rules compute in SI only. The engineer declares each point’s unit in NF; ingest converts it to SI (open_fdd/data/units.json). Unknown or incompatible units are skipped, never guessed from the value.
  • Imperial is display-only. Differences (Δ°C) convert with a factor of 1.8 and no +32.
  • Fractions are 0-1, relative humidity is 0-100 %RH, statuses are 0/1.
Quantity SI unit (rules compute in this) Imperial display Also accepted (converted at ingest)
Temperature °C °F °F, K
Temperature difference Δ°C Δ°F Δ°F
Temperature rate Δ°C/h Δ°F/h Δ°F/h
Air pressure Pa inH₂O kPa, inH2O, psi, bar
Water pressure Pa psi kPa, inH2O, psi, bar
Air flow L/s cfm m³/s, m³/h, cfm, gpm
Water flow L/s gpm m³/s, m³/h, cfm, gpm
Power kW kW W, MW, Btu/h, ton, hp
Energy kWh kWh Wh, MWh, kBtu, MMBtu, therm
Relative humidity % % % (the SI unit only)
Concentration ppm ppm none
Command or position fraction, 0-1 % %, ratio
Status 0/1 0/1 bool

Rules by equipment

Air handling units (34): AHU-DUCTHI · AHU-SATDEV · AHU-SIMUL · CMD-1 · DMP-1 · ECON-1 · ECON-2 · ECON-3 · ECON-4 · ECON-5 · ECON-6 · ECON-7 · FC1 · FC10 · FC11 · FC12 · FC13-SAT-HIGH · FC14 · FC15 · FC2 · FC3 · FC4 · FC5 · FC6 · FC7 · FC8 · FC9 · MECH-OAT-1 · OA-1 · RESET-1 · SCHED-1 · SCHED-247 · TRIM-1 · VLV-1

VAV terminals (9): VAV-1 · VAV-2 · VAV-3 · VAV-4 · VAV-5 · VAV-6 · VAV-7 · VAV-AHU-LEAVE · VAV-REHEAT

Fan coil and zone equipment (9): FCU-CLG-COIL · FCU-CO2-DAMPER · FCU-DAMPER-POS · FCU-DEADBAND · FCU-HTG-COIL · FCU-MODE-CYCLE · FCU-SENSOR-NULL · FCU-VALVE-PASS-CLG · FCU-VALVE-PASS-HTG

Chillers and plants (9): CHW-1 · CHW-2 · CHW-3 · CHW-4 · CHW-NOLOAD-1 · CW-APR-1 · CW-FAN-1 · CW-OPT-1 · TRIM-4

Boilers (1): TRIM-3

Heat pumps (1): HP-1

Meters and utilities (2): UTIL-INTERVAL · UTIL-MONTHLY

Sensor validation and control loops (6): PID-HUNT-1 · SV-FLATLINE · SV-RANGE · SV-RATE · SV-SPIKE · SV-STALE

Weather (2): OAT-METEO · WX-1

General (4): AVG-ZONE-TEMP · FAN-RUNTIME-HOURS · FAULT-ELAPSED-HOURS · ZONE-COMFORT-PCT


Air handling units

AHU / RTU / MAU / DOAS: duct static, supply air, economizer, mixing and mode faults.

AHU-DUCTHI

Duct static > static SP + margin.

Duct static pressure high · Family ahu · Equipment ahu · Confirm 5 min · function ahu_duct_high · SQL entry

Equation: Duct static > static SP + margin. Evaluates when fan is proven on OR duct static itself exceeds pressure_on_min (catches high static with fan-status off).

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
duct_static duct-static-pressure Pressure Pa kPa, inH2O, psi, bar -248.84 to 1990.72 required
duct_static_sp duct-static-pressure-sp Pressure Pa kPa, inH2O, psi, bar - required

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 5 0 60 min
duct_high_margin High margin 62.21 12.442 248.84 Pa
pressure_on_min Pressure-on evidence 49.768 12.442 248.84 Pa

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match

AHU-SATDEV

SAT − SAT SP > 2.8 Δ°C.

SAT deviation from setpoint · Family ahu · Equipment ahu · Confirm 10 min · function ahu_sat_dev · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
sat discharge-air-temp Temperature °C °F, K -1.11 to 65.56 required
sat_sp discharge-air-temp-sp Temperature °C °F, K - required

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 10 0 60 min
sat_dev_err SAT deviation 2.77778 0.555556 8.33333 Δ°C

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity known divergence: SQL and pandas gate ‘equipment on’ with different fan/pump proof order and thresholds

Imperial display: Δ°C parameters are differences, shown as Δ°F with no +32.

AHU-SIMUL

Heating valve > 10% AND cooling valve > 10% at once.

Heating and cooling simultaneous · Family ahu · Equipment ahu · Confirm 5 min · function ahu_simul_heat_cool · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
htg_valve_pct heating-valve Command or position 0-1 %, ratio 0 to 1 required
clg_valve_pct cooling-valve Command or position 0-1 %, ratio 0 to 1 required

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 5 0 60 min
valve_open_pct Valve open threshold 0.1 0.05 0.5 fraction (0-1)

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match

CMD-1

Fan command and proven status disagree.

Fan cmd/status mismatch · Family ahu · Equipment ahu · Confirm 10 min · function cmd1 · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
fan_cmd fan-cmd Command or position 0-1 %, ratio 0 to 1 required
fan_status fan-status Status 0/1 bool 0 or 1 required

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 10 0 60 min

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match

DMP-1

Damper ≤ 5% but MAT tracks OAT within 1.1 Δ°C — leaking OA damper.

OA damper leakage · Family ahu · Equipment ahu · Confirm 15 min · function dmp1 · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
oa_t outside-air-temp Temperature °C °F, K -51.11 to 54.44 required
mat mixed-air-temp Temperature °C °F, K -28.89 to 43.33 required
oa_damper_pct outside-air-damper Command or position 0-1 %, ratio 0 to 1 required

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 15 0 60 min
leak_delta Leak ΔT 1.11111 0.277778 3.33333 Δ°C

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match

Imperial display: Δ°C parameters are differences, shown as Δ°F with no +32.

ECON-1

Fan on, OA damper < 5%, OAT > 12.8 °C (should be economizing).

Economizer stuck closed · Family ahu · Equipment ahu · Confirm 10 min · function econ1 · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
fan_cmd fan-cmd Command or position 0-1 %, ratio 0 to 1 required
oa_damper_pct outside-air-damper Command or position 0-1 %, ratio 0 to 1 required
oa_t outside-air-temp Temperature °C °F, K -51.11 to 54.44 required

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 10 0 60 min
econ1_oat_min Favorable OAT 12.7778 7.22222 21.1111 °C

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match

ECON-2

OAT > 17.2 °C AND OA damper > 42% (should be at minimum).

Economizing when outdoor unfavorable · Family ahu · Equipment ahu · Confirm 5 min · function econ2 · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
oa_t outside-air-temp Temperature °C °F, K -51.11 to 54.44 required
oa_damper_pct outside-air-damper Command or position 0-1 %, ratio 0 to 1 required

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 5 0 60 min
econ2_damper Damper open frac 0.42 0.2 0.9 fraction (0-1)
econ2_oat_hi OAT high cutoff 17.2222 12.7778 26.6667 °C

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match

ECON-3

Flags mechanical cooling during web free-cool weather when the OA damper is not fully integrated.

Mech cooling without integrated economizer · Family ahu · Equipment ahu · Confirm 5 min · function econ2 · SQL entry

Equation: Web free-cooling opportunity: 15.6 °C ≤ dry-bulb < 22.2 °C AND dewpoint < 15.6 °C (dewpoint from web sensor or calculated from web DB+RH). Fault when cooling valve is open while OA damper is below the integrated-economizer threshold (default 90%). No BAS OAT fallback. Screenable engineering defaults — not code limits.

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
oa_damper_pct outside-air-damper Command or position 0-1 %, ratio 0 to 1 required
clg_valve_pct cooling-valve Command or position 0-1 %, ratio 0 to 1 required
web_oa_t web-outside-air-temp Temperature °C °F, K - optional
web_oa_dp web-outside-air-dewpoint Temperature °C °F, K - optional
web_oa_h web-outside-air-humidity Relative humidity %RH (0-100) none 0 to 100 optional

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 5 0 60 min
econ3_damper_hi Integrated economizer damper 0.9 0.5 1 fraction (0-1)
econ3_db_max Free-cool OA dry-bulb max 22.2222 18.3333 26.6667 °C
econ3_db_min Free-cool OA dry-bulb min 15.5556 10 20 °C
econ3_dp_max Free-cool OA dew point max 15.5556 7.22222 20 °C

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity known divergence: weather source: SQL prefers equipment web_oa_* then as-of weather rows; pandas resolves its own web columns

ECON-4

Fan on, RAT−OAT > 1.2 Δ°C, estimated OA fraction < 21%.

Low estimated OA fraction · Family ahu · Equipment ahu · Confirm 10 min · function econ4 · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
mat mixed-air-temp Temperature °C °F, K -28.89 to 43.33 required
rat return-air-temp Temperature °C °F, K 4.44 to 37.78 required
oa_t outside-air-temp Temperature °C °F, K -51.11 to 54.44 required
fan_cmd fan-cmd Command or position 0-1 %, ratio 0 to 1 required

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 10 0 60 min
oa_min_pct Min OA fraction 21 5 40 %

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity known divergence: SQL holds the fan-restart / mode-delay window over rolling rows, pandas GL36 suppresses after a mode change: differs by a few samples at fault edges

ECON-5

Preheat leaving air > 1.2°C above target while preheat active.

Preheat over-conditioning · Family ahu · Equipment ahu · Confirm 10 min · function econ5 · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
preheat_leave_t preheat-leaving-temp Temperature °C °F, K - required
sat_sp discharge-air-temp-sp Temperature °C °F, K - required
oa_t outside-air-temp Temperature °C °F, K -51.11 to 54.44 required
htg_valve_pct heating-valve Command or position 0-1 %, ratio 0 to 1 required

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 10 0 60 min
preheat_over Preheat over ΔT 1.22222 0.277778 4.44444 Δ°C

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match

Imperial display: Δ°C parameters are differences, shown as Δ°F with no +32.

ECON-6

Flags an AHU economizing above min-OA when web outdoor air is below freezing (−3.9 °C).

Economizing in freezing weather · Family ahu · Equipment ahu · Confirm 10 min · function econ6_compute · SQL entry

Equation: Web dry-bulb < −3.9°C AND OA damper above winter min-OA ceiling (default 25%). AHU should be at minimum OA in cold weather.

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
oa_damper_pct outside-air-damper Command or position 0-1 %, ratio 0 to 1 required
web_oa_t web-outside-air-temp Temperature °C °F, K - optional

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 10 0 60 min
econ6_damper_max Winter min-OA damper 0.25 0.05 0.5 fraction (0-1)
econ6_oat_max Winter OAT ceiling -3.88889 -9.44444 4.44444 °C

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match

ECON-7

Flags cooling demand during economizer-OK web weather (dew point < 15.6 °C, dry-bulb < 22.2 °C) while the OA damper is not economizing.

Economizer OK but not economizing · Family ahu · Equipment ahu · Confirm 10 min · function econ7_compute · SQL entry

Equation: Economizer-OK web weather: dew point < 15.6°C AND dry-bulb < 22.2°C (above a 1.7°C freeze-guard floor; dewpoint from web sensor or calculated from web DB+RH). Fault when there is cooling demand (cooling valve open or proven DX/chiller cooling) but the OA damper stays below the economizing threshold (default 50%). Expected: economizer-only below 15.6°C DB (MECH-OAT-1) and mech + integrated economizer in the 15.6–22.2°C band (ECON-3). All temperature thresholds are SI.

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
oa_damper_pct outside-air-damper Command or position 0-1 %, ratio 0 to 1 required
web_oa_t web-outside-air-temp Temperature °C °F, K - optional
web_oa_dp web-outside-air-dewpoint Temperature °C °F, K - optional
web_oa_h web-outside-air-humidity Relative humidity %RH (0-100) none 0 to 100 optional
clg_valve_pct cooling-valve Command or position 0-1 %, ratio 0 to 1 optional
compressor_status compressor-status Status 0/1 bool 0 or 1 optional
- dx-cool-cmd Command or position 0-1 %, ratio 0 to 1 optional (pandas only)

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 10 0 60 min
econ7_damper_min Economizing damper threshold 0.5 0.2 0.9 fraction (0-1)
econ7_db_max Econ-OK dry-bulb max 22.2222 18.3333 26.6667 °C
econ7_db_min Econ-OK dry-bulb floor (freeze guard) 1.66667 -6.66667 10 °C
econ7_dp_max Econ-OK dew point max 15.5556 7.22222 20 °C

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity known divergence: weather source: SQL prefers equipment web_oa_* then as-of weather rows; pandas resolves its own web columns

FC1

Flags duct static too low while the supply fan is near full speed.

Duct static below SP at full fan (GL36 A) · Family ahu · Equipment ahu · Confirm 5 min · function fc1 · SQL entry

Equation: DSP < DSPSP − εDSP AND VFDSPD ≥ 100% − εVFDSPD.

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
duct_static duct-static-pressure Pressure Pa kPa, inH2O, psi, bar -248.84 to 1990.72 required
duct_static_sp duct-static-pressure-sp Pressure Pa kPa, inH2O, psi, bar - required
fan_cmd fan-cmd Command or position 0-1 %, ratio 0 to 1 required

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 5 0 60 min
duct_static_err Legacy duct-static error (sets εDSP) 29.8608 0 124.42 Pa
eps_dsp Duct-static error εDSP 29.8608 0 124.42 Pa
eps_vfd_spd VFD speed error εVFDSPD (GL36 default 5%) 0.13 0 0.5 fraction (0-1)
fan_hi Legacy fan-high threshold (sets εVFDSPD) 0.87 0.5 1 fraction (0-1)
mode_delay_min Mode-change suspension (product default) 10 0 60 min

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match

FC10

MATavg − OATavg > √(εMAT² + εOAT²) in OS#3.

OAT/MAT mismatch + mech cooling (GL36 H) · Family ahu · Equipment ahu · Confirm 10 min · function fc10 · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
mat mixed-air-temp Temperature °C °F, K -28.89 to 43.33 required
oa_t outside-air-temp Temperature °C °F, K -51.11 to 54.44 required
oa_damper_pct outside-air-damper Command or position 0-1 %, ratio 0 to 1 required
clg_valve_pct cooling-valve Command or position 0-1 %, ratio 0 to 1 required

Parameters

Parameter Label Default Min Max SI unit
clg_on_min Cooling-command ON threshold 0.01 0 0.25 fraction (0-1)
confirm_min Fault confirm delay 10 0 60 min
econ_full_open Economizer full-open threshold 0.9 0.5 1 fraction (0-1)
eps_mat MAT sensor error εMAT 0.638889 0 5.55556 Δ°C
eps_oat OAT sensor error εOAT 0.638889 0 5.55556 Δ°C
mix_tol Legacy master sensor tolerance (sets all ε values) 0.638889 0 5.55556 Δ°C
mode_delay_min Mode-change suspension (product default) 10 0 60 min

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match

Imperial display: Δ°C parameters are differences, shown as Δ°F with no +32.

FC11

OATavg + εOAT < SATSP − ΔTSF − εSAT in OS#3.

OAT/MAT mismatch economizer-only (GL36 I) · Family ahu · Equipment ahu · Confirm 10 min · function fc11 · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
oa_t outside-air-temp Temperature °C °F, K -51.11 to 54.44 required
sat_sp discharge-air-temp-sp Temperature °C °F, K - required
oa_damper_pct outside-air-damper Command or position 0-1 %, ratio 0 to 1 required
clg_valve_pct cooling-valve Command or position 0-1 %, ratio 0 to 1 required

Parameters

Parameter Label Default Min Max SI unit
clg_on_min Cooling-command ON threshold 0.01 0 0.25 fraction (0-1)
confirm_min Fault confirm delay 10 0 60 min
delta_supply_fan Supply-fan heat rise ΔTSF 0.305556 0 2.77778 Δ°C
econ_full_open Economizer full-open threshold 0.9 0.5 1 fraction (0-1)
eps_oat OAT sensor error εOAT 0.638889 0 5.55556 Δ°C
eps_sat SAT sensor error εSAT 0.638889 0 5.55556 Δ°C
mix_tol Legacy master sensor tolerance (sets all ε values) 0.638889 0 5.55556 Δ°C
mode_delay_min Mode-change suspension (product default) 10 0 60 min

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match

Imperial display: Δ°C parameters are differences, shown as Δ°F with no +32.

FC12

SATavg − εSAT − ΔTSF ≥ MATavg + εMAT in OS#3/OS#4.

SAT above blend in cooling (GL36 J) · Family ahu · Equipment ahu · Confirm 10 min · function fc12 · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
sat discharge-air-temp Temperature °C °F, K -1.11 to 65.56 required
mat mixed-air-temp Temperature °C °F, K -28.89 to 43.33 required
oa_damper_pct outside-air-damper Command or position 0-1 %, ratio 0 to 1 required
clg_valve_pct cooling-valve Command or position 0-1 %, ratio 0 to 1 required

Parameters

Parameter Label Default Min Max SI unit
clg_on_min Cooling-command ON threshold 0.01 0 0.25 fraction (0-1)
confirm_min Fault confirm delay 10 0 60 min
delta_supply_fan Supply-fan heat rise ΔTSF 0.305556 0 2.77778 Δ°C
econ_full_open Economizer full-open threshold 0.9 0.5 1 fraction (0-1)
econ_min_pos Economizer minimum-position threshold 0.05 0 0.5 fraction (0-1)
eps_mat MAT sensor error εMAT 0.638889 0 5.55556 Δ°C
eps_sat SAT sensor error εSAT 0.638889 0 5.55556 Δ°C
mix_tol Legacy master sensor tolerance (sets all ε values) 0.638889 0 5.55556 Δ°C
mode_delay_min Mode-change suspension (product default) 10 0 60 min
supply_tol Legacy SAT tolerance master (sets εSAT) 0.638889 0 5.55556 Δ°C

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match

Imperial display: Δ°C parameters are differences, shown as Δ°F with no +32.

FC13-SAT-HIGH

SATavg > SATSP + εSAT AND CC ≥ full-cooling threshold in OS#3/OS#4.

SAT above SP at full cooling (GL36 K) · Family ahu · Equipment ahu · Confirm 10 min · function fc13 · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
sat discharge-air-temp Temperature °C °F, K -1.11 to 65.56 required
sat_sp discharge-air-temp-sp Temperature °C °F, K - required
oa_damper_pct outside-air-damper Command or position 0-1 %, ratio 0 to 1 required
clg_valve_pct cooling-valve Command or position 0-1 %, ratio 0 to 1 required

Parameters

Parameter Label Default Min Max SI unit
clg_full_min Full-cooling threshold (GL36 99%) 0.01 0.5 1 fraction (0-1)
confirm_min Fault confirm delay 10 0 60 min
econ_full_open Economizer full-open threshold 0.9 0.5 1 fraction (0-1)
econ_min_pos Economizer minimum-position threshold 0.05 0 0.5 fraction (0-1)
eps_sat SAT sensor error εSAT 0.638889 0 5.55556 Δ°C
mode_delay_min Mode-change suspension (product default) 10 0 60 min
sat_err Legacy SAT error (sets εSAT) 0.555556 0 5.55556 Δ°C

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity known divergence: SQL and pandas gate ‘equipment on’ with different fan/pump proof order and thresholds

Imperial display: Δ°C parameters are differences, shown as Δ°F with no +32.

FC14

Cooling-coil ΔT ≥ √(εCCET² + εCCLT²) + ΔTSF while coil should be inactive.

CHW coil ΔT when inactive (GL36 L) · Family ahu · Equipment ahu · Confirm 10 min · function fc14 · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
cooling_coil_entering_temp cooling-coil-entering-temp Temperature °C °F, K - required
cooling_coil_leaving_temp cooling-coil-leaving-temp Temperature °C °F, K - required
oa_damper_pct outside-air-damper Command or position 0-1 %, ratio 0 to 1 required
clg_valve_pct cooling-valve Command or position 0-1 %, ratio 0 to 1 required

Parameters

Parameter Label Default Min Max SI unit
clg_inactive_max Cooling-command inactive ceiling 0.1 0 0.5 fraction (0-1)
confirm_min Fault confirm delay 10 0 60 min
delta_supply_fan Supply-fan heat rise ΔTSF 0.305556 0 2.77778 Δ°C
econ_min_pos Economizer minimum-position threshold 0.05 0 0.5 fraction (0-1)
eps_ccet Cooling-coil entering sensor error εCCET 0.638889 0 5.55556 Δ°C
eps_cclt Cooling-coil leaving sensor error εCCLT 0.638889 0 5.55556 Δ°C
htg_on_min Heating-command ON threshold 0.01 0 0.25 fraction (0-1)
mix_tol Legacy master sensor tolerance (sets all ε values) 0.638889 0 5.55556 Δ°C
mode_delay_min Mode-change suspension (product default) 10 0 60 min

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity known divergence: SQL and pandas gate ‘equipment on’ with different fan/pump proof order and thresholds

Imperial display: Δ°C parameters are differences, shown as Δ°F with no +32.

FC15

Heating-coil ΔT ≥ √(εHCET² + εHCLT²) + ΔTSF while coil should be inactive.

HW coil ΔT when inactive (GL36 M) · Family ahu · Equipment ahu · Confirm 10 min · function fc15 · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
heating_coil_entering_temp heating-coil-entering-temp Temperature °C °F, K - required
heating_coil_leaving_temp heating-coil-leaving-temp Temperature °C °F, K - required
oa_damper_pct outside-air-damper Command or position 0-1 %, ratio 0 to 1 required
clg_valve_pct cooling-valve Command or position 0-1 %, ratio 0 to 1 required

Parameters

Parameter Label Default Min Max SI unit
clg_inactive_max Cooling-command inactive ceiling 0.1 0 0.5 fraction (0-1)
clg_on_min Cooling-command ON threshold 0.01 0 0.25 fraction (0-1)
confirm_min Fault confirm delay 10 0 60 min
delta_supply_fan Supply-fan heat rise ΔTSF 0.305556 0 2.77778 Δ°C
econ_full_open Economizer full-open threshold 0.9 0.5 1 fraction (0-1)
econ_min_pos Economizer minimum-position threshold 0.05 0 0.5 fraction (0-1)
eps_hcet Heating-coil entering sensor error εHCET 0.638889 0 5.55556 Δ°C
eps_hclt Heating-coil leaving sensor error εHCLT 0.638889 0 5.55556 Δ°C
mix_tol Legacy master sensor tolerance (sets all ε values) 0.638889 0 5.55556 Δ°C
mode_delay_min Mode-change suspension (product default) 10 0 60 min

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match

Imperial display: Δ°C parameters are differences, shown as Δ°F with no +32.

FC2

Flags mixed-air temperature colder than the OAT/RAT mixing envelope allows.

MAT below OAT/RAT envelope (GL36 B) · Family ahu · Equipment ahu · Confirm 10 min · function fc2 · SQL entry

Equation: MATavg + εMAT < min(RATavg − εRAT, OATavg − εOAT).

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
mat mixed-air-temp Temperature °C °F, K -28.89 to 43.33 required
oa_t outside-air-temp Temperature °C °F, K -51.11 to 54.44 required
rat return-air-temp Temperature °C °F, K 4.44 to 37.78 required
fan_cmd fan-cmd Command or position 0-1 %, ratio 0 to 1 required

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 10 0 60 min
eps_mat MAT sensor error εMAT 0.638889 0 5.55556 Δ°C
eps_oat OAT sensor error εOAT 0.638889 0 5.55556 Δ°C
eps_rat RAT sensor error εRAT 0.638889 0 5.55556 Δ°C
fan_on_min Fan-on command threshold 0.01 0 0.25 fraction (0-1)
mix_tol Legacy master sensor tolerance (sets all ε values) 0.638889 0 5.55556 Δ°C
mode_delay_min Mode-change suspension (product default) 10 0 60 min

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match

Imperial display: Δ°C parameters are differences, shown as Δ°F with no +32.

FC3

Flags mixed-air temperature warmer than the OAT/RAT mixing envelope allows.

MAT above OAT/RAT envelope (GL36 C) · Family ahu · Equipment ahu · Confirm 10 min · function fc3 · SQL entry

Equation: MATavg − εMAT > max(RATavg + εRAT, OATavg + εOAT).

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
mat mixed-air-temp Temperature °C °F, K -28.89 to 43.33 required
oa_t outside-air-temp Temperature °C °F, K -51.11 to 54.44 required
rat return-air-temp Temperature °C °F, K 4.44 to 37.78 required
fan_cmd fan-cmd Command or position 0-1 %, ratio 0 to 1 required

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 10 0 60 min
eps_mat MAT sensor error εMAT 0.638889 0 5.55556 Δ°C
eps_oat OAT sensor error εOAT 0.638889 0 5.55556 Δ°C
eps_rat RAT sensor error εRAT 0.638889 0 5.55556 Δ°C
fan_on_min Fan-on command threshold 0.01 0 0.25 fraction (0-1)
mix_tol Legacy master sensor tolerance (sets all ε values) 0.638889 0 5.55556 Δ°C
mode_delay_min Mode-change suspension (product default) 10 0 60 min

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match; differs only on edge data: Same cause as FC8: the series begins with the fan already running (edge DST-week start is 18:00 local); pandas applies its 600 s operational startup holdoff at the first sample, SQL does not (verified by trimming the first 6 h of rows).

Imperial display: Δ°C parameters are differences, shown as Δ°F with no +32.

FC4

ΔOS > ΔOSmax during the prior 60-minute moving window.

PID hunting (operating-state oscillation) · Family ahu · Equipment ahu · Confirm 60 min · function fc4 · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
oa_damper_pct outside-air-damper Command or position 0-1 %, ratio 0 to 1 required
clg_valve_pct cooling-valve Command or position 0-1 %, ratio 0 to 1 required
fan_cmd fan-cmd Command or position 0-1 %, ratio 0 to 1 required

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 60 0 60 min
delta_os_max Max mode changes/hr ΔOSmax (GL36 default 7) 5 1 30 count
mode_delay_min Mode-change suspension (product default) 10 0 60 min

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match

FC5

SATavg + εSAT ≤ MATavg − εMAT + ΔTSF while heating is commanded.

SAT cold when heating commanded (GL36 D) · Family ahu · Equipment ahu · Confirm 10 min · function fc5 · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
sat discharge-air-temp Temperature °C °F, K -1.11 to 65.56 required
mat mixed-air-temp Temperature °C °F, K -28.89 to 43.33 required
fan_cmd fan-cmd Command or position 0-1 %, ratio 0 to 1 required
htg_valve_pct heating-valve Command or position 0-1 %, ratio 0 to 1 required

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 10 0 60 min
delta_supply_fan Supply-fan heat rise ΔTSF 0.305556 0 2.77778 Δ°C
eps_mat MAT sensor error εMAT 0.638889 0 5.55556 Δ°C
eps_sat SAT sensor error εSAT 0.638889 0 5.55556 Δ°C
fan_on_min Fan-on command threshold 0.01 0 0.25 fraction (0-1)
htg_on_min Heating-command ON threshold 0.01 0 0.25 fraction (0-1)
mix_tol Legacy master sensor tolerance (sets all ε values) 0.638889 0 5.55556 Δ°C
mode_delay_min Mode-change suspension (product default) 10 0 60 min

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity known divergence: SQL holds the fan-restart / mode-delay window over rolling rows, pandas GL36 suppresses after a mode change: differs by a few samples at fault edges

Imperial display: Δ°C parameters are differences, shown as Δ°F with no +32.

FC6

RATavg−OATavg ≥ ΔTmin AND estimated OA% − design min OA% > εF.

Estimated OA fraction mismatch · Family ahu · Equipment ahu · Confirm 10 min · function fc6 · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
mat mixed-air-temp Temperature °C °F, K -28.89 to 43.33 required
oa_t outside-air-temp Temperature °C °F, K -51.11 to 54.44 required
rat return-air-temp Temperature °C °F, K 4.44 to 37.78 required
vav_total_flow vav-total-airflow Flow L/s m³/s, m³/h, cfm, gpm - required

Parameters

Parameter Label Default Min Max SI unit
airflow_err Legacy OA-fraction error (sets εF) 0.15 0.05 1 fraction (0-1)
confirm_min Fault confirm delay 10 0 60 min
delta_t_min Minimum |OAT−RAT| ΔTmin 2.77778 0 16.6667 Δ°C
eps_airflow Airflow error εF (GL36 default 30%) 0.15 0.05 1 fraction (0-1)
fan_on_min Fan-on command threshold 0.01 0 0.25 fraction (0-1)
min_flow_design Design minimum outdoor airflow 2359.74 0 94389.4 L/s
mode_delay_min Mode-change suspension (product default) 10 0 60 min
oat_rat_delta_min Legacy OAT/RAT guard (sets ΔTmin) 2.77778 0 16.6667 °C

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity known divergence: SQL and pandas gate ‘equipment on’ with different fan/pump proof order and thresholds

Imperial display: Δ°C parameters are differences, shown as Δ°F with no +32.

FC7

SATavg < SATSP − εSAT AND HC ≥ full-heating threshold.

SAT low with full heating (GL36 E) · Family ahu · Equipment ahu · Confirm 10 min · function fc7 · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
sat discharge-air-temp Temperature °C °F, K -1.11 to 65.56 required
sat_sp discharge-air-temp-sp Temperature °C °F, K - required
fan_cmd fan-cmd Command or position 0-1 %, ratio 0 to 1 required
htg_valve_pct heating-valve Command or position 0-1 %, ratio 0 to 1 required

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 10 0 60 min
eps_sat SAT sensor error εSAT 0.638889 0 5.55556 Δ°C
fan_on_min Fan-on command threshold 0.01 0 0.25 fraction (0-1)
htg_full_min Full-heating threshold (GL36 99%) 0.9 0.5 1 fraction (0-1)
mode_delay_min Mode-change suspension (product default) 10 0 60 min
sat_err Legacy SAT error (sets εSAT) 0.555556 0 5.55556 Δ°C

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity known divergence: SQL and pandas gate ‘equipment on’ with different fan/pump proof order and thresholds

Imperial display: Δ°C parameters are differences, shown as Δ°F with no +32.

FC8

SATavg − ΔTSF − MATavg > √(εSAT² + εMAT²) in OS#2.

SAT/MAT mismatch in economizer (GL36) · Family ahu · Equipment ahu · Confirm 10 min · function fc8 · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
sat discharge-air-temp Temperature °C °F, K -1.11 to 65.56 required
mat mixed-air-temp Temperature °C °F, K -28.89 to 43.33 required
oa_damper_pct outside-air-damper Command or position 0-1 %, ratio 0 to 1 required
clg_valve_pct cooling-valve Command or position 0-1 %, ratio 0 to 1 required

Parameters

Parameter Label Default Min Max SI unit
clg_inactive_max Cooling-command inactive ceiling 0.1 0 0.5 fraction (0-1)
confirm_min Fault confirm delay 10 0 60 min
delta_supply_fan Supply-fan heat rise ΔTSF 0.305556 0 2.77778 Δ°C
econ_min_pos Economizer minimum-position threshold 0.05 0 0.5 fraction (0-1)
eps_mat MAT sensor error εMAT 0.638889 0 5.55556 Δ°C
eps_sat SAT sensor error εSAT 0.638889 0 5.55556 Δ°C
mix_tol Legacy master sensor tolerance (sets all ε values) 0.638889 0 5.55556 Δ°C
mode_delay_min Mode-change suspension (product default) 10 0 60 min
supply_tol Legacy SAT tolerance master (sets εSAT) 0.638889 0 5.55556 Δ°C

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match; differs only on edge data: Series starts with the fan already running (edge DST-week start is 18:00 local): pandas applies its 600 s operational startup holdoff at the first sample, SQL has none, so SQL confirms one 5-minute sample earlier. Verified: trimming the first 6 h of rows makes SQL equal pandas.

Imperial display: Δ°C parameters are differences, shown as Δ°F with no +32.

FC9

OATavg − εOAT > SATSP − ΔTSF + εSAT in OS#2.

OAT too warm for free cooling (GL36 G) · Family ahu · Equipment ahu · Confirm 10 min · function fc9 · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
oa_t outside-air-temp Temperature °C °F, K -51.11 to 54.44 required
sat_sp discharge-air-temp-sp Temperature °C °F, K - required
oa_damper_pct outside-air-damper Command or position 0-1 %, ratio 0 to 1 required
clg_valve_pct cooling-valve Command or position 0-1 %, ratio 0 to 1 required

Parameters

Parameter Label Default Min Max SI unit
clg_inactive_max Cooling-command inactive ceiling 0.1 0 0.5 fraction (0-1)
confirm_min Fault confirm delay 10 0 60 min
delta_supply_fan Supply-fan heat rise ΔTSF 0.305556 0 2.77778 Δ°C
econ_min_pos Economizer minimum-position threshold 0.05 0 0.5 fraction (0-1)
eps_oat OAT sensor error εOAT 0.638889 0 5.55556 Δ°C
eps_sat SAT sensor error εSAT 0.638889 0 5.55556 Δ°C
mix_tol Legacy master sensor tolerance (sets all ε values) 0.638889 0 5.55556 Δ°C
mode_delay_min Mode-change suspension (product default) 10 0 60 min

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match; differs only on edge data: Same cause as FC8: the series begins with the fan already running; pandas holds off 600 s from the first sample, SQL does not (verified by trimming the start).

Imperial display: Δ°C parameters are differences, shown as Δ°F with no +32.

MECH-OAT-1

Flags proven DX or chiller cooling while web dry-bulb is below 15.6 °C.

Mechanical cooling below 15.6 °C web OAT · Family ahu · Equipment ahu, chiller, heatpump · Confirm 10 min · function mech_oat1_compute · SQL entry

Equation: Proven DX/chiller mechanical cooling while web dry-bulb < 15.6 °C. Uses compressor/chiller/pump/amps/power proof — not AHU cooling-valve alone. Below 15.6 °C is outside the free-cool + integrated economizer band.

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
web_oa_t web-outside-air-temp Temperature °C °F, K - optional
compressor_status compressor-status Status 0/1 bool 0 or 1 optional
chiller_status chiller-status Status 0/1 bool 0 or 1 optional
chw_pump_status chw-pump-status Status 0/1 bool 0 or 1 optional
- dx-cool-cmd Command or position 0-1 %, ratio 0 to 1 optional (pandas only)

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 10 0 60 min
mech_oat_max Mech-cool OAT ceiling 15.5556 7.22222 18.3333 °C

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity known divergence: pandas proves equipment/cooling from typed roles (mechanical_proof_mask, equipment_type); SQL ORs chiller status / valve

OA-1

Estimated OA fraction < 15% with adequate OAT/RAT split.

Low OA fraction · Family ahu · Equipment ahu · Confirm 15 min · function oa1 · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
mat mixed-air-temp Temperature °C °F, K -28.89 to 43.33 required
rat return-air-temp Temperature °C °F, K 4.44 to 37.78 required
oa_t outside-air-temp Temperature °C °F, K -51.11 to 54.44 required
fan_status fan-status Status 0/1 bool 0 or 1 required

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 15 0 60 min
min_oa_frac Min OA fraction 0.15 0.05 0.4 fraction (0-1)
oat_rat_guard Min |RAT−OAT| guard 1.22222 0.277778 3.33333 Δ°C

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity known divergence: SQL holds the fan-restart / mode-delay window over rolling rows, pandas GL36 suppresses after a mode change: differs by a few samples at fault edges

Imperial display: Δ°C parameters are differences, shown as Δ°F with no +32.

RESET-1

Flags SAT setpoint that is not tracking the outdoor-air reset curve.

SAT reset not tracking outdoor air · Family ahu · Equipment ahu · Confirm 15 min · function reset1 · SQL entry

Equation: Fan on AND SAT SP − (11.1 + 0.25×(OAT−18.3)) > 1.7 Δ°C.

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
sat_sp discharge-air-temp-sp Temperature °C °F, K - required
oa_t outside-air-temp Temperature °C °F, K -51.11 to 54.44 required
fan_status fan-status Status 0/1 bool 0 or 1 optional
fan_cmd fan-cmd Command or position 0-1 %, ratio 0 to 1 optional

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 15 0 60 min
reset_err Reset error 1.66667 0.277778 5.55556 Δ°C
reset_oat_ref Reset OAT ref 18.3333 10 26.6667 °C
reset_sat_at_ref SAT SP at the reset OAT reference 11.1111 7.22222 18.3333 °C
reset_slope Reset slope 0.25 0.05 1 Δ°C/Δ°C

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match

Imperial display: Δ°C parameters are differences, shown as Δ°F with no +32.

SCHED-1

Flags fan runtime during unoccupied hours from the Overview calendar.

Unoccupied runtime · Family schedule · Equipment ahu · Confirm 30 min · function sched1 · SQL entry

Equation: Fan running while occupancy is unoccupied (Overview calendar → occ_mode). When zone_t is mapped, also require zone inside comfort_low…comfort_high (defaults 21.1–23.9 °C; synced from Overview zone band).

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
occ_mode occupied Text text none - required
fan_status fan-status Status 0/1 bool 0 or 1 required
zone_t zone-air-temp Temperature °C °F, K 4.44 to 37.78 optional

Parameters

Parameter Label Default Min Max SI unit
comfort_high Comfort high 23.8889 12.7778 32.2222 °C
comfort_low Comfort low 21.1111 10 26.6667 °C
confirm_min Fault confirm delay 30 0 60 min

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match

SCHED-247

Flags fans or pumps that stay on for nearly the entire analysis window (24/7 runtime).

Always-on fan or pump runtime · Family schedule · Equipment ahu, vav, chiller, boiler, heatpump · Confirm 60 min · function _sched247 · SQL entry

Equation: Ranked proof (status/current > command) is on for ≥ always_on_pct of the window. Pressure is inferred runtime only and does not trip this rule ID.

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
fan_status fan-status Status 0/1 bool 0 or 1 optional
pump_status pump-status Status 0/1 bool 0 or 1 optional
chw_pump_status chw-pump-status Status 0/1 bool 0 or 1 optional
- hw-pump-status Status 0/1 bool 0 or 1 optional (pandas only)
chiller_status chiller-status Status 0/1 bool 0 or 1 optional
compressor_status compressor-status Status 0/1 bool 0 or 1 optional
tower_fan_cmd tower-fan-cmd Command or position 0-1 %, ratio 0 to 1 optional
tower_fan_cmd tower-fan-cmd Command or position 0-1 %, ratio 0 to 1 optional
fan_cmd fan-cmd Command or position 0-1 %, ratio 0 to 1 optional
chw_pump_cmd chw-pump-cmd Command or position 0-1 %, ratio 0 to 1 optional
- hw-pump-cmd Command or position 0-1 %, ratio 0 to 1 optional (pandas only)
duct_static duct-static-pressure Pressure Pa kPa, inH2O, psi, bar -248.84 to 1990.72 optional
chw_dp chw-diff-pressure Pressure Pa kPa, inH2O, psi, bar -6894.76 to 689476 optional

Parameters

Parameter Label Default Min Max SI unit
always_on_pct Always-on fraction 0.95 0.8 1 fraction (0-1)
confirm_min Fault confirm delay 60 0 60 min
pressure_on_min Pressure-on evidence 49.768 12.442 497.68 Pa

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match

TRIM-1

Duct static high (> 336 Pa) while VAV pressure requests are low.

Duct static trim advisory · Family trim · Equipment ahu · Confirm 30 min · function trim1 · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
duct_static duct-static-pressure Pressure Pa kPa, inH2O, psi, bar -248.84 to 1990.72 required
static_reset_request vav-pressure-request-sum Count count none - required

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 30 0 60 min
duct_hi Duct static high 335.934 124.42 746.52 Pa
request_lo Request sum low 1 0 10 count

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity known divergence: SQL and pandas gate ‘equipment on’ with different fan/pump proof order and thresholds

VLV-1

Flags a closed cooling valve while SAT still looks like valve leakage.

Cooling valve leakage · Family ahu · Equipment ahu · Confirm 15 min · function vlv1 · SQL entry

Equation: Cooling valve ≤ 5% AND (SAT < sat_sp − sat_err OR SAT < MAT − mat_leak_delta). Fan proven on when fan_status/fan_cmd present (operational gate).

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
sat discharge-air-temp Temperature °C °F, K -1.11 to 65.56 required
sat_sp discharge-air-temp-sp Temperature °C °F, K - required
clg_valve_pct cooling-valve Command or position 0-1 %, ratio 0 to 1 required
mat mixed-air-temp Temperature °C °F, K -28.89 to 43.33 optional
fan_status fan-status Status 0/1 bool 0 or 1 optional
fan_cmd fan-cmd Command or position 0-1 %, ratio 0 to 1 optional

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 15 0 60 min
mat_leak_delta SAT vs MAT leak ΔT 1.11111 0.277778 6.66667 Δ°C
sat_err SAT vs SP leak ΔT 1.11111 0.277778 4.44444 Δ°C

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match

Imperial display: Δ°C parameters are differences, shown as Δ°F with no +32.

VAV terminals

VAV boxes and other zone terminals: comfort, airflow, reheat and damper faults.

VAV-1

Flags occupied-band zone temperature violations.

Zone comfort band · Family vav · Equipment vav, zone_other, heatpump, baseboard · Confirm 15 min · function vav1 · SQL entry

Equation: Zone temp outside zone_lo–zone_hi (default 21.1–23.9 °C) during occupied hours when an occupancy column or Overview calendar is set (require_occupied, default on). Unoccupied setback stays on VAV-2.

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
zone_t zone-air-temp Temperature °C °F, K 4.44 to 37.78 required
occ_mode occupied Text text none - optional
occ_mode occupied Text text none - optional

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 15 0 60 min
require_occupied Require occupied 1 0 1 0/1
zone_hi Zone high 23.8889 22.2222 29.4444 °C
zone_lo Zone low 21.1111 12.7778 22.2222 °C

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match; differs only on edge data: Two input-handling differences: (1) NULL zone_t cells: SQL drops NULL rows (WHERE zone_t IS NOT NULL) and holds the previous sample’s state across the null run, pandas scores a NULL as not faulted; (2) planted out-of-range zone_t (80 degC): the pandas quality layer marks it OUT_OF_RANGE and excludes it, SQL scores the value as given.

VAV-2

Flags unoccupied zones that never drop into heating setback.

Night setback miss · Family vav · Equipment vav, zone_other, heatpump, baseboard · Confirm 15 min · function vav2 · SQL entry

Equation: Unoccupied AND zone temp > setback_hi (default 20 °C) — heating setback not taken.

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
zone_t zone-air-temp Temperature °C °F, K 4.44 to 37.78 required
occ_mode occupied Text text none - required
occ_mode occupied Text text none - optional

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 15 0 60 min
setback_hi Setback high 20 12.7778 22.2222 °C

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match

VAV-3

Air flowing AND OAT > 25.6 °C AND reheat valve > 52%.

Excessive reheat during warm weather · Family vav · Equipment vav · Confirm 5 min · function vav3 · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
oa_t outside-air-temp Temperature °C °F, K -51.11 to 54.44 required
reheat_valve_pct reheat-valve Command or position 0-1 %, ratio 0 to 1 required

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 5 0 60 min
flow_on_min Airflow-on min 11.7987 0 94.3894 L/s
reheat_oat Warm OAT 25.5556 18.3333 32.2222 °C
reheat_pct Reheat frac 0.52 0.1 1 fraction (0-1)

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match

VAV-4

Air flowing AND damper > 97.5% sustained across the window.

Damper stuck at full open · Family vav · Equipment vav · Confirm 15 min · function vav4 · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
damper_pct damper Command or position 0-1 %, ratio 0 to 1 required

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 15 0 60 min
flow_on_min Airflow-on min 11.7987 0 94.3894 L/s
full_open_pct Full open frac 0.975 0.8 1 fraction (0-1)
sustain_hours Sustain window 1.5 0.5 6 h

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match

VAV-5

Airflow > ~24 L/s while damper < 10% (implausible flow).

Airflow sensor bias · Family vav · Equipment vav · Confirm 15 min · function vav5 · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
zone_flow zone-airflow Flow L/s m³/s, m³/h, cfm, gpm - required
damper_pct damper Command or position 0-1 %, ratio 0 to 1 required

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 15 0 60 min

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match

VAV-6

Flags reheat while outdoor air is cool enough for free cooling.

Reheat when cooling available · Family vav · Equipment vav · Confirm 15 min · function vav6 · SQL entry

Equation: OAT < 18.3 °C AND reheat valve > 25% (optional cooling-available must be true when mapped).

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
oa_t outside-air-temp Temperature °C °F, K -51.11 to 54.44 required
reheat_valve_pct reheat-valve Command or position 0-1 %, ratio 0 to 1 required
clg_available clg-available Status 0/1 bool 0 or 1 optional

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 15 0 60 min
free_cool_oat Free-cool OAT 18.3333 7.22222 23.8889 °C
reheat_pct Reheat frac 0.25 0.05 1 fraction (0-1)

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity known divergence: SQL holds the fan-restart / mode-delay window over rolling rows, pandas GL36 suppresses after a mode change: differs by a few samples at fault edges

VAV-7

Flow below min SP (when mapped), OR airflow stays flat (low rolling std) at a high mean while air is on (mins too high / box never modulates), OR min_flow_sp itself is excessively high.

Min airflow / fixed high flow · Family vav · Equipment vav · Confirm 15 min · function vav7 · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
zone_flow zone-airflow Flow L/s m³/s, m³/h, cfm, gpm - required

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 15 0 60 min
fixed_flow_max_std Fixed-flow max std 7.0792 0.471947 37.7558 L/s
fixed_flow_min_mean Fixed-flow min mean 94.3894 23.5973 943.894 L/s
flow_on_min Airflow-on min 11.7987 0 94.3894 L/s
high_min_flow_sp High min-flow SP 117.987 23.5973 943.894 L/s

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match; differs only on edge data: Duplicate (equipment, timestamp) rows: SQL scores the rows as delivered, the reference de-duplicates first (the input contract is one row per timestamp). Verified: de-duplicating the rows before SQL makes SQL equal pandas.

VAV-AHU-LEAVE

Flags VAV discharge far from the parent AHU SAT when topology feeds are known.

VAV leave vs parent AHU SAT (fedBy) · Family vav · Equipment vav · Confirm 15 min · function vav_vs_ahu_leave · SQL entry

Equation: Air flowing AND VAV discharge − parent AHU SAT > band. Needs package topology (vav_to_ahu) so ahu_sat is enriched from the fedBy AHU; otherwise SKIPPED_MISSING_ROLES. Flags broken reheat, bad sensors, or rogue zones.

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
vav_discharge_t vav-discharge-air-temp Temperature °C °F, K - required
ahu_sat ahu-discharge-air-temp Temperature °C °F, K - required

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 15 0 60 min
delta Leave Δ vs AHU SAT 4.44444 1.11111 13.8889 °C
flow_on_min Airflow-on min 11.7987 0 94.3894 L/s

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity known divergence: SQL holds the fan-restart / mode-delay window over rolling rows, pandas GL36 suppresses after a mode change: differs by a few samples at fault edges

VAV-REHEAT

Flags reheat commanded open with airflow but almost no discharge temperature rise.

Reheat valve stuck / no temp rise · Family vav · Equipment vav · Confirm 15 min · function vav_reheat_stuck · SQL entry

Equation: Air flowing AND reheat valve > 30% AND box discharge temp rises < 1.7 °C above duct inlet (air from AHU) — stuck or failed reheat valve/coil.

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
reheat_valve_pct reheat-valve Command or position 0-1 %, ratio 0 to 1 required
vav_discharge_t vav-discharge-air-temp Temperature °C °F, K - required
vav_inlet_t vav-inlet-air-temp Temperature °C °F, K - required

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 15 0 60 min
flow_on_min Airflow-on min 11.7987 0 94.3894 L/s
min_rise Min temp rise 1.66667 0.277778 8.33333 °C
reheat_cmd Reheat open frac 0.3 0.1 1 fraction (0-1)

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match; differs only on stress-only data: pandas operational gate holds a fan-running rule for startup_delay_seconds=600 after the fan proves on, SQL has no startup holdoff: a fault already present at fan start is confirmed one 5-minute sample earlier in SQL per fan start (0.1667 h over the two fan starts of the 8-equipment 7-day run); with the gate off pandas equals SQL

Fan coil and zone equipment

Fan coils, unit ventilators and other zone_other equipment.

FCU-CLG-COIL

Fan on, cooling valve ≥80%, and heating shut, but discharge air is not below zone temperature.

FCU cooling coil under-delivery · Family fcu · Equipment zone_other, general, ahu · Confirm 15 min · function fcu_clg_coil · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
sat discharge-air-temp Temperature °C °F, K -1.11 to 65.56 required
zone_t zone-air-temp Temperature °C °F, K 4.44 to 37.78 required
clg_valve_pct cooling-valve Command or position 0-1 %, ratio 0 to 1 required
htg_valve_pct heating-valve Command or position 0-1 %, ratio 0 to 1 required
fan_status fan-status Status 0/1 bool 0 or 1 optional
fan_cmd fan-cmd Command or position 0-1 %, ratio 0 to 1 optional

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 15 0 60 min
valve_open Valve open threshold 0.8 0.5 1 fraction (0-1)

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match

FCU-CO2-DAMPER

Fan on and valid CO₂ exceeds 1000 ppm while damper command remains below 10%.

FCU high CO2 with low outdoor-air command · Family fcu · Equipment zone_other, general, ahu · Confirm 15 min · function fcu_co2_damper · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
zone_co2 zone-co2 Concentration ppm none - required
damper_cmd damper-cmd Command or position 0-1 %, ratio 0 to 1 required
fan_status fan-status Status 0/1 bool 0 or 1 optional
fan_cmd fan-cmd Command or position 0-1 %, ratio 0 to 1 optional

Parameters

Parameter Label Default Min Max SI unit
co2_high_ppm High CO₂ 1000 600 2000 ppm
confirm_min Fault confirm delay 15 0 60 min
damper_low Low damper command 0.1 0 0.5 fraction (0-1)

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match

FCU-DAMPER-POS

Fan on and damper command ≥15%, but feedback is more than 15 percentage points below command.

FCU damper command/position mismatch · Family fcu · Equipment zone_other, general, ahu · Confirm 15 min · function fcu_damper_pos · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
damper_cmd damper-cmd Command or position 0-1 %, ratio 0 to 1 required
damper_pct damper Command or position 0-1 %, ratio 0 to 1 required
fan_status fan-status Status 0/1 bool 0 or 1 optional
fan_cmd fan-cmd Command or position 0-1 %, ratio 0 to 1 optional

Parameters

Parameter Label Default Min Max SI unit
command_min Minimum damper command 0.15 0 1 fraction (0-1)
confirm_min Fault confirm delay 15 0 60 min
position_error Position error 0.15 0.05 0.5 fraction (0-1)

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match

FCU-DEADBAND

Pass-through cooling setpoint minus heating setpoint is less than 1°C.

FCU heat/cool deadband collapse · Family fcu · Equipment zone_other, general, ahu · Confirm 0 min · function fcu_deadband · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
cooling_sp cooling-sp Temperature °C °F, K - required
heating_sp heating-sp Temperature °C °F, K - required

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 0 0 60 min
deadband Minimum deadband 1 0 5 °C

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match

FCU-HTG-COIL

Fan on and heating valve ≥80%, but discharge air is less than 3 Δ°C above zone temperature.

FCU heating coil under-delivery · Family fcu · Equipment zone_other, general, ahu · Confirm 15 min · function fcu_htg_coil · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
sat discharge-air-temp Temperature °C °F, K -1.11 to 65.56 required
zone_t zone-air-temp Temperature °C °F, K 4.44 to 37.78 required
htg_valve_pct heating-valve Command or position 0-1 %, ratio 0 to 1 required
fan_status fan-status Status 0/1 bool 0 or 1 optional
fan_cmd fan-cmd Command or position 0-1 %, ratio 0 to 1 optional

Parameters

Parameter Label Default Min Max SI unit
coil_delta Minimum heating rise 3 0.555556 11.1111 °C
confirm_min Fault confirm delay 15 0 60 min
valve_open Valve open threshold 0.8 0.5 1 fraction (0-1)

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity known divergence: SQL and pandas gate ‘equipment on’ with different fan/pump proof order and thresholds

FCU-MODE-CYCLE

At least four heating/cooling valve mode changes occur in the analysis window.

FCU heating/cooling mode cycling · Family fcu · Equipment zone_other, general, ahu · Confirm 0 min · function fcu_mode_cycle · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
htg_valve_pct heating-valve Command or position 0-1 %, ratio 0 to 1 required
clg_valve_pct cooling-valve Command or position 0-1 %, ratio 0 to 1 required

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 0 0 60 min
mode_changes Mode changes 4 1 20 count
mode_valve_min Active valve threshold 0.1 0 0.5 fraction (0-1)

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity known divergence: SQL holds the fan-restart / mode-delay window over rolling rows, pandas GL36 suppresses after a mode change: differs by a few samples at fault edges

FCU-SENSOR-NULL

Own zone setpoint is present while zone temperature is null for at least 90% of the window.

Missing FCU zone sensor · Family fcu · Equipment zone_other, general, ahu · Confirm 0 min · function fcu_sensor_null · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
zone_air_temp_sp zone-air-temp-sp Temperature °C °F, K - required
zone_t zone-air-temp Temperature °C °F, K 4.44 to 37.78 optional

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 0 0 60 min
null_fraction Null fraction 0.9 0.5 1 fraction (0-1)

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match

FCU-VALVE-PASS-CLG

Fan on and both valves shut, but zone temperature exceeds discharge air by more than 3 Δ°C.

FCU cooling valve passing · Family fcu · Equipment zone_other, general, ahu · Confirm 15 min · function fcu_valve_pass_clg · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
sat discharge-air-temp Temperature °C °F, K -1.11 to 65.56 required
zone_t zone-air-temp Temperature °C °F, K 4.44 to 37.78 required
htg_valve_pct heating-valve Command or position 0-1 %, ratio 0 to 1 required
clg_valve_pct cooling-valve Command or position 0-1 %, ratio 0 to 1 required
fan_status fan-status Status 0/1 bool 0 or 1 optional
fan_cmd fan-cmd Command or position 0-1 %, ratio 0 to 1 optional

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 15 0 60 min
pass_delta Passing temperature drop 3 0.555556 11.1111 °C

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match; differs only on edge data: Planted out-of-range zone_t (80 degC): the pandas quality layer marks those samples OUT_OF_RANGE and excludes them, SQL computes zone_t - sat on the value as given and faults.

FCU-VALVE-PASS-HTG

Fan on and both valves shut, but discharge air exceeds zone temperature by more than 3 Δ°C.

FCU heating valve passing · Family fcu · Equipment zone_other, general, ahu · Confirm 15 min · function fcu_valve_pass_htg · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
sat discharge-air-temp Temperature °C °F, K -1.11 to 65.56 required
zone_t zone-air-temp Temperature °C °F, K 4.44 to 37.78 required
htg_valve_pct heating-valve Command or position 0-1 %, ratio 0 to 1 required
clg_valve_pct cooling-valve Command or position 0-1 %, ratio 0 to 1 required
fan_status fan-status Status 0/1 bool 0 or 1 optional
fan_cmd fan-cmd Command or position 0-1 %, ratio 0 to 1 optional

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 15 0 60 min
pass_delta Passing temperature rise 3 0.555556 11.1111 °C

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match

Chillers and plants

Chillers, chilled water and condenser water plants, cooling towers.

CHW-1

Pump on AND (CHWR − CHWS) < 2.2 Δ°C.

Low chilled-water ΔT · Family plant · Equipment chiller · Confirm 15 min · function chw1 · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
chw_supply_t chilled-water-supply-temp Temperature °C °F, K -1.11 to 26.67 required
chw_return_t chilled-water-return-temp Temperature °C °F, K -1.11 to 32.22 required

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 15 0 60 min
min_dt Min ΔT 2.22222 0.555556 6.66667 °C

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity known divergence: SQL holds the fan-restart / mode-delay window over rolling rows, pandas GL36 suppresses after a mode change: differs by a few samples at fault edges

CHW-2

Pump ≥ 87% AND CHW DP < DP SP − 2.2.

DP below SP at max pump speed · Family plant · Equipment chiller · Confirm 5 min · function chw2 · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
chw_dp chw-diff-pressure Pressure Pa kPa, inH2O, psi, bar -6894.76 to 689476 required
chw_dp_sp chw-diff-pressure-sp Pressure Pa kPa, inH2O, psi, bar - required
chw_pump_cmd chw-pump-cmd Command or position 0-1 %, ratio 0 to 1 required

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 5 0 60 min
dp_margin DP margin 15168.5 3447.38 41368.5 Pa
pump_hi Pump high-speed threshold 0.87 0.5 1 fraction (0-1)

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match

CHW-3

Pump on AND CHWS − CHWS SP > 1.2 Δ°C.

Plant supply temp outside deadband · Family plant · Equipment chiller · Confirm 5 min · function chw3 · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
chw_supply_t chilled-water-supply-temp Temperature °C °F, K -1.11 to 26.67 required
chw_supply_sp chilled-water-supply-temp-sp Temperature °C °F, K - required
chw_pump_cmd chw-pump-cmd Command or position 0-1 %, ratio 0 to 1 required

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 5 0 60 min
sp_band SP band 1.22222 0.277778 3.33333 °C

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match

CHW-4

Pump ≥ 87% AND CHW flow > 69.4 L/s.

Flow high at max pump · Family plant · Equipment chiller · Confirm 5 min · function chw4 · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
chw_flow chw-flow Flow L/s m³/s, m³/h, cfm, gpm -1 to 1500 required
chw_pump_cmd chw-pump-cmd Command or position 0-1 %, ratio 0 to 1 required

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 5 0 60 min
flow_hi Flow high 69.3992 12.618 189.271 L/s
pump_hi Pump high-speed threshold 0.87 0.5 1 fraction (0-1)

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match

CHW-NOLOAD-1

Flags a chiller running while mapped zones or AHU SAT show the building is satisfied.

Chiller running with no building load · Family plant · Equipment chiller · Confirm 30 min · function chw_noload1_compute · SQL entry

Equation: Chiller/plant proven running while building load is satisfied: all mapped zones inside comfort band OR all mapped AHU SAT within sat_band of setpoint. Default confirm 30 min.

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
chiller_status chiller-status Status 0/1 bool 0 or 1 optional
chw_pump_status chw-pump-status Status 0/1 bool 0 or 1 optional
compressor_status compressor-status Status 0/1 bool 0 or 1 optional
building_zone_load_satisfied building-zone-load-satisfied Status 0/1 bool 0 or 1 optional
building_ahu_load_satisfied building-ahu-load-satisfied Status 0/1 bool 0 or 1 optional

Parameters

Parameter Label Default Min Max SI unit
comfort_high Comfort high 23.8889 20 29.4444 °C
comfort_low Comfort low 21.1111 15.5556 25.5556 °C
confirm_min Fault confirm delay 30 0 60 min
sat_band AHU SAT≈SP band 1.11111 0.277778 3.33333 Δ°C

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours
status - assessment status text

Parity known divergence: pandas proves equipment/cooling from typed roles (mechanical_proof_mask, equipment_type); SQL ORs chiller status / valve

Imperial display: Δ°C parameters are differences, shown as Δ°F with no +32.

CW-APR-1

Flags high CW–wet-bulb approach at full tower fan — sensor mismatch or tower degradation.

High CW approach at full tower fan · Family plant · Equipment chiller, cooling_tower · Confirm 15 min · function cw_apr · SQL entry

Equation: At full tower fan speed, leaving CW − web wet-bulb exceeds approach_max (default 4.44°C, typically 2.8–5.6°C). Suspect OA→wet-bulb / CW sensor mismatch or cooling-tower performance degradation.

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
cw_supply_t condenser-water-supply-temp Temperature °C °F, K 0 to 50 required
tower_fan_cmd tower-fan-cmd Command or position 0-1 %, ratio 0 to 1 optional
tower_fan_cmd tower-fan-cmd Command or position 0-1 %, ratio 0 to 1 optional
fan_cmd fan-cmd Command or position 0-1 %, ratio 0 to 1 optional
web_wb_t web-outside-air-wetbulb Temperature °C °F, K - optional

Parameters

Parameter Label Default Min Max SI unit
approach_max Max approach at full fan 4.44444 2.77778 8.33333 °C
confirm_min Fault confirm delay 15 0 60 min
tower_fan_hi Tower fan full-speed threshold 0.95 0.8 1 fraction (0-1)

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match

CW-FAN-1

Flags full-speed tower fans while CW is well above theoretical WB+approach — excess fan energy.

Excess tower fan energy vs wet-bulb limit · Family plant · Equipment chiller, cooling_tower · Confirm 15 min · function cw_fan_excess · SQL entry

Equation: Tower fans at full speed while leaving CW is well above web wet-bulb + design approach (approach + excess_beyond). Fans are chasing a CW temp that is theoretically hard/impossible — excess fan energy.

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
cw_supply_t condenser-water-supply-temp Temperature °C °F, K 0 to 50 required
tower_fan_cmd tower-fan-cmd Command or position 0-1 %, ratio 0 to 1 optional
tower_fan_cmd tower-fan-cmd Command or position 0-1 %, ratio 0 to 1 optional
fan_cmd fan-cmd Command or position 0-1 %, ratio 0 to 1 optional
web_wb_t web-outside-air-wetbulb Temperature °C °F, K - optional

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 15 0 60 min
cw_approach Design approach 3.88889 1.66667 8.33333 °C
excess_beyond_approach Excess beyond approach 2.77778 1.11111 11.1111 °C
tower_fan_hi Tower fan full-speed threshold 0.95 0.8 1 fraction (0-1)

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match

CW-OPT-1

Flags condenser water colder than wet-bulb + approach — tower over-cooling / not optimized.

Condenser water not optimized vs wet-bulb · Family plant · Equipment chiller, cooling_tower · Confirm 15 min · function cw_opt · SQL entry

Equation: CW supply significantly colder than web wet-bulb + design approach (Stull WB) — tower over-cooling / not optimized.

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
cw_supply_t condenser-water-supply-temp Temperature °C °F, K 0 to 50 required

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 15 0 60 min
cw_approach Design approach 3.88889 1.66667 8.33333 °C
cw_slack Slack below target 1.11111 0.277778 3.33333 °C

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match

TRIM-4

CHW supply < 7.2 °C while the reset request sum is at or below request_lo.

CHW plant reset advisory · Family trim · Equipment chiller · Confirm 30 min · function trim4 · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
chw_supply_t chilled-water-supply-temp Temperature °C °F, K -1.11 to 26.67 required
chw_reset_request_sum chilled-water-reset-request-sum Count count none - required

Parameters

Parameter Label Default Min Max SI unit
chw_lo CHWS low 7.22222 1.66667 12.7778 °C
confirm_min Fault confirm delay 30 0 60 min
request_lo Request sum low 1 0 10 count

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match; differs only on stress-only data: role names, threshold and missing input are aligned (#1588: contract roles hot-water- / chilled-water-reset-request-sum, fault at request sum <= request_lo, an absent request sum is not assessed on either side). Residual: pandas applies its hydronic proof gate with the 600 s startup holdoff, SQL has no startup holdoff, so SQL confirms one 5-minute sample earlier per pump start; matches on the 2 x 3 and 4 x 3 datasets, differs on the 8 x 7 run

Boilers

Boiler plants.

TRIM-3

HW supply > 71.1 °C while the reset request sum is at or below request_lo.

HWST trim advisory · Family trim · Equipment boiler · Confirm 30 min · function trim3 · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
hw_supply_t hot-water-supply-temp Temperature °C °F, K 4.44 to 104.44 required
hw_reset_request_sum hot-water-reset-request-sum Count count none - required

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 30 0 60 min
hwst_hi HWST high 71.1111 48.8889 93.3333 °C
request_lo Request sum low 1 0 10 count

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match; differs only on stress-only data: role names, threshold and missing input are aligned (#1588: contract roles hot-water- / chilled-water-reset-request-sum, fault at request sum <= request_lo, an absent request sum is not assessed on either side). Residual: pandas applies its hydronic proof gate with the 600 s startup holdoff, SQL has no startup holdoff, so SQL confirms one 5-minute sample earlier per pump start; matches on the 2 x 3 and 4 x 3 datasets, differs on the 8 x 7 run

Heat pumps

Heat pumps.

HP-1

Fan on, zone < 20.6 °C, discharge SAT < 29.4 °C.

Discharge cold when heating · Family heatpump · Equipment heatpump · Confirm 10 min · function hp1 · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
sat discharge-air-temp Temperature °C °F, K -1.11 to 65.56 required
zone_t zone-air-temp Temperature °C °F, K 4.44 to 37.78 required
fan_cmd fan-cmd Command or position 0-1 %, ratio 0 to 1 required

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 10 0 60 min
min_sat Min heating SAT 29.4444 21.1111 43.3333 °C
zone_cold Zone cold 20.5556 15.5556 22.2222 °C

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity known divergence: SQL and pandas gate ‘equipment on’ with different fan/pump proof order and thresholds

Meters and utilities

Energy and demand meters, utility bill analytics.

UTIL-INTERVAL

BAS 15m vs utility interval (MAE threshold)

SQL only. No pandas twin: an aggregate or utility analytic. See the SQL entry and parity.

UTIL-MONTHLY

BAS monthly kWh vs utility monthly bills (% deviation)

SQL only. No pandas twin: an aggregate or utility analytic. See the SQL entry and parity.

Sensor validation and control loops

Range, flatline, spike, stale and rate checks on every modeled sensor; PID hunting.

PID-HUNT-1

Flags control outputs that oscillate enough to suggest loop hunting.

Suspected control-output hunting · Family control · Equipment ahu, vav, chiller, boiler, heatpump · Confirm 0 min · function _pid_hunt_1 · SQL entry

Equation: Rolling 1h total variation of any 0–100% control output (dampers, valves, fan speeds, heat/cool cmds) with span ≥20%, TV ≥500 %·pts, ≥2.5 equivalent cycles, ≥4 reversals — suspected loop hunting (not proof of bad PID alone).

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
loop_enabled loop-enabled Status 0/1 bool 0 or 1 optional

Parameters

Parameter Label Default Min Max SI unit
change_deadband_pct Ignore changes below 1 0 10 % out
confirm_min Fault confirm delay 0 0 60 min
minimum_coverage_pct Minimum data coverage 80 25 100 %
minimum_equivalent_cycles Min equivalent cycles 2.5 0.5 20 cyc/h
minimum_reversals Min direction reversals 4 1 40 count
minimum_span_pct Minimum observed span 20 5 100 % out
total_variation_fault_pct Total travel threshold 500 50 2000 %/h

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity match

SV-FLATLINE

Flags a sensor that stays stuck within a tiny band for too long.

Sensor flatline (stuck) · Family sensor · Equipment ahu, vav, chiller, boiler, weather, zone_other, heatpump · Confirm 5 min · function _sweep_flatline · SQL entry

Equation: Sensor value unchanged (Δ ≤ tolerance) across the flatline window — stuck / frozen sensor.

Inputs

| Role (SQL column) | Haystack role | Quantity | SI unit | Also accepted (converted at ingest) | Expected range | Needed | |—|—|—|—|—|—:|—|

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 5 0 60 min
flatline_hours Flatline window 1 0.25 8 h
flatline_tol Flatline tolerance 0.055556 0.011111 0.555556 °C
max_silence_hours Max sensor silence 0.5 0.25 12 h
require_operational_gate Require operational gate 1 0 1 0/1

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
series_id - assessed sensor series
sensor_role - Haystack role of the sensor
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)

Parity match

SV-RANGE

Flags any modeled sensor reading outside its physical hard range.

Sensor out of hard range · Family sensor · Equipment ahu, vav, chiller, boiler, weather, zone_other, heatpump · Confirm 5 min · function _sweep_range · SQL entry

Equation: Any modeled sensor reads outside its physical hard range (e.g. OAT −51–54 °C, SAT −1–66 °C, CHWS −1–27 °C).

Inputs

| Role (SQL column) | Haystack role | Quantity | SI unit | Also accepted (converted at ingest) | Expected range | Needed | |—|—|—|—|—|—:|—|

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 5 0 60 min
max_silence_hours Max sensor silence 0.5 0.25 12 h
range_scale_humidity Humidity range scale 1 0.5 2 × (scale)
range_scale_pressure Pressure range scale 1 0.5 2 × (scale)
range_scale_temperature Temp range scale 1 0.5 2 × (scale)

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
series_id - assessed sensor series
sensor_role - Haystack role of the sensor
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)

Parity match

SV-RATE

Flags implausible sustained sensor rates of change using location- and state-aware thresholds.

Context-aware sensor rate of change · Family sensor · Equipment ahu, vav, chiller, boiler, weather, zone_other, heatpump · Confirm 10 min · function _sv_rate_compute · SQL entry

Equation: Implausible sustained rate-of-change for mapped sensors. Thresholds depend on quantity, location, and operating state (steady vs startup/shutdown transient). Engineering screening defaults — tune per site. Alias: SV-SLEW. Distinct from SV-SPIKE (one-sample jump), SV-RANGE, SV-FLATLINE, and PID-HUNT-1.

Inputs

| Role (SQL column) | Haystack role | Quantity | SI unit | Also accepted (converted at ingest) | Expected range | Needed | |—|—|—|—|—|—:|—|

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 10 0 60 min
design_flow Design flow (flow profiles) 0 0 47194.7 L/s
max_gap_hours Max sample gap 2 0.25 6 h
persistence_min Fault persistence 10 5 60 min
sensor_span Sensor span (flow/pressure) 0 0 100000 eng
transition_window_min Transition window 20 5 60 min

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
series_id - assessed sensor series
sensor_role - Haystack role of the sensor
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)

Parity known divergence: documented in sql/fdd/KNOWN_DIFFERENCES.md: pandas uses profile/median/persistence logic, SQL two consecutive exceedances

SV-SPIKE

Flags an implausible sample-to-sample jump for the sensor type.

Sensor rate-of-change spike · Family sensor · Equipment ahu, vav, chiller, boiler, weather, zone_other, heatpump · Confirm 5 min · function _sweep_spike · SQL entry

Equation: Sample-to-sample jump exceeds the physical spike limit for the sensor type.

Inputs

| Role (SQL column) | Haystack role | Quantity | SI unit | Also accepted (converted at ingest) | Expected range | Needed | |—|—|—|—|—|—:|—|

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 5 0 60 min
max_silence_hours Max sensor silence 0.5 0.25 12 h
minimum_active_coverage_pct Minimum active coverage 5 0 100 %
require_operational_gate Require operational gate 1 0 1 0/1
spike_scale Spike limit scale (global) 1 0.25 3 × (scale)
spike_scale_humidity Humidity spike scale 1 0.25 3 × (scale)
spike_scale_pressure Pressure spike scale 1 0.25 3 × (scale)
spike_scale_temperature Temp spike scale 1 0.25 3 × (scale)

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
series_id - assessed sensor series
sensor_role - Haystack role of the sensor
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)

Parity match

SV-STALE

Flags when all modeled sensors stop updating — likely a dead data feed.

Stale data (no fresh samples) · Family sensor · Equipment ahu, vav, chiller, boiler, weather, zone_other, heatpump · Confirm 5 min · function _sweep_stale · SQL entry

Equation: All modeled sensors unchanged over the stale window — data feed likely dropped.

Inputs

| Role (SQL column) | Haystack role | Quantity | SI unit | Also accepted (converted at ingest) | Expected range | Needed | |—|—|—|—|—|—:|—|

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 5 0 60 min
max_silence_hours Max sensor silence 0.5 0.25 12 h
stale_hours Stale window 2 0.25 12 h
stale_tol Stale tolerance 0.027778 0 0.555556 Δ°C

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
series_id - assessed sensor series
sensor_role - Haystack role of the sensor
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)

Parity match

Imperial display: Δ°C parameters are differences, shown as Δ°F with no +32.

Weather

Web weather versus the site’s own outside air sensor.

OAT-METEO

Flags large disagreement between BAS outdoor-air temp and web weather OAT.

BAS outdoor-air sensor vs Open-Meteo · Family ahu · Equipment ahu · Confirm 15 min · function oat_vs_meteo · SQL entry

Equation: BAS OAT sensor differs from Open-Meteo dry bulb by more than 2.8 Δ°C.

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
oa_t outside-air-temp Temperature °C °F, K -51.11 to 54.44 required
web_oa_t web-outside-air-temp Temperature °C °F, K - required

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 15 0 60 min
oat_err Max OAT disagreement 2.77778 1.11111 11.1111 °C
web_asof_margin_seconds Web as-of margin 300 0 1800 s
web_cadence_seconds Web weather cadence 1200 300 7200 s

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours

Parity known divergence: weather source: SQL prefers equipment web_oa_* then as-of weather rows; pandas resolves its own web columns

WX-1

OAT sample-to-sample jump > 8.9 Δ°C.

OA temperature spike · Family weather · Equipment weather · Confirm 5 min · function wx1 · SQL entry

Inputs

Role (SQL column) Haystack role Quantity SI unit Also accepted (converted at ingest) Expected range Needed
oa_t outside-air-temp Temperature °C °F, K -51.11 to 54.44 required

Parameters

Parameter Label Default Min Max SI unit
confirm_min Fault confirm delay 5 0 60 min
spike_limit Spike limit 8.88889 2.22222 22.2222 °C

Outputs (the same as the SQL twin)

Output Unit Meaning
equipment_id - equipment the row describes
fault_hours h confirmed fault time
covered_hours h time the rule could assess (known inputs, gate open)
fault_pct % fault_hours as a share of covered_hours
Parity match; differs only on edge data: Gap handling: SQL flags oa_t - previous sample above the fixed limit whatever the time between samples, pandas scales the limit by the sample gap (limit x dt/poll), so a real change across a >2 h gap is a spike in SQL only.

General

Rules that apply to any equipment: runtime, comfort and elapsed-time analytics.

AVG-ZONE-TEMP

Average zone temperature per equipment

SQL only. No pandas twin: an aggregate or utility analytic. See the SQL entry and parity.

FAN-RUNTIME-HOURS

Fan running hours where fan_cmd > 5% (normalized 0-1)

SQL only. No pandas twin: an aggregate or utility analytic. See the SQL entry and parity.

FAULT-ELAPSED-HOURS

Comfort fault sample count → hours

SQL only. No pandas twin: an aggregate or utility analytic. See the SQL entry and parity.

ZONE-COMFORT-PCT

Percent of samples in comfort band

SQL only. No pandas twin: an aggregate or utility analytic. See the SQL entry and parity.