Data Output
Overview
Thingsee ENVIRONMENT produces measurement data that you can access through the Haltian IoT Platform — receive JSON measurements via MQTT Stream API or query via GraphQL Data API.
This page documents the measurement types, payload formats, and how to access the data.
If you operate your own gateways and decode raw mesh messages, see the CBOR Uplink Reference for the binary message specification.
Haltian IoT Measurements
The ENVIRONMENT sensor produces the following measurement types depending on its configured operating mode:
| Measurement Type | Sensor | Description |
|---|---|---|
ambientTemperature | Weather | Temperature reading in °C |
ambientHumidity | Weather | Relative humidity percentage |
ambientPressure | Weather | Barometric pressure in hPa |
ambientLight | Weather | Light level in lux |
magnetoSwitchStatus | Hall sensor | Door/window open or closed state |
machineUsageSeconds | Accelerometer | Machine activity duration per interval |
batteryPercentage | System | Remaining battery level |
ambientTemperature
Reports temperature from the built-in sensor. Available when weather mode is enabled.
MQTT Topic:
haltian-iot/events/{integration-id}/{api-key-id}/measurements/ambientTemperature/{device-uuid}
JSON Payload:
{
"measured_at": "2026-01-28T08:52:11Z",
"ambientTemperature": 22.4
}
Fields:
| Field | Type | Description |
|---|---|---|
measured_at | ISO 8601 string | Timestamp of measurement |
ambientTemperature | Float | Temperature in °C (range: -40 to +85) |
Reporting behavior:
- Reports every
reportInterval(default 60s for pod3, 3600s for pod4/rugged) - Reports immediately when temperature changes exceed the configured hysteresis threshold (default 0.5°C)
- Reports on device startup
GraphQL query example:
query {
measurements(
filter: {
deviceId: "{device-uuid}"
type: ambientTemperature
from: "2026-01-28T00:00:00Z"
to: "2026-01-28T23:59:59Z"
}
) {
measuredAt
ambientTemperature
}
}
Related: Configure weather mode | Operation — Weather measurements
ambientHumidity
Reports relative humidity. Available when weather mode is enabled.
MQTT Topic:
haltian-iot/events/{integration-id}/{api-key-id}/measurements/ambientHumidity/{device-uuid}
JSON Payload:
{
"measured_at": "2026-01-28T08:52:11Z",
"ambientHumidity": 67.2
}
Fields:
| Field | Type | Description |
|---|---|---|
measured_at | ISO 8601 string | Timestamp of measurement |
ambientHumidity | Float | Relative humidity in % (range: 0–100) |
Reporting behavior:
- Reports every
reportInterval - Reports immediately when humidity changes exceed the configured hysteresis threshold (default 2%)
GraphQL query example:
query {
measurements(
filter: {
deviceId: "{device-uuid}"
type: ambientHumidity
from: "2026-01-28T00:00:00Z"
to: "2026-01-28T23:59:59Z"
}
) {
measuredAt
ambientHumidity
}
}
ambientPressure
Reports barometric pressure. Available when weather mode is enabled.
MQTT Topic:
haltian-iot/events/{integration-id}/{api-key-id}/measurements/ambientPressure/{device-uuid}
JSON Payload:
{
"measured_at": "2026-01-28T08:52:11Z",
"ambientPressure": 1020.9
}
Fields:
| Field | Type | Description |
|---|---|---|
measured_at | ISO 8601 string | Timestamp of measurement |
ambientPressure | Float | Barometric pressure in hPa (range: 300–1200) |
Reporting behavior:
- Reports every
reportInterval - Reports immediately when pressure changes exceed the configured hysteresis threshold (default 20 Pa)
GraphQL query example:
query {
measurements(
filter: {
deviceId: "{device-uuid}"
type: ambientPressure
from: "2026-01-28T00:00:00Z"
to: "2026-01-28T23:59:59Z"
}
) {
measuredAt
ambientPressure
}
}
ambientLight
Reports ambient light level. Available when weather mode is enabled.
MQTT Topic:
haltian-iot/events/{integration-id}/{api-key-id}/measurements/ambientLight/{device-uuid}
JSON Payload:
{
"measured_at": "2026-01-28T08:52:11Z",
"ambientLight": 270
}
Fields:
| Field | Type | Description |
|---|---|---|
measured_at | ISO 8601 string | Timestamp of measurement |
ambientLight | Integer | Light level in lux (range: 0–100,000) |
Reporting behavior:
- Reports every
reportInterval - Reports immediately when light changes exceed the configured hysteresis threshold (default 100 lux)
GraphQL query example:
query {
measurements(
filter: {
deviceId: "{device-uuid}"
type: ambientLight
from: "2026-01-28T00:00:00Z"
to: "2026-01-28T23:59:59Z"
}
) {
measuredAt
ambientLight
}
}
magnetoSwitchStatus
Reports door/window open or closed state from the built-in hall (magnetic) sensor. Available when hall mode is enabled.
MQTT Topic:
haltian-iot/events/{integration-id}/{api-key-id}/measurements/magnetoSwitchStatus/{device-uuid}
JSON Payload:
{
"measured_at": "2026-01-28T08:52:11Z",
"isClosed": true
}
Fields:
| Field | Type | Description |
|---|---|---|
measured_at | ISO 8601 string | Timestamp of state change |
isClosed | Boolean | true = magnet detected (closed), false = no magnet (open) |
Reporting behavior:
- When hall mode = report on change: reports immediately on each state transition
- When hall mode = report at interval: reports current state every
reportInterval - Value persists until the next event — if
isClosed: trueat 10:00, the door is considered closed until the nextfalseevent
This measurement is event-based, not time-series sampled. To calculate time-in-state, compute the duration between state transitions. See Concepts — Event-Based Measurements for details.
GraphQL query example:
query {
measurements(
filter: {
deviceId: "{device-uuid}"
type: magnetoSwitchStatus
from: "2026-01-28T00:00:00Z"
to: "2026-01-28T23:59:59Z"
}
) {
measuredAt
isClosed
}
}
Related: Configure hall mode | Operation — Magneto switch
machineUsageSeconds
Reports machine activity duration when the accelerometer is in machine monitoring mode. This is a pre-aggregated value representing seconds of detected vibration activity within the reporting interval.
MQTT Topic:
haltian-iot/events/{integration-id}/{api-key-id}/measurements/machineUsageSeconds/{device-uuid}
JSON Payload:
{
"measured_at": "2026-01-28T08:52:11Z",
"machineUsageSeconds": 204
}
Fields:
| Field | Type | Description |
|---|---|---|
measured_at | ISO 8601 string | Timestamp of measurement |
machineUsageSeconds | Integer | Seconds of detected vibration activity in the reporting interval |
Reporting behavior:
- Reports every
reportIntervalwhen accelerometer is in machine monitoring mode - Value resets to 0 at the start of each reporting interval
- Maximum value equals the
reportIntervalduration (e.g., 300 ifreportInterval= 300s)
GraphQL query example:
query {
measurements(
filter: {
deviceId: "{device-uuid}"
type: machineUsageSeconds
from: "2026-01-28T00:00:00Z"
to: "2026-01-28T23:59:59Z"
}
) {
measuredAt
machineUsageSeconds
}
}
Related: Configure machine monitoring mode | Operation — Machine monitoring
batteryPercentage
Reports remaining battery capacity. Updated every 6 hours.
MQTT Topic:
haltian-iot/events/{integration-id}/{api-key-id}/measurements/batteryPercentage/{device-uuid}
JSON Payload:
{
"measured_at": "2026-01-28T08:52:11Z",
"batteryPercentage": 85
}
Fields:
| Field | Type | Description |
|---|---|---|
measured_at | ISO 8601 string | Timestamp of measurement |
batteryPercentage | Integer (0–100) | Remaining battery level as percentage |
Reporting behavior:
- Reports every 6 hours (21600 seconds)
- Last reported value is the current battery state (infrequent updates)
- Plan battery replacement when value drops below 10%
GraphQL query example:
query {
measurements(
filter: {
deviceId: "{device-uuid}"
type: batteryPercentage
from: "2026-01-01T00:00:00Z"
to: "2026-01-31T23:59:59Z"
}
) {
measuredAt
batteryPercentage
}
}
How to Access This Data
MQTT Stream API (Real-time)
Subscribe to receive measurements as they arrive. See the Real-Time Data Streaming guide for setup.
Subscribe to all measurements from a specific device:
haltian-iot/events/{integration-id}/{api-key-id}/measurements/+/{device-uuid}
Subscribe to a specific measurement type from all devices:
haltian-iot/events/{integration-id}/{api-key-id}/measurements/ambientTemperature/+
GraphQL Data API (Historical)
Query historical measurements via the Data API. Supports filtering by device, measurement type, and time range.
Data API (Parquet Export)
For bulk data analysis, export measurements as Parquet files via the Data API. Parquet files contain all measurement types in columnar format optimized for analytics tools like Python/pandas and Power BI.