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