Skip to main content

Query signature

equipment(
  siteId: String!,
  id: String,
  name: String,
  nameMatch: NameMatch,
  locationId: String,
  locationName: String,
  systemId: String,
  is: String,
  hasProperty: String,
  propertyValue: String
): [Equipment!]!
All root queries require siteId. See multi-tenant scoping. Examples below omit siteId for brevity.

Arguments

ArgumentTypeDescription
siteIdString!Required. Scopes the query to a specific site
idStringFilter to a specific equipment
nameStringFilter by equipment name. Case-insensitive substring by default
nameMatchNameMatchCONTAINS (default) or EXACT
locationIdStringEquipment at or below this location (transitive)
locationNameStringEquipment at or below locations matching this name
systemIdStringEquipment belonging to this system
isStringBrick class name. Resolves all subtypes
hasPropertyStringOnly entities with this property defined
propertyValueStringExact match on the property value (requires hasProperty)

Return fields

FieldTypeDescription
uriString!Full entity URI
idID!Equipment identifier
nameString!Equipment name
typeString!Brick class (e.g., AHU, VAV, FCU)
typeHierarchy[String!]!Full class hierarchy from leaf to root (e.g., ["AHU", "HVAC_Equipment", "Equipment", "Entity", "Class"])
ifcIdStringIFC 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
partOfEquipmentParent 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
locationLocationPhysical 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" }
        ]
      }
    ]
  }
}