Independent station notes

Weather, measured right here.

A home-built view of the air over Lancaster, Wisconsin.

Lancaster, WI Weather! is an independent weather station serving Lancaster, WI. It combines measurements made on site with public forecast, alert, daylight, and radar information from authoritative government sources.

Station
frontyard-01
Local measurements
Temperature · Humidity · Barometric pressure
Observation interval
Every 30 seconds; displayed at one-minute resolution

High-level design

How a reading gets here

  1. 1
    MeasureAn ESP32-based station records local conditions.
  2. 2
    CollectA private collector stores readings and prepares completed batches.
  3. 3
    TransferBatches move through a restricted, key-authenticated SFTP channel.
  4. 4
    ImportAn isolated importer validates and writes observations to the public-tier database.
  5. 5
    PublishFastAPI renders the site; Nginx and Cloudflare provide public HTTPS delivery.

Components

Under the hood

Local sensing

ESP32 weather hardware records temperature, relative humidity, and atmospheric pressure every 30 seconds.

Storage and transfer

PostgreSQL stores observations. Completed JSONL batches are transferred atomically over restricted SFTP.

Public application

Python, FastAPI, Jinja, and lightweight JavaScript produce server-rendered pages, interactive charts, unit controls, and mobile touch behavior.

Weather context

The National Weather Service supplies forecasts and active alerts. The U.S. Naval Observatory supplies sunrise and sunset, with a local calculation as fallback. NWS KARX supplies radar imagery.

Public delivery

Nginx serves the application through TLS. Cloudflare provides proxied DNS, HTTPS redirection, and dynamic-address updates.

Automation

Systemd timers import observations every 15 seconds, refresh forecasts and alerts every 15 minutes, and refresh radar every five minutes.

Design boundaries

Small, local, and carefully separated

The public site cannot directly reach the sensor or collector database. It receives completed transfer batches, exposes no public data API or account system, and keeps PostgreSQL on a local Unix socket. No advertising or visitor-tracking service is used by the application.