Skip to content

Instantly share code, notes, and snippets.

@kszucs
Created May 16, 2016 16:21
Show Gist options
  • Save kszucs/437bd79da899a071da95f462036a290d to your computer and use it in GitHub Desktop.
Save kszucs/437bd79da899a071da95f462036a290d to your computer and use it in GitHub Desktop.
Pico C weather API consumer
// This programm calls the aerisapi.com weather web service.
// The return value is a JSON string. Since PicoC does not support
// JSON I use scraping of the string to find the values.
enum OutputPorts
{
Temperature, // AQ1
Humidity, // AQ2
windKPH, // AQ3
Precip1HR,
UV
};
int GetIntValue(char *name, int def)
{
int value = def;
int pos = strfind(result, name, 0);
if(pos > 0)
{
char *stemp = calloc(1, 10);
int lenName = strlen(name);
strncpy(stemp, result + pos + lenName, 5);
value = atoi(stemp);
setoutput(Temperature, temp);
free(stemp);
stemp = 0;
}
printf ("%s = %d", name, value);
return value;
}
/// <Summary>
/// Main loop.
/// </Summary>
while(TRUE)
{
char *host = "www.wunderground.com";
char *page = "/api/Your_Key/conditions/q/CA/San_Francisco.json";
char *result = httpget(host, page);
if(result != 0)
{
int temp = GetIntValue("\"temp_c\":", -100); // a -100 az alapertelmezett ertek (gondolom)
if(temp != -100) // ha nem az alapertelmezett ertek akkor beallitjuk az eredmenyben
{
setoutput(Temperature, temp);
}
int humidity = GetIntValue("\"relative_humidity\":", -100);
if(humidity != -100)
{
setoutput(Humidity, humidity);
}
int wind = GetIntValue("\"wind_kph\":", -100);
if(wind != -100)
{
setoutput(windKPH, wind);
}
int precip = GetIntValue("\"precip_1h_metric\":", -100);
if(precip != -100)
{
setoutput(Precip, precip);
}
int uv = GetIntValue("\"UV\":", -100);
if(uv != -100)
{
setoutput(Precip, precip);
}
free(result);
}
// Slow the loop down 10 minutes
int sleepTime = 10 * 60 * 1000;
sleep(sleepTime);
}
{
"response": {
"version": "0.1",
"termsofService": "http://www.wunderground.com/weather/api/d/terms.html",
"features": {
"conditions": 1
}
},
"current_observation": {
"image": {
"url": "http://icons-ak.wxug.com/graphics/wu2/logo_130x80.png",
"title": "Weather Underground",
"link": "http://www.wunderground.com"
},
"display_location": {
"full": "San Francisco, CA",
"city": "San Francisco",
"state": "CA",
"state_name": "California",
"country": "US",
"country_iso3166": "US",
"zip": "94101",
"latitude": "37.77500916",
"longitude": "-122.41825867",
"elevation": "47.00000000"
},
"observation_location": {
"full": "SOMA - Near Van Ness, San Francisco, California",
"city": "SOMA - Near Van Ness, San Francisco",
"state": "California",
"country": "US",
"country_iso3166": "US",
"latitude": "37.773285",
"longitude": "-122.417725",
"elevation": "49 ft"
},
"estimated": {},
"station_id": "KCASANFR58",
"observation_time": "Last Updated on June 27, 5:27 PM PDT",
"observation_time_rfc822": "Wed, 27 Jun 2012 17:27:13 -0700",
"observation_epoch": "1340843233",
"local_time_rfc822": "Wed, 27 Jun 2012 17:27:14 -0700",
"local_epoch": "1340843234",
"local_tz_short": "PDT",
"local_tz_long": "America/Los_Angeles",
"local_tz_offset": "-0700",
"weather": "Partly Cloudy",
"temperature_string": "66.3 F (19.1 C)",
"temp_f": 66.3,
"temp_c": 19.1,
"relative_humidity": "65%",
"wind_string": "From the NNW at 22.0 MPH Gusting to 28.0 MPH",
"wind_dir": "NNW",
"wind_degrees": 346,
"wind_mph": 22.0,
"wind_gust_mph": "28.0",
"wind_kph": 35.4,
"wind_gust_kph": "45.1",
"pressure_mb": "1013",
"pressure_in": "29.93",
"pressure_trend": "+",
"dewpoint_string": "54 F (12 C)",
"dewpoint_f": 54,
"dewpoint_c": 12,
"heat_index_string": "NA",
"heat_index_f": "NA",
"heat_index_c": "NA",
"windchill_string": "NA",
"windchill_f": "NA",
"windchill_c": "NA",
"feelslike_string": "66.3 F (19.1 C)",
"feelslike_f": "66.3",
"feelslike_c": "19.1",
"visibility_mi": "10.0",
"visibility_km": "16.1",
"solarradiation": "",
"UV": "5",
"precip_1hr_string": "0.00 in ( 0 mm)",
"precip_1hr_in": "0.00",
"precip_1hr_metric": " 0",
"precip_today_string": "0.00 in (0 mm)",
"precip_today_in": "0.00",
"precip_today_metric": "0",
"icon": "partlycloudy",
"icon_url": "http://icons-ak.wxug.com/i/c/k/partlycloudy.gif",
"forecast_url": "http://www.wunderground.com/US/CA/San_Francisco.html",
"history_url": "http://www.wunderground.com/history/airport/KCASANFR58/2012/6/27/DailyHistory.html",
"ob_url": "http://www.wunderground.com/cgi-bin/findweather/getForecast?query=37.773285,-122.417725"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment