Thanks Tim!
I designed it to be able to have 3 different communication options, either Xbee, Ethernet or mPCIe card. I had to come up with some sacrifices during development so I ended up using two uC's, Microchip's XLP PIC24F for the sensor interfacing and a PIC32 for the comms.
When originally designing it, I had in my mind that any of the communication options would spend their time mostly asleep, wake up every x minutes, connect to the network and upload whatever data it needs to before disconnecting and going back to sleep, but in dealing with mostly PIC32's for ethernet, I found their TCP/IP stack isn't really designed for being switched on/off and didn't want to have to spend the time getting it to work with going in and out of sleep and reinitializing the whole stack every time and so on, so for the sake of an extra buck I put on the PIC24F as well. After doing all that though I realized for the ethernet version if you have ethernet you probably have mains power and it can just run 24/7 anyway, but if needs be the PIC32 and ethernet phyter can be disconnected from power, with the PIC24 still taking all the samples, wind speed measurements and rain bucket inputs.. The main down side to doing it this way is the additional cost, but it's not too much and there aren't many additional passives required, a few decoupling caps etc..
So, so far with the PIC24 code I have it taking readings from the BMP085 pressure sensor, the SHT11, taking wind speed measurements and rain bucket inputs (it uses the change notification interrupts to wake it up from sleep, record the time the rain input came in and go back to sleep, similar with the wind speed input), and the ADC code done for taking wind direction measurement and battery voltage readings. I haven't actually got any UV / Solar sensors yet so I haven't bothered coding them in, but I found on here somewhere that the inputs are ~1.67 mV per each W/m
2.
I wasn't 100% sure on how to do wind speed, I'm still not sure I'm doing it correctly but at the moment, every time the input goes low I take a time sample (resolution is 30uS) and subtract from it the last time the input went low, giving me a time period. Every two seconds I check that the last wind speed time period was faster than 2 MPH (and taken recently) and if so insert the speed into a rolling 30 int long array (1-minute of readings), otherwise the speed is recorded as 0 MPH. The array gives 1-minute average wind speed as well as being able to retrieve the current wind speed (I maintain a pointer to the latest reading). To do 10-minute average wind speed, every minute (when the array rolls over) I insert the 1-minute average into a rolling 10 int long array, which should give 10-minute average wind speed, yeah? :\ The other was I was thinking was to just add 1/25th of the result each time (so currently average * 0.96 + new reading * 0.04), and change the read time to once every 2.4 seconds. I'm still not sure how to actually record the data for things like wind rose plotting..
You can get here (
https://dl.dropbox.com/s/s4ge4q4aj6wxskl/WxLab_Ser.pdf?dl=1) a sheet of the schematics which show the RJ modular jack connections and the input protection & buffering. Not all the values are correct and some were changed during testing that I haven't updated yet.., also not all passives were populated, ie R78, C58, C60..
I've been watching Dekay's work on the ISS RF protocol, very interesting and clever indeed! I'm not an RF guy (thus the xbee module

), nor do I really do much reverse engineering so a lot of that's just amazing to me.
I'm not sure what to really do about the software side, whether it'll just make a basic website just for this.. and/or make an android/iOS app for it. I've built up an ethernet version which has its own built in web interface which will show the current sensor readings etc, but not 100% sure how to do the GSM/wireless version.
I put up a little rendered video which you can see the other side of the board in,
http://youtu.be/NKaTUX_0IFI (the 3d models aren't 100% correct

).