OwlpaneDOCS
Operations & contracts

IoT telemetry contract

Device inventory in Owlpane is matched to telemetry by stable ids on logs (and optionally metrics). There is no separate IoT wire protocol — use OTLP with project ingest keys, same as any other service.

Required attributes

AttributeDescription
owlpane.device.idStable device id (must match registered inventory)
owlpane.device_fleet.idFleet slug or id from Observability → Device fleets
AttributeDescription
owlpane.device.gateway_idEdge gateway grouping
owlpane.device.firmware_versionFirmware cohort analysis
owlpane.device.classDevice class (stale thresholds)

Ingest aliases (normalized at gateway)

On POST /v1/logs, the ingest gateway maps compatible keys before storage:

IncomingStored as
device.idowlpane.device.id
fleet.id or device.fleet.idowlpane.device_fleet.id
device.classowlpane.device.class
firmware.versionowlpane.device.firmware_version
gateway.idowlpane.device.gateway_id

Requires ingest 0.1.1+.

Node.js SDK

import { owlpane, setDeviceContext, emitDeviceLog } from "@owlpane/node";

owlpane.start({ service: "my-device", ingestKey: process.env.OWLPANE_INGEST_KEY });
setDeviceContext({ deviceId: "d-1", fleetId: "lab-fleet" });
await emitDeviceLog("heartbeat");

Install @owlpane/node@0.1.8 (or 0.1.7+ for Node setDeviceContext) from npm. Python/Go context helpers need 0.1.8+ from their public packages.

Scorecard

From the console device detail or POST /v1/orgs/:orgId/device-fleets/:fleetId/devices/:deviceRowId/scorecard/run. Checks connectivity, required attributes in ClickHouse, and freshness vs expected_report_interval_seconds.

Last updated

On this page