Last year, we installed a wi-fi enabled weather station on our property: the Rainwise MK-III-LR. Every few seconds, it sends updated weather data to the cloud. We chose to route the data to Wunderground, allowing it to be a peer among many personal weather stations in the area, which also opens up the data to the public.
It turns out that the Wunderground API is pretty robust, and I was considering writing a WordPress plugin that would allow you to specify any weather station and have the information display on your site. Unfortunately, the API limits each user to a fairly small amount of monthly calls, unless you want to pay real, cash money. Therefore, to use the plugin, you’d have to sign up for a developer account on Wundergound and use your own API token, which might be a bit above the average blogger’s desire.
Until I find a better solution, I’ll post the code here that I used to display my personal weather data on the farm website.
First, here’s the display on the front end:
To generate the view on the front end, first I added some HTML.
<h4>Weather as reported by wx station KINRICHM9</h4> <span id="time_since_observed"></span><span id="offset"></span> <table class="table table-striped wx"> <caption><h5>Current Conditions</h5></caption> <tr><td>Temp:</td><td><span id="current_temp"></span></td></tr> <tr><td>Dewpoint:</td><td><span id="dewpoint"></span></td></tr> <tr><td>Relative Humidity:</td><td><span id="humidity"></span></td></tr> <tr><td>Wind Speed:</td><td><span id="wind_speed"></span></td></tr> <tr><td>Wind Direction:</td><td><span id="wind_direction"></span></td></tr> <tr><td>Barometric Pressure:</td><td><span id="baro"></span></td></tr> <tr><td>Pressure Trend:</td><td><span id="baro_trend"></span></td></tr> </table>
Then, we need to make the call to the API with JavaScript.
<script> jQuery(document).ready(function($) { $.ajax({ url : "http://api.wunderground.com/api/REPLACE_WITH_YOUR_API_TOKEN/geolookup/conditions/q/pws:KINRICHM9.json", dataType : "jsonp", success : function(parsed_json) { var time = parsed_json['current_observation']['observation_time']; var time_offset = parsed_json['current_observation']['local_tz_offset']; var temp_f = parsed_json['current_observation']['temp_f']; var temp_c = parsed_json['current_observation']['temp_c']; var hum = parsed_json['current_observation']['relative_humidity']; var dewpoint = parsed_json['current_observation']['dewpoint_string']; var wind_speed = parsed_json['current_observation']['wind_mph']; var wind_knots = Math.round((wind_speed / 1.16) * 10) / 10; var wind_degrees = parsed_json['current_observation']['wind_degrees']; var baro = parsed_json['current_observation']['pressure_in']; var baro_trend = parsed_json['current_observation']['pressure_trend']; var baro_trend_text = "Can't calculate (I broke my abacus)"; if (baro_trend == "+") { baro_trend_text = "Going up, yay!"}; if (baro_trend == "-") { baro_trend_text = "Going down…"}; $( "#time_since_observed" ).replaceWith(time); $( "#offset" ).replaceWith("(UTC " + time_offset + ")"); $( "#current_temp" ).replaceWith(temp_f + " F (" + temp_c + " C)"); $( "#humidity" ).replaceWith(hum); $( "#dewpoint" ).replaceWith(dewpoint); $( "#wind_speed" ).replaceWith(wind_speed + " MPH (" + wind_knots + " knots)"); $( "#wind_direction" ).replaceWith("From " + wind_degrees + "° true"); $( "#baro" ).replaceWith(baro + " inHg"); $( "#baro_trend" ).replaceWith(baro_trend_text); } }); }); </script>
It should be noted that this only updates on page refresh, and is really just a test to see if the API would access our weather data.