rtl_433

What is rtl_433?

rtl_433 is an open-source tool that decodes radio signals in the 433 MHz ISM band (and other frequencies). It supports a wide range of devices: weather stations, tire pressure sensors, wireless thermometers, domotic remotes, and many other IoT sensors.

Despite the name, rtl_433 works with any SDR supported by SoapySDR, not just RTL-SDR dongles.

Installation

sudo dnf install rtl_433

Usage

Live Capture with BladeRF

Listen on 433.92 MHz using a BladeRF via SoapySDR:

rtl_433 -d soapy=0,driver=bladerf -f 433920000 -g 60

Analysis Mode

Use -A to enable analysis mode, which prints detailed pulse/gap timing information and attempts to guess the modulation:

rtl_433 -d soapy=0,driver=bladerf -f 433920000 -g 60 -A

Saving Signals

Use -S 2M to save detected signals as .cs16 files (complex signed 16-bit IQ samples):

rtl_433 -d soapy=0,driver=bladerf -f 433920000 -g 60 -A -S 2M

Files are numbered sequentially (g001_433.92M_250k.cs16, g002_433.92M_250k.cs16, …), preserving chronological order.

Replaying Captured Signals

Replay a single .cs16 file:

rtl_433 -r g001_433.92M_250k.cs16 -A

Batch Analysis

Replay all captured files and count occurrences of each decoded frame:

for f in *.cs16; do rtl_433 -r "$f" -A 2>/dev/null; done \
  | grep "^codes" | sort | uniq -c | sort -rn

Extract unique codes of a specific size in capture order:

for f in $(ls -1 *.cs16 | sort); do rtl_433 -r "$f" -A 2>/dev/null | grep "^codes.*{52}"; done | awk '!seen[$0]++'

Key Flags

FlagDescription
-d soapy=0,driver=bladerfUse BladeRF via SoapySDR
-f 433920000Tune to 433.92 MHz
-g 60Set gain to 60 dB
-AAnalysis mode (pulse timing + modulation guessing)
-S 2MSave detected signals as .cs16 files
-r file.cs16Replay a saved signal file
-X '...'Use a flex decoder with custom parameters

File Format

Saved signals use the .cs16 format: complex signed 16-bit IQ samples. The filename encodes the capture frequency and sample rate (e.g., g001_433.92M_250k.cs16 = 433.92 MHz at 250 kSPS).

References