This page is focused on server-side usage: how to decode each field into business data, what units to expose in APIs and dashboards, and how to handle keepalive vs measurement payloads. Prefer the manufacturer JS decoder on FPort 1 rather than re-implementing the codec.
Binary header
| Bytes | Content |
|---|---|
| 0 | Reserved 0xFF (not in JSON) |
| 1–4 | Port types port1..4 |
| 5–7 | serial_number 24-bit little-endian |
| 8, 9 | boardTemperature, baseTemperature = byte − 40 (°C) |
| 10–12 | Packed voltages + status nibble |
| ≥13 | Concatenated active port payloads |
storageVoltagemV =b10 + ((b11&0x03)<<8) + 3300thermogenVoltagemV =((b11>>2)&0x3F) + ((b12&0x0F)<<6)- status nibble =
(b12>>4)&0x0F; frame type = status & 0x03
JSON key families (port n = 1..4)
| Family | Keys |
|---|---|
| Temperature | pt_n, tc{k|j|t|n|s|e|b|r}_n_{cjt|hjt}, dtempA_n, irA_n |
| Weather | weatherA_n_{temp,humidity,frost} |
| Sound | soundA_n |
| Pressure | pressA_n, pressA_n_temp |
| Voltage | dcv_n, acv_n, acv_n_hz, dcdv_n, acdv_n, acdv_n_hz, dcdvEx_n, acdvEx_n, acdvEx_n_hz |
| Magnetic | dcmh_n, acmh_n, acmh_n_hz |
| Current | dccs_n, accs_n, accs_n_hz, acct_n, acct_n_hz, dcch_n, acch_n, acch_n_hz |
| Analog | fourtwenty_n, pot_n |
| Vibration | vib_n_rms_lf, vib_n_rms_hf, vib_n_ratio_lf_0..2, vib_n_ratio_hf_0..1 |
| Contact | dryc_n, async_dryc_n |
Source of truth for on-wire parity: the reference decoder — see JS decoder.