Sensor Composition
How different sensor combinations behave in a device group and which to choose for your space
A device group is a virtual device that aggregates multiple physical sensors into one logical unit. It represents a space — a room, a floor, a building — where you want unified measurements instead of separate readings from each individual sensor.
Device groups behave like physical devices across the platform:
The key difference is that device groups have no hardware — their measurements are computed by the Occupancy Data Engine from the raw data of their member sensors.
When a space has multiple sensors, each device reports its own measurements independently. A meeting room with two doors has two Entryway sensors, each counting entries and exits at their door — but neither knows the total number of people in the room.
A device group solves this by combining those sensors into a single virtual device. The Occupancy Data Engine processes all member sensor data and produces one unified occupancy state for the entire space.
Single device — One sensor covers the entire space. No device group needed.
Device group — Multiple sensors cover one space, or you need aggregated occupancy logic (count + presence combined). Create a device group.
| Scenario | Approach |
|---|---|
| Single desk with one PIR sensor | Single device |
| Small room with one presence sensor | Single device |
| Meeting room with entry/exit sensors | Device group |
| Large room with entry sensors + presence sensors | Device group |
| Open office zone with multiple sensors | Device group |
| Floor-level occupancy from multiple doorways | Device group |
Device groups can be created through Haltian IoT applications or directly via the Service API (GraphQL). A device group needs a name and at least one member device.
Create and manage device groups using the application that fits your workflow:
Haltian Field currently supports full device group management (create, edit, delete, add/remove devices). IoT Studio Web currently supports browsing and viewing device groups.
Use the createDeviceGroup mutation to create a device group programmatically:
mutation CreateDeviceGroup {
createDeviceGroup(
name: "Meeting Room Taika",
devices: ["device-uuid-1", "device-uuid-2"],
keywords: ["meeting-room", "3rd-floor"]
)
}
The response includes the device group’s UUID, which you use to query its measurements — exactly like a physical device:
{
"data": {
"deviceGroup": {
"id": "731fda0a-7843-468d-94b3-e377a873deeb",
"name": "Meeting Room Taika",
"deviceType": {
"productName": "Device Group",
"model": "com.haltian.device-group",
"make": "Haltian Oy"
}
}
}
}
Any device type can be added to a device group. The Occupancy Data Engine processes measurements from supported sensor types (Entryway and Presence sensors) and ignores measurements from unsupported types.
This means you can group all devices in a room together — even if some don’t contribute to occupancy calculations — to keep them organized as a logical unit.
Query the member devices of a group:
query DeviceGroupDevices($deviceGroupId: uuid) {
deviceGroupDevices(where: { deviceGroupId: { _eq: $deviceGroupId } }) {
deviceGroupId
deviceId
memberDevice {
id
name
identifiers { tuid }
deviceType { make, model, productName }
}
}
}
When you install a device group to a space in the hierarchy, it follows the same role-based access control as physical devices. Users can only see device groups installed in spaces they have access to.
Each device group has a configurable inactivity period (in hours) that controls when the Occupancy Data Engine automatically resets the occupancy count to zero. When all sensors in the group have been inactive for this duration, the engine assumes the space is empty and corrects any accumulated count drift.
Choose the period based on the type of space — a meeting room might use 2–4 hours, while a floor or building entrance needs a longer period to avoid false resets during quiet hours. See Reset Logic for detailed behavior and guidance on choosing values.
After creating a device group, you can add metadata to make it easier for your team and integrations to identify and work with. Metadata is managed through Haltian IoT applications or the Service API.
Haltian Field currently supports full metadata management — keywords, notes, and images. IoT Studio Web currently supports images and keyword viewing.
Assign keyword tags to categorize and filter device groups. Keywords can be set during creation or added later.
mutation CreateDeviceGroup {
createDeviceGroup(
name: "Meeting Room Taika",
devices: ["device-uuid-1", "device-uuid-2"],
keywords: ["meeting-room", "3rd-floor", "capacity:10"]
)
}
Common keyword patterns for device groups:
| Keyword | Purpose |
|---|---|
meeting-room, open-office, lobby | Space type |
3rd-floor, building-a | Location context |
capacity:10 | Room capacity (no dedicated field — use keyword convention) |
project:renovation-2026 | Project or phase grouping |
Keywords are searchable in applications and exported in the devicekeywords Parquet table.
Attach freeform text notes to a device group for installation details, configuration records, or maintenance logs. Each note is timestamped and records the author.
Use notes for information that changes over time or doesn’t fit a keyword, for example:
Notes are exported via the deviceNotes Parquet table.
Upload a photo to visually identify the space or the sensor installation. Supported formats: JPEG, PNG, WebP.
Useful image examples:
Map the device group to an identifier in an external system using the externalId field. This is useful when integrating with systems that have their own resource identifiers:
mutation CreateDeviceGroup {
createDeviceGroup(
name: "Meeting Room Taika",
devices: ["device-uuid-1", "device-uuid-2"],
externalId: "room-resource@company.onmicrosoft.com"
)
}
Device groups use the same UUID structure and API patterns as physical devices. No special handling is needed.
| API | How to access device group data |
|---|---|
| Service API | Query using the device group UUID — same as any device |
| Stream API | Subscribe to MQTT topics using the device group UUID |
| Data API | Device group measurements appear in Parquet exports alongside device data |
Device group structure is also exported via Parquet files in the devicegroups and devicegroupdevices tables, allowing you to reconstruct group membership in your data warehouse.
How different sensor combinations behave in a device group and which to choose for your space