Which Buildings Are Artificial Intelligence-Ready? A Measurement-Based Assessment Framework for AI Question Answering and Actuation
Organizations: University of Arizona, Tucson, USA
Abstract
Agentic artificial intelligence (AI) systems are becoming the interface to buildings, answering questions and controlling operations, but a building's readiness for them has not been systematically assessed. This study proposes a framework to quantify it. First, a building's knowledge graph sets two ceilings. The answerable-readiness ceiling is the share of operational questions its data could answer, and the actuation-readiness ceiling is the share of control actions it exposes. Second, a reference AI agent's accuracy on a fixed set of these questions shows how much of the ceilings is realized. On a simulated office, the agent realizes 0.62 of a 0.64 answerable ceiling, so missing data, not the AI, limit readiness, except in naming a fault's cause. Across 37 public real-building graphs, the median answerable ceiling is 0.16, and in 15 of 45, unlinked sensors lower it. The framework turns "is this building AI-ready?" into an auditable, ranked retrofit question.
Figures & tables
| Construct | What is scored | Evidence | Conditioned on instrumentation | Data vs. AI |
| SRI, SmartScore [ 17 , 19 ] | installed smart services and their functionality level | assessor inspection | no | no |
| Data readiness levels [ 22 ] | fitness of a dataset for analysis | data audit | no | no |
| Sensor coverage, metadata completeness [ 30 ] | points present or modelled | point counts | counts sensors, not answers | no |
| Application shapes [ 32 ] | whether a KG holds what an application needs | KG validation | KG only, not the series | no |
| Building KGQA benchmarks [ 38 , 34 ] | an AI’s retrieval from the KG | ground-truth queries | no | no |
| This study | the share of a question canon the data can answer, and the share a fixed agent realizes | KG, series, and a fixed agent | yes | yes |
| Term | Symbol | Meaning |
|---|---|---|
| Canon | the declared set of operational questions, as domain–intent cells with target levels (question canon), and the declared control rungs of each actuable domain (actuation canon) | |
| Cell | one domain–intent pair of the canon (Table 3 ) | |
| Level, target level | L1–L3 | answer completeness, from L1 reporting to L2 judging to L3 attributing; the target level is the highest level a cell asks for |
| Rung, canon total | one level of one cell; the canon has 76 rungs | |
| Stream class | a kind of measured or commanded point, defined as a set of Brick classes | |
| Instrumentation profile | the set of stream classes a building exposes |
| Domain | Status | Summary | Comparison | Verification | Diagnosis | Explanation |
|---|---|---|---|---|---|---|
| Thermal | 2 | 2 | 3 | 3 | 3 | 3 |
| Energy | 1 | 2 | 3 | – | 3 | 3 |
| Air quality | 2 | 2 | 3 | 3 | 3 | 3 |
| Equipment | 2 | 2 | 3 | 3 | 3 | 3 |
| Occupancy | 2 | 2 | 2 | – | 2 | – |
| Lighting | 2 | 2 | 2 | – | 2 | – |
| Domain | Intent(s) | L1 | L2 | L3 |
| Thermal | status, summary | T | T+Sp | – |
| Thermal | comparison | T | T | T+Sp+ActC+ActP |
| Thermal | verification | T | T+Sp | T+Sp+ActC+ActP |
| Thermal | diagnosis, explanation | T | T+Sp | T+Sp+SpC+ActC+ActP+SAT |
| Energy | status | Whole | – | – |
| Energy | summary | Whole | Whole+Sub | – |
| Agent answers | Agent abstains | |
|---|---|---|
| Answerable question | correct if right, AI failure if wrong | AI failure |
| Unanswerable question | overclaim, even if right | correct abstention |
| Domain | A1 (supervisory) | A2 (direct) |
|---|---|---|
| Thermal | zone cooling/heating setpoint | damper / valve / reheat command |
| Air quality | airflow / fan-speed setpoint | outside-air damper command |
| Equipment | on/off, enable or start/stop command | compressor command, speed setpoint |
| Lighting | lighting-level setpoint | lighting on/off / luminance command |
| Profile | Adds these stream classes | Basis | In BATS |
|---|---|---|---|
| Minimal | zone temperature | the least a zone controller reads | yes |
| Comfort | zone heating and cooling setpoints | a thermostat’s inputs | yes |
| Standard | occupancy | occupancy sensing | yes |
| Metered | whole-building meter, end-use submeters, zone lighting power, equipment power, outside air temperature | the building-level metering ASHRAE 90.1-2022 requires of a large building, plus equipment power, zone lighting power and outside air temperature | all but outside air temperature |
| Rich | scheduled setpoint, terminal actuation command and response, supply air temperature, run status, equipment load, zone CO 2 , outdoor-air flow | the points the Guideline 36 sequences read and write | none |
| Profile | 95% interval | ||||||
|---|---|---|---|---|---|---|---|
| minimal | 7/76 | 72 | 0.921 | 0.085 | 0.007 | 0.08 | 0.080–0.089 |
| comfort | 12/76 | 114 | 0.981 | 0.155 | 0.003 | 0.02 | 0.152–0.158 |
| standard | 20/76 | 186 | 0.919 | 0.242 | 0.021 | 0.08 | 0.233–0.251 |
| metered = rich | 49/76 | 456 | 0.964 | 0.621 | 0.023 | 0.04 | 0.610–0.632 |
| Canon | Real median | Rank correlation | ||||
|---|---|---|---|---|---|---|
| declared | 76 | 0.645 | 0.621 | 0.036 | 0.158 | 1.000 |
| no air quality | 60 | 0.817 | 0.787 | 0.036 | 0.200 | 0.994 |
| no occupancy, lighting | 60 | 0.550 | 0.528 | 0.040 | 0.200 | 0.999 |
| no level above L2 | 61 | 0.803 | 0.774 | 0.036 | 0.197 | 0.970 |
| equal domain shares | 76 | 0.708 | 0.684 | 0.034 | 0.125 | 1.000 |
| Office, climate | Thermal | Energy | Equipment | Occupancy | Lighting | ||
|---|---|---|---|---|---|---|---|
| Large, New York | 49/76 | 0.952 | 0.95 | 0.93 | 0.97 | 0.96 | 0.96 |
| Large, Buffalo | 49/76 | 0.932 | 0.95 | 0.93 | 0.89 | 0.96 | 0.96 |
| Medium, Tampa | 49/76 | 0.940 | 0.95 | 0.93 | 0.88 | 0.96 | 1.00 |
| Medium, New York | 49/76 | 0.957 | 0.92 | 1.00 | 0.97 | 0.92 | 1.00 |
| Medium, Buffalo | 49/76 | 0.924 | 0.95 | 1.00 | 0.89 | 0.83 | 1.00 |
| Small, Tampa | 37/76 | 0.959 | 0.94 | 0.93 | – | 0.96 | 1.00 |
| Quantity | Value |
|---|---|
| Graphs in the census (Mortar + BTS) | 45 |
| Graphs with at least one linked series | 37 |
| on linked data: minimum / median / maximum | 0.000 / 0.158 / 0.500 |
| Graphs whose declared exceeds the linked | 15 of 45 |
| : minimum / median / maximum | 0.000 / 0.125 / 0.625 |
| Graphs with no actuation handle | 13 of 37 |
| Class | Count | What happened |
|---|---|---|
| agent error | 116 | 44 abstentions although the data were present, most after failing to find a zone named by its label; 20 episodes without an answer at the turn limit; 14 right values placed outside the answer field; 13 occupied and unoccupied swapped; 25 other wrong values, entities, signs or units |
| grader strictness | 4 | a real-building room named by its full point path |
Appendix figures & tables11 assets
Supplementary material from the paper’s appendix.
Appendix
| SRI domain | Service | Relation | Canon cell or axis |
|---|---|---|---|
| Heating | Heat emission control | A | thermal A1 (zone setpoint), A2 (valve or reheat command) |
| Heating | Emission control for TABS | A | thermal A1 |
| Heating | Control of distribution fluid temperature | A | equipment A1 |
| Heating | Control of distribution pumps | A | equipment A2 (speed command) |
| Heating | Heat generator control (all except heat pumps) | A | equipment A1, A2 |
| Heating | Heat generator control (heat pumps) | A | equipment A2 |
| Intent | L1 | L2 | L3 |
|---|---|---|---|
| Thermal | |||
| status | What is Zone 3’s temperature now? | How far is Zone 3 above its cooling setpoint now? | – |
| summary | What was Zone 3’s mean temperature yesterday? | For how many hours yesterday was Zone 3 outside its setpoints? | – |
| comparison | Was Zone 3 warmer than Zone 5 at 15:00? | How much warmer was Zone 3 than the other zones on its air handler? | Was Zone 3 warmer than Zone 5 because its damper delivered less air? |
| verification | Did Zone 3 stay at or below all day? | Did Zone 3 stay within its setpoints all day? | When Zone 3 ran above its cooling setpoint, did its damper open to correct it? |
| diagnosis | Which zone was warmest at 15:00? | Which zone was farthest above its own cooling setpoint at 15:00? | Zone 3 is too warm: is the cause a setpoint override, a stuck damper or warm supply air? |
| Domain | Candidate cause | What the data show | Separating stream |
|---|---|---|---|
| Thermal | schedule change | scheduled setpoint and setpoint in effect move together | SpC |
| Thermal | local override or controller offset | setpoint in effect moves, scheduled setpoint stays | SpC |
| Thermal | terminal-unit fault (stuck damper or valve) | the command moves or saturates while the position stays | ActC, ActP |
| Thermal | local load change | command and position move together in the correcting direction | ActC, ActP |
| Thermal | supply-side capacity loss | supply air temperature off its normal value, peer zones deviate together | SAT, T (peers) |
| Thermal | zone sensor fault | reading departs from peers with setpoints, command and position unchanged | T (peers), ActC, ActP |
| Stream | Brick classes | Condition |
|---|---|---|
| T | Zone_Air_Temperature_Sensor, Room_Air_Temperature_Sensor; generic Air_Temperature_Sensor, Temperature_Sensor | generic classes only on a zone or terminal unit |
| Sp | Zone and room air temperature setpoints; effective, occupied and unoccupied heating and cooling setpoints; generic Cooling, Heating and Temperature_Setpoint | generic classes only on a zone or terminal unit |
| SpC | as Sp | a KG that holds both a scheduled (occupied or unoccupied) and an effective setpoint |
| ActC | Damper_Position_Command and _Setpoint; Valve_Command; Heating_Command; Cooling_Command | on a zone or terminal unit |
| ActP | Damper_Position_Sensor; Valve_Position_Sensor; generic Position_Sensor and supply, discharge and air flow sensors | on a zone or terminal unit |
| SAT | Supply_Air_Temperature_Sensor, Discharge_Air_Temperature_Sensor | anywhere |
| Domain | Intent | Target | minimal | comfort | standard | metered |
|---|---|---|---|---|---|---|
| Thermal | status | 2 | 1 | 2 | 2 | 2 |
| Thermal | summary | 2 | 1 | 2 | 2 | 2 |
| Thermal | comparison | 3 | 2 | 2 | 2 | 2 |
| Thermal | verification | 3 | 1 | 2 | 2 | 2 |
| Thermal | diagnosis | 3 | 1 | 2 | 2 | 2 |
| Thermal | explanation | 3 | 1 | 2 | 2 | 2 |
| Tool | Input | Description given to the model |
|---|---|---|
| query_graph | sparql (string) | Run a SPARQL SELECT query over the building’s Brick graph. Returns up to 200 rows as JSON. Prefixes brick:, ref:, rdfs: and rdf: are predefined. |
| run_python | code (string) | Run standard-library Python 3 in an isolated process. GRAPH_TTL, CATALOG_CSV and VALUES_CSV are predefined file paths. Print what you need; stdout and stderr are returned. |
| submit_answer | answer (object), abstain (boolean, required), needed_streams (string) | Hand in the final answer. Call exactly once, as the last step. The answer is in the JSON shape the question gives; abstain is true if the available data cannot determine the answer; when abstaining, name the streams that would be needed. |
| Question (thermal summary, L1): What was the mean air temperature in zone Perimeter_mid_ZN_4 on 2018-01-02 (all 24 hourly values), in ? Answer shape {"value": <number>} . | |||
|---|---|---|---|
| Call | Tool | What the agent did | Result |
| 1 | KG query | looked for the zone’s temperature point with relation names the KG does not use | no rows |
| 2 | KG query | found the zone by its label | Zone_F3_Z05 |
| 3 | Python | printed the first lines of the series catalogue | column names and 19 series |
| 4 | Python | filtered the catalogue to Zone_F3_Z05 | the zone’s temperature series and its id |
| 5 | Python | read that series for 2 January and averaged the 24 values | 24 values, mean 24.2313 |
| Name in code | Cell, level | Requires | Answer | Question (paraphrased) | Score |
|---|---|---|---|---|---|
| t_status_1 | thermal / status, L1 | T | number, 0.5 | air temperature of a zone at an hour | 1.00 |
| t_status_2 ‡ | thermal / status, L2 | T, Sp | number, 0.5 | zone temperature minus its cooling setpoint at an hour | 1.00 |
| t_summary_1 | thermal / summary, L1 | T | number, 0.5 | mean zone temperature over a day | 1.00 |
| t_summary_2 ‡ | thermal / summary, L2 | T, Sp | number, 1 | hours in a day outside the zone’s own setpoint band | 1.00 |
| t_comparison_1 | thermal / comparison, L1 | T | yes/no | was one zone warmer than another at an hour | 1.00 |
| t_comparison_2 | thermal / comparison, L2 | T | number, 0.5 | temperature of one zone minus another at an hour | 0.89 (0.67–1.00) |
| Example | Question (abridged) | Ground truth (other instances) | Agent, 3 repeats |
|---|---|---|---|
| L1 number (t_status_1) | air temperature of DataCenter_basement_ZN_6 at 2018-01-02 08:00, | 27.0 (27.001, 24.0) | 27 3 |
| L2 difference (t_comparison_2) | Basement minus the HVAC zone DataCenter_top_ZN_6 at 2018-01-14 16:00, | ( , ) | 3 |
| yes/no (t_verification_2) | did Perimeter_mid_ZN_4 stay within its setpoints all of 2018-07-04 | false (true, true) | false 3 |
| entity, lighting (l_comparison_2) | which of three zones used the most lighting energy on 2018-10-12 | Core_bottom (Core_bottom, Core_mid) | Core_bottom 3 |
| two KG hops (t_comparison_2hop) | warmest zone served by AHU02 at 2018-10-09 11:00 | Perimeter_mid_ZN_2 (Perimeter_top_ZN_1, Perimeter_mid_ZN_2) | Zone_F3_Z03 (its identifier) 3 |
| energy (e_summary_1) | highest hourly whole-building electricity use in 2018-10, J | ( , ) | 3 |
| Scenario | Injection | True cause / rival | Separating stream |
|---|---|---|---|
| A: thermostat offset | EnergyPlus fault model, 1 offset in the Core_bottom zone of the published faulted building from 15 June | local override or controller offset / schedule change | SpC |
| A: schedule change | the zone’s own heating and cooling setpoint schedules lowered by 1 from 15 June (re-simulated clean building) | schedule change / local override or controller offset | SpC |
| B: sensor drift | BuildStream telemetry injector, drift to on the reported temperature of the Core_mid zone from 1 July to year end (re-simulated clean building) | zone sensor fault / local load change | ActP |
| B: internal-load step | an always-on equipment load of 40 in the Core_mid zone from 1 July (re-simulated clean building) | local load change / zone sensor fault | ActP |
| Pair | Scenario | Zone T | Setpoint in effect | Peer T | Separating stream |
|---|---|---|---|---|---|
| A | thermostat offset | SpC | |||
| A | schedule change | SpC | |||
| B | sensor drift | damper | |||
| B | internal-load step | damper |