Ambient Weather WS-2080 hang fix

A weather station, Ambient Weather WS-2080 that I installed in my backyard has a receiver unit with a pretty nasty hardware issue: occasionally, its USB interface would hard hang. It could happen twice a week or once a month – it is very unpredictable and highly annoying. Once it happens, nothing short of a power reset of the receiver unit would fix it. You’d have to remove the battery or unplug the USB if you powered it through it. I've finally got around to fix it. If you have a similar problem with that weather station, you may be interested to read on...

If this is happening to your unit, you will also know that in addition to the hang, the software that talks to it ("Cumuls" in this case), would also hang trying to read the USB data. This creates an additional problem: you would have to actively monitor the setup daily so you can fix it and not lose any weather data.

Instruments like that should be able to work autonomously for months, years at a time!

Ambient Weather, WS-2080, weather station, powershell, pcb, arduino
WS-2080 Weather Station

I really wanted a solution that is robust and fully automatic since I tried just about anything suggested at various forums and nothing worked.

My solution to this problem was a set of software scripts to detect when a device hang and a small Arduino-based dongle board that controls the USB power to the receiver and can hard reset the unit when a problem is detected. For the additional bonus, I also wanted to get an email when the fault (and correction) happens.

Hardware

I used a spare Arduino Nano board that I had and fitted it inside a small phone jack enclosure which I could then mount on the wall between the server PC and a weather station receiver.

The idea was for the server to talk to the Arduino via USB/serial and the Arduino would control a relay which would control the power of the USB connection to the receiver. The USB cable to the receiver would pass-through this dongle.

This is a final schematic done in the Eagle software:

USB dongle schematics
USB dongle schematics

and the board layout:

USB dongle layout
USB dongle layout

The board also has a "garage door" terminal. This is hooked up to a switch on my garage door rail and detects when a garage is opened - a part of my home Internet-of-Things network. However, that's a topic for another blog.

The 5x2 pin connector is a simple USB pass-through and the relay controls its +5V wire. All other USB signals are passed through unmodified.

This is the image of a finished board already fitted in the enclosure:

Board fitted in place
Board fitted in place

Once the board was ready, I mounted it on the wall. I want to thank my friend Brent who created for me a perfectly fitting (red) enclosure cover on his 3D printer!

USB dongle mounted in place
USB dongle mounted in place

It is then connected to my weather station whose USB power is now fully controlled by the server software through the pass-through dongle.

WS-2080 station in place
WS-2080 station in place

The board contains these parts:

A relay used is a reed relay with an internal clamping diode from NTE Electronics. It's data sheet can be found here.

Software

This is the software that runs on the Arduino Nano board:

Since I am using the same setup to detect garage door being opened and closed, the source contains code to handle that task as well. As with anything else, you may want to just take the main ideas and create your own solutions.

The USB dongle is connected to a Windows Home Server 2011 box, so I made a couple of scripts in Windows PowerShell to monitor for the failure condition which can be identified by Cumulus software not saving its real-time report data file within some time (I selected 60 min). The script was added to the Task Scheduler to run every 1 hour:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File ServerAutomation\Watchdog\CheckTime.ps1

The script checks if that file has a time stamp older than 60 minutes, and if it does, it will set a signal (via an environment variable) to another script to reset the power on the USB dongle. At the same time it will also (1) send an email to notify me about the event and (2) reset Cumulus software. PowerShell makes doing all of that really easy.

I used a separate script to reset the USB since I am running some other process(es) which were combined with it. This is a part of that script that checks for the event and resets the USB:

It was a satisfying moment when I first got the email from the system: It rebooted the receiver unit, the software and had reset the weather station. It all continued to work as if nothing had happened and you'd not know if you hadn't check the weather data and saw few missing entries. Then I checked the Weather Underground feed and surely enough - a short flat-line of missing data was closely followed by a new valid data and all that happened without my intervention.

This is a link to the WeatherUnderground where I post weather data. This is a RapidFire WU site where the weather conditions are updated every 5 seconds.

Finally, this is a hosted web site containing weather data updated by the Cumulus software using one of the many available weather templates.

Backup images

Mask for the board
Mask for the board
Exposure...
Exposure...
Etching...
Etching...
The board is ready
The board is ready
Cut a slot with a nibbler!
Cut a slot with a nibbler!
Testing the Arduino software
Testing the Arduino software
Fitting the board into a convenient enclosure
Fitting the board into a convenient enclosure

8 thoughts on “Ambient Weather WS-2080 hang fix

    1. Goran Devic

      I have 2 receiving units and on one the internal pressure sensor stopped working. AW are entry level products for HWS purposes so I am ok with that.

      Reply
  1. Papa Oz

    When I reset my 2080 by holding the "up" button it fully resets. But when I remove power for 30 seconds it comes up with a bunch of bugus readings. Does your software somehow restore the last valid readings to the station?

    Reply
    1. Goran Devic

      No, the software (via a relay) simply cuts off the USB power for a few seconds and that resets the receiver. The data is lost - but not much of it since it figures out that the station is frozen rather quickly. Recently, these units started giving me some other problems (failed sensor readings etc.) so I am thinking of dumping the AW for something more reliable that should work more years without having to deal with issues like that.

      Reply
      1. Papa Oz

        Thank you for your reply. I have looked into Davis but they are frightfully expensive. I had LaCrosse before and that was not very good either. Lately my Ambient has gone into hang state within seconds of starting Cumulus. I guess it's dead. Sigh....

        I guess if either of us finds a reasonably priced unit that works properly we should spread the word.

        Reply
  2. Victor Fribourg Montes

    Hello Goran, my name is Victor from Lima - Peru. I want to made this project, but I dont understand a few thinks.

    First, could you bring me a total list of the electronic components?.
    Second, the arduino Nano need a specific scketch to upload
    Third, I understand that this module is connect between the WS2080 console and the PC, but how?

    Thanks a lot for your time, best regards

    Victor

    Reply
    1. gdevic

      Hi Victor,
      I have updated the blog with Arduino source code and the BOM. The board has a 2x5 pin header connector marked "USB" which requires USB cable splicing: on the schematics you will see that pins 3-4, 5-6, 7-8 and 9-10 are tied together, so those signals are passed through, but 1-2 are separated by a reed relay. That is a USB power rail which is controlled by the relay. You will simply have to cut two USB cables (one leading to the PC and another one to the weather unit) and solder 1x4 .1" pitch connectors on their ends being careful to follow the standard USB wiring lineup: 1=5V, 2=Data, 3=Data, 4=Ground. (Yes, the on-board connector has a spare pair of pins, it could have been 2x4 but I was planning to tie the ground twice, if needed.)
      Hope that helps!

      Reply

Leave a Reply