LocalSky
These docs track LocalSky v0.7.4.
Hyperlocal weather on your hardware. Smart irrigation when you want it.
LocalSky is two products in one Docker container.
A self-hosted weather dashboard that is cloud-first out of the box: a new install with no hardware picks up Open-Meteo automatically and shows you weather immediately, then reads your weather station over the LAN when you add one (Tempest, Ecowitt, Ambient Weather, Davis, and more). It merges Open-Meteo with regional forecast sources (NWS in the US, MET Norway, OpenWeather, Pirate Weather) using per-field priority chains, so you set the backup order for each reading yourself, and it labels every reading with an honesty tag (measured, radar, nowcast, or forecast) so you always know where a number came from. Display units are configurable, with a household default and a per-device override. The result renders in a fast installable PWA with built-in radar (RainViewer worldwide, NOAA MRMS and IEM NEXRAD in the US) and lightning. Useful on its own, even if you never irrigate anything.
A smart irrigation engine that pairs the same weather data with peer-reviewed agronomy (FAO-56 reference ET, USDA soil textures, species-aware Kc curves, a 17-rule skip ladder) and drives OpenSprinkler, Rachio, Rain Bird, Hydrawise, B-hyve, or any valve reachable over MQTT or Home Assistant. Optional. Off until you wire a controller.
This site is the operator’s manual. The dashboard, settings UI, and first-run wizard are designed to keep you out of YAML and out of the terminal for day-to-day use. The chapters here exist for when you want to understand exactly what the engine is doing, swap a sensor source, calibrate a zone, or wire LocalSky into the rest of your stack.
Where to start
- New install: jump to Quick start for the docker run and the first-run wizard walkthrough.
- Weather-only user: the wizard’s “Controllers” step can be skipped. The irrigation surfaces disappear and LocalSky runs as a pure weather product.
- No Home Assistant: Standalone mode covers sensors via MQTT, Ecowitt LAN, and HTTP webhooks.
- Existing HA user: Home Assistant integration covers the LocalSky integration for HA (installed through HACS). It discovers LocalSky on your network and brings live weather, every zone and its valve, forecasts, and run/stop/pause controls into HA as native entities and services.
Where things live
| What you want to know | Chapter |
|---|---|
| What weather sources LocalSky can read | Weather and soil sensors |
| How the engine decides whether to water | Irrigation engine + Skip rules in depth |
| Which grass species the catalog supports | Grass species catalog |
| Which soil textures the catalog supports | Soil texture catalog |
| Which controllers LocalSky drives | Irrigation controllers |
| Every config option | Configuration reference |
| Every REST + SSE endpoint | REST + SSE API |
| Upgrade from v0.1 | Upgrading LocalSky |
| Something broke | Troubleshooting |
| Quick answers | FAQ |
Two ways to run it
LocalSky is designed to work well in either configuration:
- Standalone: a self-contained service that talks directly to your weather sensors (and optionally to your irrigation controller). Add sensors over MQTT, Ecowitt LAN POST, or HTTP webhooks.
- Alongside Home Assistant: install the LocalSky integration from HACS and HA finds LocalSky on your network by itself. HA gets native entities and controls (live weather, zones, valves, forecasts, run/stop/pause); LocalSky owns irrigation scheduling and actuation. An MQTT discovery publisher is also available for setups that prefer MQTT.
Both modes are first-class. Pick the one that fits your stack.
Everything runs on your own hardware. The only outbound calls are the ones you opt into: public forecast sources (Open-Meteo, NWS, and others) and any cloud-backed controller you connect (Rachio, B-hyve, Hydrawise). A LAN-only setup with a local controller makes none.
Project links
- Source: github.com/silenthooligan/localsky
- HACS integration: github.com/silenthooligan/localsky-ha
- Issues + discussions: same repos
- License: Apache-2.0