Skip to content
LloydR edited this page Dec 4, 2025 · 1 revision

Welcome to the rtldavis wiki! Wiki for the programs to read the Davis Integrated Sensor Suite (ISS) wireless information and put it into a WeeWX database.

Overview The wireless Davis ISS sends data every 2.5 seconds usually to a console or a Davis 6100 “Weatherlink Live” black box. If one wants local control of their weather data then a Raspberry Pi computer with a SDR (Software Defined Radio) or other receiver can be used to intercept the data and feed the data to the WeeWX program which stores the data and can display up to the 5 minute live data on a web page.

History Github steve-m Steve Markgraf wrote librtlsdr in C

Douglas Hall bemasher wrote rtldavis in GO which wrapped librtlsdr.
Purpose: This project aims to implement a receiver for Davis Instruments wireless weather stations by making use of inexpensive rtl-sdr dongles.

Luc Heijst lheijst then used a fork of bemasher GO language rtldavis to write a SDR Davis listener with a couple parts to it 1. rtldavis GO language 1. Sets the frequency, reads the data, does the hop, set for multiple Davis stations. 2. weewx-rtldavis called rtldavis.py This is a driver for weewx that captures data from software-defined radio using the rtldavis software. Written in python. 1. Reads the log file, sets the data up for the WeeWX program to use.

Programs - Most of the work done by Luc Heijst librtlsdr – C program that reads the SDR

rtldavis – Go language program that sets the frequency for the SDR, the Davis ISS hops from frequency to frequency as it measures wind speed, wind direction, temperature etc. This program sets the SDR to listen to the frequency. It then takes the data from librtlsdr and produces a string through log.Printf that the next program, weewx-rtldavis, takes to feed the WeeWX program.

weewx-rtldavis Python program that takes the rtldavis log.Printf output and converts it into something the WeeWX program can use. Called by WeeWX a WeeWX driver. NOTE extraTemp1-3 and leafTemp2 are used for other things not temperatures – pct_good_0,1,2,3.

Davis ISS data

See https://www.manula.com/manuals/pws/davis-kb/1/en/topic/wireless-reception-monitoring & https://github.com/dekay/im-me/blob/master/pocketwx/src/protocol.txt The Davis wireless technology works by transmitting discrete 16-byte packets of data (6-byte payload plus 2-byte CRC checksum plus 8 bytes of transmission overhead) at 19.2kb at intervals of every 2.5 seconds, USA. This transmission time per packet corresponds to only ~7 msecs and hence the transmitter can be powered off in between transmissions, helping considerably to minimise power consumption at the transmitter.

Data from ISS looks like this 8004770E6A00B19E

Byte 0: This is a header. The upper nibble is the sensor the data is from, as follows. Some of these messages are Vantage Vue specific.

2 = Supercap voltage (Vue only) 3 = ? 4 = UV Index 5 = Rain rate 6 = Solar radiation 7 = Solar Cell output (Vue only) 8 = Temperature 9 = Wind gust a = Humidity e = Rain

The lowest three bits in the low order nibble is the transmitter ID, set via dipswitches inside the unit. Bit 3 in the low order nibble of Byte 0 indicates if the transmitter battery is low. The bit is set to zero if the battery is OK, but is apparently only set if the transmitter needs to run off the battery and not the solar-charged supercap

The rates they show up at are (one packet every 2.5 s):

40 (UV index) shows either every 47.5 or 50 seconds  (every 20 cycles)
50 (Rain Rate) shows every 20 seconds (every 8 cycles)
60 (Solar Radiation) shows every 50 seconds (every 20cycles)
80 (Temperature) shows every 10 seconds (every 4 cycles)
90 (Wind Gust) shows either 45, 47.5, or 50 seconds
a0 (Humidity) shows alternately every 40 seconds and 10 seconds (every 20 cycles)
e0 (Rain) shows every 20 seconds (every 8 cycles)

Byte 1: Wind speed in mph. Wind speed is updated every transmission. Byte 2: Wind direction from 1 to 360 degrees. Wind direction is updated every transmission. The wind reading is contained in a single byte that limits the maximum value to 255. Davis says that 0 indicates it can't get a reading.

Reference: http://www.wxforum.net/index.php?topic=10531.msg101523#msg101523

Bytes 3-5 will carry other data according to the header in Byte 0

Byte 6: High byte of the 16 bit CRC (0xB1 in our example above) Byte 7: Low byte of the 16 bit CRC (0x9E in our example above)

Davis ISS Frequencies In this order (USA) 911,413,818 902,381,897 911,915,161 922,953,186 914,926,575 906,395,874 925,964,600 918,438,354 908,904,663 920,445,374 913,420,410 903,888,062 916,933,533 924,458,923 910,409,912 904,890,625 915,929,138 921,448,364 907,399,414 926,967,651 912,919,067 903,385,376 917,434,387 923,456,299 909,406,860 926,466,370 905,894,592 914,424,316 919,441,406 924,960,205 902,884,521 910,912,109 921,949,707 915,427,856 906,898,071 917,935,669 927,469,849 920,947,083 908,402,893 912,417,358 918,940,125 904,389,343 923,957,153 916,431,824 909,909,058 919,943,604 905,391,968 922,451,904 907,901,123 913,922,607 925,462,402

Problems Duplicate or another record in less than 2.5 seconds. Bad data for wind and rain.

Clone this wiki locally