Connecting a Weather Station to the Internet

I’ve been pretty terrible in the last couple of years getting things documented on here that I’d intended to get documented on here. I’m going to slowly back-fill the site with info on projects that may be of broader interest.  These include the actual building and finishing of the arcade cabinet, some major home remodeling, custom home automation software and hardware, and a slew of other projects. I need to get back into the habit of actually posting these, not just taking photos for them.

The smallest and most recent, and thus easiest, to post is a quick project for getting my Accurite 02064 5-in-1 Weather Station online.

The primary reason for this was to get weather data into the Homeseer automation system we’re using now, which replaced the older Vera system we’d been using.

Accurite sells these with claims they’re Internet-enabled, but they’re not. You can buy an expensive add-on module or plug them into a PC and use their proprietary software to send the data to their proprietary cloud service, which can be configured to send the data to Weather Underground. That’s interesting, although I don’t like not knowing what they’re doing with the data I’m sending them. And worse, Weather Underground has pretty serious limits on the API calls you can make to retrieve weather data, so getting real-time data would basically cause me to have to pay to see my own data.

So the goal was to find something small and inexpensive that could retrieve data from the display unit itself (the way their PC software does) and serve that up both locally to Homeseer, and ideally send direct to Weather Underground. (That lets me bookmark this station in my phone and see the data remotely.)

Without having looked at the protocol the unit used (some of their documentation implied it might’ve been a USB storage protocol), the most obvious solution would be a Raspberry Pi. The downside, though, is its sort of expensive for what it is. $35 was a surprisingly good price when they came out, but it was a lot of money to spend on a simple little device like this. The Pi Zero would’ve been ideal, but it doesn’t have WiFi.

What I ended up finding was the Orange Pi Zero — a tiny board from a company in China that is clearly inspired by the Raspberry Pi, but has better specs for the price. The specs are close, but not exactly, what the Raspberry Pi 3 has, but the board is about $10 shipped from Aliexpress.

Unlike the ESP8266 NodeMCU boards (which I’ve been using a lot lately — more on those projects later), these have a USB host port, which is what I needed to talk to the Accurite unit.

It took a week to get the board when I ordered it, but it was pretty quick to get set up once I had it. Its running the latest version of Armbian — a Linux distribution meant for these tiny ARM-based systems.

At that point I started looking at the device itself — something I should’ve done earlier. It turns out the protocol it uses is actually a USB HID device. Basically, it looks like a damn keyboard. While I think there’s some ability to trigger events in it (the way a computer can turn on LEDs on a keyboard, too), mostly what it does it just send virtual keystrokes on a schedule with the data.

That was going to be a pain. It turns out after doing some more searching, though, there’s a software package called “Weewx” that already had support in Python for connecting to the HID device and retrieving data.

So although it took some gyrations to get everything installed, they were just normal Linux gyrations. Once it was set up, it had no issues getting data into its web UI (which I’m hosting using lighttpd directly on the Pi Zero — its got enough power to do both!), and uploaded to Weather Underground.

The local web interface has extensive data:

 

Weather Underground integrates the data into their local forecasts, but I can also see the station data directly:

I have to still write a plugin for Homeseer to feed the weather data into the automation system. I need this because the system right now can switch between, for example, baseboard/oil heat and our split-mini HVAC units for heat, and the best time to switch over is dependent on outdoor temperature. (The control of the split-mini units is another, much bigger, project I intended to document next — those devices, and the Homeseer plugin for them, were all custom-made.)

Finally, I couldn’t find any cases that work with the Orange Pi Zero, as the board is only a month or two old. For now, I just thumbtacked it to a cork-board next to the weather station itself.  A 3D printer is on my list of things I keep meaning to buy — I’ll just print a case once I get one.