Skip to main content

CampusIQ Source

CampusIQ logo

CampusIQ, delivered by Degree Analytics, measures how campus spaces are actually used. This connector brings a school's CampusIQ space hierarchy (Buildings, Floors, and Rooms) into Mapped buildings, and then records the live occupancy count that CampusIQ reports for each of them on a five-minute cadence.

Every space CampusIQ reports on arrives with its own Occupancy Zone and its own occupancy count stream. So, a Building, a Floor and a Room each carry the count CampusIQ measured at that level.

Use Cases​

  • Drive HVAC and lighting from real occupancy: Feed live counts into Active Control so set points follow how full a space actually is, rather than a fixed schedule.
  • Right-size the campus space portfolio: Compare measured utilization across buildings and floors to inform consolidation, scheduling and renovation decisions.
  • Give campus operations one space model: CampusIQ's hierarchy lands alongside every other system in the Graph, so occupancy can be queried next to work orders, energy and equipment for the same room.

Configuration​

Auth Requirements​

CampusIQ uses a single long-lived API key, issued by Degree Analytics as a JWT.

FieldRequiredWhere to find it
API KeyYesIssued by your Degree Analytics representative for your school's CampusIQ tenant.

Notes and caveats:

  • The key identifies the school. There is no separate school or site field to configure — the connector reads the school from the key itself.
  • The key is validated when you save it: the connector makes a small live request and rejects the key if CampusIQ does not accept it.
  • Keys expire. When one does, polling stops and the connector reports an authentication failure; replace the key in this tab to resume.

Connector Entities​

This connector does not use place mappings. CampusIQ is treated as the authoritative source for the space hierarchy, so instead of mapping source locations onto existing places, the connector presents everything CampusIQ publishes and you choose what to bring into the graph.

Three tabs appear after authentication, and they must be completed in order — each level is attached to the one above it, so a Floor cannot be brought in until its Building has been, and a Room cannot until its Floor has been:

TabContentsFields you complete
BuildingsEvery building CampusIQ reports onName, Postal Address
FloorsEvery floorName, Floor Level, Building
SpacesEvery roomName, Space Code, Floor

Notes:

  • Postal Address is required and has no default — CampusIQ does not publish addresses. The address is what lets a building match the same building contributed by another connector, so a building cannot be brought in until you supply one.
  • Floor Level is pre-filled from CampusIQ's floor label and converted to Mapped's zero-based scale, where the ground floor is level 0. A label that is not a single whole number — G, B1, or a zone spanning several floors — arrives blank for you to set.
  • Building and Floor are pre-selected from CampusIQ's own hierarchy. A row arrives blank only where CampusIQ's parent is missing or points at something of the wrong kind; assign it yourself in the grid.
  • Space Code defaults to the CampusIQ zone identifier, which is unique across the whole feed. Change it if your rooms should match codes you already use elsewhere.

Advanced Config​

OptionDefaultDescription
Page Size100How many zones CampusIQ returns per request. Lower it only if CampusIQ rate-limits large pages.
Batch Size250How many records are submitted per write while bringing entities into the graph.
Base URLDegree Analytics productionOnly change this if Degree Analytics directs you to an alternate host.
Occupancy ZonesoffWhere the occupancy count point attaches. Off, it hangs directly on the building, floor or space. On, an Occupancy Zone is created for each place and the point hangs on that instead — turn it on for a consumer whose ontology expects a zone between a place and its count. The point keeps the same identity either way, so its recorded history follows it across the change. Changing this does not rewrite what is already in the graph — see below.

Changing Occupancy Zones after you have brought places in.

The shape is decided when a place is merged, so saving the setting stores it but rewrites nothing. To move places you have already brought in onto the new shape, re-save them on the Buildings, Floors and Spaces tabs. Their count points keep their identity and their history across the move.

Occupancy zones from an earlier version of this connector.

Earlier releases attached an Occupancy Zone the other way round, so the Zone and its place each recorded the other as its container. A consumer walking that relationship could loop between the two. Whenever a place is brought in, this connector now checks whether such a Zone is still present and detaches it — nothing needs to be turned on for this, and no Zone is created on a site that never had one. The emptied Zone itself is left orphan.

Mapped Concepts​

CampusIQ returns one record per zone, and each record carries both the zone's place in the hierarchy and its current occupancy count. Everything below is built from that single feed.

API to Mapped Entities​

CampusIQ recordMapped entityexactTypeRelationships
Zone, level BuildingBuildingBUILDINGhasPart its floors
Zone, level FloorFloorFLOORisPartOf its building; hasPart its rooms
Zone, level defaultSpaceSPACEisPartOf its floor
Every zone above, with Occupancy Zones onZoneOCCUPANCY_ZONEisPartOf the place it measures; hasPoint its count

Notes:

  • Occupancy is not something you select. CampusIQ measures every Zone it returns, at that zone's own level, so an occupancy zone is created for each building, floor and room you bring in.
  • The sensing device is virtual. CampusIQ reports a number rather than exposing a physical sensor, so the device exists to carry the measurement and is flagged as virtual in the graph.
  • Counts are not rolled up. A floor's count is the figure CampusIQ measured for that floor, not the sum of its rooms. Each level reports independently.

Each place also carries identities so it can be recognized across systems: a postal address on buildings, a building-scoped level on floors, a floor-scoped code on rooms, and a CampusIQ identifier on all three.

Sample Code​

Query Points by location (Occupancy Zones OFF)

{
points(filter:{connectedDataSourceId:{eq:"your-connector-Id"}}) {
id
name
exactType
datatype
mappingKey
isPointOf {
...on Building {
id
name
exactType
mappingKey
}
...on Floor {
id
name
exactType
mappingKey
}
...on Space {
id
name
exactType
mappingKey
}
}
series(latest:true) {
timestamp
value {
int64Value
}
}
}
}

Query Occupancy Zones with Occupancy Counts (Occupancy Zones ON)

{
zones(filter:{connectedDataSourceId:{eq:"your-connector-Id"}}) {
id
name
exactType
mappingKey
hasPoint {
id
name
exactType
mappingKey
}
isPartOf {
id
name
exactType
}
}
}

Graph Diagrams​

Occupancy Zones Off

A vertical hierarchy shows Building (BUILDING) containing Floor (FLOOR), which contains Space (SPACE). Each of the three places has a connected Point (OCCUPANCY_COUNT_SENSOR)

Occupancy Zones On

A vertical hierarchy shows Building (BUILDING) containing Floor (FLOOR), which contains Space (SPACE). Each of the three places has a connected Point (OCCUPANCY_COUNT_SENSOR. Each place has an OCCUPANCY_ZONE connected to it by an isPartOf relationship, and each zone has a Point (OCCUPANCY_COUNT_SENSOR))