Dummy sensor data generator for testing IoT/ML pipelines
Project description
dummysensors
A lightweight generator of dummy sensor data for IoT and ML testing. Provides a simple Python API and CLI, supports running multiple sensors in parallel and splitting output streams into files.
Installation
From PyPI (recommended):
pip install dummysensors
Quick Start (API)
from dummysensors import TemperatureSensor, VibrationSensor
# create sensors
temp = TemperatureSensor(min_val=18, max_val=24, noise=0.2)
vib = VibrationSensor(base_hz=50.0, amp=1.0, noise=0.05)
print(temp.read()) # e.g. 21.3
print(vib.read(t_s=0.123)) # sinusoidal signal with noise
Config file
Instead of passing long --spec strings, you can define your setup in a YAML file.
By default, dummy-sensors run --config config.sensors.yaml will look for a file named config.sensors.yaml in the current directory.
Example config.sensors.yaml
rate: 2
count: 5
partition_by: type
outputs:
- type: jsonl
for: temp
path: out/temp.jsonl
- type: csv
for: vibration
path: out/vibration.csv
devices:
- id: engine-A
sensors:
- kind: temp
count: 1
- kind: vibration
count: 1
## Quick Start (CLI)
Generate a single temperature stream to JSONL:
```bash
dummy-sensors generate --rate 5 --duration 2 --jsonl out/temp.jsonl
Run multiple sensors and devices, split by type into separate files:
dummy-sensors run \
--rate 5 \
--count 30 \
--spec "device=engine-A: temp*1,vibration*2; device=room-101: temp*2" \
--out "temp=out/temp.jsonl" \
--out "vibration=out/vib.jsonl" \
--out "*=stdout"
👉 Check out a full demo with live plotting and JSONL logging here:
dummysensors demo (ds-test)
Each record is a JSON line:
{
"ts_ms": 1234,
"device_id": "engine-A",
"sensor_id": "temp-0",
"type": "temp",
"value": 21.04
}
--spec format
The --spec string describes devices and sensors:
device=<ID>: <type>*<count>[, <type>*<count> ...] ; device=<ID2>: ...
Examples:
device=A: temp*3— device A with three temperature sensorsdevice=eng: temp*1,vibration*2; device=room: temp*2
As of
v0.2, supported sensor types:temp,vibration.
You can define setups either with--spec(quick inline config) or using a YAML file (--config config.sensors.yaml) for more complex scenarios.
Python API
TemperatureSensor
- Parameters:
min_val=15.0,max_val=30.0,noise=0.5,period_s=86400 - Methods:
read(t_s: float | None = None) -> float— one sample (random within range + Gaussian noise)
VibrationSensor
- Parameters:
base_hz=50.0,amp=1.0,noise=0.1,spike_prob=0.0 - Methods:
read(t_s: float | None = None) -> float— sinusoidal signal atbase_hz+ noise
Sensor Registry
dummysensors.registry.SENSOR_REGISTRY— maps stringkind→ classdummysensors.registry.make_sensor(kind: str, **params)
Orchestrator
dummysensors.orchestrator.run_stream(spec_str, rate_hz, duration_s, total_count, writer_for_type)- Creates instances based on
spec_str, emits samples atrate_hz. writer_for_typeis a dicttype → callable(sample_dict).*= default writer.
- Creates instances based on
Output Format
JSON Lines (one record per line):
{
"ts_ms": 171234,
"device_id": "engine-A",
"sensor_id": "vibration-1",
"type": "vibration",
"value": -0.124
}
Planned: CSV, Kafka, Redis Stream, WebSocket.
Makefile
For convenience, run with make:
make venv # create .venv and upgrade pip
make install # pip install -e .
make test # pytest
make demo # generate demo data into demo_out/
make clean # cleanup build and cache
After make demo, check the files:
head -n 3 demo_out/temp.jsonl
head -n 3 demo_out/vibration.jsonl
Development
git clone https://github.com/SculptTechProject/dummysensors
cd dummysensors
pip install -e .
pip install -r requirements.txt
- Project layout: src-layout
- Tests:
pytest -q - Lint/format:
ruff check src testsandruff format
Pull Requests welcome. Guidelines:
- Simple sensor classes
- No heavy runtime dependencies
- Test each public feature
Example Demo
- A complete example using
dummysensorsfor live plotting and JSONL logging is available in the ds-test repository.
Roadmap
v0.2✅- CSV writer
partition_by=device- YAML config (
--config config.yaml)
v0.3- AnomalyInjector (spike, dropout, drift)
- New sensors:
humidity,rpm,battery_voltage,gps (trajectory),accel 3-axis
v0.4- Outputs: Kafka, Redis Stream
- Live preview (WebSocket demo)
Versioning and Publishing
- Semantic versioning with tags
vX.Y.Z. - CI:
.github/workflows/ci.yml(lint + tests + build). - Publish:
.github/workflows/publish.yml(Trusted Publishing to PyPI on release).
License
MIT © Mateusz Dalke
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dummysensors-0.3.0.tar.gz.
File metadata
- Download URL: dummysensors-0.3.0.tar.gz
- Upload date:
- Size: 12.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
be1244228e62a3dfada0ca90d37bc797ba276f97eb4803d464ce56b31f3a2ac4
|
|
| MD5 |
5ba45fef87d4c3b150b01fa249edfbc7
|
|
| BLAKE2b-256 |
633a3d4780eeb5021dc3676caa10238bea9146d40b778b85b2d86bdb9ffed98f
|
Provenance
The following attestation bundles were made for dummysensors-0.3.0.tar.gz:
Publisher:
publish.yml on SculptTechProject/dummysensors
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dummysensors-0.3.0.tar.gz -
Subject digest:
be1244228e62a3dfada0ca90d37bc797ba276f97eb4803d464ce56b31f3a2ac4 - Sigstore transparency entry: 480041649
- Sigstore integration time:
-
Permalink:
SculptTechProject/dummysensors@3ac3e1dd8b8bf090ddc7ce333b0bcfa1775c5dbf -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/SculptTechProject
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@3ac3e1dd8b8bf090ddc7ce333b0bcfa1775c5dbf -
Trigger Event:
release
-
Statement type:
File details
Details for the file dummysensors-0.3.0-py3-none-any.whl.
File metadata
- Download URL: dummysensors-0.3.0-py3-none-any.whl
- Upload date:
- Size: 13.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8069b1958fb63268d94ae709d45ecfb0aaea36603378077ddd55d8c8fb298fe6
|
|
| MD5 |
9840cba91c39e49a9770ea352a0cdf50
|
|
| BLAKE2b-256 |
d5b508688dd5593cd45aeadaf411263301118549114640579d0ea0f6642cad25
|
Provenance
The following attestation bundles were made for dummysensors-0.3.0-py3-none-any.whl:
Publisher:
publish.yml on SculptTechProject/dummysensors
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dummysensors-0.3.0-py3-none-any.whl -
Subject digest:
8069b1958fb63268d94ae709d45ecfb0aaea36603378077ddd55d8c8fb298fe6 - Sigstore transparency entry: 480041672
- Sigstore integration time:
-
Permalink:
SculptTechProject/dummysensors@3ac3e1dd8b8bf090ddc7ce333b0bcfa1775c5dbf -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/SculptTechProject
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@3ac3e1dd8b8bf090ddc7ce333b0bcfa1775c5dbf -
Trigger Event:
release
-
Statement type: