# Connect other hardware

URL: https://pro-weather.com/docs/getting-started/connect-hardware

> Feed your site from Ecowitt gateways and virtually any other station via a personal upload URL - no WeatherLink account needed.

Pro Weather is built around Davis stations on WeatherLink, but it's not
limited to them. Every site can accept data pushed straight from your own
hardware through a **personal upload URL** that speaks two widely supported
upload protocols:

- the **Ecowitt protocol** - spoken natively by Ecowitt / Fine Offset
  gateways: GW1000, GW1100, GW2000, WH2600, HP1000-series consoles and the
  many rebrands (Ambient, Froggit, DNT, Waldbeck and friends);
- the **Wunderground protocol** - spoken by practically every weather
  software: **weewx**, **Meteobridge**, **CumulusMX**, **WeatherDisplay** and
  most console firmware.

That second one is the key to the long tail: if your station runs through
weewx - Davis, Oregon Scientific, La Crosse, AcuRite, Hideki/TE923, Peet Bros,
RainWise, Fine Offset USB models, SDR receivers, one-wire, and dozens more -
it can feed a Pro Weather site. The full model-by-model rundown lives on the
[Compatibility](https://pro-weather.com/docs/compatibility) page.

## 1. Get your upload URL

Open your site in the dashboard, go to the **Publishing** tab, and under
**Receive data from your own hardware** choose **Enable hardware ingest**.
You'll get a URL like:

```
https://pro-weather.com/api/ingest/f3a91c…
```

  Anyone who has this URL can feed data to your site - the token in the path
  is the credential. If it ever leaks, hit **Regenerate URL** and update your
  hardware; the old URL stops working immediately.

## 2. Point your hardware at it

### Ecowitt / Fine Offset gateways

In the **WS View Plus** app (or the gateway's web UI): your device →
**Weather Services** → **Customized**:

- **Customized:** Enable, protocol **Ecowitt**
- **Server IP / Hostname:** `pro-weather.com`
- **Path:** everything after the hostname, e.g. `/api/ingest/f3a91c…`
- **Port:** `443` (HTTPS where the firmware offers it)
- **Upload interval:** 60 seconds is plenty

> **Older firmware and HTTPS**
>
  Some older gateways only upload over plain HTTP on port 80, which our
  hosting redirects to HTTPS - a redirect those gateways won't follow. If
  yours can't do HTTPS/port 443, relay through weewx or Meteobridge below, or
  update the gateway firmware.

### weewx

Add your upload URL as a custom Wunderground endpoint in `weewx.conf` - the
station ID and password can be anything, they're ignored:

```ini
[StdRESTful]
    [[Wunderground]]
        enable = true
        station = ANY
        password = ANY
        server_url = https://pro-weather.com/api/ingest/f3a91c…
        rapidfire = false
```

### Meteobridge

Meteobridge's Weather Underground service can't point at a custom server, but
its template uploads can send the same thing. On the **Services** tab, under
**Definition of Events**, add an **HTTP Event** (every 60 seconds) with this
URL as one line - the `=F`, `=mph`, `=inHg` and `=in` converters make it
correct whatever units your Meteobridge displays:

```
https://pro-weather.com/api/ingest/f3a91c…?tempf=[th0temp-act=F.1:--]&humidity=[th0hum-act.0:--]&dewptf=[th0dew-act=F.1:--]&windspeedmph=[wind0wind-act=mph.1:--]&windgustmph=[wind0wind-max10=mph.1:--]&winddir=[wind0dir-act.0:--]&baromin=[thb0seapress-act=inHg.2:--]&rainin=[rain0total-sum1h=in.2:--]&dailyrainin=[rain0total-sumday=in.2:--]&rainratein=[rain0rate-act=in.2:--]&solarradiation=[sol0rad-act.0:--]&UV=[uv0index-act.1:--]
```

Set the **success string** to `success` so Meteobridge can tell the upload
worked. Sensors you don't have simply post as `--` and are ignored.

### CumulusMX

CumulusMX's Weather Underground upload has a fixed server address, so use its
**Custom HTTP** feature instead: in the admin interface open **Settings →
Custom HTTP → Interval based**, enable it with an interval of 60 seconds, and
enter this URL as one line. The `unit=` parameters force the right units no
matter what units Cumulus itself is set to, and `rc=y` keeps decimal points
even on comma-decimal locales:

```
https://pro-weather.com/api/ingest/f3a91c…?tempf=<#temp unit=F dp=1 rc=y>&humidity=<#hum>&dewptf=<#dew unit=F dp=1 rc=y>&windspeedmph=<#wspeed unit=mph dp=1 rc=y>&windgustmph=<#wgust unit=mph dp=1 rc=y>&winddir=<#bearing>&baromin=<#press unit=inHg dp=2 rc=y>&rainin=<#rhour unit=in dp=2 rc=y>&dailyrainin=<#rfall unit=in dp=2 rc=y>&rainratein=<#rrate unit=in dp=2 rc=y>&solarradiation=<#SolarRad>&UV=<#UV dp=1 rc=y>&indoortempf=<#intemp unit=F dp=1 rc=y>&indoorhumidity=<#inhum>
```

Drop any tag for a sensor you don't have.

### WeatherDisplay, console firmware and everything else

Wherever the software or firmware lets you set a **custom / alternative
Weather Underground upload server**, paste your upload URL as the server
address and leave the station ID/password fields as anything you like. If it
only offers the stock Weather Underground entry with no server field, relay
through weewx or Meteobridge as above - both run happily alongside any other
software already reading your station.

## 3. Watch the data arrive

Within a minute of the first upload your site gains a station called after
your hardware (for example `GW2000A…`), and the Publishing tab shows **Last
data received**. Temperature, humidity, dew point, pressure, wind, gusts,
rain, solar, UV, indoor readings, PM2.5, soil moisture and soil temperature
(4 channels each) and leaf wetness are all understood - in both the Ecowitt
and the Wunderground field naming - and anything your hardware doesn't send
(like dew point on many gateways) is derived automatically.

From there it behaves like any station: live conditions on your public page,
[email alerts](https://pro-weather.com/docs/alerts), [uploads to weather networks](https://pro-weather.com/docs/publishing),
and on Pro (or your trial) a permanent archive that powers
[charts, records and the almanac](https://pro-weather.com/docs/features/almanac-history) - pushed
readings are archived about every 4 minutes.

## Nothing arriving? Check these in order

1. **Last data received** on the Publishing tab is the ground truth - it
   updates within about 15 minutes of a successful upload.
2. **The URL must match exactly.** The whole path including the token, over
   HTTPS, with no trailing slash. If you regenerated the URL, every device
   still using the old one is rejected.
3. **Upload interval:** 60 seconds is the sweet spot. Anything faster than
   about one upload per 4 seconds gets rate-limited (the uploader sees
   HTTP 429 and should back off on its own).
4. **At least one core reading must be present** - temperature, humidity,
   wind, pressure, rain, solar or PM2.5. An upload carrying none of these is
   answered with HTTP 400.
5. **Old Ecowitt firmware:** if the gateway can only do plain HTTP on
   port 80, it can't follow our HTTPS redirect - see the callout above.
6. On the software side, most uploaders keep a log: weewx logs the
   `Wunderground` restful thread to syslog, Meteobridge shows the last HTTP
   event result next to the event, and CumulusMX writes Custom HTTP errors
   to its diagnostics log.

## Using it alongside WeatherLink

Both sources can feed one site. Your **WeatherLink station stays the face of
the site** unless you explicitly choose otherwise under **Settings → Cards &
stations → Stations to display**, so enabling hardware ingest never silently
changes what visitors see. A site fed only by pushed hardware can be published exactly like a
WeatherLink one - the Publish button lights up once the first data has
arrived.
