GW3000 with ecowitt_local_http (long)

60 views
Skip to first unread message

Chuck Rhode

unread,
Apr 4, 2026, 1:42:04 PM (7 days ago) Apr 4
to weewx-user
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Here is yet another installment in the ongoing saga of the elusive
GW3000 driver.... Pondering weak and weary, I finally got down on my
hands and knees and pored over all the traffic here for the last year
or so. Obviously I have been laboring under some misapprehensions.

In June 2025, I replaced a Acurite weather station because the
wind-direction sensor had failed a year earlier. I installed an
Ecowitt GW1000 gateway. Blithely I assumed, because the Acurite had
backfill (catch-up), that the Ecowitt did, too. I was wrong, so I
immediately ordered a GW3000, which I assumed had backfill because it
sported an SD memory card slot.

Then the Ecowitt driver disappeared, so I did not install the new
GW3000, waiting instead for you folks here to decide what you were
going to do about the missing driver.

I believe there was always an interceptor driver which requires that
the gateway be configured to emit sensor readings to the cloud. I am
a privacy kook, so sending anything so personal as the outside weather
under my name to a manufacturer's Web site is a non-starter. ... not
happening even though all the Chinese hardware seems to just assume
that that's the way the Internet of things (IoT) is supposed to work
nowadays. The interceptor driver intercepts these readings, so it
really isn't as bad as it seems, but I believed I had to set up a
manufacturer's account anyway, which I was reluctant to do for the
reasons aforementioned.

Someone then suggested that the old GW1000 driver had been recovered,
and further that it could be used for the GW3000, but shoot! I
already had that installed, so, in Feb 2026 without making any major
config changes, I swapped the new GW3000 gateway for the old GW1000,
and, Lo, the new gateway ran well. I ASSUMED that backfill would be
taken care of by the GW1000 driver. I was wrong. I really needed a
GW3000 driver that could backfill. This week, I set about trying to
figure out which one that was.

Apparently you all have decided on a name for it — ecowitt_local_http
— for historical reasons. This is an unfortunate designation.
Despite the "local," the "http" suggests something of the cloud. This
driver doesn't involve the cloud for loop operation. Instead it
probes the LAN Web page served by the gateway, hence both the "local"
and the "http." Backfill is achieved by "downloading" files from the
SD card through the gateway's local Web page. (Apparently — if the SD
card is corrupt or not present — the driver attempts to backfill from
the Ecowitt cloud — if it can reach your account there. This requires
an API key. If you don't want or need backfill from the cloud, you
can just do as I did and refuse to supply a key.)

I tried two sources for the GW3000 backfill driver:

+ https://github.com/weewx/weewx/wiki

The Wiki contains a link to "ecowitt_http:"

+ https://github.com/WernerKr/Ecowitt-or-DAVIS-stations-and-Season-skin/tree/main/ecowitt_http

... which inveigles one to try:

+ weectl extension install weewx-ecowitt_http.zip

... which probably would have worked if I could have
figured out how to download the *.zip file.

I would prefer that the Wiki link to:

+ https://github.com/WernerKr/Ecowitt-or-DAVIS-stations-and-Season-skin

... which provides Werner Krenn's name and a "Code" download button.

As you can surmise, I am not hep to *github*.

On 4 Jan 2026, Vince Skahan suggested installing from:

+ https://github.com/weewx-contrib/weewx-ecowitt_local_http/archive/refs/heads/main.zip

... which didn't work for me, possibly due to some redirection on
the *github* site. I went to the parent link:

+ https://github.com/weewx-contrib/weewx-ecowitt_local_http

... which provides Ian Millard's name and a "Code" download
button. I WAS ABLE to install from his *.zip file. I am
still not convinced though — in spite of the official sounding
name of this repository — that this is official *weewx* code.

Wonderful! The new driver works much as the old driver did AND IT
DOES BACKFILL apparently. I note the that driver is an immense
artifact at 13K+ lines of *python* code. I imagine loading a COBOL
program from seven boxes of punched cards. Shudder! Perhaps the size
is a result of backward compatibility compromises with succeeding
models of Ecowitt sensors and the names of the data items they emit on
the gateway's LAN Web page.

Here I insert differences it made to my *weewx.conf*:

> --- weewx.conf.20260219193241 2026-02-19 19:25:13.441657693 -0600
> +++ weewx.conf 2026-04-03 13:16:24.451266561 -0500
> @@ -3,6 +3,7 @@
> # Copyright (c) 2009-2024 Tom Keffer <tke...@gmail.com>
> # See the file LICENSE.txt for your rights.
>
> +# ccr . 2026 Apr 02 . Use ecowitt_local_http driver for backfill.
> # ccr . 2026 Feb 19 . New GW3000 Ecowitt Weather Gateway.
> # ccr . 2025 Jul 17 . New router somehow caused a change in the IP of the Ecowitt Gateway.
> # ccr . 2025 Jun 11 . Suppress street address.
> @@ -33,6 +34,9 @@
> # This configuration file was created by ...
> version = 5.0.2
>
> +# Whether to try indefinitely to load the driver
> +loop_on_init = 1 # 2026 Apr 02
> +
> ##############################################################################
>
> # This section is for information about the station.
> @@ -53,7 +57,7 @@
>
> # Set to type of station hardware. There must be a corresponding stanza
> # in this file, which includes a value for the 'driver' option.
> - station_type = GW1000
> + station_type = EcowittHttp # 2026 Apr 02
>
> # If you have a website, you may specify an URL
> station_url = http://LacusVeris.com/Weather
> @@ -67,6 +71,46 @@
>
> ##############################################################################
>
> +[EcowittHttp] # 2026 Apr 02
> +
> + # This section is for the Ecowitt Local HTTP API driver.
> +
> + # The device IP address:
> + ip_address = 192.ddd.ddd.ddd # 2026 Feb 19
> + port = 45000
> +
> + # How often to poll the API, default is every 20 seconds:
> + poll_interval = 20
> +
> + # The driver to use:
> + driver = user.ecowitt_http
> +
> + # Is a WN32P used for indoor temperature, humidity and pressure
> + wn32_indoor = False
> +
> + # Is a WN32 used for outdoor temperature and humidity
> + wn32_outdoor = True # 2026 Apr 02
> +
> + # Show all battery state data including nonsense data and
> + # sensors that are disabled sensors and connecting
> + show_all_batt = False
> +
> + # Ignore battery state data from legacy WH40 sensors that do
> + # not provide valid battery state data
> + ignore_legacy_wh40_battery = True
> +
> + # Always log unknown API fields, unknown fields are always
> + # logged at the debug level, this will log them at the info level
> + log_unknown_fields = False
> +
> + [[field_map_extensions]]
> + rainRate = rain.0x0E.val
> + rainBatteryStatus = wh40.battery # 2026 Apr 02
> + windBatteryStatus = wh68.battery
> + outTempBatteryStatus = wh26.battery
> +
> +##############################################################################
> +
> [GW1000] # 2025 Jun 01
> # This section is for the Ecowitt Gateway driver.
>
> @@ -391,6 +435,88 @@
> extractor = last
> [[ws90_sig]]
> extractor = last
> + [[t_rainevent]] # 2026 Apr 02
> + extractor = last
> + [[t_rainhour]]
> + extractor = last
> + [[t_rainday]]
> + extractor = last
> + [[t_rainweek]]
> + extractor = last
> + [[t_rainmonth]]
> + extractor = last
> + [[t_rainyear]]
> + extractor = last
> + [[p_rainevent]]
> + extractor = last
> + [[p_rainhour]]
> + extractor = last
> + [[p_rainday]]
> + extractor = last
> + [[p_rainweek]]
> + extractor = last
> + [[p_rainmonth]]
> + extractor = last
> + [[p_rainyear]]
> + extractor = last
> + [[is_raining]]
> + extractor = last
> + [[wn32_batt]]
> + extractor = last
> + [[wn32p_batt]]
> + extractor = last
> + [[wn31_ch1_batt]]
> + extractor = last
> + [[wn31_ch2_batt]]
> + extractor = last
> + [[wn31_ch3_batt]]
> + extractor = last
> + [[wn31_ch4_batt]]
> + extractor = last
> + [[wn31_ch5_batt]]
> + extractor = last
> + [[wn31_ch6_batt]]
> + extractor = last
> + [[wn31_ch7_batt]]
> + extractor = last
> + [[wn31_ch8_batt]]
> + extractor = last
> + [[wh54_ch1_batt]]
> + extractor = last
> + [[wh54_ch2_batt]]
> + extractor = last
> + [[wh54_ch3_batt]]
> + extractor = last
> + [[wh54_ch4_batt]]
> + extractor = last
> + [[wn32_sig]]
> + extractor = last
> + [[wn32p_sig]]
> + extractor = last
> + [[wn31_ch1_sig]]
> + extractor = last
> + [[wn31_ch2_sig]]
> + extractor = last
> + [[wn31_ch3_sig]]
> + extractor = last
> + [[wn31_ch4_sig]]
> + extractor = last
> + [[wn31_ch5_sig]]
> + extractor = last
> + [[wn31_ch6_sig]]
> + extractor = last
> + [[wn31_ch7_sig]]
> + extractor = last
> + [[wn31_ch8_sig]]
> + extractor = last
> + [[wh54_ch1_sig]]
> + extractor = last
> + [[wh54_ch2_sig]]
> + extractor = last
> + [[wh54_ch3_sig]]
> + extractor = last
> + [[wh54_ch4_sig]]
> + extractor = last
>
> ##############################################################################
>
> @@ -733,6 +859,7 @@
> # It should be in the units defined in the StdConvert section.
> # Example:
> foo = foo + 0.2
> + luminosity = illuminance # 2026 Apr 02
> radiation = luminosity/126.7 if luminosity is not None else None # 2025 Jun 01
>
> ##############################################################################
> @@ -779,6 +906,17 @@
> rainRate = prefer_hardware
> windchill = prefer_hardware
> windrun = prefer_hardware
> + p_rain = prefer_hardware # 2026 Apr 02
> + lightning_strike_count = prefer_hardware
> + rain = prefer_hardware
> +
> + [[Delta]] # 2026 Apr 02
> + [[[p_rain]]]
> + input = p_rainyear
> + [[[lightning_strike_count]]]
> + input = lightningcount
> + [[[rain]]]
> + input = t_rainyear
>
> ##############################################################################


- --
.. Be Seeing You,
.. Chuck Rhode, Sheboygan, WI, USA
.. Weather: https://LacusVeris.com/Wx
.. 39° — Wind WSW at 5 mph. Sky overcast; mist.
-----BEGIN PGP SIGNATURE-----

iF0EARECAB0WIQT+MY/5I/LMPSswTbVg2/xipKOWUgUCadFNWQAKCRBg2/xipKOW
UknWAJ45kovDVinqmLxPtyTNJ6zLcTHrDQCfYgCcn712kvECOa4PZ60kt9zd2D0=
=JiSG
-----END PGP SIGNATURE-----

Vince Skahan

unread,
Apr 4, 2026, 2:19:53 PM (7 days ago) Apr 4
to weewx-user
Glad it works. A few comments...

To do a one-step installation via weectl from a zip file all you need to do is right-click the link to the file in the github page to get the full URL it maps to, then simply paste it into the weectl command
For the other https://github.com/weewx-contrib/weewx-ecowitt_local_http example the github repo is more typical variant, containing a git-controlled tree of files 'not' zipped up.  In that case you'd click on the 'code' button to open that menu then right-click the 'download zip' pick to get the URL for the zip file, then similarly paste it into the weectl command
You can alternately choose to download the zip file and then use weectl extension install somename.zip in two steps if so inclined.


And of course the commands above assume the item has been packaged in a way that the weectl extension installer expects.  This is normally the case, but not always for certain third-party developers who choose to require a more manual installation for their additions.


Lastly - re:  "I am still not convinced though — in spite of the official sounding name of this repository — that this is official *weewx* code."
  • You have a misconception there. 
  • The name of the item does not mean official nor unofficial.  It just indicates that item is 'related to' weewx in some way.
  •  If something isn't in standalone weewx itself as installed via pip/dpkg/yum/git per the QuickStart mechanisms, it is a third-party user-contributed addition.

Reply all
Reply to author
Forward
0 new messages