Your first capture
rtl_433 is a generic data receiver for the common ISM bands — mainly 433.92 MHz, but also 315 MHz, 345 MHz, 868 MHz (SRD), and 915 MHz. It listens to a software-defined radio, demodulates the signal, runs it through a library of device decoders, and prints what it finds. This page walks you through your first live capture: running with defaults, reading the output, changing the frequency, and recording a signal so you can replay it later.
rtl_433 works with RTL-SDR (Realtek RTL2832-based DVB dongles) and, when built with SoapySDR support, with devices such as LimeSDR, PlutoSDR, HackRF One, and SoapyRemote. The examples below assume a plugged-in RTL-SDR dongle.
Run with the defaults
With no arguments, rtl_433 tunes to its default frequency of 433.92 MHz, uses the default sample rate, and enables every built-in decoder:
rtl_433
Leave it running. As nearby devices — weather stations, thermometers, tire-pressure sensors, remotes — transmit, decoded records appear in the console. Press Ctrl+C to stop.
If nothing appears, you may simply have no transmitters in range on 433.92 MHz, or your antenna/gain may be poor. Try a different band with -f (see below), or add the pulse analyzer with -A to inspect raw signals that did not match any decoder.
Read the console output
By default rtl_433 prints a human-readable record for each decoded message. The fields follow a consistent structure described in the project's data-format documentation.
The following block is an illustrative example of decoded output. Exact fields depend on the device that transmits.
time : 2026-05-31 14:02:18
model : Acurite-Tower id : 11524
channel : A battery_ok : 1
temperature_C : 21.3 humidity : 47
The most common fields you will see:
| Field | Meaning |
|---|---|
time | Reception timestamp |
model | Device identifier, formatted <Manufacturer>-<Model> |
id | Per-device id, used to tell identical models apart |
channel | Optional channel selector on the device |
battery_ok | Battery level: 1 (OK) down to 0 (low/empty) |
temperature_C, humidity, ... | Sensor readings, named <Type>_<Unit> |
You can change how records are emitted with the -F flag, which accepts log, kv, json, csv, mqtt, influx, syslog, trigger, rtl_tcp, http, or null. For machine-readable output, JSON is the usual choice:
rtl_433 -F json
Sensor values are reported in the device's native units by default. Use -C si for metric or -C customary for US units to convert them on output.
Set the frequency with -f
Use -f to tune a different band. The flag accepts plain hertz or a suffix such as M (megahertz) or k (kilohertz). For example, to listen on 868 MHz with a wider sample rate:
rtl_433 -f 868M -s 1024k
A few useful frequency points:
| Band | Flag |
|---|---|
| 433.92 MHz (default) | -f 433.92M |
| 315 MHz | -f 315M |
| 345 MHz | -f 345M |
| 868 MHz (SRD) | -f 868M |
| 915 MHz | -f 915M |
You can pass -f more than once to scan several frequencies, hopping between them with -H (hop interval, in seconds):
rtl_433 -f 433.53M -f 434.02M -H 15
Record to a file with -w
To save the raw signal for later analysis, use -w to write a capture file. The format is chosen by the file extension:
rtl_433 -w capture.cu8
.cu8 is the native I/Q sample format for RTL-SDR receivers (for other receivers .cs16 is typical). rtl_433 understands a range of I/Q formats, including .cu8, .cs8, .cu16, .cs16, .cf32, and .cf64, as well as demodulated/pulse formats such as .ook, .fsk, .psk, .vcd, and .sr (sigrok).
-w writes in append mode; use -W instead to overwrite an existing file.
Because the file extension only encodes the sample format, include the center frequency and sample rate in the filename so you can replay correctly later, for example g001_433.92M_1000k.cu8.
Replay a capture with -r
Once you have a file, -r reads from it instead of from the radio. This is the fastest way to test decoders, reproduce a bug, or work without hardware:
rtl_433 -r capture.cu8
Replaying is identical to a live run except for the source, so all the output flags still apply. For instance, to replay a capture and emit JSON:
rtl_433 -r capture.cu8 -F json
You can also convert between file formats by giving an output file alongside the input — for example turning an I/Q sample file into an .ook pulse file:
rtl_433 -r capture.cu8 -w capture.ook
Quick reference
| Flag | Purpose |
|---|---|
-f <frequency> | Receive frequency (default 433920000); accepts M/k suffixes |
-s <rate> | Sample rate (e.g. -s 1024k) |
-H <seconds> | Hop interval when multiple -f are given |
-d <device> | Select the SDR device (USB index, serial, or SoapySDR query) |
-g <gain> | Set gain in dB (default: auto) |
-F <format> | Output format: log, kv, json, csv, mqtt, influx, syslog, trigger, rtl_tcp, http, null |
-w <file> | Write capture (append); format from extension |
-W <file> | Write capture (overwrite) |
-r <file> | Read from a capture file instead of the radio |
-A | Enable the pulse analyzer |