OK, it's been a while. For those that don't remember, the AirPi is a low-cost weather station add-on project for the Raspberry Pi. I've
previously written about building it from
scratch, soldering it up, and then most
recently interpreting sensor readings.
Since then I've been working on making those readings more accessible.
That's the beauty of open source software and projects really. Tom Hartley (the
AirPi guy) posted their software on GitHub, an open software source code repository. I
forked it, or created a copy of the
code, to make my own modifications. After two months of on and off again
changes and testing, I feel it's about as done as it's going to get.
My goal here is to introduce everyone to what I think are the really nifty
things I've added in. I've fixed a few bugs in the original code as I've found
them. I've also then fixed the bugs I introduced myself in the new code, but we
can gloss over them... The big fix I think is the high CPU load the software
had, which only needed the addition of a simple time.sleep() to make it more
reasonable.
The first of the new features is Raingauge Support. Previously I
looked at them, and now I've translated the
logging code I wrote there and applied it to the AirPi framework. We've just
gotten even more weather-station-esqe. Just connect the raingauge to GPIO pin
17 and ground. In a similar vein I also added back in support for the TGS-2600
Air Quality Sensor and the UVI-01 Ultra Violet Sensor. This was all pretty
trivial still. This was all mostly just extensions of what was already there.
The raingauge connection...
On to more exciting things! Last time I more or less pointed out that a chunk
of the sensor readings were uncalibrated. Not anymore! There's now a module
that let's the software output calibrated readings. "What's the use?" you
might say? Ah well, for starters I also added a CSV output module. The AirPi
is now compatible with industry standard file formats... also known as a
(comma separated value) spreadsheet. It get's better than that though:
... (wait for it) ... The Crown Jewels:
Instead of uploading to Xively, which requires Internet access and relies on a
third-party service, I've built in an HTTP server. Starting the AirPi
software with this module enabled starts the Pi listening on port 8080
for HTTP requests. Going there loads up a pretty, but fast site that's based
on Twitter Bootstrap.
But wait! There's more!
Not only can you see the current reading, you can also view graphs.
Interactively explore what the weather's been doing over the last 24 hours
with the click of a button. This is of course customizable. You could show the
last hour or the last 2 weeks, but longer periods require more free memory and
will load a bit slower. Check out our interactive demo site. It's not a real Pi there for reasons of my router
being unhappy, but it behaves just like the real thing. Open the drop down to
bring up a graph. Select an area on a graph to zoom.
Sharp eyed observes will have also noticed the RSS feed icon in the upper right
hand corner. This is to allow for easy export of results to other software. I
suspect minimal modifications will allow
this JSON output module to be served over HTTP for easy export as well.
The reason I was after RSS? How many people have heard of
Conky? It's a system monitor applet that
displays system information on the screen in a corner of the desktop. It's a
bit like the gadgets of Windows Vista/7 or OS X dashboard widgets. Well,
anyway Conky, like gadgets or widgets, supports RSS feeds.
=== ${rss http://airpi:8080/rss.xml 10 feed_title} ===
${rss http://airpi:8080/rss.xml 10 item_title 0}: ${rss http://airpi:8080/rss.xml 10 item_desc 0}
${rss http://airpi:8080/rss.xml 10 item_title 1}: ${rss http://airpi:8080/rss.xml 10 item_desc 1}
${rss http://airpi:8080/rss.xml 10 item_title 2}: ${rss http://airpi:8080/rss.xml 10 item_desc 2}
${rss http://airpi:8080/rss.xml 10 item_title 3}: ${rss http://airpi:8080/rss.xml 10 item_desc 3}
${rss http://airpi:8080/rss.xml 10 item_title 4}: ${rss http://airpi:8080/rss.xml 10 item_desc 4}
${rss http://airpi:8080/rss.xml 10 item_title 5}:
${rss http://airpi:8080/rss.xml 10 item_desc 5}
${rss http://airpi:8080/rss.xml 10 item_title 6}: ${rss http://airpi:8080/rss.xml 10 item_desc 6}
${rss http://airpi:8080/rss.xml 10 item_title 7}: ${rss http://airpi:8080/rss.xml 10 item_desc 7}
Adding the above bit of config to the end of my .conkyrc file gives me this
(below) in the upper right corner of my desktop. The weather on my terms. Just
what an AirPi should do.
Comment on this post.