Response Format
BuEM returns a GeoJSON FeatureCollection with thermal-load results appended to each feature.
Top-Level Response
{
"type": "FeatureCollection",
"processed_at": "2026-03-26T10:30:00Z",
"processing_elapsed_s": 2.45,
"features": [/* ... */]
}
Thermal Load Profile
Each processed feature receives a thermal_load_profile inside
properties.buem:
Field |
Units |
Description |
|---|---|---|
|
kWh |
Annual heating demand |
|
kW |
Peak heating power |
|
kWh |
Annual cooling demand (absolute value) |
|
kW |
Peak cooling power (absolute value) |
|
kWh |
Annual building electricity (excl. HVAC) |
|
kW |
Peak electricity demand |
|
— |
Number of hourly data points (8760) |
|
s |
Processing time for this building |
|
— |
Download path (present when |
Internally the solver returns positive \(Q_{\text{HC}}\) for heating and negative for cooling. The API converts cooling to absolute values for consistency.
Timeseries File
When include_timeseries=true, a JSON file is written to disk and its path
is returned in timeseries_file. Download it via the /api/files/
endpoint:
curl "http://localhost:5000/api/files/buem_ts_abc123.json" -o ts.json
Structure:
{
"index": ["2018-01-01T00:00:00Z", "..."],
"heat": [2.1, 2.3, "..."],
"cool": [-0.5, -0.8, "..."],
"electricity": [0.8, 0.9, "..."]
}
Feature-Level Errors
If a building fails validation or execution, the feature still appears in the
response with an error field instead of thermal_load_profile:
{
"type": "Feature",
"id": "B002",
"properties": {
"buem": {
"error": "components.Walls.U must be positive"
}
}
}