This is real fault-injection data: LBNL's FLEXLAB air-handling unit and ORNL's instrumented rooftop unit, with faults physically imposed and ground truth recorded, published open-access (CC-BY 4.0). The demo takes each day blind: residual rules flag the anomalous readings, then the diagnosis walks the airflow path and the refrigeration circuit upstream and downstream to isolate the failing component and to say why the alternatives are ruled out. Only after the engine commits do you reveal the lab's label and score it. Runs live in your browser, link below.
The costliest HVAC faults are the quiet ones. A heating valve that leaks gets cancelled by the cooling coil, so comfort holds and nobody complains, while the plant pays twice for every degree. A fouled condenser shows up as a power bill, not an alarm. Across a S$4M green-technology programme and a 50-plus-facility smart FM estate, the pattern I kept meeting was the same: the sensors already see the fault, but the BMS only alarms on setpoints, so the evidence sits unread until the energy review or the breakdown, whichever comes first. Fault detection and diagnostics is the discipline of reading that evidence continuously, and the research community has published real labelled data precisely so that anyone claiming to do it can be checked.
The engine's baselines are computed live from the two fault-free days (the fan's heat contribution, the compressor's normal head pressure and power). Fixed engineering thresholds, declared before any faulty day is examined, turn residuals into symptoms. Then the isolation logic walks the system graph: upstream, does anything feeding this component explain the reading? Downstream, do the components after it corroborate? Only a component whose upstream is clean and whose downstream agrees gets named, and the verdict always carries its "why not" list. Rules also know their own limits: the damper rule declares itself unidentifiable when outdoor and return air are at the same temperature, and abstains rather than guesses.
On the rooftop unit's faulted day (the lab physically blocked half the condenser airflow), head pressure runs roughly 40 percent above the fault-free baseline and compressor power around 30 percent up. The discriminator is what didn't move: suction pressure holds its normal band, so the low side, the evaporator and the airflow across it are fine. High head, high power, clean suction: the heat cannot leave the condenser. The engine names the condenser, explains why it is not refrigerant undercharge (that would pull suction down) and not a failing compressor (failing valves lower head, this one is building more), and then, only then, the reveal shows the lab's label: condenser fouling. The same discipline catches the cooling valve that cools with its command at zero, and reports the two fault-free days as exactly that.
| Blind day | Engine's verdict | Lab's ground truth |
|---|---|---|
| AHU · 22 Sep 2017 | cooling-coil valve stuck open | match |
| AHU · 12 Sep 2017 | heating-coil valve leaking through | match |
| RTU · 29 Aug 2017 | condenser fouling / blocked heat rejection | match |
| AHU + RTU fault-free days | no fault to report | match |
| AHU · 19 Sep 2017 | no detectable fault in this window | masked fault · abstention correct |
Where this stands, honestly. The ask was a chiller plant; the truth is that no real, labelled, public chiller-plant fault dataset exists. LBNL's chiller set is simulation-only and ASHRAE's RP-1043 sits behind a paywall, so rather than dress simulation up as field data, the demo uses the two systems with real physical fault injection: the AHU carries the airflow-path story end to end, and the RTU's refrigeration circuit is the same vapour-compression cycle a chiller runs, so the condenser diagnosis transfers directly. The extract is six downsampled days, and the sixth deserves its own sentence: every damper-fault day in the source dataset turned out to be masked, either by the economizer legitimately commanding the damper open or by mixed-air sensor stratification at low airflow, with the command-vs-physics divergence inside the fault-free noise floor. The day was kept anyway, presented as what it is. A demo that quietly picked only flattering data would be exactly the kind of AI theatre this portfolio argues against; the screening table ships in the repo's provenance file.
Scale is where learning earns a seat. Six days on two units need no machine learning, and using none keeps every verdict explainable in a dispute. Across a thousand assets, learned models earn their place ranking anomalies, modelling weather-dependent baselines and proposing which rule to check first. They sit in front of this rule layer, never instead of it, because the work order that shuts down a tenant's cooling gets issued on evidence a person can re-derive.
The rules tab is the whole diagnostic brain: each rule's formula, threshold and live-computed baseline, plus the isolation logic in plain language. Where a rule cannot run, it says so on screen; the fault-free verdict explicitly reports how many samples were identifiable. Provenance is complete: dataset, DOI-backed citation, license, and every transformation from the published archive to the page.
R1 head pressure 71/82 comp-on samples · median +44% vs baseline 316.8 psia R2 compressor power 52/82 comp-on samples · median +31% vs baseline R3 suction pressure 82/82 within normal band ← the discriminator DX high side cannot reject heat; low side healthy → CONDENSER why not: undercharge pulls suction low (it isn't) · failing compressor lowers head (it's rising) reveal: lab label "Condenser fouling (50% airflow reduction)" · MATCH
I have delivered smart-building programmes where "AI-enabled FDD" was a slide long before it was a system, and the difference between the two is everything on this page: real data with ground truth, thresholds declared before the test, verdicts that name a component and survive the reveal, and the honesty to exclude a day the method cannot fairly detect and say why. Sustainability reporting ultimately inherits this discipline too, because the energy a stuck valve wastes is a Scope 2 number someone will assure one day. Meter-up evidence, rules that show their working, and a system that knows what it cannot see: that is what I mean when I say assurance-grade.
Pick a blind day, read the rule verdicts and the dependency walk, then reveal the lab's label and score the engine. Check the rules tab to see every formula and baseline, and the data tab for exactly where the data comes from and what it does not prove.