I was offered a weather station for X-mas : WS-7014. You can buy it from "Nature et Decouvertes". It is a special edition of a "La Crosse Technology" weather Station.
The station comes with a wireless sensor for outdoor temperature. It is powered by two AA 1.5V batteries, reference : TX29-IT.
The sensor and the station feature the “Instant Transmission Plus” technology from “La Crosse Technology” in the 868MHz band. This protocol has the following specifications :
- measurement every 4s
- temperature range from -39.9 °C to 59.9 °C
The IT protocol is very simple and efficient at saving power, the TX29 sensors run more than a year on the same batteries. Those sensors are thus perfect for a home automation project.
The protocol is described below so that you can receive the TX29 information with an Arduino or a Raspberry PI or anything else provided you have a 868MHz RF receiver such as the RFM01 from Hope RF.
Modulation
- carrier frequency : 868.3 MHz
- modulation OOK
- baudate 17.24 kpbs
- 40-bit messages
Message Format
The messages transmitted by Lacrosse sensors are 40-bit long and organized in quartets, the temperature is encoded in BCD. The format is as follows :
length (4 bits) :
It is the number of quartets that follow, that is to say 9, so there are a total of 10 quartets (comprising the length) = 40 bits
sensor id. (6 bits) :
Each sensor chooses a random identifier when it is started.
new_batt indicator (1 bit) :
After the sensor is (re-)started this bit is set to 1 during a few hours.
unused (1 bit) :
This bit doesn’t seems to be used.
temperature (12 bits) :
According to the sensor specifications the minimum temperature the sensor can measure is -39.9 °C, so the 3rd field is simply (T°C + 40.0°C) * 10, expressed in BCD, example 602 = 60.2 * 10 = (20.2 + 40.0) * 10 => T = 20.2°C
weak_batt indicator (1 bit) :
This bit indicates if the sensor batteries become too old.
hygro (7 bits) :
This field gives the hygrometry if the sensor has this option (like the TX29DTH-IT+ sensor). In this case this field is lower than 100 (0×64) and directly gives the hygrometry. If the sensor has not the hygro option, this field is constant and equals 106 (0x6a).
CRC (8 bits) :
The last field is a CRC in order to secure the reception of the message. CRC-8 = 0x31 or x8 + x5 + x4 + 1
/*
Bit by bit on the fly CRC computation for :
CRC-8 = 0x31 / x8 + x5 + x4 + 1
*/
#define CRC_POLY 0x31
uint8_t crc = 0; /* global variable, holds the CRC */
void compute_crc(uint8_t b)
{
uint8_t do_xor;
uint8_t reg;
reg = crc;
do_xor = (reg & 0x80);
reg <<=1;
reg |= b;
if (do_xor)
{
reg ^= CRC_POLY;
}
crc = reg;
}
Further reading
F6FBB analysis of TX3 & WS7000 LaCrosse sensors :
These protocols are different : http://www.f6fbb.org/domo/sensors/
Götz’s logging project with the WS1600 and TX22 :
Götz has reverse-engineered the WS1600 and the associated TX22 sensor protocol for temperature, but also hygrometry and wind speed : http://www.g-romahn.de/ws1600
The TX22 protocol is slightly different, check it there : http://www.g-romahn.de/ws1600/Datepakete_raw.txt
Gérard C. project :
Gérard’s project (Temperature monitoring from anywhere over internet) is of a more important scale. His goal is to monitor and collect data from many sensors from many different locations (buildings) and to aggregate all in a central server : http://gcrnet.net/node/32
He used a JeeNode module made by jeelabs.org. JeeNodes are AVR based modules with an RF transceiver : http://jeelabs.net/projects/hardware/wiki/JeeNode
JeeLAbs :
RFM12B and Weather station transmitters : http://forum.jeelabs.net/node/110
Christophe J. project :
Christophe has analyzed the IT+ protocol thanks to a FunCube Radio Receiver under the form of an USB dongle. He gives more information about the RF modulation of the IT+ protocol. Interestingly he analyzes the data transmitted by a sensor made by TFA and this company uses the very same protocol as LaCrosse’s : http://www.jacquet80.eu/blog/post/2011/10/Decodage-capteur-thermo-hygro-TFA
Marcin's blog :
http://blog.omegastar.eu/2014/01/from-remote-vacuum-cleaner-to-my.html
Mohammad's blog :
http://nikseresht.com/blog/?p=99
Hackaday :
mikrocontroller.net :
http://www.mikrocontroller.net/articles/SensorLogger
Linux Magazine :
http://www.linux-magazine.com/Online/Features/Reading-Weather-Data-with-Software-Defined-Radio