December 01, 2024

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

 

No comments:

Post a Comment

Feel free to leave a comment ! ... but due to a lot of spam comments I have to moderate them. Will reply ASAP !