Site migration in progress (Wordpress->Jekyll). Things may break.


‘Cos things break, don’t they?

Python script for “Arduino compatible” geiger counter on Raspberry Pi - outputs to Collectd format

Run with Collectd “exec” plugin

Requires RPi.GPIO:

sudo apt-get install python-rpi.gpio

Connect interrupt pin of Geiger counter to GPIO12 of RPi (configurable in script)

May need to run as root if /dev/gpiomem not available

Used with a Collectd frontend such as Collectd Graph Panel for fancy graphs:


In this post you’ll find my windows builds of rtl_sdr. The first link is the main branch and this is probably what most people will want. The other links are for keenerd’s experimental branch of rtl-sdr with additional features and the mutability branch - allows direct sampling without a hardware mod - “very experimental - probably broken” according to the author.

Download: rtl_sdr windows 32 bit binaries (03/01/2016) rtl_sdr windows 64 bit binaries (03/01/2016)

Experimental builds: rtl_sdr keenerd branch windows 32 bit binaries (04/06/2015) rtl_sdr mutability branch windows 32 bit binaries (19/06/2015)

Kalibrate-rtl is a program that can scan for GSM base stations and use them to calculate the local oscillator frequency offset (ppm error) of an RTL2832 USB dongle.

I finally got this to build after a lot of trial and error with MSYS/MinGW. As often, not that complicated, just a case of building the libraries and configuring paths correctly. Also, there was a dependency on the POSIX library librt, which doesn’t exist in MinGW.

Download here: kalibrate-rtl windows 32 bit build 05/06/2015

Run like this:

kal.exe -g 35 -s EGSM

-g sets the gain. 35 is probably a good choice -s tells kalibrate-rtl to scan for mobile base stations. Band can be GSM850, GSM-R, GSM900, EGSM, DCS, PCS

kalibrate-rtl usage on windows

Once you’ve found a channel, run kal.exe again like this:

kal.exe -g 35 -c 117

Again, -g is the gain. -c is the number of the channel you want to use for calibration. After a few seconds you should have a ppm figure for your dongle:

kalibrate-rtl ppm calculation

I recommend using the dongle normally for half an hour or so before trying to calibrate, as the ppm figure will change as the dongle warms up. It should stabilise after a while.

Here I obtained 39.4 ppm, very close to my previous manually estimated figure of 40 ppm, only much quicker to obtain.

For rtl_433/rtl-sdr builds see my previous post

UPDATE 07/05/2019 - This page is no longer maintained and the rtl_433 builds here are out of date. A more recent Windows build may be available here. I have not tested this however.

Archived post follows

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.

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


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