Skip to main content

Real-time Fake Telemetry Stream Generator

Project description

PyPI version License: MIT CI

FakeTelemetry

A Python package to generate real-time and batch fake telemetry streams for testing, simulation, and development.

Links

Features

  • Multiple waveforms: sine, cosine, square, sawtooth, triangle, pulse, exponential decay, and random noise
  • Custom waveforms: Define your own signal functions
  • Phase shift support: Control phase offset for waveforms
  • Adjustable parameters: amplitude, frequency, offset, and sample rate
  • Multiple noise types: Gaussian, uniform, and impulse noise injection
  • Real-time streaming: Generate (datetime, value) tuples with actual timing delays
  • Batch generation: Generate all samples at once without delays
  • Multi-channel support: Parallel telemetry generation across multiple channels
  • Data export: Export to JSON, CSV formats with import support
  • Well-tested: Comprehensive test suite with 35+ tests
  • Pure Python: No external dependencies required

Quickstart

Generate a sine wave stream in seconds:

from faketelemetry import TelemetryGenerator, WaveformType

gen = TelemetryGenerator(WaveformType.SINE)
for ts, val in gen.stream(sampling_rate=1.0, duration=2):
    print(ts, val)

Requirements

  • Python 3.7 or newer
  • No external dependencies (pure Python)

Example Usage

Basic Waveform Generation

from faketelemetry import TelemetryGenerator, WaveformType, NoiseInjector

# Single channel with noise (sine wave)
noise = NoiseInjector(noise_level=0.2)
gen = TelemetryGenerator(
    waveform=WaveformType.SINE,
    frequency=1.0,
    amplitude=1.0,
    offset=0.0,
    noise_injector=noise
)
for timestamp, value in gen.stream(sampling_rate=2.0, duration=3):
    print(timestamp, value)

Phase Shift

import math
from faketelemetry import TelemetryGenerator, WaveformType

# Sine wave with 90 degree phase shift (equivalent to cosine)
gen = TelemetryGenerator(
    WaveformType.SINE, 
    frequency=1.0, 
    phase=math.pi/2
)

Batch Generation (No Delays)

from faketelemetry import TelemetryGenerator, WaveformType

gen = TelemetryGenerator(WaveformType.SINE, frequency=1.0)

# Generate 100 samples at 10 Hz over 10 seconds - returns immediately
data = gen.generate_batch(sampling_rate=10.0, duration=10.0)
for timestamp, value in data:
    print(timestamp, value)

Multi-Channel Telemetry

from faketelemetry import TelemetryGenerator, WaveformType, MultiChannelTelemetryGenerator

ch1 = TelemetryGenerator(WaveformType.SINE, frequency=1.0)
ch2 = TelemetryGenerator(WaveformType.COSINE, frequency=0.5)
multi = MultiChannelTelemetryGenerator([ch1, ch2])

# Real-time streaming
for sample in multi.stream(sampling_rate=2.0, duration=3):
    print({k: (v[0], v[1]) for k, v in sample.items()})

# Or batch generation
batch_data = multi.generate_batch(sampling_rate=10.0, duration=5.0)

Different Noise Types

from faketelemetry import NoiseInjector, NoiseType, TelemetryGenerator, WaveformType

# Gaussian noise (default)
gaussian_noise = NoiseInjector(noise_level=0.1, noise_type=NoiseType.GAUSSIAN)

# Uniform noise
uniform_noise = NoiseInjector(noise_level=0.2, noise_type=NoiseType.UNIFORM)

# Impulse noise (random spikes)
impulse_noise = NoiseInjector(
    noise_level=1.0, 
    noise_type=NoiseType.IMPULSE, 
    impulse_probability=0.05
)

gen = TelemetryGenerator(WaveformType.SINE, noise_injector=impulse_noise)

Exponential Decay

from faketelemetry import TelemetryGenerator, WaveformType

# Exponential decay - frequency parameter controls decay rate
gen = TelemetryGenerator(
    WaveformType.EXPONENTIAL_DECAY, 
    frequency=0.5,  # decay rate
    amplitude=10.0,  # starting value
    offset=1.0  # asymptotic value
)

Data Export

from faketelemetry import TelemetryGenerator, WaveformType, to_json, to_csv, from_json

gen = TelemetryGenerator(WaveformType.SINE)
data = gen.generate_batch(sampling_rate=10.0, duration=5.0)

# Export to JSON
json_str = to_json(data)
to_json(data, "telemetry.json")  # Save to file

# Export to CSV
csv_str = to_csv(data)
to_csv(data, "telemetry.csv")  # Save to file

# Import back
restored_data = from_json("telemetry.json")

Custom Waveform

from faketelemetry import TelemetryGenerator, WaveformType

def custom_func(t):
    return 42.0  # Constant value

gen_custom = TelemetryGenerator(WaveformType.CUSTOM, custom_func=custom_func)
print('Custom:', next(gen_custom.stream(1)))

Available Waveforms

Waveform Description
SINE Sinusoidal wave
COSINE Cosine wave
SQUARE Square wave (+1/-1)
SAWTOOTH Linear rise, instant drop
TRIANGLE Linear rise and fall
PULSE Brief high, then low
EXPONENTIAL_DECAY Exponential decay curve
RANDOM_NOISE Gaussian random values
CUSTOM User-defined function

Installation

Install from PyPI:

pip install faketelemetry

Or clone this repo and install locally:

pip install .

Or install in editable/development mode:

pip install -e .

Testing

Run all tests:

python -m unittest discover -s tests

Or with pytest:

pytest tests/

Support

For questions or issues, please open a GitHub Issue.

License

MIT

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

faketelemetry-0.2.0.tar.gz (14.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

faketelemetry-0.2.0-py3-none-any.whl (16.1 kB view details)

Uploaded Python 3

File details

Details for the file faketelemetry-0.2.0.tar.gz.

File metadata

  • Download URL: faketelemetry-0.2.0.tar.gz
  • Upload date:
  • Size: 14.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for faketelemetry-0.2.0.tar.gz
Algorithm Hash digest
SHA256 96e81dda9f7e5ba44f21f84edcc509ab065a5cc23dfe0ed738027b0cebb49366
MD5 463b08ab1b1654230346286c99ae2000
BLAKE2b-256 cfb25d69e72cf08c94bacc859518b8b0f4da2e21d15a9bbe1399412a4ff19958

See more details on using hashes here.

Provenance

The following attestation bundles were made for faketelemetry-0.2.0.tar.gz:

Publisher: python-package.yml on adkvi/faketelemetry

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file faketelemetry-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: faketelemetry-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 16.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for faketelemetry-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 78f98b4a7e51e116f925be689ec2ee9d090843b25807c3d208f5eef0c646cb43
MD5 5bf663be84460389367e8a115e33343c
BLAKE2b-256 5e9fe678b52ceeb5a151068d8fbe4cf009a13e4da6b4debfbd5fbdf2470c9d41

See more details on using hashes here.

Provenance

The following attestation bundles were made for faketelemetry-0.2.0-py3-none-any.whl:

Publisher: python-package.yml on adkvi/faketelemetry

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page