This blog-post is a bit of a diversion, and builds upon my previous entry of using 433Mhz radio-transmitters and receivers with Arduino and/or ESP8266 devices.
As mentioned in my post I've recently been overhauling my in-house IoT buttons, and I decided to go down the route of using commercially-available buttons which broadcast signals via radio, rather than using IR, or WiFi. The advantage is that I don't need to build any devices, or worry about 3D-printing a case - the commercially available buttons are cheap, water-proof, portable, and reliable, so why not use them? Ultimately I bought around ten buttons, along with a radio-receiver and radio-transmitter modules for my ESP8266 device. I wrote code to run on my device to receive the transmissions, decode the device-ID, and take different actions based upon the specific button pressed.
In the gap between buying the buttons (read: radio transmitters) and waiting for the transmitter/receiver modules I intended to connect to my ESP8266/arduino device(s) I remembered that I'd previously bought a software-defined-radio receiver, and figured I could use it to receive and react to the transmissions directly upon my PC.
The dongle I'd bought in the past was a simple USB-device which identifies itself as follows when inserted into my desktop:
[17844333.387774] usb 3-9: New USB device found, idVendor=0bda, idProduct=2838
[17844333.387777] usb 3-9: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[17844333.387778] usb 3-9: Product: RTL2838UHIDIR
[17844333.387778] usb 3-9: Manufacturer: Realtek
[17844333.387779] usb 3-9: SerialNumber: 00000001
At the time I bought it I wrote a brief blog post, which described tracking aircraft, and I said "I know almost nothing about SDR, except that it can be used to let your computer do stuff with radio."
So my first step was finding some suitable software to listen to the right-frequency and ideally decode the transmissions. A brief search lead me to the following repository:
The RTL_433 project is pretty neat as it allows receiving transmissions and decoding them. Of course it can't decode everything, but it has the ability to recognize a bunch of commonly-used hardware, and when it does it outputs the payload in a useful way, rather than just dumping a bitstream/bytestream.
Once you've got your USB-dongle plugged in, and you've built the project you can start receiving and decoding all discovered broadcasts like so:
skx@deagol ~$ ./build/src/rtl_433 -U -G
trying device 0: Realtek, RTL2838UHIDIR, SN: 00000001
Found Rafael Micro R820T tuner
Using device 0: Generic RTL2832U OEM
Exact sample rate is: 250000.000414 Hz
Sample rate set to 250000.
Bit detection level set to 0 (Auto).
Tuner gain set to Auto.
Reading samples in async mode...
Tuned to 433920000 Hz.
...
Here we've added flags:
-G
- Enable all decoders. So we're not just listening for traffic at 433Mhz, but we're actively trying to decode the payload of the transmissions.
-U
- Timestamps are in UTC
Leaving this running for a few hours I noted that there are several nearby cars which are transmitting data about their tyre-pressure:
2018-02-10 11:53:33 : Schrader : TPMS : 25
ID: 1B747B0
Pressure: 2.500 bar
Temperature: 6 C
Integrity: CRC
The second log is from running with "-F json
" to cause output to be generated in JSON format:
{"time" : "2018-02-10 09:51:02",
"model" : "Toyota",
"type" : "TPMS",
"id" : "5e7e0637",
"code" : "63e6026d",
"mic" : "CRC"}
In both cases we see "TPMS", and according to wikipedia that is Tyre Pressure Monitoring System. I'm a little shocked to receive this data, unencrypted!
Other events also become visible, when I left the scanner running, which is presumably some kind of temperature-sensor a neighbour has running:
2018-02-10 13:19:08 : RF-tech
Id: 0
Battery: LOW
Button: 0
Temperature: 0.0 C
Anyway I have a bunch of remote-controlled sockets, branded "NEXA", which look like this:
When I press the remote I can see the transmissions and program my PC to react to them:
2018-02-11 07:31:20 : Nexa
House Code: 39920705
Group: 1
Channel: 3
State: ON
Unit: 2
In conclusion:
- SDR can be used to easily sniff & decode cheap and commonly available 433Mhz-based devices.
- "Modern" cars transmit their tyre-pressure, apparently!
- My neighbours can probably overhear my button presses.
Tags: esp8266, iot, sdr 2 comments
SDR has one shortcoming it is only for receiving and if you want to switch you need a transmitter. So the best and cheapest thing to do is buying a Sonoff RF-Bridge and flash it with Tasmota software.
https://github.com/arendst/Sonoff-Tasmota/wiki/Sonoff-RF-Bridge-433