Skip to content

Hardware

Manuel edited this page Aug 31, 2026 · 2 revisions

Hardware

Every device this driver knows about, what it is, and what it takes to reach it.

The descriptions are written; the Ecowitt field lists come from the catalog, so the two cannot drift apart. Generated by tools/build_hardware.py. Do not edit by hand.

What it takes to reach each of them

Hardware How it reaches WeeWX What you have to do
Ecowitt, Froggit, Misol posts, path of your choosing set Customized in WS View Plus
Ambient Weather posts, path of your choosing set the custom server in awnet
Fine Offset Observer, Sainlogic posts to a fixed path set the server and port; the path cannot be changed
WeatherFlow broadcasts on UDP 50222 nothing on the hub; enable the protocol, and be on the same network segment
Acurite smartHUB, Access posts to hubapi.myacurite.com point that hostname at WeeWX in your own DNS
LaCrosse LW301, LW302 posts to box.weatherdirect.com point that hostname at WeeWX in your own DNS

The two that need a DNS entry

Neither an Acurite bridge nor a LaCrosse gateway can be told where to post. It goes to its maker's servers, over plain HTTP on port 80, and there is no setting for it.

So the hostname has to resolve to the machine running WeeWX on your network. How is up to you. With dnsmasq:

address=/hubapi.myacurite.com/192.168.1.10

Most routers can do the same thing under a name like DNS host entry or local DNS. A hosts file on the WeeWX machine will not work: the entry has to be seen by the bridge, not by WeeWX.

Both post to port 80, which needs root. Running WeeWX as root to get it is not a good trade. Redirect the port instead:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8000

Once the bridge is pointed here it no longer reaches its maker's servers, so the maker's app and website stop showing the station. That is the trade, and it is not reversible without undoing the DNS entry.

Ecowitt and Fine Offset

A note on names. Ecowitt renamed its sensors partway through: WH became WN for the smaller ones, so a WH31 and a WN31 are the same device. The uploads still use the old names, which is why the raw fields below say wh31 where the box says WN31. Suffix letters are variants of one device, not different products: WH51 and WH51L differ in cable length, WH65B and WH65L in radio band, WN34S/L/D in housing.

Fine Offset builds all of it. The same hardware is sold as Ecowitt, Froggit, Ambient Weather, Aercus, Misol, Sainlogic and others, usually with the model number intact. Which protocol a given box speaks depends on its firmware rather than on its badge, and the driver works that out per upload.

Outdoor sensor arrays

WS90

7-in-1 array. Ultrasonic wind, piezo rain, temperature, humidity, solar, UV. No moving parts. Sold as the Wittboy.

Fields: drain_piezo, erain_piezo, hrain_piezo, rainN_piezo, mrain_piezo, hailRate, and 9 more

WS85

3-in-1 array. Ultrasonic wind and piezo rain, no temperature.

Fields: wsN_batt, whN_rssi, wsN_sig, wsN_ver, wsNcap_volt

WS80

6-in-1 array. Ultrasonic wind, temperature, humidity, solar, UV. No rain gauge.

Fields: windBatteryStatus, whN_rssi, wsN_sig

WS69 / WH65

7-in-1 array with moving parts: cup anemometer, wind vane, tipping bucket, temperature, humidity, solar, UV. The one most outdoor stations ship with. Sold as WH65B and WH65L depending on the radio band.

Fields: outTempBatteryStatus, whN_rssi, whN_sig

WS68

Wind, solar and UV only. No temperature, no rain.

Fields: outTempBatteryStatus, whN_rssi, whN_sig

WH24

The earlier 7-in-1 array, from the WH2900 era. Same readings as the WH65, different radio.

Fields: whN_rssi, whN_sig

WN67

Array without solar or UV.

Fields: no fields in the catalog

Sensors

WH31 / WN31

Multi-channel temperature and humidity, 8 channels. The small white sensors people put in a greenhouse or a shed.

Channels: 8.

Fields: batteryStatusN, extraHumidN, extraTempN, whN_chN_rssi, whN_chN_sig

WN30

Temperature only, on the same channels as the WH31.

Fields: no fields in the catalog

WN36

Pool thermometer. A WN30 in a floating housing.

Fields: no fields in the catalog

WN32 / WH32 / WH26

The outdoor temperature and humidity sensor a station without an array uses. WH26 is the older name for it.

Fields: whN_batt, whN_rssi, whN_sig

WN32P / WH25

Indoor temperature, humidity and pressure. Built into most consoles.

Fields: pressure, barometer, inHumidity, inTemp, inTempBatteryStatus, whN_rssi, and 1 more

WN34 S/L/D

Multi-channel temperature, 8 channels. One device in three housings: a spike for soil, a PVC lead, and a silicone lead for a pool. Nothing in the upload says which.

Channels: 8.

Fields: wnN_chN_batt, extraTempN, wnN_chN_rssi, wnN_chN_sig

WN35

Leaf wetness, 8 channels.

Channels: 8.

Fields: leafWetBattN, leafWetN, wnN_chN_rssi, wnN_chN_sig

WH51 / WH51L

Soil moisture, one probe. Shares its 16 channels with the WH52.

Channels: 16.

Fields: soiladN, soilMoistBattN, soilMoistN, whN_chN_rssi, whN_chN_sig

WH52

Soil moisture, temperature and conductivity in one probe. Shares its channels with the WH51.

Channels: 16.

Fields: soilECN, soilECadN, soilMoistBattN, soilMoistN, soiladN, soilTempN

WH40 / WH40H

Tipping bucket rain gauge, for stations without an array. The H is the self-emptying one.

Fields: dayRain, eventRain, hourRain, rainN, monthRain, rainRate, and 5 more

WH41 / WH43

Outdoor particulate sensor, PM2.5, 4 channels.

Channels: 4.

Fields: pmN_Nh_coN, fpmN_AQI_Nh_coN, fpmN_AQI_avg_Nh_chN, fpmN_AQI_chN, fpmN_AQI_coN, pmN_avg_Nh_chN, and 4 more

WH45

5-in-1 indoor air quality: CO2, PM2.5, PM10, temperature, humidity.

Fields: coN, coN_Nh, coN_Batt, coN_battN, coNin, coNin_Nh, and 8 more

WH46 / WH46D

7-in-1 air quality. The WH45 plus PM1 and PM4.

Fields: pmN_Nh_coN, fpmN_AQI_Nh_coN, fpmN_AQI_coN, pmN_N

WH55

Water leak detector, 4 channels.

Channels: 4.

Fields: leak_N, leak_BattN, whN_chN_rssi, whN_chN_sig

WH57

Lightning detector. Distance to the last strike and a daily count.

Fields: lightning_distance, lightning_num, lightning_time, lightning_Batt, whN_rssi, whN_sig

WN38

Black globe thermometer, for WBGT heat stress.

Fields: bgt, bgtbatt, wbgt, wbgtcat, wnN_rssi, wnN_sig

WH54 / LDS01

Laser distance sensor, 4 channels. Water level and snow depth.

Channels: 4.

Fields: air_chN, depth_chN, ldsbattN, ldsheat_chN, ldspw_chN, thi_chN, and 2 more

WFC01 / WFC02

Irrigation valve with flow metering, 16 channels.

Fields: no fields in the catalog

AC1100

Mains power meter, 16 channels.

Fields: no fields in the catalog

WN20

Rain gauge with its own display.

Fields: no fields in the catalog

What any outdoor array sends

A WS90, a WS69 and a WS80 all report the weather in the same fields. Which array sent a reading is not in the upload, so these belong to whichever one is fitted.

  • Outdoor temperature and humidity, with what the console derives from them. fdewptf, ffeelslikef, fheatindexf, outHumidity, outTemp, fwindchillf
  • Wind. maxdailygust, windDir, winddir_avgNm, windGust, fwindgustmph_maxNm, fwindrun, windspdmph_avgNm, windSpeed
  • Rain, and the calibration the console keeps for it. dayRain, eventRain, hourRain, rainN, monthRain, piezo, gainN, rain_source, and 8 more
  • Solar and UV, with sunshine derived from them. radcompensation, radiation, fsunhours, fsunshine, UV
  • Vapour pressure deficit, calculated by the console. vpd

What a console says about itself

Diagnostics rather than weather, and useful for spotting a console that is about to give trouble.

  • Firmware, uptime, free memory, upload interval. heap, ws_interval, model, newVersion, runtime, stationtype, upgrade
  • Console power. charge_stat, consBatteryVoltage, consolebattp, consoleext_batt

Consoles and gateways

What a console does for this driver is upload. The differences that matter are how many sensors it accepts and whether its firmware offers a custom server.

Model Upload What it is
GW1000 Wi-Fi The first gateway. Wi-Fi, built-in temperature, humidity and pressure on a lead. No display.
GW1100 Wi-Fi GW1000 with the sensor inside the housing.
GW1200 Wi-Fi Adds the LDS01 and newer sensors.
GW2000 Wi-Fi + RJ45 Gateway with Ethernet as well as Wi-Fi.
GW3000 Wi-Fi + RJ45 Current gateway. Ethernet, and an SD card that records when the network is down.
HP2551 Wi-Fi Colour TFT console, the common one for a WS69 station.
HP2560 / HP2561 Wi-Fi Larger console, more channels, SD card.
HP3500 / HP3501 Wi-Fi Console with a separate outdoor array.
WS3800 / WS3820 Wi-Fi Compact colour console.
WS3900 / WS3910 Wi-Fi Console with a built-in CO2 sensor on the 3910.
WN1820 / WN1821 Wi-Fi LCD console. Uploads only, no local API.
WN1900 / WN1910 Wi-Fi LCD console, fewer channels.
WN1920 / WN1980 Wi-Fi LCD console with array support.
WS2910 Wi-Fi Older console, 4G variant exists.
WS6210 4G + Wi-Fi Console with cellular upload.
WS6006 3G/4G Cellular gateway.
WN1700 Wi-Fi IoT display.

Older Fine Offset hardware

These predate the Ecowitt brand. Most speak the Wunderground protocol, and only some firmware versions offer a custom server. Where they do, this driver reads them.

Model What it is
WH2900 Wi-Fi console with a WH24 array. Sold as Ambient WS-2902, Froggit WH2900 and others. Uploads in Wunderground format; some firmware allows a custom server.
WH2600 Bridge without a display, WH24 array. Sold as Ambient ObserverIP, Aercus WeatherSleuth, Froggit WH2600.
HP1000 Console with Wi-Fi upload, same array. Sold as Aercus WeatherRanger, Ambient WS-1001.
WH2650 Gateway between the WH24 array and Wi-Fi.
WH1080 / WH1081 USB console, no network at all. WeeWX reads it with the fousb driver in the core, not with this one.
WH23xx / WH4000 Serial or USB console. Sold as Tycon TP2700, MiSol WH2310. There is a weewx-wh23xx driver and it is Python 2: it stops at a syntax error under any Python WeeWX 5 runs on, and has not been touched since 2020. Nothing here reads this console.

Fields nobody has identified

8 of 532. Which device sends these, and what they mean, is not known here. If you can tell from your own station, please say so: https://github.com/hilman2/weewx-ultimate-push/issues

noise_ch1, noise_ch2, noise_ch3, noise_ch4, peak_ch1, peak_ch2, peak_ch3, peak_ch4

Clone this wiki locally