rtl_433 (https://github.com/merbanan/rtl_433) is a program that allows you to use an RTL2832 based USB DVB device as a generic receiver for 433 MHz devices (temperature sensors, weather stations etc).

Here you will find my unofficial Windows 32/64 bit builds compiled using MinGW. For my librtlsdr builds go here.

UPDATE 13/04/2016 - fixes a problem with file input (-r)

Usage tips

  • If you can see signals in other programs but find nothing is decoded in rtl_433 try adjusting the gain and bit detection levels:

    rtl_433.exe -g 35 -l 0

These values work for me but are highly dependent on signal strength/noise so you will have to experiment. -l 0 is automatic level detection (EDIT: this is now the default). Enabling analyze mode (-a) can be helpful in working out what the program is seeing (if anything).

  • If you have a slow CPU and need to save some resources you might want to disable some devices e.g.:

    rtl_433.exe -R 12

would enable support for Oregon Scientific weather sensors and disable all the rest

Download

rtl_433 windows 32 bit binary (11/11/2016)

rtl_433 windows 64 bit binary (11/11/2016)

The binaries above are tested by me and known to work. For the most up to date version you can try my automatic daily builds (32 bit / 64 bit) but note I do not test these and they may or may not work.

Usage:  = Tuner options =
        [-d <RTL-SDR USB device index>] (default: 0)
        [-g <gain>] (default: 0 for auto)
        [-f <frequency>] [-f...] Receive frequency(s) (default: 433920000 Hz)
        [-p <ppm_error] Correct rtl-sdr tuner frequency offset error (default: 0)
        [-s <sample rate>] Set sample rate (default: 250000 Hz)
        [-S] Force sync output (default: async)
        = Demodulator options =
        [-R <device>] Enable only the specified device decoding protocol (can be used multiple times)
        [-G] Enable all device protocols, included those disabled by default
        [-l <level>] Change detection level used to determine pulses [0-16384] (0 = auto) (default: 0)
        [-z <value>] Override short value in data decoder
        [-x <value>] Override long value in data decoder
        [-n <value>] Specify number of samples to take (each sample is 2 bytes: 1 each of I & Q)
        = Analyze/Debug options =
        [-a] Analyze mode. Print a textual description of the signal. Disables decoding
        [-A] Pulse Analyzer. Enable pulse analyzis and decode attempt
        [-D] Print debug info on event (repeat for more info)
        [-q] Quiet mode, suppress non-data messages
        [-W] Overwrite mode, disable checks to prevent files from being overwritten
        = File I/O options =
        [-t] Test signal auto save. Use it together with analyze mode (-a -t). Creates one file per signal
                 Note: Saves raw I/Q samples (uint8 pcm, 2 channel). Preferred mode for generating test files
        [-r <filename>] Read data from input file instead of a receiver
        [-m <mode>] Data file mode for input / output file (default: 0)
                 0 = Raw I/Q samples (uint8, 2 channel)
                 1 = AM demodulated samples (int16 pcm, 1 channel)
                 2 = FM demodulated samples (int16) (experimental)
                 3 = Raw I/Q samples (cf32, 2 channel)
                 Note: If output file is specified, input will always be I/Q
        [-F] kv|json|csv Produce decoded output in given format. Not yet supported by all drivers.
        [-C] native|si|customary Convert units in decoded output.
        [-T] specify number of seconds to run
        [-U] Print timestamps in UTC (this may also be accomplished by invocation with TZ environment variable set).
        [<filename>] Save data stream to output file (a '-' dumps samples to stdout)






Supported device protocols:
    [01]* Silvercrest Remote Control
    [02]  Rubicson Temperature Sensor
    [03]  Prologue Temperature Sensor
    [04]  Waveman Switch Transmitter
    [05]* Steffen Switch Transmitter
    [06]* ELV EM 1000
    [07]* ELV WS 2000
    [08]  LaCrosse TX Temperature / Humidity Sensor
    [09]* Acurite 5n1 Weather Station
    [10]* Acurite 896 Rain Gauge
    [11]  Acurite 609TXC Temperature and Humidity Sensor
    [12]  Oregon Scientific Weather Sensor
    [13]* Mebus 433
    [14]* Intertechno 433
    [15]  KlikAanKlikUit Wireless Switch
    [16]  AlectoV1 Weather Sensor (Alecto WS3500 WS4500 Ventus W155/W044 Oregon)
    [17]* Cardin S466-TX2
    [18]  Fine Offset Electronics, WH-2 Sensor
    [19]  Nexus Temperature & Humidity Sensor
    [20]  Ambient Weather Temperature Sensor
    [21]  Calibeur RF-104 Sensor
    [22]* X10 RF
    [23]* DSC Security Contact
    [24]* Brennstuhl RCS 2044
    [25]* GT-WT-02 Sensor
    [26]* Danfoss CFR Thermostat
    [27]* Energy Count 3000 (868.3 MHz)
    [28]* Valeo Car Key
    [29]  Chuango Security Technology
    [30]  Generic Remote SC226x EV1527
    [31]  TFA-Twin-Plus-30.3049 and Ea2 BL999
    [32]  Fine Offset WH1080 Weather Station
    [33]  WT450
    [34]  LaCrosse WS-2310 Weather Station
    [35]  Esperanza EWS
    [36]* Efergy e2 classic
    [37]* Inovalley kw9015b rain and Temperature weather station
    [38]  Generic temperature sensor 1
    [39]* Acurite 592TXR Temp/Humidity, 5n1 Weather Station, 6045 Lightning
    [40]* Acurite 986 Refrigerator / Freezer Thermometer
    [41]  HIDEKI TS04 Temperature and Humidity Sensor
    [42]  Watchman Sonic / Apollo Ultrasonic / Beckett Rocket oil tank monitor
    [43]  CurrentCost Current Sensor
    [44]  emonTx OpenEnergyMonitor
    [45]  HT680 Remote control
    [46]  S3318P Temperature & Humidity Sensor
    [47]  Akhan 100F14 remote keyless entry
    [48]  Quhwa
    [49]  OSv1 Temperature Sensor
    [50]  Proove
    [51]  Bresser Thermo-/Hygro-Sensor 3CH
    [52]  Springfield Temperature and Soil Moisture
    [53]  Oregon Scientific SL109H Remote Thermal Hygro Sensor
    [54]  Acurite 606TX Temperature Sensor
    [55]  TFA pool temperature sensor
    [56]  Kedsum Temperature & Humidity Sensor
    [57]  blyss DC5-UK-WH (433.92 MHz)
    [58]  Steelmate TPMS
    [59]  Schraeder TPMS
    [60]* LightwaveRF
    [61]  Elro DB286A Doorbell
    [62]  Efergy Optical
    [63]  Honda Car Key
    [64]* Template decoder
    [65]  Fine Offset Electronics, XC0400
    [66]  Radiohead ASK
    [67]  Kerui PIR Sensor
    [68]  Fine Offset WH1050 Weather Station
    [69]  Honeywell Door/Window Sensor

* Disabled by default, use -R n or -G

I like monitoring/graphing data, so I picked up this $10 TEMPer v1 [amazon text=USB thermometer&template=amazon search] from China for a DIY weather station. It is currently measuring the temperature outside my window.

temper v1

The device is detected out of the box in Ubuntu Linux:

[89921.774619] input: RDing TEMPer1V1.4 as /devices/pci0000:00/0000:00:12.2/usb1/1-1/1-1.1/1-1.1:1.0/input/input18 [89921.775505] hid-generic 0003:0C45:7401.0009: input,hidraw0: USB HID v1.10 Keyboard [RDing TEMPer1V1.4] on usb-0000:00:12.2-1.1/input0 [89921.784326] hid-generic 0003:0C45:7401.000A: hiddev0,hidraw1: USB HID v1.10 Device [RDing TEMPer1V1.4] on usb-0000:00:12.2-1.1/input1

It still needs software to actually read data from the device. A suitable driver can be found here: https://github.com/petervojtek/usb-thermometer

git clone https://github.com/petervojtek/usb-thermometer.git
cd usb-thermometer/
make

Run as ./pcsensor

I needed something that would output in Collectd format, so I made some modifications, adding calibration and Kelvin output just for fun: https://github.com/standard-error/usb-thermometer

New options are: -k output only in Kelvin -o offset (in Celsius) added to all temperature readings -g[n] output for data collection/graphing tools (0=mrtg, 1=collectd)

offset is a floating point number added to all readings for calibration, it can be negative.

In collectd.conf, I run like this: `

Exec incognito "/usr/bin/pcsensor" "-g1" "-l10" "-o0.5"

`

temper v1 sensor Probe is stated by vendor to be waterproof. I added some heat shrink just to make sure.

As for accuracy, it seems acceptable. Comparing to UK Met Office readings it is usually +/- 1 C, which is good enough for me.

collected temperature pcsensor


A Geiger Counter is perhaps the ultimate geek toy, but the price of commercial devices such as the Gamma Scout have always been too high for me. Recently prices have been coming down as Fukushima mania subsides and sellers dump excess stock. A number of DIY kits have also appeared, tying in with the Raspberry Pi and Arduino market.

Enter RH Electronics “My Geiger”, a ~$50 DIY Geiger counter kit. This is an Arduino compatible PIC16F876A based device with graphic LCD and TTL serial output for data logging.

The kit can be ordered either unassembled or (mostly) assembled. I chose the assembled option as it does not add much cost. The package arrived just over a week later (priority mail from Israel). No instructions are included in the box but a link to the website provides a PDF manual. Even with the assembled version a small amount of soldering is required - three switches and an (optional) LED, but this is very basic stuff. You’ll also need to make an enclosure, for this a Dremel tool or similar is needed to cut holes for the LCD/switches/USB port.

my geiger pcb The quality of the PCB and soldering is high. my geiger pcb reverse

The tube clips are designed to accommodate an SBM-20 or STS-5 Geiger–Müller tube, although any 400V tube can be used. I went with the slightly cheaper STS-5 from Ukrainian seller “any-devices” on Ebay.

Power and connection options are numerous: USB TTL - power (5v) and data USB (type B) - power only - but data is possible by soldering TTL module RX/TX to USB socket. NiMH batteries: 4.8v (4xAA) LiPo: 3.7v 5V DC adapter Other output options are Arduino (interrupts via ARD pin) and Geiger bot

Input voltage range is given as 3.7V - 5.5V. Stated minimum battery capacity is 1000 mAh, but 4xAAA 850 mAh works fine for me.

ttl output TTL serial output. The CPM figure is output every 10s.

The heart of the device is an 8-bit PIC16F876A MCU. The display output consists of CPM figure (10s moving average) with meter, dose reading in (micro)sieverts per hour (needs calibration to have any meaning - and the firmware allows this) and tube voltage. The firmware is closed source and no binaries are available, so no customisation is possible. External controls are only three buttons and a power switch. The buttons are speaker on/off, backlight on, and the top button is to enter calibration mode. Power switch is for USB or battery, it has no effect when TTL 5V is used.

Maximum reading is given as 500000 CPM. Luckily, I don’t have a source that will get anywhere near this. The highest count I have seen is from “fiesta ware” fragments held directly next to the tube: ~7000 CPM vs background here in south west England of ~20 CPM. An ionisation smoke detector gives readings of ~70 CPM externally.

Overall I’m pleased with the RH Electronics MyGeiger. I now have a fully functioning Geiger counter at half the price of even the cheapest commercial devices. My only complaint is that the firmware is proprietary. This is definitely a negative compared to similar kits, so I hope they will consider releasing the firmware at some point.

[youtube http://www.youtube.com/watch?v=mphglGKLTtI&w=560&h=315] Testing device with uranium glazed pottery.


Occasionally it may be necessary to install a package manually on Gargoyle/OpenWrt firmwares due to bugs or incompatibilities preventing automatic installation. Here’s how to do it.

An .ipk file is just a regular tar/gz archive so we can extract the contents with tar. In this case I’m installing the Network UPS package on Gargoyle:

cd /tmp
wget http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/nut_2.6.5-2_ar71xx.ipk
tar zxpvf nut_2.6.5-2_ar71xx.ipk

This extracts three files: ` ./debian-binary ./data.tar.gz ./control.tar.gz `

data.tar.gz is the file we want. To install to the router simply extract the files to root:

cd /
tar zxpvf /tmp/data.tar.gz

And you’re done. Keep in mind that many packages will have dependencies and you’ll have to install those yourself (manually or through opkg) if you want the software to work.


After switching my NAS box to Ubuntu Server I decided I wanted a way of monitoring the system remotely from a browser. Previously I had used MRTG but being short on time wanted something more “plug and play”. The box only has 512MB memory so resource usage is important.

The solution I chose is a combination of Collectd, Lighttpd and Collectd Graph Panel. Collectd has low resource usage out of the box and with a few tweaks can be even better. Separating data collection and graph generation means I can easily change the frontend in the future if required.

How to install and configure:

sudo apt-get install collectd
sudo service collectd start

sudo apt-get install lighttpd php5-cgi php5
sudo service lighttpd start

Enable cgi and php in Lighttpd:

sudo lighty-enable-mod fastcgi fastcgi-php
sudo service lighttpd force-reload

Install Collectd Graph Panel:

cd /var/www/
git clone https://github.com/pommi/CGP.git

Graphs should now be available at http://hostname/CGP/

To reduce CPU usage on the server you may want to enable client side rendering:

sudo nano /var/www/CGP/conf/config.php

Find the line:

$CONFIG['graph_type'] = 'png';

and change it to:

$CONFIG['graph_type'] = 'canvas';

This gives nice mouse scrollable/zoomable graphs but doesn’t work so well on mobile devices. Also there are other useful options there like page autorefresh and graph size you can configure.

Collectd has many plugins available. The configuration file is /etc/collectd/collectd.conf Enabling caching in the rrdtool plugin will reduce cpu and disk usage, at a cost of memory (and data will be slightly delayed): `

DataDir "/var/lib/collectd/rrd" CacheTimeout 300 CacheFlush 900

` Restart collectd after editing collectd.conf:

sudo service collectd restart

The final result:

CGP screenshot