Receive temperature, 433 MHz sensors, with RTL-SDR

 
Updated 2024-12-01 !

In my underfloor heating project, using Node-RED, I have to have one sensing thermometer per room/zone, seems to be 8 in total, so therefore it would be nice with a wireless battery sourced device with good resolution and frequent updates.

During the test phase I used a Z-way device but the resolution was pretty bad. Another device mentioned is the Ruuvi tag but since it's a bluetooth device the transmitting range could be better.

After some googling I went for 433 MHz devices.

Intro
Thermometer
For some years ago I used a Tellstick for home automation and also had some ESIC WT450(WT) thermometers. They where still working so how to receive their data sent over 433 MHz ?

RTL-SDR
Another project have been receiving AIS data with a RTL-SDR so after some search I found an amazing package, rtl_433decoding over 150 device protocols including my WT.

Antenna
In the beginning of the tests I had some problem receiving data from the sensors due to that I used an antenna from the mentioned Tellstik device. When I built my own dipol antenna, check picture, it worked much better.

I built the dipol from a cut SMA coaxial cable and 2 wires from a ordinary 230 VAC cable. Please note that the length should be changed from 49 cm to 16,5 cm. I soldered the connections, instead of the choc block, and used heat shrink tubing to isolate.

Warning 
I hade big problems to receive any data when this setup was used with a Raspberry Pi 5. Check out this post and search for "Warning" to get some hints to make it work !

Installing
Installing on Raspberry Pi(RPi), with OS Bookworm, it's easy since there is a ready package

sudo apt install rtl-433

For other versions check the help or compile the latest version yourself.

Test
Start with just checking the command help

rtl_433 -h

and then check your environment with 

sudo rtl_433 

Probably you will discover that also your neighbors have 433 devices.

Checking the device list, in the help command, I saw that my WT device had id "33". So with the command 

sudo rtl_433 -R 33 

I filtered out everything except my own device.

For other command use just check the fantastic documentation.

Node-RED
The application for the underfloor heating project is using Node-Red(NR) so the first idea I got was to use the "exec" node, executing "sudo rtl_433 -R 33 -F json" and then use the output to retrieve the temperature.

But I found the "node-red-contrib-rtl_433" node which have a nice interface and will output the temperature as

"msg.payload.temperature_C"

Another way
It could be that you want to send the out data to some other place ? The command below sends the output to local host, but it could be another host, on port 1433. Using NodeRed, just set up a UDP in node, port 1433, to receive the data.

socat -u EXEC:"/usr/local/bin/rtl_433 -R 33 -F json" UDP-SENDTO:127.0.0.1:1433


Wrap up
Sensor resolution
The resolution for my WT devices where good enough but the accuracy could be better. I used a referens thermometer and then applied an offset to the measured value.

Compact install
sudo apt install librtlsdr-dev cmake
wget https://github.com/merbanan/rtl_433/archive/refs/heads/master.zip
unzip master.zip && mv rtl_433-master rtl_433

cd rtl_433

cmake -B build

sudo cmake --build build --target install

which rtl_433

/usr/local/bin/rtl_433

 

Comments

Popular posts, last 30 days

Raspberry Pi OS Lite with GUI, RDP, VNC, Chromium

iCloud drive sync, or mount, with a Linux, Ubuntu, device

Installing Ubuntu 24.04 or 24.10/25.04 on an old MacBook Air(2011)

IVT, Bosch heat pump easy integration, Home Assistant

Home Assistant with VirtualBox or Proxmox or Linux KVM ???

Clone the Raspberry boot disk

Raspberry Pi 2, 3, 4, 5 USB SSD or USB drive boot

NetworkManager UI and access point, hotspot

SeaTalk1 to NMEA 0183 converter, DIY

IKEA Bäve dimmer hack II