Posted tagged ‘Weather Display Live’

Cirrus Android Widget for Weather Display Live

December 13, 2014

One of my recent projects was to develop an Android widget to display the values found in online WD Live clientraw.txt files. It accesses the same data as my other weather related code projects this year: a JSON Web Service for Weather Display Live and a PiFaceCAD Weather Display Console.

I’ve name the Widget “Cirrus” after the cloud genus. The widget supports 18 different weather data points (and displays the current trend for many of these) and 16 different measurement units. It also has colour coding for easy recognition of different temperature ranges (using the BBC Weather temperature colours) and UV index (using the US EPA UV Index colours).

Click to Enlarge

Click to Enlarge

I use the widget to display the current conditions for both my own weather station and others when I travel. So far I have installed and run it successfully on a Samsung Note II (Android 4.4.2), Samsung Galaxy Express (Android 4.1.2) and a 2013 Nexus 7 (Android 5.0.1).

At this time I do not have any plans to publish the widget on the Google Play Store. I have, however, open sourced the code using the MIT License and made it available via GitHub here:

https://github.com/waynedgrant/android-appwidget-cirrus

See the read me for installation and use instructions.

 

JSON Web Service for Weather Display Live

October 26, 2014

I’ve been busy implementing a new website for my weather station over the last few weeks at Wayne’s Weather.

There are a number of new technologies being employed. I’ve ditched my bespoke (and ugly) HTML and instead use Bootstrap for a client responsive UI. Chart and image viewing is now more user-friendly thanks to Lightbox. I have also made extensive use of JQuery to pull in information from various sources and to provide a more dynamic experience.

The functionality of the site has also been extended. There are now more in-depth current readings supporting both metric and imperial measurements, forecasts and weather maps from Wunderground.com for the local area have been integrated and I have added a weather webcam and a weather almanac. I intend to write posts to cover the wunderground and webcam build outs soon.

For now this post will concentrate on an unexpected off-shoot of my efforts: a Web Service that exposes Weather Display Live data.

Weather Display Live

Weather Display (and its equivalents such as MeteoHub) can generate clientraw.txt files containing a weather station’s readings and can upload them to a web server periodically and frequently via FTP (in some cases every minute). The primary purpose of this is to drive a Weather Display Live (WDL) dashboard:

Click to Enlarge

The WDL clientraw.txt format is well documented and I have previously used the HTTP addressable clientraw.txt to drive a custom Android widget and my PiFaceCAD Weather Display Console. The disappointing aspect is WDL itself. Don’t get me wrong it’s an excellent weather dashboard and I still have it available in my new website. The problem with it is that is Flash based which is not as widely supported as it used to be. It’s pretty much not an option for mobile device clients running IOS or Android, for example.

To counter this I wanted my new website to make far greater use of the information contained in the clientraw.txt files outside of WDL dashboard itself. My old weather website made use of PHP to grab weather readings from clientraw.txt and place them into web pages before serving them up to the client. This was an approach I wanted to move away from.

I’d just cut my teeth on using JSON formatted web services with my experience as a client to the Wunderground API. I liked the idea of having a page load its own data from the client side where it could conceivably be mix and match data from various services. I figured it wouldn’t be too difficult to create my own web services to expose WDL data and call them from my own web site.

json-webservice-wdlive

I settled on using PHP for the implementation for a couple of reasons. Firstly because I’ve used it for server-side processing on-and-off for a few years and know if fairly well. Secondly because I intended to write a general solution which I could open source for others to use and PHP is ubiquitous in the hosting world.

The result was json-webservice-wdlive, a JSON formatted web service API.

The API exposes two URLs. The first URL returns current weather conditions including Temperature, Pressure, Rainfall, Wind, Humidity, Dew Point, Wind Chill, Humidex, Heat Index and UV. The second URL returns a weather almanac for Month-to-Date, Year-to-Date and All Time records. Both JSON and JSONP (enabled with the addition of a callback attribute to the URL) are supported.

Besides exposing the data in the default units found in clientraw the responses also contain many alternative units. For example, clientraw files store wind speeds in knots. The Web Service responses, on the other hand, respond with Bft, knots, km/h, mph, and m/s.

json-webservice-wdlive-output

Click to Enlarge

Note that I only expose the data I need for my own purposes (i.e. what my weather station setup supports). However, it would be a simply matter to expand the service calls to add, say, solar measurements or extend the selection of almanac measurements. Anything else WDL clientraw.txt files provide can be exposed, if required, with minor code additions.

I have made the json-webservice-wdlive source code available as a GitHub project. Have a look in the project’s README for installation instructions. json-webservice-wdlive is also running live on my own weather website. You can try it at by clicking on the links below:

Refer to the GitHub project page for more details on the Web Service’s response fields including the different measurement units and number field formatting details.

I also make use of the service in three places on my own website: the Current Conditions, Weather Almanac (pictured below) and the Forecast page where I mix my service’s results with those from the Wunderground web service.

almanac

Click to Enlarge

If you have a WDL enabled website feel free to install json-webservice-wdlive to expose your weather data to others and/or to include your information in your own pages.

PiFaceCAD Weather Display Console Build Out

July 19, 2014

I bought a Raspberry Pi back when they were first released in February 2012. It was purchased with the intention of setting it up as data logger for my WMR88 weather station. I got it up and running for that purpose using wview. However, I soon found a better solution for my data logging requirements in the Meteo Sheeva.

The Pi then found its way into a box and remained there unpowered for over two years. I wanted to put it to good use but no ideas were forthcoming to utilise it. Then inspiration struck.

I had just completed an Android application widget that could poll the WD Live files hosted on a website and display the current weather conditions therein. I use it on my smart phone to see the current conditions at home. Could I use the same principle to create a custom weather display console? It seemed like a cool little project and would put the Pi to good use at last.

The first thing I needed was some kind of simple, dedicated display for the Pi. Trawling the web I found a few products on offer that did just that. Unfortunately they all required soldering which I’m just not brave enough to try. Then I discovered the PiFace Control and Display (PiFaceCAD).

The PiFaceCAD is a neat bit of kit. It attaches to a Pi via its GPIO ports and provides a small backlight 16×2 character screen, five buttons, a three position navigation switch and an IR receiver. All of these features are programmable via Python. I ordered it and the compatible Camden Boss case from MCM and they arrived a few days later.

Assembly

The assembly was a little fiddly as the Camden Boss case is a very tight fit around the Pi and PiFaceCAD. I’ve illustrated the process in the pictures below.

The unboxed PiFaceCAD:

20140421_192221

Click to Enlarge

The unboxed case with the included rubber feet. I prefer clear cases if I can get them as they are more interesting to look at than opaque cases:

20140421_191636

Click to Enlarge

My Pi ( a Model B Rev 1) maneuvered into the bottom half of the case. It’s a tight fit to get it in place, especially the composite video port:

20140421_192746

Click to Enlarge

The PiFaceCAD attached to the Pi via its GPIO pins. Getting the PiFaceCAD into the bottom half of the case is difficult as the five buttons have to fit into small cut outs. I was sure I was going to break something but fortunately I didn’t:

20140421_192916

Click to Enlarge

The top of the case snapped into place. Again it’s tricky to fit it around the Pi’s USB and Ethernet ports:

20140421_193119

Click to Enlarge

Finally the assembled unit powered up, with the PiFaceCAD software installed and running the supplied SysInfo demo program:

20140421_194321

Click to Enlarge

Coding in Python

With the hardware up and running the next step was to code the weather display application itself. The PiFaceCAD provides a functional, easy to use Python API. The API exposes the ability to write to the display, control its backlight and add event handlers to the various buttons and the IR receiver.

I had never coded in Python before (Java has been my mainstay for last few years with the occasional foray into PHP and C#) but found it to be a straightforward language to pick up with a gentle learning curve and excellent documentation. The language’s dynamic typing took a little getting used to given my background but I started the exercise prepared to learn new ways of doing things (I did not want to “code Java in Python”). Coming from Java I really appreciated the lack of boilerplate code required by Python and just how little code it took to get things done without sacrificing readability. I expect to be doing a lot more coding in Python in the future.

Python’s library support is also excellent. I was pleased to find a JUnit like capability in the “unittest” Module and made use of decimal, urllib, threading and time modules in my solution (as well as creating a few modules of my own to handle, transform and format weather data).

What I did not do was code on the Pi itself. I instead coded the project on my Macbook using the excellent PyCharm Community Edition IDE from JetBrains. I periodically uploaded my unit tested solution to my Pi via FTP for integration testing. The code targets Python 3.2.3 which was the version available on my current version of Raspbian (released Jan 9th 2014).

pifacecad-wdlive on GitHub

The result of my endeavours was the pifacecad-wdlive application which I have hosted on GitHub. If you are interested in installing pifacecad-wdlive then head to the README for setup instructions. If you want to fork pifacecad-wdlive to add extra capabilities then all of the source code and unit tests are available in the GitHub project.

The current version of pifacecad-wdlive supports 16 different weather displays which are selectable using the PiFaceCAD’s navigation switch (this switch also controls the backlight) and 16 different measurement units toggled using the PiFaceCAD’s buttons. Better yet all of these functions can be controlled via a normal IR remote control (I have mine working via my XBox 360 remote). The application can be configured on the command-line to point at any WD Live enabled website and polls for updated weather conditions every 60 seconds.

Finishing Touches

If my Pi ever lost power I did not want to have to start pifacecad-wdlive manually every time the Pi restarted. To execute pifacecad-wdlive on startup I added the following line to the Pi’s /etc/rc.local file:

su - pi -c "python3 /home/pi/pifacecad-wdlive/pifacecad-wdlive.py
http://www.waynedgrant.com/weather/clientraw.txt" &

Those wanting to do the same will want to adapt these lines to match their particular pifacecad-wdlive installation and clientraw.txt URL.

A normal weather display unit such as the WMR88 or WMR200 can display weather anywhere it can receive mains power and wireless sensor data. My PiFaceCAD, on the other hand, was shackled to an Ethernet cable. I decided to make my setup a little more portable by adding a wireless adapter to the Pi. I picked up an Edimax Wifi USB from Amazon to accomplish this.

A wasted hour of following various (conflicting) manual instructions on the web ensued as I tried and failed to set the wireless adapter up on the Pi. I then stumbled on and installed wicd-curses and promptly got the Wifi working.

My one concern in using a Wifi USB adapter was that of power. I feared that having the Wifi USB adapter and the PiFaceCAD connected to the Pi at the same time may require me to use a powered USB hub. Fortunately my 0.7A Samsung phone charger was up to the job so a powered hub was not required.

Here is the finished build out complete with Wifi adapter and displaying pifacecad-wdlive’s summary weather display screen for my own weather station:

Click to Enlarge

Click to Enlarge

I’m quite pleased with how the build out has turned out. While it would probably have cost around the same money to buy a new weather display console from Oregon creating this was a lot more fun and satisfying.

Meteo Sheeva

November 23, 2013

Late last year I purchased a Meteo Sheeva to log the data from my WMR200 weather station. While the WMR200 is supposed to function as a simple data logger Oregon Scientific’s awful software renders the feature useless. Therefore, to log data from the WMR200, I required a separate connected computer. My requirements for a data logging machine were that it be:

  • capable of logging the data from my WMR200’s sensors
  • able to publish my  weather data live to the internet
  • compact
  • low-cost
  • turn-key

The Meteo Sheeva fulfills all of these requirements and then some.

A Meteo Sheeva is actually a combination of two things. Firstly there is the “Sheeva” part. This takes the physical form of a SheevaPlug Linux-based compact computer. Secondly there is the “Meteo” part. The Meteo Sheeva ships with an SD Card preloaded with a demo version of the Linux-based MeteoHub data logger software. I purchased the Meteo Sheeva unit from a UK vendor called New IT for £130 and licensed the MeteoHub software from Smartbedded for £50.

For me this is a relatively low price purchase compared to dedicating a full size machine to data collection. I could have created a data logger for less money by configuring a Raspberry Pi with, say, wview. However, I was more interested in my particular solution being turn-key in nature than in saving more money.

The SheevaPlug fufills the compact requirement as it measure only 11 x 7 x 5 cm. This makes it bigger than a cased Raspberry Pi but still small enough to tuck out of sight. This picture shows my SheevaPlug next to a beer mat for comparison purposes.

Click to Enlarge

Click to Enlarge

Like the Raspberry Pi the SheevaPlug runs off of a SD Card. It is powered off the mains via a detachable radio type power cable. For connectivity it has a USB socket to connect to a weather station and has an ethernet port for networking.

The unit’s setup is indeed turn-key and couldn’t be much easier. I simply connected the SheevaPlug to the mains, attached it via USB to the WMR200 and to my router using an ethernet cable. Once powered up all interactions with the MeteoHub software are made via a web browser and a simple web-based UI. All I had to do to start data logging was access the Weather Station section of the UI, specify that a WMR200 was connected and then select which of the automatically detected sensors I wanted to log data from.

The MeteoHub interface is simple, uncluttered and well organised. For example, here is Sensors page which shows the current status of all connected weather sensors:

Click to Enlarge

Click to Enlarge

The MeteoHub manual is excellent. The manual covers every detail of the software’s capabilities. This is invaluable, not because the MeteoHub software is difficult to use, but because of the massive amount of functionality it provides. I will describe a small subset of the main features which I have found to be the most useful for my own requirements. Bear in mind that MeteoHub is capable of much more than I make use of.

The first feature I started experimenting with was the ability to specify charts from the logged sensor data. I focused on bar and line charts but there are many more options available as well as flexible configurations for time period, aggregation buckets, scales and colours. With limited UI-based configuration I was able to create charts for all of my weather data types over many different time periods.

Here are a selection of some of the charts I have specified for my own setup:

Last Day of Maximum Wind Speed, Gust Speed and Wind Direction:

Click to Enlarge

Click to Enlarge

Last Day of Temperature, Humidity and Dew Point:

Click to Enlarge

Click to Enlarge

Last Month of Daily Surface Pressure Ranges:

Click to Enlarge

Click to Enlarge

Last Month of Daily Maximum Wind and Gust Speeds:

Click to Enlarge

Click to Enlarge

Last Year of Total Monthly Rainfall (data logging started in September):

Click to Enlarge

Click to Enlarge

Any of the charts can be displayed via the MeteoHub UI at any time. However, the charting feature really come into its own when combined with the automated FTP upload feature. This can be used to publish updated charts to a website on a pre-defined schedule. I use this feature to publish my setup’s charts to my own weather website.

MeteoHub can also automatically publish its data via FTP in WD-Live format. This makes it capable of feeding the Flash-based Weather Display Live dashboard. This is separate software from another vendor but costs only $40 and enables a dynamic and attractive looking weather dashboard which is highly configurable. This is my particular online weather dashboard:

Click to Enlarge

Click to Enlarge

Weather data can also be pushed to more than two dozen online weather services including WeatherBug, Weather Underground and the UK Met Office. For example, here is my data displayed on the Met Office’s WOW website:

Click to Enlarge

Click to Enlarge

Publishing my weather station’s data to my website in WD-Live format had an interesting side benefit as I could use it to view my weather station’s latest readings from my smart phone. The paid-for but inexpensive Android Weather Watch Widget can be pointed at the WD-Live data file’s location and display the latest conditions for my weather station:

Click to Enlarge

Click to Enlarge

In short I cannot recommend the Meteo Sheeva highly enough as a weather station data logger. Even though I only take advantage of a subset of its capabilities the features I do use make use of make it more than worth the money I have invested in it. You can get a cheaper and smaller solution using a Raspberry Pi. However, if you want something that works out of the box then the Meteo Sheeva cannot be beat.