Successfully getting Ambient Weather WS-1965 to work

44 views
Skip to first unread message

Chris Swanda

unread,
Apr 16, 2026, 5:21:15 AM (22 hours ago) Apr 16
to weewx-user
I received a new WS-1965 to replace my 14 year old AcuRite, and had all kinds of issues getting the interceptor driver to work.  

Version: WS1965B_V1.3.3

```
driver = user.interceptor
    device_type = observer
    port = 8000
```

Monitoring port 8000 after telling the WS-1965 console to use a custom weather service, I noticed that GET request was formatted as `GET /data/report&PASSKEY=...`

My fix was to make the following changes to my interceptor.py.  

Original
```
        def do_GET(self):
            # get the query string from an HTTP GET
            data = urlparse.urlparse(self.path).query
```

Changed to:
```
        def do_GET(self):
            # get the query string from an HTTP GET
            # fix for WS1965B firmware bug: uses & instead of ? after path
            path = self.path
            if '?' not in path and '&' in path:
                path = path.replace('&', '?', 1)
            data = urlparse.urlparse(path).query
```

And all the sudden I started getting packet loops in weewx.

There were some unrecognized parameters being reported, so I added them to the `LABEL_MAP` and `IGNORED_LABELS` to get past this.

Added WS1965B specific labels after `for all firmware`:

```
            # for all firmware
            'winddir': 'wind_dir',
            'windgustdir': 'wind_gust_dir',
            'UV': 'uv',
            'lowbatt': 'battery',

            # WS1965B specific
            'maxdailygust': 'wind_gust_max',
            'battout': 'battery',
            'baromrelin': 'barometer',
```

And then added `'winddir_avg10m', 'hourlyrainin', 'eventrainin', 'totalrainin', 'stationtype',` to the ignored labels.


```
        IGNORED_LABELS = [
            'ID', 'PASSWORD', 'PASSKEY', 'dateutc', 'softwaretype',
            'action', 'realtime', 'rtfreq',
            'relbaro', 'rainin',
            'weeklyrain', 'monthlyrain',
            'weeklyrainin', 'monthlyrainin',
            'winddir_avg10m', 'hourlyrainin', 'eventrainin', 'totalrainin', 'stationtype',
```

Hope this helps someone in the future.

Chris Swanda

unread,
Apr 16, 2026, 3:28:03 PM (12 hours ago) Apr 16
to weewx-user
Edit... I did some testing and needed to make some changes.

```
# WS1965B specific 'maxdailygust': 'wind_gust_max', 'battout': 'battery', 'baromrelin': 'barometer', 'dailyrainin': 'rain_total', }
```
And in IGNORED_LABELS:

```
IGNORED_LABELS = [ 'ID', 'PASSWORD', 'PASSKEY', 'dateutc', 'softwaretype', 'action', 'realtime', 'rtfreq', 'relbaro', 'rainin', 'weeklyrain', 'monthlyrain', 'weeklyrainin', 'monthlyrainin', 'yearlyrainin', 'hourlyrainin', 'eventrainin', 'totalrainin', 'winddir_avg10m', 'stationtype', ]

```
Reply all
Reply to author
Forward
0 new messages