Skip to content
Test Data & Analytics

Hardware Telemetry Analysis with TofuPilot

Learn how to collect, store, and analyze hardware sensor telemetry data using TofuPilot's measurement arrays and dashboards.

JJulien Buteau
intermediate10 min readNovember 18, 2025

Hardware Telemetry Analysis with TofuPilot

Sensor data from hardware tests is only useful if you can find patterns across thousands of runs. TofuPilot ingests multi-dimensional telemetry, indexes it automatically, and gives you dashboards that surface trends before they become production issues.

What Hardware Telemetry Looks Like in Practice

A single hardware test run can produce hundreds of sensor readings: temperature curves, voltage traces, vibration spectra, pressure waveforms. Without a structured system, this data ends up in CSV files on shared drives, impossible to query at scale.

TofuPilot treats every sensor measurement as a first-class object. Each reading gets a name, unit, limits, and an optional array dimension for time-series or multi-axis data.

Ingesting Sensor Data

OpenHTF Users

OpenHTF measurements flow into TofuPilot automatically. Multi-dimensional arrays (1D waveforms, 2D matrices, ND tensors) are processed without code changes.

telemetry_test.py
import openhtf as htf
from tofupilot.openhtf import TofuPilotClient

@htf.measures(
    htf.Measurement("temperature_curve").with_dimensions("time_s"),
    htf.Measurement("vibration_spectrum").with_dimensions("freq_hz"),
)
def sensor_sweep(test):
    for t in range(100):
        test.measurements.temperature_curve[t] = read_thermocouple()
    for f in range(500):
        test.measurements.vibration_spectrum[f] = read_accelerometer_fft(f)

def main():
    test = htf.Test(sensor_sweep)
    test.add_output_callbacks(TofuPilotClient())
    test.execute(lambda: "DUT-001")

Python Client Users

Pass lists or NumPy arrays directly in your measurement payloads.

upload_telemetry.py
from tofupilot import TofuPilotClient
import numpy as np

client = TofuPilotClient()

voltage_trace = np.sin(np.linspace(0, 2 * np.pi, 1000)).tolist()

client.create_run(
    procedure_id="PSU-RIPPLE-TEST",
    unit_under_test={"serial_number": "PSU-2025-0042"},
    steps=[{
        "name": "Output Ripple",
        "step_type": "measurement",
        "status": True,
        "measurements": [{
            "name": "ripple_voltage_mv",
            "value": voltage_trace,
            "unit": "mV",
            "limit_low": -50,
            "limit_high": 50,
        }],
    }],
)

Querying Telemetry at Scale

Once ingested, every measurement is queryable through the TofuPilot dashboard. Filter by procedure, unit serial number, date range, or pass/fail status.

QueryWhat it shows
All runs for PSU-RIPPLE-TEST last 7 daysRipple voltage trends across production
Failed runs with temperature_curve out of limitsUnits that exceeded thermal specs
Measurement distribution for vibration_spectrumHistogram of vibration amplitudes across fleet

Setting Up Alerts on Telemetry Drift

TofuPilot tracks measurement distributions over time. When a sensor reading starts drifting toward its limits, you can catch it before it causes failures.

  1. Open the procedure dashboard for your test
  2. Select the measurement you want to monitor
  3. Set warning thresholds at 80% of your spec limits
  4. TofuPilot flags runs where readings cross the warning zone

This is especially useful for temperature sensors, where gradual calibration drift can go unnoticed until units start failing in the field.

Real-World Example: Thermal Chamber Telemetry

A medical device manufacturer runs thermal cycling tests across 8 temperature zones. Each test produces 8 time-series measurements (one per zone) with 500 data points each.

Before TofuPilot, engineers downloaded CSV files from each chamber controller, merged them in Excel, and manually checked limits. With TofuPilot, all 8 waveforms upload automatically at the end of each cycle, limits are checked server-side, and the dashboard shows zone-by-zone trends across the full production history.

The result: limit violations that previously took hours to find now surface in seconds.

More Guides

Put this guide into practice