# Publish to weather networks

URL: https://pro-weather.com/docs/publishing

> Send your station's readings to Weather Underground, WOW, CWOP, Windy, AWEKAS and more, plus MQTT and InfluxDB for your own systems.

Your station's data doesn't have to live on your site alone. Pro Weather can
**upload your readings to the big weather networks** (the same networks
long-time station owners feed from weewx or Meteobridge) and to your own
systems over MQTT or InfluxDB. Configure it once and uploads ride every data
refresh, about **every 10 minutes**, using the same observation your site
shows.

Publishing is part of the **Pro plan** (and your free trial).

## Set it up

1. Open your site in the dashboard and go to the **Publishing** tab.
2. Expand the service you want and enter its credentials (each service
   explains exactly what it needs and where to find it).
3. Choose **Connect**. The first upload goes out on the next refresh, and the
   card shows a status badge from then on.

Every service is independent: one failing never blocks the others, and you
can pause any of them with the **Upload on every refresh** toggle. Credentials
are **encrypted at rest** and only ever used server-side.

## Supported weather networks

| Network | What you enter | Where to get it |
| --- | --- | --- |
| **Weather Underground** | Station ID + station key | [wunderground.com](https://www.wunderground.com/member/devices) → My Devices |
| **PWSweather** | Station ID + API key | [pwsweather.com](https://www.pwsweather.com/) member area |
| **Met Office WOW** | Site ID + authentication key | Your site page on [wow.metoffice.gov.uk](https://wow.metoffice.gov.uk/) (the auth key is the 6-digit PIN you set) |
| **WOW-BE** (KMI/IRM) | Site ID + authentication key | [wow.meteo.be](https://wow.meteo.be/), the Belgian WOW run by the Royal Meteorological Institute |
| **AWEKAS** | Username + password | Your [awekas.at](https://www.awekas.at/) account |
| **CWOP / APRS** | Station ID (callsign) | Register at [wxqa.com](http://www.wxqa.com/). CW/DW/EW IDs need no passcode; ham callsigns enter theirs |
| **Windy** | Station ID + station password | [stations.windy.com](https://stations.windy.com/); the password is on the station's detail page |
| **OpenWeatherMap** | Station ID + API key | Register your station via the [OWM Stations API](https://openweathermap.org/stations); enter the internal ID it returns |
| **Weathercloud** | Weathercloud ID + key | Device settings on [weathercloud.net](https://weathercloud.net/) |
| **Windfinder** | Sender ID + password | [Register your station](https://www.windfinder.com/report/your_weather_station) with Windfinder |
| **wetter.com** | Station ID + password | Your wetter.com Wetternetzwerk account |

What each network receives depends on what it accepts: temperature, humidity,
dew point, pressure, wind, gusts, rain, solar and UV where supported, and
PM2.5/PM10 to Weather Underground if you have an AirLink. Units and formats
are converted automatically per service; there is nothing to map by hand.

> **A note on CWOP and wetter.com**
>
  **CWOP** feeds NOAA's MADIS network, which is used for real forecast
  verification, a lovely way to make your station count. **wetter.com** still
  accepts uploads, but has said its station network is no longer actively
  maintained, so treat that one as best-effort.

## Publish to your own systems

Beyond the networks, two generic outputs cover home automation and
self-hosted dashboards:

### MQTT

Publishes one JSON document per refresh to `<your topic>/loop` on any broker
you point it at (`mqtt://`, `mqtts://`, `ws://` or `wss://`). Keys follow the
familiar weewx style in your site's unit system (`outTemp_C`, `windSpeed_kph`,
`barometer_hPa`, `dayRain_mm` and so on), which makes Home Assistant templates
straightforward. Messages are retained by default so new subscribers
immediately see the latest observation; set **Retain messages** to `off` to
disable that.

### InfluxDB

Writes one line-protocol point per refresh, tagged with your site's
subdomain, with metric fields (`temp_c`, `wind_ms`, `rain_day_mm`, ...).
InfluxDB **v2** is the default: enter the server URL, bucket, organization
and an API token. For a classic **v1** server, set the version field to `1`
and use database/username/password instead. Ideal for Grafana dashboards.

## Status, timing and troubleshooting

- Each configured service shows a badge: **OK** with the last upload time,
  **Waiting for first upload**, **Paused**, or **Failed**. Expand the card to
  see the exact error from the service.
- Uploads go out about every 10 minutes, which sits comfortably inside every
  network's rate limits (Windy asks for at most one upload per 5 minutes,
  Weathercloud one per 10 on free accounts).
- If a service rejects your **credentials**, we pause retries for an hour
  instead of hammering it; fix the credentials and save the card to retry
  immediately.
- Saving a card always clears its error state, so a fresh attempt happens on
  the very next refresh.

> **One site, one station identity**
>
  Uploads always use your site's **primary station**, the one your public
  page shows. Each remote service treats your site as a single station, so
  register one station per network per site.
