Workbook Overview
Your workbook has three sheets you'll work in, plus reference sheets that help you along the way.
Sheets you fill out
| Sheet | What it's for |
|---|---|
| entities | List every piece of equipment and space in your building |
| relations | Define how equipment is connected (what contains what, what feeds what) |
| points | Assign your BAS/IoT data points to the equipment they belong to |
Reference sheets (do not edit)
| Sheet | What it contains |
|---|---|
_entity_types |
Valid equipment/space type names for the entities sheet |
_point_types |
Valid data point type names for the points sheet |
_relationship_types |
Valid relationship types for the relations sheet |
_metadata |
Building and org identifiers (pre-filled, do not change) |
rules |
Color-coding legend and validation rules |
Color coding
The workbook highlights cells automatically to flag problems:
| Color | Meaning | What to do |
|---|---|---|
| π₯ Red | Bad Input / Invalid | Fix the data β the row has errors |
| π¨ Yellow | Warning | Review β may need relationships added or a duplicate removed |
How to use this guide
Work through each step in order:
- Step 1 β List your equipment (entities sheet)
- Step 2 β Define relationships (relations sheet)
- Step 3 β Assign data points (points sheet)
- Tips β gotchas, conventions, and rules of thumb
The relations and points sheets reference entity names, so the entities sheet must be filled out first.
Step 1 β List your equipment (entities sheet)
Each row is one piece of equipment in your building. You fill in columns A and B only β columns C through G are calculated automatically.
Note: Floors, Spaces, and Rooms should not be created via workbook. Instead, reference the existing Place in the relations tab when required
| Column | What to enter | Required? |
|---|---|---|
| A β name | A unique name for the equipment (e.g., AHU-01, Lewis Hall.AHU-1-CLG, BLR1) |
Yes |
| B β type | The equipment type from the _entity_types list (e.g., Air_Handling_Unit, Cooling_Coil, Boiler) |
Yes |
| C β hasPart_qty | (auto) Count of "hasPart" relations from this entity | β |
| D β feeds_qty | (auto) Count of "feeds" relations from this entity | β |
| E β hasLocation_qty | (auto) Count of "hasLocation" relations from this entity | β |
| F β controls_qty | (auto) Count of "controls" relations from this entity | β |
| G β hasPoint_qty | (auto) Count of points assigned to this entity | β |
If you need to remove a row, delete the entire row (right-click the row number β Delete Row). Don't just clear or delete the visible cells, or the hidden metadata will be left behind and trigger validation errors.
If you sort this sheet, make sure your sort selection covers every column β including the hidden ones β so the metadata stays attached to the right row.
Rules
- Names must be unique β no two entities can share the same name.
-
Type must come from the
_entity_typeslist β use the dropdown or copy a value from that sheet. Do not use a point type here (e.g.,Temperature_Sensoris a point type, not an entity type). - Every entity should have at least one relationship or point β if columns C through G are all zero, the row highlights yellow as a warning.
Naming conventions from completed examples
- Use a building or system prefix to keep names clear:
ABC-CHWP-2,AHU-01. - Name sub-components by appending to the parent:
AHU-01-CoolingCoil,AHU-01-SupplyFan,AHU-01-OAD. - Keep names consistent β once you pick a convention, use it throughout.
Common entity types
| Type | Use for |
|---|---|
Air_Handling_Unit |
AHUs |
Cooling_Coil |
Cooling coils within an AHU or terminal unit |
Heating_Coil |
Heating coils / reheat coils |
Supply_Fan / Supply_Fan_Array
|
Supply fans |
Exhaust_Fan |
Exhaust fans |
Filter |
Air filters |
Boiler |
Boilers |
Chiller |
Chillers |
Chilled_Water_Pump |
CHW pumps |
Damper / Outside_Damper / Return_Damper / Economizer_Damper / Exhaust_Damper
|
Dampers |
Fume_Hood |
Fume hoods |
Exhaust_Air_Valve |
Exhaust air valves |
Electrical_Meter |
Electrical meters |
Networked_Device |
Controllers, gateways |
Terminal_Unit / Variable_Air_Volume_Box
|
Terminal units / VAV boxes |
Refer to the
_entity_typessheet for the full list of 2,000+ valid types.
Step 2 β Define relationships (relations sheet)
Each row defines one connection between two entities from your entities sheet. This is how you describe how the equipment you listed in Step 1 relates to each other β what contains what, what feeds what, etc.
If you need to remove a row, delete the entire row (right-click the row number β Delete Row). Don't just clear or delete the visible cells, or the hidden metadata will be left behind and trigger validation errors.
If you sort this sheet, make sure your sort selection covers every column β including the hidden ones β so the metadata stays attached to the right row.
| Column | What to enter | Required? |
|---|---|---|
| A β source_lookup_id | The entity's Mapped ID (use this OR column B, not both), use for existing Entity or Place | One of A or B |
| B β source | The source entity name β must match a name in the entities sheet column A | One of A or B |
| C β relation_type | The relationship type: hasPart, feeds, hasLocation, hasPoint, or controls
|
Yes |
| D β target | The target entity name β must match a name in the entities sheet column A | One of D or E |
| E β target_lookup_id | The target entity's system ID (use this OR column D, not both), use for existing Entity or Place | One of D or E |
Rules
- Source: Use column B (name) for entities you created. Use column A (lookup_id) only for entities that already exist in the system. Never fill both.
- Target: Same rule β use column D (name) or column E (lookup_id), not both.
- relation_type must be one of the four valid types (see below).
- No duplicate rows β if all five columns match an existing row exactly, it highlights yellow.
Referencing existing Entities or Places
When adding relations that involve Floors, Spaces, or Rooms, these Places should first be created outside of the workbook workflow to ensure the Floor Level or Space Code is attached. These Places can then be referenced by using the Mapped ID in the source_lookup_id or target_lookup_id columns
Relationship types explained
| Type | Meaning | Example |
|---|---|---|
hasPart |
The source physically contains or is composed of the target | AHU-01 hasPart AHU-01-SupplyFan |
feeds |
The source provides a resource (air, water, power) to the target | AHU-01 feeds VAV-101 |
hasLocation |
The source is located within the target space (using target_lookup_id) | AHU-01 hasLocation SPCSAa53DSfs3FG2 |
controls |
The source controls the target | Controller-1 controls AHU-01 |
hasPoint |
The source Entity (created in workbook or via source_lookup_id) has a target point (defined by target_lookup_id) |
AHU-01 has Point PNTAS2a3dfgDFa34vtgG2N or THGdsfSa49a28UsGhn3B hasPoint PNTAS2a3dfgDFa34vtgG2N
|
Typical patterns
AHU with components
| source | relation_type | target |
|---|---|---|
AHU-01 |
hasPart |
AHU-01-SupplyFan |
Terminal unit feeding a zone
| source | relation_type | target |
|---|---|---|
VAV-101 |
feeds |
Room-101 HVAC Zone |
Pump located in a mechanical room
| source | relation_type | target_lookup_id |
|---|---|---|
HWP-1 |
hasLocation |
SPC24904SDF2aASjklSFfs |
Point belonging to previously created Thing
| source_lookup_id | relation_type | target_lookup_id |
|---|---|---|
THGdsfSa49a28UsGhn3B |
hasPoint |
PNT104bsS85dsAJaKh5G |
VAV with location of a Floor
| source | relation_type | target_lookup_id |
|---|---|---|
VAV-101 |
hasLocation |
FLRAGH5632HThfdGSsFD16 |
Field controller controls a VAV
| source | relation_type | target |
|---|---|---|
VMA-101 |
controls |
VAV-101 |
Step 3 β Assign data points (points sheet)
Each row represents one data point from your BAS or IoT system. Many points may be pre-populated from a live data import β your job is to fill in or correct the isPointOf (column B) and type (column C) columns with the entities you've created.
| Column | What to enter | Required? |
|---|---|---|
| A β id | System-generated point ID (pre-filled, do not change) | β |
| B β isPointOf | The entity name this point belongs to β must match a name in the entities sheet column A | Yes* |
| C β type | The point type from the _point_types list (e.g., Zone_Air_Temperature_Sensor, Fan_Command) |
Yes* |
| D β name | The point's original BAS name (pre-filled from the source system) | β |
| E β description | Human-readable description of the point | Optional |
| F β exactType | System-level type detail (usually pre-filled) | β |
| G β unit | Engineering unit (e.g., Degree Fahrenheit, Cubic Foot per Minute, Percent) | Optional |
| H β mappingKey | Source system reference URI (pre-filled, do not change) | β |
Unassigned and unclassified points are skipped. Points with blank isPointOf and type won't be included in the import. If you don't know where a point belongs, you can leave it blank and come back to it later.
Rules
- isPointOf must match an entity name β if the value doesn't exist in the entities sheet column A, the cell highlights red. To assign a point to a previously existing entity, use the relations tab.
-
type must come from the
_point_typeslist β if the value isn't in the valid list, the cell highlights red. - Use the point's BAS name (column D) and description (column E) to determine the correct type and which entity it belongs to.
How to assign points
- Look at the name column (D) β this is the original BAS point name (e.g.,
NAE38/N2 Trunk 1.NC44_HDW VMA-12.LWTU1-10 COMMONSP). - Use your knowledge of the building systems to determine which equipment this point belongs to.
- Enter that equipment's name in the isPointOf column (B) β it must exactly match a name from the entities sheet.
- Determine the point type from the name/description and enter it in column (C).
Bulk-assigning points
When you have hundreds or thousands of points, filling in isPointOf one row at a time is impractical. Use the point metadata columns (name, device_instance, ip_address, etc.) to identify groups of points that belong to the same entity, then assign them all at once.
Common point types
| Type | Use for |
|---|---|
Zone_Air_Temperature_Sensor |
Zone temperature readings |
Zone_Air_Temperature_Setpoint |
Zone temp setpoints |
Zone_Air_Heating_Temperature_Setpoint |
Heating setpoints |
Supply_Air_Temperature_Sensor |
Discharge / supply air temp |
Supply_Air_Temperature_Setpoint |
Discharge air temp setpoint |
Air_Flow_Sensor |
Airflow readings (CFM) |
Air_Flow_Setpoint |
Airflow setpoints |
Fan_Command |
Fan on/off or speed command |
Damper_Status |
Damper position feedback |
Heating_Level_Command |
Reheat valve command (%) |
Run_Command / Run_Status
|
Equipment run command / status |
Enable_Status |
Equipment enable status |
Occupancy_Command |
Occupied/unoccupied command |
Voltage_Sensor / Current_Sensor / Active_Power_Sensor
|
Electrical measurements |
Active_Energy_Sensor |
Energy consumption (kWh) |
Speed_Sensor / Output_Frequency_Sensor
|
VFD speed/frequency |
Low_Limit / High_Limit
|
Limit alarms |
Alarm |
General alarms |
Temperature_Sensor |
Generic temperature reading |
Refer to the
_point_typessheet for the full list of 1,300+ valid types.
Tips
Workflow
- Work through the sheets in order: entities first, then relations, then points. The relations and points sheets reference entity names, so those need to exist first.
- Watch the colors: Fix all red cells before submitting. Yellow cells are worth reviewing but may be acceptable (e.g., a top-level building entity with no outgoing relationships).
- Check the auto-calculated columns: After adding relations and points, look at columns CβG in the entities sheet. If an entity has all zeros, it probably needs relationships or points added.
When you're updating a workbook that has already been imported, don't delete entities, relations, or points unless you actually want them gone. Anything you remove will be treated as a removal from the building model β the entity will be dematerialized from the graph.
Don't touch reference sheets
The _entity_types, _point_types, _relationship_types, and _metadata sheets are system-managed. Editing them may cause validation errors.