JSON probe output schema

Stable JSON keys, temperature units, humidity fields, and average computation for dashboard consumers.

Close-up of white Cat-5e Ethernet cables with RJ45 connectors
Probe JSON usually leaves the LAN over Ethernet or a nearby relay, not the public internet directly. Photo: DiscDepotDundee.co.uk. CC BY-SA 4.0

Downstream systems. Python relays, Astro fetch routes, and dashboard mappings, all assume a stable JSON shape. Changing keys without updating consumers breaks probe labels and history inserts silently.

Canonical document


        {
  "temp": {
    "0": { "f": 38.2, "c": 3.4, "h": 41.0 },
    "1": { "f": 36.8, "c": 2.7, "h": 43.5 },
    "avg": { "f": 37.5, "c": 3.1, "h": 42.2 }
  }
}
      

Field meanings

  • Numeric keys match firmware probe indices and dashboard mapping entries.
  • f / c: Fahrenheit and Celsius for the same sample.
  • h: Relative humidity percent for that probe.
  • avg: Mean across healthy probes only; omit or freeze if one sensor is offline.

Alternate formats (auto-detected)

Push ingest and pull feeds also accept SenML JSON (RFC 8428 array with Cel / %RH units) and Home Assistant REST responses (state + attributes.unit_of_measurement) when the native temp root is absent. Live samples: SenML, HA REST. Details: ingest & webhooks.

Consumers

The home page fetch reads this structure for public cards. Python feeds may cache the same payload. Map labels via probe mapping.

FAQ

What JSON shape does ProbeHarbor expect?
Default pull shape is a temp object with probe keys (f, c, h). Push also accepts flat keys, sensors[], SenML JSON arrays, and Home Assistant REST state objects. Optional battery_pct and rssi help diagnose weak devices. See /about/ingest-and-webhooks or the example feed at /api/feeds/example?format=document.