Go Down

Topic: Help decoding 433 mhz RF temperature and humidity sensor (Read 12 times) previous topic - next topic

zang

Jan 27, 2013, 10:36 pm Last Edit: Jan 28, 2013, 05:14 pm by zang Reason: 1
Hi all,

I have an Acurite weather station http://www.acurite.com/weather/weather-stations/acurite-professional-digital-weather-center-with-forecast-temperature-humidity-02010.html which has a wireless sensor outside to transmit temperature and humidity.  I've seen lots of people receiving the signals of other weather stations with their arduino and 433mhz rx module.  I'd say I'm a novice when it comes to both electronics and programming but figured I'd try and capture the data.  

I've recorded a few different signals from the rx module through the line in on my sound card with a voltage divider using Audacity.  I've been poking around at it but haven't been able to decode the data and was hoping to get some help.  The sensor has a switch to select "channel" A, B or C.  I can see the beginning of the capture change based on the position of this switch.  From what I can tell the sensor is transmitting the "channel", battery Ok/Low, temperature and humidity.  Below are a few captures:

Channel A +23C 35%


Channel A +22C 31%


Channel A +21C 31%


Channel A +1C 40%


The sensor sends that string of data 3 times in a row every ~20 seconds.  I'm assuming it's sending it 3 times to ensure that it is received correctly.  I've been trying to make sense of it by hand.  It always has those 4 long pulses in the beginning.  I've just assumed they just marked the beginning of the transmission.    So ignoring the 4 longer pulses in the beginning I tried counting the other long pulses as 1 and the short pulses as 0 (and vise versa) but that doesn't make any sense no matter how I look at it.

I was hoping someone with more experience could take a look and point me in the right direction.

Any help is much appreciated.

Cheers,
zang


stimmer

#1
Jan 28, 2013, 01:04 am Last Edit: Jan 28, 2013, 01:15 am by stimmer Reason: 1
From a quick glance, look closely at the six pulses around 0.0240. Interpret a short downward spike as 1 and a long downward spike as 0. I can see 100011, 011111, 011111 and 101000 which are binary for 35,31,31 and 40 which corresponds with the humidity percentage. It could be coincidence, you'd need to do more samples to check.

johncc

Hi zang!  Yes you are on the right track.

I went through this last year with an Acurite rain sensor (model 00899).  It was very interesting and not too terribly difficult.  I will try to find my notes later, but....

The four rather longer pulses at the beginning and three "repeats" sounds about the same as what I saw.  And the longer/shorter pulses indeed were simply 1's and 0's, with no other decoding necessary (e.g. "Manchester" or such).

If I were you I would begin by capturing the data as you have by hand.  Transcribe the pulses as bits where long-low/short-high is 0 and short-low/long-high is 1 (it could turn out to be opposite but that's how it was in my case).  And of course record all the current readings from the base unit that go along with it.   Wait for something to change, and repeat.   
Something like this
Code: [Select]
current values --- bits
40,30,21,32   - 00111000 11001110 00111000 11001110 00111000 11001110 00111000 11001110 00111000 11001110
41,32,20,31   - 11001110 00111000 11001110 00111000 11001110 00111000 11001110 00111000 11001110 00111000
40,30,21,32   - 00111000 11001110 00111000 11001110 00111000 11001110 00111000 11001110 00111000 11001110
43,32,20,31   - 11001110 00111000 11001110 00111000 11001110 00111000 11001110 00111000 11001110 00111000
You probably already know this-- but my point is you can probably succeed, and I or others can probably help with the analysis if you need..

How many bits/pulses are you seeing in each of the three repeating groups? 

And the coding-- how is your Arduino programming experience?

Cheers,
John

zang

Thanks for the tips.  I've made a bit of progress.  stimmer was right, i did some more captures and the humidity is in there in straight binary.  I can't believe I missed that.  I was focusing too much on BCD when initially looking at it.  Now temperature seems to be a bit trickier.  Here are a few data sets.  I'm not sure if I should be looking at the temperature in Celsius or Fahrenheit so I noted down some with both:

A+23C-35%-xxxx1111101101101011010001001 0100011 0000100111001001000111110
A+23C-35%-xxxx1111101101101011010001001 0100011 0000100111001001000111110
A+21C-31%-xxxx1111101101101011010001001 0011111 0000100100111100100011100
A+22C-31%-xxxx1111101101101011010001001 0011111 0000100101000001100100110
A+22C-24%-xxxx1111101101101011010001000 0011000 0000100101000001000011000
A+22C-25%-xxxx1111101101101011010001001 0011001 0000100111000110000100100
A+22C-30%-xxxx1111101101101011010001000 0011110 0000100101000001000100100
A+07C-39%-xxxx1111101101101011010001000 0100111 1000100010101111000010000

A+71F-30%-xxxx1111101101101011010001000 0011110 0000100101000001000100100
A+72F-30%-xxxx1111101101101011010001000 0011110 0000100101000100000101010
A+79F-88%-xxxx1111101101101011010001001 1011000 0000100101101111111110100
A+77F-95%-xxxx1111101101101011010001000 1011111 0000100111100010111101000
A+75F-89%-xxxx1111101101101011010001000 1011001 0000100101010110011000100
A+61F-67%-xxxx1111101101101011010001001 1000011 0000100100001001011111110
A+48F-70%-xxxx1111101101101011010001001 1000110 1000100000111111001101110

xxxx = the 4 long pulses always seen at the start

The beginning is always the same, probably a type of identifier string of bits.  I know if i change the sensor to channel B the I get "10111" instead of "11111" for the first 5 bits.  I'm guessing the beginning also contains the battery low indicator bit(s).  But I haven't been able to verify that yet.  The section that's spaced out in the middle is the humidity, which leaves the temperature at the end.  I've tried looking at the temperature as BCD and as straight binary numbers in both C and F but I can't make any sense of it.

johncc

Hi Zang,

I think it the below is getting pretty close, "T" marking the temperature bits, and "p" is a parity bit.  This is very similar to what I remember on my rain gauge.

I have put the decimal equivalents, which may be in arbitrary temperature units easily converted by "y=mx+b".

Cheers,
John

Code: [Select]

                                          HHHHHHH      ttT pTTTTTTT dec. 
A+23C-35%-xxxx11111011 01101011 01000100 10100011 00001001 11001001 201 00011111
A+23C-35%-xxxx11111011 01101011 01000100 10100011 00001001 11001001 201 00011111
A+21C-31%-xxxx11111011 01101011 01000100 10011111 00001001 00111100 188 10001110
A+22C-31%-xxxx11111011 01101011 01000100 10011111 00001001 01000001 193 10010011
A+22C-24%-xxxx11111011 01101011 01000100 00011000 00001001 01000001 193 00001100
A+22C-25%-xxxx11111011 01101011 01000100 10011001 00001001 11000110 198 00010010
A+22C-30%-xxxx11111011 01101011 01000100 00011110 00001001 01000001 193 00010010
A+07C-39%-xxxx11111011 01101011 01000100 00100111 10001000 10101111  47 00001000

A+71F-30%-xxxx11111011 01101011 01000100 00011110 00001001 01000001 193 00010010
A+72F-30%-xxxx11111011 01101011 01000100 00011110 00001001 01000100 196 00010101
A+79F-88%-xxxx11111011 01101011 01000100 11011000 00001001 01101111 239 11111010
A+77F-95%-xxxx11111011 01101011 01000100 01011111 00001001 11100010 226 11110100
A+75F-89%-xxxx11111011 01101011 01000100 01011001 00001001 01010110 214 01100010
A+61F-67%-xxxx11111011 01101011 01000100 11000011 00001001 00001001 137 01111111
A+48F-70%-xxxx11111011 01101011 01000100 11000110 10001000 00111111  63 00110111
                                          HHHHHHH      ttT pTTTTTTT dec.

Go Up