Skip to content

Protocol Ecowitt gateway

Manuel edited this page Aug 31, 2026 · 1 revision

Ecowitt gateway API

Setting up Ecowitt gateway API hardware by hand, in weewx.conf.

Generated by tools/build_protocols.py. What each protocol needs is written in that tool; what it is called and what goes into the console comes from the code. Do not edit by hand.

There is a web interface for all of this. It is on by default, and the driver prints its address when WeeWX starts:

INFO user.ultimatepush.driver: The web interface is at
http://1.2.3.4:8080/?token=abcdefg12345

Everything on this page can be done there instead, and one thing is much easier: deciding which reading goes into which database column. See Web interface.

What it is

GW1000, GW1100, GW1200, GW2000, GW3000 and the WH2650 and WN1900 consoles, read over their own API instead of being pointed at a server

In protocols = auto no, and it does not need to be: naming it under [[polling]] is what switches it on
Named by the name you give the block
Recording from its first answer

The smallest configuration that works

[Station]
    station_type = UltimatePush

[UltimatePush]
    driver = user.ultimatepush.driver
    port = 8000

    [[polling]]
        [[[garden]]]
            address = 1.2.3.4
            protocol = ecowitt_gateway
            interval = 60

There is nothing to identify and nothing to wait for. The driver knows which sensor answered because it knows which address it asked, so the block above is the whole of the station: it is recording from the first answer, with nothing to adopt and nothing to let in.

What else it takes

Nothing is set on the console. This driver connects to the gateway and asks, so what it needs is the gateway's address on your network.

Give the gateway a fixed address in your router. One whose address moves stops being answered, and the log is the only place that says so.

This and the console's Customized upload are independent. A gateway answers here whether or not that upload is switched on, so both can run.

Options of its own

None. Everything that applies to this protocol applies to all of them, and is in Configuration.

Worth knowing

Nothing is set on the console. This is the one kind of weather station here where the hardware is told nothing at all: the driver connects to the gateway and asks it, so the whole of what it needs is the address.

The address is in the WSView Plus app, on the page that lists your gateway. It is also in your router's list of what is connected, under a name that starts with the model. Give it a fixed address there, under whatever the router calls a reserved lease. One whose address moves stops being answered, and the log is the only place that says so.

The port does not have to be written down. Ecowitt fixed it at 45000 and there is no setting for it anywhere, so the address on its own is the whole line.

This and the console's Customized upload can both be on. They are two ways of reading one box and neither knows about the other, so nothing has to be switched off to try this and nothing stops working if you go back to the other. The readings land in the same columns either way, which is what makes moving between them safe.

Sixty seconds is a sensible interval. The outdoor array transmits about every sixteen seconds and the console keeps the last of what it heard, so asking faster than the sensors send gets the same number twice.

Leave it as the main station. This is your weather station, so its temperature is the outdoor temperature. That is the difference between it and a PurpleAir or an AirLink, which are set up as extra stations because their thermometers are inside their own housings.

Everything arrives in Celsius, hectopascals, millimetres and metres per second, whatever the console's display is set to. There is no unit setting in this API and the display's does not reach it. WeeWX converts to whatever your reports are in, so this changes nothing about what you see.

No gateway yet? python -m user.ultimatepush --fake-gw1000 answers like one, and everything above can be tried against it first.

When nothing arrives

Nothing is recorded and the log says the gateway cannot be reached: the address is wrong, or has moved. It is said once and then the driver stays quiet, so look at the start of the log rather than the end.

Something answers and it is refused. Whatever is at that address is not a gateway. The usual cause is that the address now belongs to something else on the network.

There is no rain, and the console shows some. A WS90 measures rain with a piezo gauge rather than a tipping bucket, and the gateway reports the two separately. The piezo totals arrive in columns of their own, drain_piezo rather than dayRain, and which of the two your console believes is a setting in the app.

A sensor is missing. The gateway reports the ones it has registered, so one the app does not show is one it has lost rather than one this driver dropped. If the app shows it and the readings do not appear, the log names the part of the answer that could not be read, and that is worth reporting.

More than one station

This is one station among however many others. Which of them fills outTemp, and where the rest of their readings go, is in Several stations.

Clone this wiki locally