LocalSky

LocalSky

Hyperlocal weather on your hardware. Smart irrigation when you want it. No cloud, no subscription, no account.

LocalSky weather dashboard: live wind compass, rain gauge, lightning rings, pressure, solar irradiance, hourly forecast

Two products, one container

Self-hosted weather dashboarding for your station, plus an optional irrigation engine for when you have sprinklers. Each is useful on its own. Both run from a single Docker image.

Weather dashboard

Live observations from your Tempest or Ecowitt over the LAN. Multi-source forecast merge with per-field provenance so you know where every value came from. Built-in NEXRAD + RainViewer + lightning radar.

No Weather Underground account. No Tempest cloud subscription. No rate limits.

Weather sources →

Smart irrigation, optional

FAO-56 Penman-Monteith reference ET, 12-species grass catalog, 7-class USDA soil catalog, 17-rule skip ladder. Drive OpenSprinkler directly, ESPHome, or your existing Home Assistant service calls.

Same engine the meteorologists publish, the math you can audit, free forever.

Irrigation engine →

Quick start

Demo mode boots with simulated weather + four irrigation zones so you can explore the UI before connecting anything.

# Demo mode (no hardware required) docker run -d \ -p 8090:8090 \ -e LOCALSKY_DEMO=1 \ ghcr.io/silenthooligan/localsky:latest
Then visit http://localhost:8090. For a real install, drop LOCALSKY_DEMO, mount a config volume, and the first-run wizard at /setup walks you through location, weather sources, controllers, and zones.

For the weather

Your station data, plus the public forecast, plus radar, in one fast self-hosted dashboard.

🌬

Live observations

Tempest UDP rapid-wind compass, rain gauge, lightning strike rings, pressure, solar irradiance, UV index. Direct from your station over the LAN.

🌦

Multi-source forecast

Open-Meteo, NWS, Tempest. Per-field provenance shows which source provided each value. Hourly, daily, 7-day strip.

Radar + lightning

RainViewer precipitation playback, IEM NEXRAD reflectivity, satellite IR, Tempest lightning rings. Layer toggles, legend, timeline scrub.

For the irrigation

Optional. Adds a peer-reviewed agronomic engine that turns weather into watering decisions, in plain language, with the math you can audit.

📐

Native FAO-56 ET

Penman-Monteith reference ET₀ with ASCE-EWRI 2005 + Hargreaves-Samani fallbacks. Hemisphere-aware Kc curves, 12 grass species, 7 USDA soil textures.

💧

Multi-controller HAL

OpenSprinkler direct, Home Assistant service call, ESPHome native (community), Rachio (planned), DryRun for demo and tests.

🧮

17-rule skip ladder

Rain now, rain next 4 hours, probability-weighted 3-day and 7-day rollups, freeze, soil saturation, soil frost, heat advisory. Tunable per deployment.

Local-first, on purpose

Everything runs from a single Docker container on your own hardware. Open source, Apache-2.0, free forever.

🏠

Your data stays home

No account, no telemetry, no upstream upload. Open-Meteo is the only optional outbound call and it can be swapped for NWS.

🤖

Optional LLM advisor

Ollama auto-detect, llama.cpp, or any OpenAI-compatible endpoint (LM Studio, vLLM, private gateway). Runs locally if you want it. Off by default.

📱

Installable PWA

iOS, Android, desktop. VAPID-signed push notifications. First-run wizard walks the empty state to a working install without touching YAML.

Manual control + per-zone math

If you wire up irrigation: every decision the engine makes is visible. Override any threshold from the settings UI; run any zone for any duration from the dashboard.

Manual zone controls with idle and running badges and 10, 30, 60-minute run buttons
Per-zone controls: planned, today, soil bucket per row. Quick-run buttons at 10 / 30 / 60 minutes. Running zones swap to red STOP.
Mobile zone detail showing FAO-56 math reveal and 14-day sparkline
Mobile zone detail: 14-day sparkline and FAO-56 math chain expanded.

Configure once, audit forever

An eight-step first-run wizard takes you from empty container to running install. Every threshold and math input is exposed for tuning later; every irrigation event is logged forever.

First-run wizard showing the 12-species grass catalog with Kc, root depth, and MAD
First-run wizard: 12-species grass catalog with Kc range, root depth, and MAD per species.
Settings page editing the 17-rule skip ladder thresholds
Settings: every threshold in the 17-rule skip ladder is tunable per deployment.
365-day irrigation history rendered as a per-zone Gantt chart
365-day history Gantt: every run, every skip, every reason, per zone.
Mobile irrigation page showing the next-run hero, advisor card, and forecast breakdown
Mobile irrigation: next-run hero, LLM advisor card, full forecast breakdown.