TX29 Protocol

  • Published on 11 June 2011
  • by Fred.

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.

tx29_1 tx29_2

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 :

tx29_proto

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 :

http://hackaday.com/tag/tx29-it/

http://hackaday.com/tag/temperature-sensor/

mikrocontroller.net :

http://www.mikrocontroller.net/articles/SensorLogger

Linux Magazine :

http://www.linux-magazine.com/Online/Features/Reading-Weather-Data-with-Software-Defined-Radio