A Home Assistant integration for personal weather stations. It reads the temperature, humidity, pressure, wind and rain sensors your station already provides and calculates the things you'd actually automate on: frost point, heat stress, evapotranspiration for irrigation, fire danger, a barometric outlook, and short-term rain, frost and gust chances learned from your own station's history.
Derived values are calculated inside Home Assistant. By default ws_core also fetches a weather forecast and runs an hourly sanity check against Open-Meteo; both can be turned off, and every other internet feature is opt-in. The data and privacy table lists them all.
- Forecasts that learn from your own station. Pattern Forecast gives the chance of rain, frost, a hot day, strong gusts and thunderstorms over the next hours. It now learns from the history Home Assistant already has, so it can show numbers minutes after you switch it on instead of weeks later.
- A rain chance that keeps score. Your station's rain estimate and the forecast provider's are checked against your gauge every 6 hours, and whichever has been more accurate at your location gets more say. In 2.13.5 both are scored on the same 6-hour window, so the comparison is fair.
- Sensors that explain themselves. When a value can't be calculated, the sensor tells you why (a missing source, a formula that doesn't apply right now, or a model still collecting data) instead of a bare
unknown. - Faster storm warnings. Nearby lightning raises the alert straight away and keeps it for 30 minutes after the last strike, and heavy rain alerts start at 10 mm/h.
- A new phone-friendly dashboard. The Bubble Card dashboard puts the current weather, the outlook and the station on one screen, with pop-ups for the details and an optional photo of the current weather behind it. Screenshots below.
- Clearer station health and fewer false "sensor spike" warnings.
The changelog has every change.
Rain. A rain rate filtered from your gauge's running total, totals from the last hour to the year, days since rain and an adaptive rain chance (see below). The opt-in precipitation nowcast combines Open-Meteo's 15-minute forecast with your gauge for sensor.ws_minutes_until_rain and sensor.ws_minutes_until_dry.
Garden and irrigation. Reference evapotranspiration (FAO-56 Penman-Monteith with a solar radiation sensor, Hargreaves-Samani without one), a water deficit, VPD, Delta-T for spraying, and leaf wetness. The ET₀ sensors can feed Smart Irrigation.
Protection. Gust alerts for awnings and blinds, frost point (Buck 1981) and freeze warnings, UTCI and WBGT heat stress, and fire danger from the Canadian FWI, McArthur FFDI and Fosberg FFWI.
Data quality. Checks for stuck, spiking and drifting sensors, cross-sensor consistency, and a station health summary. When a value can't be calculated, the sensor's reason and explanation attributes say why.
Extras you can turn on. Snow phase and accumulation, heating and cooling degree days, 10-year climate normals (ERA5), air quality, pollen, sea temperature, a solar forecast, lightning, and uploads to Weather Underground, Windy, Weathercloud, PWSWeather, WOW, AWEKAS, CWOP and OpenWeatherMap.
The integration is translated into English, French, German, Spanish, Italian, Dutch, Polish and Portuguese. The formulas and their sources are in the science documentation.
Three features improve with time at your station:
- Pattern Forecast (opt-in) learns from your station's own record and gives probabilities: the chance of rain in the next 1, 3 and 6 hours, frost in 12 hours, a hot day in 24 hours, a strong gust in 3 hours and, with a lightning detector, a thunderstorm in 3 hours. It needs time to learn: each sensor reads
unknownuntil it has seen enough real events (often straight away if the recorder already has long-term statistics for your sensors), and itsmaturityattribute tells you when it has earned your trust. It is 100% local, apart from one optional, labelled setting that lets the storm forecast use Blitzortung lightning data if you have no detector. See the guide and the method. - Adaptive rain chance.
sensor.ws_rain_probability_combinedblends your station's local rain estimate with the forecast provider's. Every 6 hours both are scored against your gauge, and over a rolling 90 days the more accurate source gets more weight. With Station Diagnostics on you can see the weight and both scores. How it's scored. - Adaptive sensor calibration (opt-in) learns a slow bias in your temperature, humidity and pressure against a regional reference. Once it's confident (about 10 days), it adjusts your calibration offsets by a small, bounded amount at most once a day. You can turn it off or edit the offsets by hand at any time.
If your station's readings are already in Home Assistant, ws_core can use them. The setup flow suggests matching entities, and you can map any of them by hand.
| Station | Integration | Readings used |
|---|---|---|
| Shelly WS90 (the maintainer's test station) | Shelly | Temperature, humidity, pressure, wind, gust, direction, rain total, UV, illuminance, battery |
| Ecowitt / Ambient Weather | GW-series gateways, WS90, Wittboy, WH57 lightning, soil and rain sensors | Temperature, humidity, absolute pressure, wind, rain, lux or solar radiation, lightning |
| WeatherFlow Tempest | Tempest integration, local UDP or MQTT | Temperature, station pressure, wind, gust, rain, UV, illuminance |
| Davis | WeatherLink IP, Vantage Pro2, Vantage Vue | Standard station readings, rain year, absolute pressure |
| Netatmo | Smart Weather Station with rain and wind modules | Outdoor module, rain gauge total, anemometer |
| ESPHome and DIY | Any sensor with a standard device class | Temperature, humidity, pressure, wind, rain total |
| Blitzortung (no hardware) | Blitzortung integration, uses internet data | Lightning strikes, distance and proximity, used only when no lightning sensor is mapped |
The hardware mapping guide covers each brand in detail.
- In Home Assistant 2026.11 and newer, open Settings → Marketplace, search for Weather Station Core, and select Install. It opens the setup flow directly. On 2026.10 and older, download it in HACS, restart Home Assistant, then go to Settings → Devices & Services → Add Integration and search for Weather Station Core. The button above opens HACS or its Marketplace replacement.
- If setup did not open automatically, go to Settings → Devices & Services → Add Integration and search for Weather Station Core. Updates to an already installed integration still require a restart.
- Check the entities it suggests for your station and submit.
More than 50 sensors are created straight away. Optional features are under Configure → Features. The quickstart walks through each step.
Ten automation blueprints with sensible defaults, for example:
The other five (frost, lightning, storm, air quality and fire danger) are in the blueprint documentation.
The dashboards/ folder has five dashboards and a set of gauge cards. Paste one into a dashboard's raw configuration editor.
| Dashboard | Layout | Custom cards |
|---|---|---|
Vanilla (weather_dashboard_vanilla.yaml) |
Four views | none |
Enhanced (weather_dashboard.yaml) |
Animated Weather and Advanced pages, including Pattern Forecast | button-card and six others |
Full (ws_core_dashboard.yaml) |
Six views covering every sensor group | mushroom, mini-graph-card |
Mobile (ws_core_dashboard_mobile.yaml) |
Single-column phone layout | mushroom, mini-graph-card |
Bubble (ws_core_bubble_dashboard.yaml) |
One centred column on any screen, with pop-ups, an alert banner, the learning stats and an optional weather background | Bubble Card 3.2.0+ |
Gauge presets (ws_core_gauge_presets.yaml) |
13 gauge cards to add to your own dashboard | none |
The Enhanced dashboard on a Shelly WS90, Weather page and Advanced page:
The Bubble dashboard on the same station, with the weather background on:
| Main page | Forecast pop-up |
|---|---|
![]() |
![]() |
The dashboards guide describes each one.
ws_core sends no telemetry or analytics. These are the only features that contact the internet. The first two are on by default; the rest stay off until you enable them.
| Feature | Destination | Data sent | When |
|---|---|---|---|
| Weather forecast | Your chosen provider (default Open-Meteo) | Configured coordinates, plus an API key for providers that need one | On by default. Turn it off in the integration options, or use an existing Home Assistant weather entity as the provider |
| Sensor sanity check (neighbour QC) | Open-Meteo | Configured coordinates | On by default, hourly. Turn it off with Sensor sanity check or switch.ws_enable_neighbor_qc |
| Adaptive sensor calibration | Open-Meteo (the same hourly request) | Configured coordinates | If enabled; keeps the hourly request running even with the sanity check off |
| Precipitation nowcast, air quality, pollen | Open-Meteo | Configured coordinates | If enabled |
| Sea temperature, climate normals | Open-Meteo Marine and Archive APIs | Configured coordinates | If enabled |
| Solar forecast | Forecast.Solar | Configured coordinates | If enabled |
| French Vigilance | French government geocoder (api-adresse.data.gouv.fr), then OpenDataSoft | Coordinates to the geocoder, then the department code | If enabled |
| Vigicrues river levels | Hub'Eau (French government) | Coordinates or the chosen station ID | If enabled |
| Lightning via Blitzortung | Blitzortung, through its own integration | Whatever the Blitzortung integration sends | If that integration is installed and no lightning sensor is mapped |
| Pattern Forecast storm data (internet lightning) | Blitzortung, through its own integration | Nothing sent by ws_core | If Pattern Forecast is on, no lightning detector is mapped, and you turn on Use internet lightning data. The sensor name says so. Every other Pattern Forecast sensor is local |
| Station network uploads | The networks you choose (for example WU, WOW) | Station readings and your credentials for that network | If enabled |
| MQTT discovery | Your local MQTT broker | Derived sensor values. When off, empty messages that clear ws_core's own old discovery topics | If enabled. The cleanup runs when it is off and the MQTT integration is connected |
To run fully offline, turn off the weather forecast and the sensor sanity check and leave the optional internet features off. All locally derived sensors keep working. Diagnostics downloads redact credentials and coordinates.
Why not write template sensors instead?
Templates are fine for simple conversions. Penman-Monteith ET₀, the UTCI polynomial, the fire weather indices and a forecaster that scores itself are a lot of template code to write and maintain, and ws_core also comes with blueprints, dashboards, diagnostics and entity suggestions for common stations.Can I move over from Thermal Comfort?
Yes. ws_core covers the same comfort indices, and the migration guide shows how to keep your entity history.Do I need an API key?
No. The default forecast and the optional nowcast and air quality features use Open-Meteo's free API, which needs no registration. Some alternative forecast providers need a key.What happens when a sensor goes offline?
Values that depend on it reportunavailable or unknown, with the reason in the sensor's attributes, and everything that doesn't depend on it keeps working.
- Questions and station setups: GitHub Discussions
- Bugs and feature requests: GitHub Issues
- Documentation: kmich.github.io/ha_ws_core



