ISM-Band RF Capture & Replay Tool for PlutoSDR
REGULATORY DISCLAIMER
RF transmission is regulated by local authorities. Replay only signals you own or are permitted to transmit, into a dummy load or at the lowest power required.
PlutoSiege is a terminal application (TUI) for recording and replaying short ISM-band RF bursts (e.g. 433 MHz, 868 MHz) from car remotes, garage doors, doorbells, and wireless sensors.
Built for the ADALM-Pluto (AD9363/AD9361) SDR architecture, it saves recordings in standard SigMF (Signal Metadata Format) so they can be opened in other SDR tools like URH, IQEngine, GNU Radio, or Inspectrum.
Fully supports both official Analog Devices ADALM-Pluto hardware (Rev. B / Rev. C) and third-party clones/analogues based on the same AD9363/AD9361 transceivers (such as Pluto Nano, Pluto Plus, and other custom PlutoSDR boards).
- Level Metering: Real-time dBFS level meter with saturation (
SAT!) warning. - Threshold Detection: Automated noise floor estimation or manual threshold setting.
- Pre-Trigger Buffer: Keeps a ring buffer of history before trigger so preambles are not missed.
- SigMF Format: Saves
.sigmf-metaand.sigmf-datapairs. - GPS Geotagging: Records precise coordinates in SigMF metadata via
gpsdand displays geotags during replay. - Digital Loopback Test: Built-in test screen to check hardware loopback and SNR.
- Linux Native: Built and optimized specifically for Linux environments (supports all major distribution families: Debian-based, RPM-based, Arch-based, etc.).
Install the required IIO system drivers for your distribution family:
Debian-based (Ubuntu, Debian, Kali, Mint, etc.):
sudo apt update && sudo apt install -y libiio0 libiio-dev libiio-utilsRPM-based (Fedora, RHEL, CentOS, Rocky, etc.):
sudo dnf install -y libiio python3-iio libiio-utilsArch-based (Arch Linux, Manjaro, etc.):
sudo pacman -S libiioIf you plan to use GPS geotagging for SigMF recordings, install the gpsd daemon and tools:
Debian-based:
sudo apt install -y gpsd gpsd-clientsRPM-based:
sudo dnf install -y gpsd gpsd-clientsArch-based:
sudo pacman -S gpsdNote: Configure and start the
gpsdservice according to your specific GPS receiver hardware (USB dongle, UART module, Bluetooth, or virtual source) so that it listens on127.0.0.1:2947. Once running, enable GPS in PlutoSiege Settings (Enable GPS (gpsd): yes).
Clone the repository and install dependencies:
git clone https://github.com/SketchTurnerDev/pluto_siege.git
cd pluto_siege
pip install -r requirements.txtLaunch via the main script:
python pluto_siege.pyOr run as a package:
python -m pluto_siegeOr install in editable mode:
pip install -e .
pluto_siegeThe main menu provides access to all core operations:
Listens for incoming RF bursts on the configured receiver frequency (rx_freq).
- Real-time dBFS level meter with saturation (
SAT!) warnings. - Automated noise floor estimation or manual threshold detection.
- Pre-trigger history ring buffer to preserve signal preambles.
- Saves captures as standard SigMF (
.sigmf-metaand.sigmf-data) pairs with optional GPS geolocation tags.
Browse and replay saved SigMF recordings.
- Displays recorded timestamp, center frequency, sample rate, sample count, and GPS coordinates.
- Replays signals via the PlutoSDR transmitter on the configured frequency (
tx_freq). - In-place deletion of unwanted recordings (
DorDelete).
Internal hardware diagnostic to verify the SDR transceiver and USB/DMA pipeline.
- Transmits an internal digital test tone through the AD936x loopback path.
- Calculates received Signal-to-Noise Ratio (SNR) to confirm hardware health.
Configures radio parameters, trigger behavior, GPS integration, and interface preferences. Settings can be edited directly in the TUI and are saved to settings.json.
| Parameter | Type | Default | Description |
|---|---|---|---|
pluto_uri |
str |
usb: |
Pluto connection URI (usb: or ip:). |
pluto_ip |
str |
192.168.2.1 |
Remembered Pluto IP address when toggling between USB and IP modes. |
rx_freq |
int |
433920000 |
Receiver center frequency in Hz. |
tx_freq |
int |
433920000 |
Transmitter center frequency in Hz. |
permit_out_of_spec_frequency |
bool |
false |
Allows tuning outside 325 MHz – 3.8 GHz range (up to 70 MHz – 6.0 GHz). |
sample_rate |
int |
2100000 |
Sample rate in Hz (521 kSPS – 61.44 MSPS). |
rx_gain |
float |
15.0 |
Manual RX hardware gain in dB (0.0 to 74.5 dB). |
tx_gain |
float |
0.0 |
Manual TX attenuation gain in dB (-89.75 to 0.0 dB). |
auto_threshold |
bool |
true |
Automated noise floor calculation. |
auto_trigger_margin |
float |
8.0 |
Margin in dB above noise floor required to trigger capture (1.0 to 30.0 dB). |
manual_threshold |
float |
-30.0 |
Fixed trigger threshold in dBFS when auto is off. |
pre_trigger_buffers |
int |
2 |
Number of pre-trigger buffers kept in memory. |
silence_seconds |
float |
0.80 |
Silence required to stop recording. |
max_post_trigger_seconds |
float |
4.00 |
Maximum recording length after trigger. |
rx_buffer_size |
int |
32768 |
DMA buffer size in samples (1024 to 32768). |
enable_gps |
bool |
false |
Hardware GPS geolocation in SigMF recordings via gpsd daemon. |
gpsd_host |
str |
127.0.0.1 |
Local or remote gpsd daemon host address. |
gpsd_port |
int |
2947 |
gpsd daemon TCP port (default 2947). |
enable_sound |
bool |
true |
Acoustic cue feedback for trigger, TX, and status events. |
enable_mouse |
bool |
true |
Terminal mouse interaction support. |
Distributed under the GNU General Public License v3.0 (GPL-3.0). See LICENSE for details.

