After reading articles everywhere in the forum(including this older post that I thought was the best of the lot: http://arduino.cc/forum/index.php/topic,22165.0.html) and on the web, I realized I have a slightly different temperature sensor than others are listing; eventually I decoded it and wanted to share what I found for anyone else who needs it.

This sensor only delivers temperature. You can see a picture of it (and its base unit) at

www.lacrossetechnology.com/7013

I figured out its basic signal by just logging the signal with a cheap FS1000A 433MHz receiver (see followup post for the code and how I spotted the signal and starting thinking about it). Then I went looking online and the best description I found was through instructables, where a guy has decoded a number of different 433MHz transmissions. Mine was what he called Type 2 in this paper: http://www.instructables.com/files/orig/FAY/0LCL/H2WERYWD/FAY0LCLH2WERYWD.pdf

So, the signal is 44 bits: (12bit ModelID)(7bit DeviceID)(1bit Checksum)(4bits tens) (4bits ones) (4bits tenths) (4bits tens) (4bits ones) (4bits ???)

Model ID is always 1111 0101 1111

Sensor ID is new each time batteries are put in the sensor

Checksum is 1 if the number of one bits in the following 12 bits is even

“tens” is the decimal tens value of the temperature in centigrade, calculated as (10-tens)

“ones” if the decimal ones value of the temperature in centigrade, calculated as (15-ones)

“tenths” is the decimal tenths-of-a-degree value of the temperature, calculated as (15-tenths)

(for example, if the desired temperature to send is 21.3 degrees C, the twelve bits of temperature would be “1000 1110 1100” (10-2=8, 15-1=14, 15-3=12) and checksum would be 1.

People label the last nibble as the repeat of tenths of degree, but it isn’t. It turns out to be another checksum and the receiver really wants to see the correct value if you want to transmit temperature to the receiver. (For picking up the signal from the sensor, you can just ignore it, but I want to send a temperature to the base unit).

This second checksum turns out to be the sum of the four-bit quantities starting with the SensorID (take the eight bits of SensorID and checksum and split them into two 4-bit quantities) and then subtract 4.

So, for a SensorID of 0010000 and a temperature of 24.5 degrees C, the entire string would be:

[1111 0101 1111] [0010 000] 1 [1000 1011 1010] [1000 1011] 1111

(I put brackets around the groupings that I thought were helpful, sorry if that makes it more confusing).

In my observation, ones are encoded with a pulse of about 975 microseconds, zeroes are encoded with a pulse of about 250 microseconds, and in between each one or zero you delay about 1450 microseconds. The sensor transmits the signal, waits about 20 milliseconds, transmits again, pauses about 30 seconds, and then repeats (quicker repetition for the first couple minutes after you put the battery in the sensor).

I have attached a sketch providing coding demonstrating how to send such an encoded temperature signal.

Send_433MHz_Temp.ino (2.33 KB)