Input & tuning
Before rtl_433 can decode anything it has to be tuned to the right hardware and the right slice of spectrum. This page covers the input side of the command line: choosing which SDR to use (-d), which frequency or frequencies to listen on (-f, with -H to hop between several), and the radio parameters that affect signal quality — sample rate (-s), gain (-g), and tuner offset correction (-p).
All defaults below are the program defaults reported in the rtl_433 usage output and man page.
Quick reference
| Flag | Argument | Meaning | Default |
|---|---|---|---|
-d | device spec | Select the input device (RTL-SDR index/serial, SoapySDR query, rtl_tcp, or help) | first RTL-SDR (index 0) |
-f | frequency | Receive frequency; repeatable to listen on several frequencies | 433920000 Hz |
-H | seconds | Hop interval when more than one -f is given | 600 seconds |
-s | sample rate | SDR sample rate | 250000 Hz |
-g | gain | help | Tuner gain | auto |
-p | ppm | Correct RTL-SDR tuner frequency offset error | 0 |
Frequencies and sample rates accept the SI-style suffixes k, M, and G. For example 433.92M, 1024k, and 250k are all valid. The hop interval (-H) is given as a plain number of seconds. The same settings are available as config-file directives (frequency, hop_interval, sample_rate, gain, ppm_error, device) if you prefer a config file over command-line flags.
Selecting the input device (-d)
-d chooses where the IQ samples come from. The accepted forms are:
-d <RTL-SDR USB device index> | :<RTL-SDR USB device serial> | <SoapySDR device query> | rtl_tcp | help
- RTL-SDR by index —
-d 0selects the first RTL-SDR dongle,-d 1the second, and so on. - RTL-SDR by serial — prefix the serial with a colon, e.g.
-d :19j8. This is more reliable than an index when several dongles are plugged in. - SoapySDR query — a device query string passed to SoapySDR, which covers LimeSDR, PlutoSDR, HackRF One, SoapyRemote, and others.
rtl_tcp— read from a networkedrtl_tcpserver instead of a local USB device.help— print the device-selection help and exit.
rtl_433 -d help
If you omit -d entirely, rtl_433 uses the first available RTL-SDR device.
Use the colon-serial form (-d :SERIAL) in scripts and service units. USB enumeration order is not stable across reboots or replugs, so a fixed index like -d 0 can silently start reading from the wrong dongle.
Tuning the frequency (-f)
-f sets the receive frequency. The default is the 433.92 MHz ISM band:
rtl_433
# equivalent to:
rtl_433 -f 433.92M
Other commonly useful ISM/SRD bands are 315M, 345M, 868M, and 915M. Choose the one your target devices transmit on — for example many North American sensors use 915 MHz while European SRD devices use 868 MHz.
rtl_433 -f 868M
Hopping across several frequencies (-f repeated + -H)
-f may be given more than once. When you supply multiple frequencies, rtl_433 listens on one at a time and rotates through them. -H sets how long it stays on each frequency before hopping to the next; it is only used when multiple frequencies are given, and defaults to 600 seconds.
rtl_433 -f 433.53M -f 434.02M -H 15
In this example rtl_433 watches 433.53 MHz for 15 seconds, switches to 434.02 MHz for 15 seconds, and repeats.
Because hopping is time-sliced rather than simultaneous, you can miss transmissions that occur on band A while the receiver is parked on band B. For sensors that report frequently a short interval is fine; for ones that transmit rarely, prefer running a separate rtl_433 instance per band (one device each) so nothing is dropped.
Sample rate (-s)
-s sets the SDR sample rate, which determines how much bandwidth around the tuned frequency is captured. The default is 250000 Hz (250k). Other valid settings include 1024k, 2048k, and 3200k.
rtl_433 -f 915M -s 1024k
A wider sample rate captures more bandwidth (useful for wideband or frequency-agile devices) at the cost of more CPU. The default 250k is enough for most narrowband OOK/ASK sensors.
Gain (-g)
-g sets the tuner gain. The default is automatic gain control:
-g <gain> | help (default: auto)
- RTL-SDR — gain is specified in dB; a value of
0selects auto gain. - SoapySDR — you can pass a single overall gain in dB (distributed automatically) or address individual gain elements, e.g.
LNA=20,TIA=8,PGA=2on a LimeSDR.
rtl_433 -g 40
rtl_433 -g LNA=20,TIA=8,PGA=2
rtl_433 -g help
Start with auto gain (the default). Only set a fixed gain if a strong nearby transmitter is overloading the front end (turn gain down) or weak distant sensors are being missed (turn gain up). Manual gain that is too high adds noise and harms decoding as much as gain that is too low.
Frequency offset correction (-p)
Inexpensive RTL-SDR dongles use crystals that drift, so the frequency they actually tune can be off by a few kHz. -p corrects this tuner offset, expressed in parts per million; the default is 0.
rtl_433 -f 433.92M -p 51
Determine the right value once for your specific dongle (it is constant per device, though it varies slightly with temperature), then keep using it. A wrong-enough offset can push a signal outside the captured bandwidth and cause rtl_433 to decode nothing.
A complete example
Illustrative example — the device serial, frequencies, and ppm value below are made up to show the flags together. Replace them with values for your own hardware and target sensors.
rtl_433 \
-d :7a3f \
-f 433.92M -f 915M \
-H 30 \
-s 1024k \
-g 40 \
-p 51
This selects the RTL-SDR with serial 7a3f, hops between the 433.92 MHz and 915 MHz bands every 30 seconds, samples at 1024k, applies a fixed gain of 40 dB, and corrects a 51 ppm tuner offset.
Sources
- rtl_433 README — command-line usage and option descriptions.
- rtl_433 man page (
man/man1/rtl_433.1) — canonical option reference and defaults. - Example configuration file (
conf/rtl_433.example.conf) — config-file directive names and suggested values for frequency, sample rate, gain, and ppm. - triq.org/rtl_433 — project overview, supported SDR hardware, and ISM bands.