DMC Denver has been enjoying another great ski season. Every year, we find ourselves frequently checking weather forecasts and snow reports to track how much snow our favorite mountains are getting. So during a recent FedEx Day, I decided to automate a system for acquiring and displaying this data on a desktop LCD! On FedEx Day, everyone works on a project that interests them that they think will improve DMC which must absolutely, positively be delivered by the end of the day.
I named this project the Snow Scraper because my initial plan was to periodically scrape data from an online snow report. Unfortunately, I found this violates the terms & conditions of every snow report site I could find (bummer), so after a bit more searching, I found two free web service APIs I could use instead.
Weather2 provides an API that includes current snow conditions and a 7-day weather forecast for many ski resorts. Additionally, all of the snow and weather descriptions they provide are concise, which displays well on a small LCD. However, they do not include expected snowfall. For this, I used an API provided by Weather Underground which includes a 10-day forecast of expected snowfall.
I decided to use a BeagleBone Black because of its ease of API integration and easily configurable GPIO and communication modules. Wiring a four-line LCD and two buttons to the BeagleBone gave me the ability to display information and toggle between different screens.
Pressing the "Resort" button allows you to toggle between reports for different ski resorts. Pressing the "Info" button, lets you toggle through: current conditions, predicted snowfall for six days, and a more detailed forecast for Saturday and Sunday for whichever resort is selected.
Python was an easy choice for this project because of the readily available libraries for parsing API requests and controlling GPIO and UART communication on the BeagleBone.
Since the weather APIs are served up in XML format, I used the ElementTree XML Library to parse the API responses. The code snippet below shows how simple it is to parse XML-formatted data with this library. The data it's parsing is shown below the code for reference.
Communicating with the LCD and reading button inputs was also made easy by using the Adafruit_BBIO Library. The code snippets and diagram below show how to send commands via UART to a compatible LCD (like this Newhaven Display) and read button inputs on the BeagleBone.
The Adafruit_BBIO library also comes with packages for using the BeagleBone's PWM and ADC capabilities, making setup for any project using these features a breeze.
This has been a helpful tool for planning our ski outings, and we look forward to applying it to other outdoor excursions soon!
Learn more about DMC's custom hardware and software expertise.