Telemetry Protocol¶
Luxnode frames are JSON objects. The SDK accepts both the compact V0 firmware payload and the richer protocol shape.
Compact V0 Firmware Payload¶
{
"device": "luxnode-v0",
"kind": "raw",
"pixels": [102, 104, 110, 118]
}
LuxFrame.from_mapping() converts this into counts plus a default linear
340-850 nm wavelength axis.
Rich LuxFrame Payload¶
{
"schema_version": "0.1.0",
"device_id": "luxnode-v0-0001",
"firmware_version": "0.1.0",
"module_id": "vis-cuvette-v0",
"frame_id": "018ff...",
"timestamp_unix_ms": 1780272000000,
"measurement_kind": "raw",
"wavelengths_nm": [340.0, 341.8, 343.6],
"counts": [112, 118, 122],
"dark_counts": [11, 11, 12],
"reference_counts": [50200, 50110, 49980],
"telemetry": {
"integration_time_ms": 2.5,
"gain": 1.0,
"led_current_ma": 20,
"board_temperature_c": 31.2,
"detector_temperature_c": 29.8,
"battery_mv": 4090,
"rssi_dbm": -51
},
"metadata": {
"sample_id": "leaf-a-001",
"operator": "lab"
}
}
Required Fields¶
countsorpixelswavelengths_nmunless the payload uses V0pixels
Recommended Fields¶
schema_versiondevice_idfirmware_versionmodule_idtimestamp_unix_msdark_countsreference_countstelemetry.integration_time_mstelemetry.board_temperature_cmetadata.sample_id
Storage Rule¶
Never store only processed spectra. Keep raw counts, dark counts, reference counts, telemetry, algorithm version, and module version so future calibration models can reprocess old measurements.