Zum Inhalt
HALOWERK

Agent Tools

telemetry / normalize

Turns SenML (JSON or CBOR) and LwM2M TLV into one record shape: resolved name, unit, absolute timestamp, typed value. Optionally puts every series on a shared time axis with a chosen interval and fill rule (last value, bucket mean, linear). Works only on the payload you pass: no device is contacted, nothing is stored, the same request returns the same bytes. TLV carries no type on the wire; unmapped resource ids come back as opaque base64 with a warning instead of a guess.

POST https://tools.halowerk.com/v1/telemetry/normalize

Eingaben

Felder des veröffentlichten Eingabeschemas
FeldTypPflichtBeschreibung
formatstringJaWire format of payload. senml_cbor and lwm2m_tlv expect base64.
payloadSiehe SchemaJaSenML records as a JSON array (or a JSON string holding one), or base64 for senml_cbor and lwm2m_tlv. At most 1000000 bytes after decoding; the service caps the whole request body at 256 KB.
base_namestringNeinPrefix put in front of every resolved record name. For lwm2m_tlv this is where the device identity goes.
base_time_unix_snumberNeinAnchor in seconds since 1970 for records that carry no absolute time. SenML calls times below 2^28 relative to now; this endpoint is stateless and will not invent a now.
value_typesobjectNeinlwm2m_tlv only: resource id as key, one of integer, float, boolean, string, time, opaque as value. Ids left out come back as opaque base64 with a warning instead of a guessed type.
alignbooleanNeinAlso return every numeric series on one shared time grid.
interval_snumberNeinGrid spacing in seconds. The grid may not exceed 10000 points.
align_methodstringNeinHow a grid point is filled: last value at or before the point, mean over the bucket, or linear interpolation between neighbours.
tolerance_snumberNeinalign_method=last only: how stale the carried value may be before the grid point is left empty. 0 means no limit.
max_recordsintegerNeinUpper bound on records taken from the payload.
Vollständiges Eingabeschema anzeigen
{
  "type": "object",
  "required": [
    "format",
    "payload"
  ],
  "properties": {
    "format": {
      "type": "string",
      "enum": [
        "senml_json",
        "senml_cbor",
        "lwm2m_tlv"
      ],
      "description": "Wire format of payload. senml_cbor and lwm2m_tlv expect base64."
    },
    "payload": {
      "description": "SenML records as a JSON array (or a JSON string holding one), or base64 for senml_cbor and lwm2m_tlv. At most 1000000 bytes after decoding; the service caps the whole request body at 256 KB."
    },
    "base_name": {
      "type": "string",
      "maxLength": 200,
      "description": "Prefix put in front of every resolved record name. For lwm2m_tlv this is where the device identity goes."
    },
    "base_time_unix_s": {
      "type": "number",
      "description": "Anchor in seconds since 1970 for records that carry no absolute time. SenML calls times below 2^28 relative to now; this endpoint is stateless and will not invent a now."
    },
    "value_types": {
      "type": "object",
      "description": "lwm2m_tlv only: resource id as key, one of integer, float, boolean, string, time, opaque as value. Ids left out come back as opaque base64 with a warning instead of a guessed type."
    },
    "align": {
      "type": "boolean",
      "default": false,
      "description": "Also return every numeric series on one shared time grid."
    },
    "interval_s": {
      "type": "number",
      "minimum": 0.001,
      "maximum": 86400,
      "default": 60,
      "description": "Grid spacing in seconds. The grid may not exceed 10000 points."
    },
    "align_method": {
      "type": "string",
      "enum": [
        "last",
        "mean",
        "linear"
      ],
      "default": "last",
      "description": "How a grid point is filled: last value at or before the point, mean over the bucket, or linear interpolation between neighbours."
    },
    "tolerance_s": {
      "type": "number",
      "minimum": 0,
      "maximum": 86400,
      "default": 0,
      "description": "align_method=last only: how stale the carried value may be before the grid point is left empty. 0 means no limit."
    },
    "max_records": {
      "type": "integer",
      "minimum": 1,
      "maximum": 20000,
      "default": 5000,
      "description": "Upper bound on records taken from the payload."
    }
  }
}

Originalschema öffnen

Veröffentlichtes Eingabebeispiel

{
  "format": "senml_json",
  "payload": [
    {
      "bn": "urn:dev:ow:10e2073a:",
      "bt": 1786000000,
      "bu": "Cel",
      "n": "temp",
      "v": 21.3
    },
    {
      "n": "temp",
      "t": 60,
      "v": 21.9
    },
    {
      "n": "hum",
      "u": "%RH",
      "t": 60,
      "v": 48
    }
  ],
  "align": true,
  "interval_s": 60,
  "align_method": "last"
}

Ergebnis & Dokumentation

Maschinenlesbare Dokumentation dieses Hubs

Quelle dieser Seite: der veröffentlichte HALOWERK-Katalog. Stand: 2026-11-01, 15:19 UTC.

Weitere Endpunkte dieses Hubs

Alle Endpunkte dieses Hubs →