Ever since I first learned about electronic paper, I’ve thought it would be perfect to display some sort of regularly updated, but not real-time, data such as the current date, an agenda, or the weather forecast. Unfortunately, e-paper displays have always cost more than I was willing to spend on such a project. However, with the price of Amazon’s cheapest Kindle recently dropped to $69, I decided e-paper displays were finally cheap enough for me to pursue such a project: an e-paper based weather forecast display.
The system consists of two parts, one running on the wall-mounted Kindle and one running on a server. The server fetches and processes weather data to create an image, and the Kindle downloads and displays it. While the Kindle is capable of handling both parts, I already had a server, and utilizing it saved me the time and hassle of setting up a build environment for the Kindle.
The server side of the system uses shell and Python scripts to convert weather forecast data into an image for the Kindle. The scripts first download and parse forecast data from NOAA via the National Digital Forecast Database XML/SOAP Service. After parsing the data, the data then needs to be converted into an image. This is accomplished by preprocessing a specially crafted SVG file to insert temperatures, forecast symbols, and days of the week. This SVG is then rendered as a PNG using rsvg-convert and converted to a grayscale, no transparency color space as required by the Kindle using pngcrush. Finally, it is copied to a public location on the web server.
Before running anything on the Kindle, one must first jailbreak it and obtain shell access; this is left as an exercise for the reader. The Kindle portion of the system consists of a shell script that downloads the rendered image from the server, clears the screen twice to prevent ghosting, and then displays the image on the Kindle’s screen. On both the server and the Kindle, cron is used to execute the required scripts twice a day, with the server executing its scripts five minutes earlier than the Kindle to ensure a new image is ready. In addition, the Kindle requires an initialization script to disable the framework and power daemons to prevent the screen from being overwritten and to prevent the Kindle from going into sleep mode, which would disable the WiFi as well as cron, preventing any forecast updates. This initialization script was made easily accessible on power on of the Kindle using kite.
To create the icons, I started off with public domain icons from the Noun Project. Either using pieces of these icons or from scratch, I created icons for the weather conditions there were no icons available for and for those where there were no public domain versions. I am releasing the icons under the CC0 Public Domain Dedication and the source code for the scripts under the MIT License.