This generator produces realistic time-series telemetry for fake IoT sensors so you can build and test dashboards, time-series databases, and ingestion pipelines without wiring up real hardware. Everything runs locally in your browser.
How it works
Each device emits a series of readings using a random walk so the values trend smoothly instead of jumping around:
next = clamp(previous + random(-step, +step), min, max)
- Temperature starts near 21 °C, humidity near 45%, pressure near 1013 hPa.
- Each new reading drifts a small amount from the previous one, then is clamped to a physically plausible range.
- Timestamps are evenly spaced by your chosen interval, counting backward from the current time so the latest reading is now.
Output is CSV with a header or pretty-printed JSON, with each device’s series generated independently.
What each field looks like
| Field | Type | Example value | Notes |
|---|---|---|---|
device_id | string | sensor_03 | Zero-padded, e.g. 01–10 |
timestamp | ISO 8601 | 2025-04-01T14:23:00Z | UTC, evenly spaced |
temperature_c | float | 21.4 | Clamped to a plausible range |
humidity_pct | float | 46.2 | 0–100 |
pressure_hpa | float | 1012.8 | ~sea-level range |
The CSV header line makes it paste directly into InfluxDB, TimescaleDB, or any spreadsheet tool. The JSON output follows a records format — an array of objects — that maps cleanly to Elasticsearch, MongoDB time-series, or a REST payload.
Illustrative worked example
Suppose you want to test an alert that fires when temperature exceeds 30 °C for three consecutive readings on any device. Generate two devices, 200 readings, 60-second interval. Most runs will stay well below 30 °C because the random walk is clamped, but the variance is enough to produce occasional spikes. Feed the CSV to your pipeline and verify that the alert fires exactly when the threshold is crossed — not due to gaps in timestamps or parsing errors.
For a simpler smoke-test of a dashboard: generate one device, 50 readings, any interval, and paste the JSON into your mock server’s seed endpoint. The smooth trend line confirms your chart is rendering in time order, not shuffled.
Choosing the right parameters
- Dense ingest test: 10 devices × 1,000 readings × 10 s interval → spans about 2.8 hours, produces 10,000 rows. Good for batch-load performance.
- Sparse alerting test: 3 devices × 50 readings × 600 s interval → spans 8 hours. Useful for time-bucketing queries on hourly rollups.
- Multi-device concurrency: set 50 devices to verify your time-series DB handles a fan-out ingestion without index contention.
Tips
- Seed repeatability. Each generation is independently random. If you need a fixed dataset for a reproducible test, generate once and save the file — the browser does not store it.
- Realistic noise floor. The step size is tuned so individual readings vary by roughly 0.2–0.5 units per interval, matching typical low-cost sensor noise. If you need noisier data, generate and add jitter in your preprocessing step.
- No dependencies. Everything runs in-browser with no upload, no API key, and no rate limit.