+++
title = "Self-hosted weather station"
author = ["Colin"]
date = 2023-01-24T00:00:00-04:00
tags = ["weather","data","foss","weewx"]
categories = ["self-hosting"]
draft = false
+++

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.
