Skip to main content

The is argument

The is argument on equipment and points fields accepts any Brick class name. Tacit resolves the class hierarchy and returns all matching entities, including subtypes.
All root queries require siteId. Examples below omit it for brevity. See multi-tenant scoping.

Finding equipment

All HVAC equipment

{
  equipment(siteId: "your-site-id", is: "HVAC_Equipment") {
    name
    type
  }
}
Returns AHUs, VAVs, FCUs, pumps, fans, dampers, valves, and every other HVAC equipment subtype.

Specific equipment types

# Just air handling units (siteId required)
equipment(siteId: "your-site-id", is: "AHU") { ... }

# Just pumps (chilled water pumps, hot water pumps, condenser water pumps)
equipment(siteId: "your-site-id", is: "Pump") { ... }

# Just fans (supply fans, return fans, exhaust fans)
equipment(siteId: "your-site-id", is: "Fan") { ... }
{
  equipment(siteId: "your-site-id", name: "AHU", is: "AHU") {
    name
    type
    location { name }
  }
}
Both name and is can be used together to find AHUs whose name contains “AHU”.

AHUs with temperature sensors

{
  equipment(siteId: "your-site-id", is: "AHU") {
    name
    points(is: "Temperature_Sensor") {
      name
      type
      unit
    }
  }
}
Both equipment and points use is independently. This finds temperature sensors (all subtypes) on AHUs (all subtypes).

Finding points

All sensors

point(siteId: "your-site-id", is: "Sensor") { ... }
Returns temperature, humidity, pressure, flow, CO2, and every other sensor type.

Temperature sensors

point(siteId: "your-site-id", is: "Temperature_Sensor") { ... }
Returns supply air, return air, zone, outside air, chilled water, and hot water temperature sensors.

All setpoints

point(siteId: "your-site-id", is: "Setpoint") { ... }

All commands

point(siteId: "your-site-id", is: "Command") { ... }

Exploring the hierarchy

Not sure what Brick classes are available? Query without the is argument and look at the type field:
{
  equipment(siteId: "your-site-id") {
    type
  }
}
This shows you every equipment class present in the building. Use those class names (or their parent classes) in the is argument.

Cross-cutting: points by equipment type and location

The most powerful pattern combines is, equipmentIs, and locationName on the point root query:
{
  point(siteId: "your-site-id", locationName: "Tower West", equipmentIs: "AHU", is: "Supply_Air_Temperature_Sensor") {
    name
    type
    unit
    equipment { name }
  }
}
{
  "data": {
    "point": [
      {
        "name": "TW01-XX-AHU-001.SupplyAirTemp",
        "type": "Supply_Air_Temperature_Sensor",
        "unit": "DEG_C",
        "equipment": { "name": "TW01-XX-AHU-001" }
      },
      {
        "name": "TW01-XX-AHU-002.SupplyAirTemp",
        "type": "Supply_Air_Temperature_Sensor",
        "unit": "DEG_C",
        "equipment": { "name": "TW01-XX-AHU-002" }
      }
    ]
  }
}
No UUIDs, no multiple round-trips. One query, one request.

Practical examples

Find all metered equipment

{
  equipment(siteId: "your-site-id", is: "HVAC_Equipment") {
    name
    type
    points(is: "Energy_Sensor") {
      name
      type
      unit
    }
  }
}

Comfort check: all zone temperature readings

{
  equipment(siteId: "your-site-id", is: "Terminal_Unit") {
    name
    points(is: "Zone_Air_Temperature_Sensor") {
      name
      type
      unit
    }
  }
}

Equipment by property: find everything on a controller

{
  equipment(siteId: "your-site-id", hasProperty: "controllerName", propertyValue: "PSW TE01-XX-MCC-001") {
    name
    type
    properties { name value }
  }
}
Returns all 14 pieces of equipment managed by this BACnet controller.

Virtual vs physical equipment

{
  equipment(siteId: "your-site-id", hasProperty: "isVirtual", propertyValue: "true") {
    name
    type
    location { name }
  }
}
Filter to BMS-derived virtual equipment (not modeled in IFC).

Next steps

Traverse equipment chains

Follow feeds relationships upstream and downstream.

Points reference

Full cross-cutting query reference for points.