Software Defined Radio
rtl_433
rtl_433 decodes the enormous ecosystem of cheap wireless devices that live
around 433 MHz (and 868/915 MHz) — weather stations, tire-pressure sensors, remote
thermometers, door and motion sensors, utility meters, and hundreds more. Point an
RTL dongle at the band, run rtl_433, and it identifies and decodes the devices it
recognizes, printing their readings as clean structured data. Despite the name it
works with any SDR, and it’s the single best demonstration of just how much
unencrypted information is broadcasting around you all the time.
Official-repo package; Security → Software Defined Radio → rtl_433.
The help it prints
rtl_433 version 25.12 (2025-12-12) inputs file rtl_tcp RTL-SDR SoapySDR with TLS
rtl_433: invalid option -- '-'
rtl_433: invalid option -- 'e'
rtl_433: invalid option -- '-'
Generic RF data receiver and decoder for ISM band devices using RTL-SDR and SoapySDR.
Full documentation is available at https://triq.org/
Usage:
A "rtl_433.conf" file is searched in "./", XDG_CONFIG_HOME e.g. "$HOME/.config/rtl_433/",
SYSCONFDIR e.g. "/usr/local/etc/rtl_433/", then command line args will be parsed in order.
= General options =
[-V] Output the version string and exit
[-v] Increase verbosity (can be used multiple times).
-v : verbose notice, -vv : verbose info, -vvv : debug, -vvvv : trace.
[-c <path>] Read config options from a file
= Tuner options =
[-d <RTL-SDR USB device index> | :<RTL-SDR USB device serial> | <SoapySDR device query> | rtl_tcp | help]
[-g <gain> | help] (default: auto)
[-t <settings>] apply a list of keyword=value settings to the SDR device
e.g. for SoapySDR -t "antenna=A,bandwidth=4.5M,rfnotch_ctrl=false"
for RTL-SDR use "direct_samp[=1]", "offset_tune[=1]", "digital_agc[=1]", "biastee[=1]"
[-f <frequency>] Receive frequency(s) (default: 433920000 Hz)
[-H <seconds>] Hop interval for polling of multiple frequencies (default: 600 seconds)
[-p <ppm_error>] Correct rtl-sdr tuner frequency offset error (default: 0)
[-s <sample rate>] Set sample rate (default: 250000 Hz)
[-D quit | restart | pause | manual] Input device run mode options (default: quit).
= Demodulator options =
[-R <device> | help] Enable only the specified device decoding protocol (can be used multiple times)
Specify a negative number to disable a device decoding protocol (can be used multiple times)
[-X <spec> | help] Add a general purpose decoder (prepend -R 0 to disable all decoders)
[-Y auto | classic | minmax] FSK pulse detector mode.
[-Y level=<dB level>] Manual detection level used to determine pulses (-1.0 to -30.0) (0=auto).
[-Y minlevel=<dB level>] Manual minimum detection level used to determine pulses (-1.0 to -99.0).
[-Y minsnr=<dB level>] Minimum SNR to determine pulses (1.0 to 99.0).
[-Y autolevel] Set minlevel automatically based on average estimated noise.
[-Y squelch] Skip frames below estimated noise level to reduce cpu load.
[-Y ampest | magest] Choose amplitude or magnitude level estimator.
= Analyze/Debug options =
[-A] Pulse Analyzer. Enable pulse analysis and decode attempt.
Disable all decoders with -R 0 if you want analyzer output only.
[-y <code>] Verify decoding of demodulated test data (e.g. "{25}fb2dd58") with enabled devices
= File I/O options =
[-S none | all | unknown | known] Signal auto save. Creates one file per signal.
Note: Saves raw I/Q samples (uint8 pcm, 2 channel). Preferred mode for generating test files.
[-r <filename> | help] Read data from input file instead of a receiver
[-w <filename> | help] Save data stream to output file (a '-' dumps samples to stdout)
[-W <filename> | help] Save data stream to output file, overwrite existing file
= Data output options =
[-F log | kv | json | csv | mqtt | influx | syslog | trigger | rtl_tcp | http | null | help] Produce decoded output in given format.
Append output to file with :<filename> (e.g. -F csv:log.csv), defaults to stdout.
Specify host/port for syslog with e.g. -F syslog:127.0.0.1:1514
[-M time[:<options>] | protocol | level | noise[:<secs>] | stats | bits | help] Add various meta data to each output.
[-K FILE | PATH | <tag> | <key>=<tag>] Add an expanded token or fixed tag to every output line.
[-C native | si | customary] Convert units in decoded output.
[-n <value>] Specify number of samples to take (each sample is an I/Q pair)
[-T <seconds>] Specify number of seconds to run, also 12:34 or 1h23m45s
[-E hop | quit] Hop/Quit after outputting successful event(s)
[-h] Output this usage help and exit
Use -d, -g, -R, -X, -F, -M, -r, -w, or -W without argument for more help
Examples
# Listen on the default 433.92 MHz and decode everything recognized
rtl_433
# Output decoded devices as JSON (easy to log or pipe)
rtl_433 -F json
# Tune to the 868 MHz band instead
rtl_433 -f 868M
# Log every decode to a file with timestamps
rtl_433 -F json:devices.json
# Analyze/annotate an unknown signal to help add a new decoder
rtl_433 -A