Installing and Setting up RTL-433

RTL-433 is the software to use if you want to pick up RF signals from the air and bring them into Home Assistant. You can check it out here, https://github.com/merbanan/rtl_433. The authors have done a great job with the documentation. It will work on Windows, MacOS or Linux. I prefer Debian or Ubuntu Linux myself.

As a prerequisite for Home Assistant, you will need to have the MQTT software installed. I believe this means it won't work if it is hosted or if you are using a container, but check me on that.

To install just use 'sudo apt install rtl-433'.

To get it to work you will need an additional package like RTL-SDR or SoapySDR for drivers. RTL-SDR also includes tools for testing and analysis which you can check out here, https://github.com/osmocom/rtl-sdr.

Once again, super easy to install. Just use 'sudo apt install rtl-sdr'.

You can do a lot of the same things with rtl-sdr that you can with rtl_433. The benefit of rtl_433 is having the nearly 300 analyzer device protocols built-in and the file output options. The device protocols range from an Oil Ultrasonic Standard Tank monitor to a LaCrosse-TX141W anemometer. And the output options are just as diverse, from syslog to MQTT.

    = Output format option =
  [-F log|kv|json|csv|mqtt|influx|syslog|trigger|null] Produce decoded output in given format.

I also installed mosquitto-clients, but it isn't necessary. I played with it for a little bit but it was harder to get the topics just right. The MQTT output option in RTL_433 does that for you. I also had to play around with the service file to get it to start and run correctly on Linux. It's not hard but a little bit of a pain. You can't use a pipe character in an ExecStart command, unless you start it from a shell like, "/bin/sh 'rtl_433 -f 433M...'"

I wanted to eventually get a service set up and have it read options from a config file so I didn't have to adjust a service file constantly. I copied the example .conf file from here to my home directory and started editing it.

I added these lines:

frequency 433M
frequency 915M
hop_interval 30
sample_rate 2048k
output mqtt://192.168.x.x:1883,user=mqtt-user,pass=mqtt-password,retain=0

And I found that I had copied this example from a version more up to date than what I had, so I had to comment out the protocols higher than 276.

With this in place, it was time to plug in the tuner and test it out. I went right for it and used,

rtl_433 -F log:rtl.log

Of course, it crashed immediately. The rtl.log file said no device found. I tried a reboot, another USB port, another tuner, and no luck. Finally, I plugged a tuner into one of the front USB ports of the Lenovo computer I was using and it fired right up. This time I used rtl_test.

steve@debian:~$ rtl_test
Found 1 device(s):
  0:  Realtek, RTL2838UHIDIR, SN: 00000001

Using device 0: Generic RTL2832U OEM
Detached kernel driver
Found Rafael Micro R820T tuner

Then I used rtl_433 again and let it go for a while. I started receiving MQTT messages in Home Assistant fairly quick. MQTT Explorer makes these messages a lot easier to see and get a handle on what information you are getting. More on that later.

Now to set this up to run as a service and on boot. I created a service file in /etc/systemd/system.

sudo nano /etc/systemd/system/rtl_433.service

I think I copied a samba service file, but make sure to set ExecStart to use rtl_433 and the WorkingDirectory to wherever you have stored your config file.

______________________________________
[Unit]
Description=RTL-433 Service
After=network.target

[Service]
ExecStart=rtl_433
WorkingDirectory=/home/steve
User=steve
Restart=on-failure

[Install]
WantedBy=multi-user.target
______________________________________

These commands will set the service up for you

sudo systemctl enable rtl_433.service
sudo systemctl daemon-reload
sudo systemctl start rtl_433.service

And use the status command to verify it has started.

sudo systemctl status rtl_433.service

 rtl_433.service - RTL-433 Service
     Loaded: loaded (/etc/systemd/system/rtl_433.service; enabled; preset: enab>
     Active: active (running) since Mon 2026-02-16 20:00:34 EST; 59s ago
 Invocation: a94d34f35a504f09a42dcbb09fbb63a5
   Main PID: 3479 (rtl_433)
      Tasks: 3 (limit: 18918)
     Memory: 12.7M (peak: 12.9M)
        CPU: 305ms
     CGroup: /system.slice/rtl_433.service
             └─3479 rtl_433

If not check:

sudo journalctl -u rtl_433.service

That should do it!

Next we'll watch it live and see what it picks up.


References


Comments

Popular posts from this blog

Blue Charm beacons, TLM data via ESPHome

Tracking BMs with Home Assistant AKA Poop Button

Mason Bees