Skip to main content

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

FlagArgumentMeaningDefault
-ddevice specSelect the input device (RTL-SDR index/serial, SoapySDR query, rtl_tcp, or help)first RTL-SDR (index 0)
-ffrequencyReceive frequency; repeatable to listen on several frequencies433920000 Hz
-HsecondsHop interval when more than one -f is given600 seconds
-ssample rateSDR sample rate250000 Hz
-ggain | helpTuner gainauto
-pppmCorrect RTL-SDR tuner frequency offset error0
note

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 0 selects the first RTL-SDR dongle, -d 1 the 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 networked rtl_tcp server instead of a local USB device.
  • help — print the device-selection help and exit.
List what -d understands
rtl_433 -d help

If you omit -d entirely, rtl_433 uses the first available RTL-SDR device.

tip

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:

Listen on the default 433.92 MHz 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.

Tune the 868 MHz SRD band
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.

Hop between two frequencies, switching every 15 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.

info

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.

Capture a wider slice of spectrum
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 0 selects 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=2 on a LimeSDR.
Fixed 40 dB gain on an RTL-SDR
rtl_433 -g 40
Per-stage gain on a SoapySDR device
rtl_433 -g LNA=20,TIA=8,PGA=2
Show available gain settings
rtl_433 -g help
tip

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.

Apply a +51 ppm tuner correction
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.

Illustrative: one named dongle, two bands, tuned and corrected
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