Fine Offset Weather Station Protocol

Weather Symbol

See the main page for the WxTools overview

Description

This description covers the protocol used by a Fine Offset WH2900 weather station or, to be exact, a clone in the form of the Pro-Signal PSG04173. The description is likely to valid for a number of other Fine Offset weather stations and their clones (Ambient, Ecowitt, Froggit, Watson, etc.).

The weather station can upload its data using WiFi to a variety of sites such as Weather Cloud, Weather Observation Website and Weather Underground. More importantly, it can be configured to upload to a custom web server. The following also covers how to use a Raspberry Pi as a server.

Custom Web Server

When setting up the weather station using WS View, turn off all web servers (including the Ecowitt one) except the custom one. Settings for the custom web server can refer to a local system (identified by local IP address, port, path and upload interval). Settings must correspond to those of the custome web server. The protocol type should be set to Ecowitt as this should allow for the upload of all sensor data. Finally, enable the custom web server and save the configuration.

A recent model of the Raspberry Pi can be used the implement the custom web server. Although the weather station can communicate with the Pi using a local WiFi router, it is also possible to have the weather station communicate directly with the Pi. This is done by turning the Pi into a WiFi hotspot.

There are many online tutorials about how to create a WiFi hotspot using the Pi as a Wireless Access Point. Basically, the Pi is set up to directly handle WiFi messages from the weather station. This is done by installing hostapd and dnsmasq. WiFi traffic is then passed via the Pi's Ethernet interface onto a router.

The custom web server might be Apache running on the Pi. However, a full-blown web server is not needed. Instead a lightweight solution can be used such as WxServer.

Weather Station Messages

For the Ecowitt protocol, messages are sent to the custom web server using HTTP requests and the POST method. The server need not run on port 80 (which is more difficult to use on Linux). The body of the POST contains a number of readings in the format key=value, the readings being separated by &. A typical set of readings might be:

    PASSKEY=6C777E402A6306CF5C6DB52A47C37DAA
    stationtype=EasyWeatherV1.5.7
    dateutc=2021-02-10+22:52:06
    tempinf=70.9
    humidityin=30
    baromrelin=30.316
    baromabsin=30.523
    tempf=18.0
    humidity=86
    winddir=261
    windspeedmph=0.0
    windgustmph=0.0
    maxdailygust=6.9
    rainratein=0.000
    eventrainin=0.209
    hourlyrainin=0.000
    dailyrainin=0.209
    weeklyrainin=0.209
    monthlyrainin=0.209
    totalrainin=0.209
    solarradiation=0.00
    uv=0
    wh65batt=0
    freq=868M
    model=WS2900_V2.01.08
  

It is possible to configure the measurement units sent by the weather station. The example above uses the default units: Fahrenheit for temperature, inches for rain, inches of mercury for pressure, miles/hour for speed, watts/square metre for solar radiation. WH65 refers to the all-in-one sensor array; its battery status is 0 for OK and 1 for low. The transmission frequency is in MHz.

Having extracted whatever readings are relevant, the custom web server should respond with an HTTP 200 (OK) message. If the server is not available to respond, the weather station just keeps operating and does not fail.