Self-hosted weather station

For a few years now, I’ve had a cobbled together weather station using Ecowitt sensors that one can readily buy on Amazon, and the fantastic open source tool WeeWx. I really don’t think I can sign the praises of WeeWx loudly enough.

The components of the setup:

  • Ecowitt GW3000 “gateway”
  • Ecowitt XXXX temperature sensor
  • Ecowitt rain guage
  • Ecowitt anemometer
  • FreeBSD jail (or any unix-like 24-7 server, an RPi would be fine here)

Ecowitt is better know in the agricultural community for making very expensive, very high performing sensors for farms. But thankfully they’ve dipped their toes in the commercial waters and provided a highly cost-effective way to build a home weather station cluster, without dropping hundreds of dollars on a Davis instrument (and then being locked into their ecosystem).

See, the real beauty of Ecowitt is that all the sensor communicate with the gateway over a 900Mhz channel which the GW listens for, parses and then transmits to a given IP address on the local network. The recipient of the gateway’s communication is supposed to be a super janky phone app. But we can do one better and send it all to WeeWx!

WeeWx handles a lot of different sensors. So you could probably replace everything I just said above with plugging in a $300 Davis weather station and use that with WeeWx. But your mileage will vary depending on model numbers and firmware and honestly, nobody got time for that. Instead, we’ll use the Ecowitt plugin in WeeWx to intercept the gateway’s messages, store them in a sqlite database and let WeeWx generate a really nice HTML page for our weather station (demo of mine here: https://wx.unbl.ink).

Of course, now all that fine weather data is parsed and stuffed ina SQL data store, so you can also re-process it to a heavier weight DB engine, like postgres and go nuts. At least, that’s what I’ve done. Having raw, time-based data from sensors on your own property gives you a chance to run historical calculations of specific events, and it also allows me to pull local data into other projects, so my run tracker doesn’t get data from the airport 90 miles from my house, but can use super local weather data.