Arduino based Thermor/BIOS weather station receiver sketch

[ad name=”posts-ad-1″]

I have finished documenting/cleaning the code for my Jaycar el-cheapo “Thermor/BIOS” branded wireless weather station receiver. The basis for the code comes from the Practical Arduino weather station receiver project.

In the end all it took was a week of analysing the RF signal from the weather station using my soundcard and wasting countless hours decoding the packets! And a little determination.

Receiving the signal is pretty straight forward – an RF receiver is connected to pin 8 of the arduino via a 1k resistor, and an LED via a 330ohm resistor to pin 6. See the Practical Arduino schematic for more info – it is essentially the same circuit, just minus the LED on pin 7.

You can also take a look at the ThermorWeatherRx Protoshield I soldered up after the recent SparkFun freeday.

I have uploaded the sketch to github: http://github.com/kayno/ThermorWeatherRx for anyone else to try. There is a small to-do list for me to complete, but that can happen later.

[ad name=”posts-prymont-v2″]

20 thoughts on “Arduino based Thermor/BIOS weather station receiver sketch”

  1. “In the end all it took was a week of analysing the RF signal from the weather station using my soundcard and wasting countless hours decoding the packets! And a little determination.”

    Can you post more on your tools and process for decoding the packets? There is a weather station (temperature only) on my bench that is resisting me. I’m interested in hearing about your toolset.

  2. @Mike

    Take a look at http://davehouston.net/learn.htm – it has a schematic that uses an RF receiver (eg sparkfun or jaycar) and two resistors as a voltage divider to connect to the line in on a soundcard.

    When its connected you will hear static coming through the line in, and whenever data comes in it will make a *beeeep* sound (at least it did for me). I used audacity to record this beep, and by zooming in on the sound waves i could see the following pattern: http://twitpic.com/wmblf.

    From there its a matter of working out what those pulses mean – some are long, some are short in width, which indicate 1s and 0s. See this example of this, but you will need to determine the ‘pattern’ of your device – capture the packet, record what is on the display of your weather station, and determine how they correlate.

    Once you know the correlation, an arduino can be used to capture, decode and output the temperature!

    i am happy to look at the packets you capture and help decode :)

  3. “In the end all it took was a week of analysing the RF signal from the weather station using my soundcard and wasting countless hours decoding the packets! And a little determination.”

    Can you post more on your tools and process for decoding the packets? There is a weather station (temperature only) on my bench that is resisting me. I’m interested in hearing about your toolset.

  4. Mate any chance of a jaycar part number for te weather station
    i wonder if there the same as the ones on ebay they look the same

  5. Kayno…noob question…I have uncommented the debug define, yet get nothing after the “ready to receive data…” line. Expected something, if only garbage.
    My build is exactly as shown in Practical Arduino…1k resistor to D06, not 330. Is this a problem?
    Thanks for any suggestions..
    Bill

  6. Hi Bill

    The resistor on the LEDs wont make and difference (apart from the brightness of the LED!).

    What model is the weather station? I believe Jaycar may be selling a different model now.

    Cheers
    Kayne

  7. Hi Kayne,
    I’m trying to capture directly from 3 sensors, which currently feed a Radio Shack base unit Cat. #63-1030. This unit receives up to 3 sensors, differentiated by dip switches. The units appear identical to Oregon Scientific products. Two of my sensors are RS 63-1031, temp & humidity. My third sensor is Ore Sci THC268, temp only, which works fine with the base unit.
    To determine if I was actually receiving the RF, I ran a packet sniffer,
    http://www.eightlines.com/blog/2009/06/arduino-packet-analyzer/
    which captured output from all 3 sensors. Unfortunately, I really don’t know what to do with that data yet. I also ran my receiver through my sound card, and was able to clearly see the data streams every 40 seconds or so.
    Back to the sketch:
    I’m not getting “if(weather_rx_state == RX_STATE_PACKET_RECEIVED) ” to be true.
    So, I’m having fun, but not making much progress…if I ever get the sketch to recognize the start of the data, then I can worry about decoding it.
    I’m going to keep modifying your sketch by adding debug statements until I figure out where the problem lies.
    I’ll let you know when I’m successful!
    Bill

  8. I am starting the same process with a single temperature sensor. I seem to have decoded some data from an Acu-Rite model 822RX and matching transmitter RNE822TX. Am now working to modify the Arduino code. Any interest in this from anybody?

  9. Just starting Arduino. Xbee radios are on order. I have tons of wx eqpt (Davis, Vaisala, RM Young, Peet, etc). I wish to decode the data stream from an Acu-Rite #VN1TXC Integrated Multi-Sensor 5-IN-1. The LaCrosse sensors as described in Practical Arduino book are obsolete. The TX4U is also obsolete. I can see the data stream on my DSO using the Acu-Rite 01010-RX display receiver board.
    Thanks, Al

  10. Hello,
    I am involved with Radio Control model airplane and want to setup a weather station for my club and have no idea where to start.
    I heard the name Ardunio, I live in Victoria (Wantirna) and hope someone can point me to the right direction

    Cheers
    Alex

  11. curious if it would be easy to change this to use a different pin (d10?) on the arduino – I’ve tried a few things but no luck yet… from setup():

    DDRB = 0x2F; // B00101111
    DDRB &= ~(1<<DDB0); // PBO(ICP1) input
    PORTB &= ~(1<<PORTB0); // ensure pullup resistor is also disabled
    DDRD |= B11000000; // (1<<PORTD6); //DDRD |= (1<<PORTD7); (example of B prefix)

    //———————————————————————————————
    //ICNC1: Input Capture Noise Canceler On, 4 successive equal ICP1 samples required for trigger (4*4uS = 16uS delayed)
    //ICES1: Input Capture Edge Select 1 = rising edge to begin with, input capture will change as required
    //CS12,CS11,CS10 TCNT1 Prescaler set to 0,1,1 see table and notes above
    TCCR1A = B00000000; //Normal mode of operation, TOP = 0xFFFF, TOV1 Flag Set on MAX
    //This is supposed to come out of reset as 0x00, but something changed it, I had to zero it again here to make the TOP truly 0xFFFF
    TCCR1B = ( _BV(ICNC1) | _BV(CS11) | _BV(CS10) );
    SET_INPUT_CAPTURE_RISING_EDGE();
    //Timer1 Input Capture Interrupt Enable, Overflow Interrupt Enable
    TIMSK1 = ( _BV(ICIE1) | _BV(TOIE1) );

  12. I just received the pre-assembled Freetronics 433mHz receiver and am trying to get ANYTHING to show up on the the Arduino Serial Monitor besides “Weather Station Receiver has powered up”. I am having no success with the Practical Arduino (Alexander/Oxer) code. Will give the Richens code a try . . .

    The sensor I have is from an Acu-Rite 00594 Wireless Weather Station. It works fine with the Acu-Rite dedicated weather station receiver. It uses a Holtek HT48R30A-1/HT48C30-1 — I/O Type 8-Bit MCU and broadcasts at 433mHz. I know these to be true because I tore down the Temp/Hygro sensor unit.

    If anyone has any advice or experience with this setup, or knows of code that will give me raw sensor readings, I’d be much-obliged.

    Thanks mates!
    Sal Giambruno
    Los Angeles, CA, USA

  13. Sal – you may need to feed the output from your receiver into a soundcard’s line in (using a voltage divider) and record the sound with audacity (see http://davehouston.org/learn.htm). You will “hear” the packets come in, and you can zoom in on them in audacity and try and decode them. Not easy, but possible!

    Once you know the format of the packets, you can then modify the arduino code to suit :)

Leave a Reply

Your email address will not be published. Required fields are marked *