RCx plots out of the box (by HVAC system type)
UI: RCx Plots (/rcx) — Plotly presets. Overview is tables + health matrices only (no Plotly on Overview); motor / economizer / BAS figures live here as additive presets.
Sources of truth: services/central/src/analytics/rcx_presets.rs (RCX_PRESETS) · frontend/web/src/nav/rcxCatalog.ts (REQUIRED_RCX_PRESET_IDS, RCX_FAMILY_ORDER) · overview-analytics loaders in frontend/web/src/api/rcxOverviewPresets.ts.
Do not drop any REQUIRED_RCX_PRESET_IDS id. Heat pump / Weather family pickers may show empty placeholders until presets exist for that site.
API: GET /api/analytics/rcx/presets · POST /api/analytics/rcx/preset.
Example screenshots (GH Pages)
Operator exports from the product UI — illustrative only. Empty series still mean missing roles, not a broken plot engine.
RCx Plots
| Family | Example |
|---|---|
| Zones / VAV — comfort rank | ![]() |
| Zones / VAV — zone temps | ![]() |
| Zones — worst zones companion | ![]() |
| AHU — SAT vs web OAT | ![]() |
| AHU — duct static box | ![]() |
| AHU — motor weekly | ![]() |
| AHU — economizer delta | ![]() |
| AHU — economizer MAT residual | ![]() |
| AHU — economizer temps + OA damper | ![]() |
| Boiler / HW — HWS vs OAT | ![]() |
| Chiller — CHWS vs OAT | ![]() |
| Chiller — CHW temps | ![]() |
| Mech cooling OAT bins | ![]() |
| Weather — BAS vs web OAT | ![]() |
FDD Plots
| Rule | Example |
|---|---|
| FC1 — duct static | ![]() |
| ECON-4 — low OA fraction | ![]() |
Family → presets (equipment kinds)
Kinds are the preset’s eq_kinds tokens (package equipType / equipment_type). AHU / RTU / CHW / CT name canonical kinds. They are not equipment_id prefixes. A missing or unrecognized stamp is unclassified and the plot matches nothing. Do not infer kind from equipment_id (#1043, #1045, #1046, #1047). Selection is exact equipment_id equality after the stamp, so RTU_01 does not select RTU_010. Each chart also requires its mapped role column to be present for the selected equipment. Empty series when roles are missing — not a silent invent.
Family Zones also keeps unstamped equipment when the plot role (zone-air-temp or zone-airflow) is mapped. The package path for that family is Haystack multi-tag: equip plus fanCoilUnit or zone (or vav) plus the point roles. Empty series when the stamp or role is missing — not a silent invent.
Zones / VAV (zone terminals)
Same family and the same plot cards for any equipment stamped vav, fcu / zone_other, heat pump, or baseboard, and for unstamped equipment whose mapped point role is zone-air-temp (FCU, heat pump, zone_other, and VAV). A non-zone stamp such as ahu stays out. Membership is the stamp plus those roles, never an equipment-id LIKE.
| Preset id | Chart | What you see |
|---|---|---|
zone_comfort_rank |
ranking | % of schedule-gated samples inside the comfort band |
zone_temps |
timeseries | Space temps |
vav_flows |
timeseries | Zone airflow |
vav_health_matrix |
vav_health | Broken / comfort / rogue donut + worst bars |
AHU / air (AHU, RTU, MAU)
Stamp ahu / rtu / mau (canonical kind ahu). Opaque ids such as AC_1 are included when that stamp is set. A name that merely starts with RTU is not.
| Preset id | Chart | What you see |
|---|---|---|
ahu_dats |
timeseries | DAT / SAT |
ahu_mats |
timeseries | MAT |
ahu_rats |
timeseries | RAT |
ahu_dampers |
timeseries | OA damper % |
ahu_cooling_valves |
timeseries | Cooling valve % |
ahu_heating_valves |
timeseries | Heating valve % |
fan_speeds |
timeseries | Fan speed / cmd |
duct_static_box |
box | Duct static (fan-on) |
duct_static_ts |
timeseries | Duct static + setpoint |
ahu_sat_reset_scatter |
scatter vs OAT | SAT vs web dry-bulb |
ahu_motor_weekly |
overview analytics | Weekly supply-fan / motor hours |
economizer_delta |
overview analytics | Free-cooling delta scatter (fan-on) |
economizer_mat_resid |
overview analytics | MAT residual vs ideal mixing |
economizer_temps_overlay |
overview analytics | Free-cooling temps + OA damper |
Frozen required AHU ids include the timeseries/box/scatter set above (not every economizer/motor additive id is in the frozen 18 — additives must still stay listed in catalog loaders).
Boiler / HW (BOILER)
| Preset id | Chart | What you see |
|---|---|---|
hw_reset_scatter |
scatter vs OAT | HWS vs web dry-bulb |
boiler_motor_weekly |
overview analytics | Weekly HW pump motor hours |
Chiller / CHW / tower (CHILLER, CHW, TOWER, CT)
| Preset id | Chart | What you see |
|---|---|---|
chw_reset_scatter |
scatter vs OAT | CHWS vs web dry-bulb |
cw_reset_scatter |
scatter vs wet-bulb | CW leave temp vs wet-bulb (+ dry-bulb ref) |
chw_temps_ts |
timeseries | CHW supply / return / ΔT |
cw_temps_ts |
timeseries | CW supply / return / ΔT |
chiller_motor_weekly |
overview analytics | Weekly plant motor hours |
mech_cooling_oat_bins |
overview analytics | Mech cooling hours by OAT bin (CHILLER / AHU / HP) |
Metering (METER, plus plant kinds for fuel context)
| Preset id | Chart | What you see |
|---|---|---|
meter_elec_cdd |
metering | Electric kWh/month vs CDD |
meter_gas_hdd |
metering | Gas/month vs HDD |
Weather
| Preset id | Chart | What you see |
|---|---|---|
bas_vs_web_oat |
overview analytics | BAS vs web outdoor-air temperature (WEATHER / AHU) |
Heat pump
Family picker placeholder in the SPA. Dedicated HP RCx presets are not a separate catalog block yet — HP may appear on shared presets (e.g. mech_cooling_oat_bins). Overview still has a Heat-pump health matrix (rules), which is FDD — not RCx Plotly.
Zone Other / MQTT generic zone
No dedicated RCx preset family. Covered on Overview via Generic zone monitoring health matrix (zone_other), not RCx Plots.
Related (not RCx Plots)
| Surface | Role |
|---|---|
| Overview | Health matrices per family (AHU temp/pressure/econ, chiller, tower, HP, PID, sensors, zone-other) |
FDD Plots (/reports) |
Per-equipment FDD/fault-oriented Plotly |
Inspect (/inspect) |
CSV / historian column overlay timeseries |
Honesty
Presets with missing roles return empty figures / warnings — never zero-fill. Site without that HVAC type simply has no series for those eq_kinds.















