Skip to content

Historical Data

Current values answer "what is"; the temporal module answers "what was".

One series

For a single property there is a direct route — from/to default to the last hour:

text
GET /api/v1/temporal/devices/{deviceId}/properties/0x0800?from=1756700000000&to=1756800000000

Many series

Chart views should use the query route: several properties, devices and services in one request, with automatic downsampling toward a target point count:

text
POST /api/v1/temporal/query
json
{
  "properties": ["0x0800"],
  "devices": ["A1B2C3D4"],
  "from": 1756700000000,
  "to": 1756800000000,
  "maxPoints": 500
}

The response returns each series as parallel arrays rather than one object per point:

json
{
  "from": 1756700000000,
  "to": 1756800000000,
  "interval": 200000,
  "series": [
    {
      "m": "0x0800",
      "key": { "deviceId": "A1B2C3D4", "serviceId": "00000000-0000-2001-8003-006d0099ab53" },
      "type": "number",
      "n": 500,
      "t": [1756700000000, 1756700200000],
      "v": [212, 215]
    }
  ]
}

(t/v abridged — n counts the points that matched before limit was applied.)

  • interval is the bucket width applied by auto-downsampling, or null for raw points.
  • t and v are index-aligned; type says how to read v.
  • GET /temporal/schema lists which properties actually have stored history in your tenant.

Full query options (aggregation, grouping, boundary points): temporal module reference.