Query signature
equipment(
siteId: String!,
id: String,
name: String,
nameMatch: NameMatch,
locationId: String,
locationName: String,
systemId: String,
is: String,
hasProperty: String,
propertyValue: String
): [Equipment!]!
Arguments
| Argument | Type | Description |
|---|
siteId | String! | Required. Scopes the query to a specific site |
id | String | Filter to a specific equipment |
name | String | Filter by equipment name. Case-insensitive substring by default |
nameMatch | NameMatch | CONTAINS (default) or EXACT |
locationId | String | Equipment at or below this location (transitive) |
locationName | String | Equipment at or below locations matching this name |
systemId | String | Equipment belonging to this system |
is | String | Brick class name. Resolves all subtypes |
hasProperty | String | Only entities with this property defined |
propertyValue | String | Exact match on the property value (requires hasProperty) |
Return fields
| Field | Type | Description |
|---|
uri | String! | Full entity URI |
id | ID! | Equipment identifier |
name | String! | Equipment name |
type | String! | Brick class (e.g., AHU, VAV, FCU) |
typeHierarchy | [String!]! | Full class hierarchy from leaf to root (e.g., ["AHU", "HVAC_Equipment", "Equipment", "Entity", "Class"]) |
ifcId | String | IFC model element ID. Links to the BIM model. null if not from IFC |
points | [Point!]! | Sensors, setpoints, and commands. Accepts name, nameMatch, is filters |
parts | [Equipment!]! | Sub-components of this equipment. Accepts name, nameMatch, is filters |
partOf | Equipment | Parent equipment this is a component of |
feeds | [Equipment!]! | Equipment this one feeds. Accepts name, nameMatch, is filters |
fedBy | [Equipment!]! | Equipment that feeds this one. Accepts name, nameMatch, is filters |
upstream | [Equipment!]! | Transitive upstream traversal. Accepts maxDepth, medium, is filters |
downstream | [Equipment!]! | Transitive downstream traversal. Accepts maxDepth, medium, is filters |
location | Location | Physical location of this equipment |
systems | [System!]! | Systems this equipment belongs to (no filter args, returns all systems) |
properties | [EntityProperty!]! | Static metadata |
Examples
Find equipment by name (CONTAINS, default)
No need to know UUIDs. Search by name directly. CONTAINS is the default and does case-insensitive substring matching:
{
equipment(name: "AHU") {
name
type
location { name }
}
}
{
"data": {
"equipment": [
{ "name": "TE01-XX-AHU-001", "type": "AHU", "location": { "name": "Tower East" } },
{ "name": "TE01-XX-AHU-002", "type": "AHU", "location": { "name": "Tower East" } },
{ "name": "TW01-XX-AHU-001", "type": "AHU", "location": { "name": "Tower West" } },
{ "name": "TW01-XX-AHU-002", "type": "AHU", "location": { "name": "Tower West" } }
]
}
}
Returns all AHUs whose name contains “AHU”. Great for discovery since you don’t need to know exact names.
Pin down a specific equipment (EXACT)
Once you know the exact name, use nameMatch: EXACT for a precise match:
{
equipment(name: "TE01-XX-AHU-001", nameMatch: EXACT) {
name
type
location { name }
properties { name value unit }
}
}
Returns only the one equipment with this exact name, with no false positives from substring matching.
All HVAC equipment
The is argument resolves the full Brick class hierarchy. HVAC_Equipment matches AHUs, VAVs, FCUs, pumps, fans, dampers, valves, and every HVAC subtype:
{
equipment(is: "HVAC_Equipment") {
name
type
}
}
Equipment in a location (by name)
Find all VAVs in the Library, no UUID required:
{
equipment(locationName: "Library", is: "VAV") {
name
type
location { name }
}
}
{
"data": {
"equipment": [
{ "name": "TW01-LBR-RPC-01", "type": "VAV", "location": { "name": "Library" } },
{ "name": "TW01-LBR-RPC-02", "type": "VAV", "location": { "name": "Library" } }
]
}
}
This finds all VAVs at or below any location whose name contains “Library”. The search is transitive, so equipment in child locations (rooms within a wing) is included.
AHUs with their temperature sensors
{
equipment(is: "AHU") {
name
points(is: "Temperature_Sensor") {
name
type
unit
}
}
}
Both equipment and points use is independently. This finds all temperature sensor subtypes (supply air, return air, zone air) on all AHUs.
Equipment by property
Filter equipment by metadata values:
{
equipment(hasProperty: "controllerName", propertyValue: "PSW TE01-XX-MCC-001") {
name
type
location { name }
}
}
{
"data": {
"equipment": [
{ "name": "TE01-XX-AHU-001", "type": "AHU", "location": { "name": "Tower East" } },
{ "name": "TE01-L01-VAV-001", "type": "VAV", "location": { "name": "Lobby 1" } },
{ "name": "TE01-L01-VAV-002", "type": "VAV", "location": { "name": "North Stair 1" } }
]
}
}
Returns all equipment managed by this BACnet controller. Use hasProperty alone (without propertyValue) to find all equipment that has a given property defined.
Entity properties
Equipment carries structured metadata (controller name, point count, virtual flag, and more). These are returned as typed EntityProperty objects:
{
equipment(id: "TE01-XX-AHU-001") {
name
type
properties { name value unit }
}
}
{
"data": {
"equipment": [
{
"name": "TE01-XX-AHU-001",
"type": "AHU",
"properties": [
{ "name": "controllerName", "value": "PSW TE01-XX-MCC-001", "unit": null },
{ "name": "isVirtual", "value": "false", "unit": null },
{ "name": "pointCount", "value": "34", "unit": null }
]
}
]
}
}
Properties vary by equipment type and depend on what’s in the Brick model. Not all equipment will have all properties. Use hasProperty to filter by property existence.
Type hierarchy: understand an entity’s class lineage
The typeHierarchy field shows the full Brick class path from leaf to root. Useful for understanding what kind of equipment you’re looking at:
{
equipment(name: "AHU") {
name
type
typeHierarchy
}
}
{
"data": {
"equipment": [
{
"name": "TE01-XX-AHU-001",
"type": "AHU",
"typeHierarchy": ["AHU", "HVAC_Equipment", "Equipment", "Entity", "Class"]
}
]
}
}
The hierarchy reads leaf → root. This is why is: "HVAC_Equipment" matches AHUs, because HVAC_Equipment appears in the chain.
Equipment composition
Equipment can have sub-components (parts) like fans, dampers, and valves:
{
equipment(id: "TE01-XX-AHU-001") {
name
type
parts {
name
type
points(is: "Sensor") {
name
type
}
}
}
}
Find parent equipment (partOf)
Given a component, find what it belongs to:
{
equipment(name: "Supply Fan", is: "Fan") {
name
type
partOf {
name
type
}
}
}
What feeds this equipment? (fedBy)
Find what supplies a piece of equipment:
{
equipment(name: "VAV-001") {
name
fedBy {
name
type
}
}
}
Returns the AHU(s) that feed this VAV (the inverse of feeds).
One-hop vs transitive traversal
{
equipment(id: "TE01-XX-AHU-001") {
# Direct connections only
feeds { name type }
# Full transitive chain (all downstream equipment)
downstream(maxDepth: 5) {
name
type
}
}
}
{
"data": {
"equipment": [
{
"feeds": [
{ "name": "TE01-L01-VAV-001", "type": "VAV" },
{ "name": "TE01-L01-VAV-002", "type": "VAV" },
{ "name": "TE01-RH1-VAV-001", "type": "VAV" },
{ "name": "TE01-SS1-VAV-001", "type": "VAV" },
{ "name": "TE01-SS2-VAV-001", "type": "VAV" }
],
"downstream": [
{ "name": "TE01-L01-VAV-001", "type": "VAV" },
{ "name": "TE01-L01-VAV-002", "type": "VAV" },
{ "name": "TE01-RH1-VAV-001", "type": "VAV" },
{ "name": "TE01-SS1-VAV-001", "type": "VAV" },
{ "name": "TE01-SS2-VAV-001", "type": "VAV" }
]
}
]
}
}
Upstream by medium
Trace where an AHU gets its hot water from:
{
equipment(id: "TE01-XX-AHU-001") {
name
upstream(medium: "HOT_WATER") {
name
type
}
}
}
{
"data": {
"equipment": [
{
"name": "TE01-XX-AHU-001",
"upstream": [
{ "name": "HIU System", "type": "Heat_Exchanger" }
]
}
]
}
}