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
DataFramewith a UTCDatetimeIndexand 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)returnsstatus(PASS,FAULT,SKIPPED_MISSING_ROLES, …),fault_hours(h), and theraw_faultandconfirmed_faultboolean masks. Setdf.attrs["equipment_id"]anddf.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
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.