OnTrue
// list the program as custom weather widget
Program.UseWidget("jkUtils/OpenWeatherMap/OpenWeatherMap");
// set input fields parameters
Program.AddOption("Location", "Berlin", "City name", "text");
Program.AddOption("Language", "de", "Language. See http://OpenWeatherMap.org/API for available langugae codes.", "text");
Program.AddOption("UpdateInterval", "60", "Update interval in minutes. Default is 60 minutes.", "text");
Program.AddOption("API Key", "1234567890", "Please register to get an API key", "text");
Program.AddOption("Custom Display Units", "TRUE", "Display System of Units (TRUE = use metric system, FALSE = use imperial system)", "text");
Program.AddOption("Custom Color", "213", "HUE Color Value", "text");
Program.AddOption("Custom Zoom", "100%", "Custom Zoom", "text");
// setup program parameters
Program.Parameter("jkUtils.OpenWeatherMap.Cod").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Name").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Id").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Dt").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Clouds.All").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Rain.H1").Value = ""; // Rain in mm within the last 1 hour
Program.Parameter("jkUtils.OpenWeatherMap.Rain.H3").Value = ""; // .. the last 3 hours
Program.Parameter("jkUtils.OpenWeatherMap.Rain.H24").Value = ""; // .. the last 24 hours
Program.Parameter("jkUtils.OpenWeatherMap.Rain.Today").Value = ""; // .. since midnight
Program.Parameter("jkUtils.OpenWeatherMap.Snow.H1").Value = ""; // Snowfall in mm. same as rain.
Program.Parameter("jkUtils.OpenWeatherMap.Snow.H3").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Snow.H24").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Snow.Today").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Wind.Speed").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Wind.Deg").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Wind.Gust").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Main.Temp").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Main.Temp.Previous").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Main.Humidity").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Main.Pressure").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Main.Pressure.Previous").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Main.PressureSea").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Main.PressureGround").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Main.TempMax").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Main.TempMin").Value = "";
//Program.Parameter("jkUtils.OpenWeatherMap.Base").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Weather.Id").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Weather.Main").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Weather.Description").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Weather.Icon").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Sys.Message").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Sys.Country").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Sys.Sunrise").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Sys.Sunset").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Coord.Lon").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Coord.Lat").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.LastUpdated").Value = "";
Program.Run();
// jkUtils - OpenWeatherMap Ver 2.0 2014-05-08
// this version uses the 2.5 API from OpenWeatherMap.org
// ------------------------------------
// A HomeGenie script to fetch current weather data from http://OpenWeatherMap.org/ .
// No key or account is required to use this service.
// Localization implemented for: US-en and DE-de. Feel free to add your own localization in /locales dir analogous to HomeGenie .json files.
// All used Icons/Graphics make full use of png-transparency to be able to place them over any colored background.
// Released under BSD-licensed.
// (c) 2014 Jan Koch, Berlin
// Acknowledgements:
// This program makes use the free API services of http://OpenWeatherMap.org . For details see http://OpenWeatherMap.org/API
// Please use as adviced under http://OpenWeatherMap.org/about .
Func<bool> _checkWeather = new Func<bool>(()=>{
Program.RunAsyncTask(()=> {
string location = Program.Option("Location").Value;
string language = Program.Option("Language").Value;
string apikey = Program.Option("API Key").Value;
string displayCelsius = Program.Option("Custom Display Units").Value;
string webserviceurl = "http://api.OpenWeatherMap.org/data/2.5/weather?q="+ location +"&lang=" + language +"&APPID=" + apikey;
TimeSpan t = (DateTime.UtcNow - new DateTime(1970, 1, 1));
int UTCTimeNow = (int)t.TotalSeconds;
string UCTTimeNowString = UTCTimeNow.ToString();
Program.Parameter("jkUtils.OpenWeatherMap.LastUpdated").Value = UCTTimeNowString; //last_updated;
try
{
//string last_updated = DateTime.Now.ToString("HH:mm");
if (displayCelsius.ToLower() == "true") {
webserviceurl = webserviceurl + "&units=metric";
Program.Parameter("jkUtils.OpenWeatherMap.Temp.Label").Value = "°C";
Program.Parameter("jkUtils.OpenWeatherMap.Wind.Label").Value = "m/s";
} else {
webserviceurl = webserviceurl + "&units=imperial";
Program.Parameter("jkUtils.OpenWeatherMap.Temp.Label").Value = "°F";
Program.Parameter("jkUtils.OpenWeatherMap.Wind.Label").Value = "kph";
}
var data = Net.WebService(webserviceurl).GetData();
//check for update in data
//if(data.dt.ToString() != Program.Parameter("jkUtils.OpenWeatherMap.Dt").Value ) {
if(0 != 1 ) {
Program.Parameter("jkUtils.OpenWeatherMap.Cod").Value = data.cod ?? "";
Program.Parameter("jkUtils.OpenWeatherMap.Name").Value = data.name ?? "";
Program.Parameter("jkUtils.OpenWeatherMap.Id").Value = data.id ?? "";
Program.Parameter("jkUtils.OpenWeatherMap.Dt").Value = data.dt ?? "";
if(data.clouds != null) {
Program.Parameter("jkUtils.OpenWeatherMap.Clouds.All").Value = data.clouds.all ?? "";
} else {
Program.Parameter("jkUtils.OpenWeatherMap.Clouds.All").Value = "";
}
if(data.rain != null) {
Program.Parameter("jkUtils.OpenWeatherMap.Rain.H1").Value = data.rain["1h"] ?? "";
Program.Parameter("jkUtils.OpenWeatherMap.Rain.H3").Value = data.rain["3h"] ?? "";
Program.Parameter("jkUtils.OpenWeatherMap.Rain.H24").Value = data.rain["24h"] ?? "";
Program.Parameter("jkUtils.OpenWeatherMap.Rain.Today").Value = data.rain["today"] ?? "";
} else {
Program.Parameter("jkUtils.OpenWeatherMap.Rain.H1").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Rain.H3").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Rain.H24").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Rain.Today").Value = "";
}
if(data.snow != null) {
Program.Parameter("jkUtils.OpenWeatherMap.Snow.H1").Value = data.snow["1h"] ?? "";
Program.Parameter("jkUtils.OpenWeatherMap.Snow.H3").Value = data.snow["3h"] ?? "";
Program.Parameter("jkUtils.OpenWeatherMap.Snow.H24").Value = data.snow["24h"] ?? "";
Program.Parameter("jkUtils.OpenWeatherMap.Snow.Today").Value = data.snow["today"] ?? "";
} else {
Program.Parameter("jkUtils.OpenWeatherMap.Snow.H1").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Snow.H3").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Snow.H24").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Snow.Today").Value = "";
}
if(data.wind != null) {
Program.Parameter("jkUtils.OpenWeatherMap.Wind.Speed").Value = data.wind.speed ?? "";
Program.Parameter("jkUtils.OpenWeatherMap.Wind.Deg").Value = data.wind.deg ?? "";
Program.Parameter("jkUtils.OpenWeatherMap.Wind.Gust").Value = data.wind.gust ?? "";
} else {
Program.Parameter("jkUtils.OpenWeatherMap.Wind.Speed").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Wind.Deg").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Wind.Gust").Value = "";
}
if(data.main != null) {
if(Program.Parameter("jkUtils.OpenWeatherMap.Main.Pressure").Value != "") {
Program.Parameter("jkUtils.OpenWeatherMap.Main.Pressure.Previous").Value = Program.Parameter("jkUtils.OpenWeatherMap.Main.Pressure").Value;
}
if(Program.Parameter("jkUtils.OpenWeatherMap.Main.Temp").Value != "") {
Program.Parameter("jkUtils.OpenWeatherMap.Main.Temp.Previous").Value = Program.Parameter("jkUtils.OpenWeatherMap.Main.Temp").Value;
}
Program.Parameter("jkUtils.OpenWeatherMap.Main.Temp").Value = data.main.temp ?? "";
Program.Parameter("jkUtils.OpenWeatherMap.Main.Humidity").Value = data.main.humidity ?? "";
Program.Parameter("jkUtils.OpenWeatherMap.Main.Pressure").Value = data.main.pressure ?? "";
//optional values
Program.Parameter("jkUtils.OpenWeatherMap.Main.PressureSea").Value = data.main.sea_level ?? "";
Program.Parameter("jkUtils.OpenWeatherMap.Main.PressureGround").Value = data.main.grnd_level ?? "";
Program.Parameter("jkUtils.OpenWeatherMap.Main.TempMax").Value = data.main.temp_max ?? "";
Program.Parameter("jkUtils.OpenWeatherMap.Main.TempMin").Value = data.main.temp_min ?? "";
} else {
Program.Parameter("jkUtils.OpenWeatherMap.Main.Temp").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Main.Temp.Previous").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Main.Humidity").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Main.Pressure").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Main.Pressure.Previous").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Main.PressureSea").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Main.PressureGround").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Main.TempMax").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Main.TempMin").Value = "";
}
//Program.Parameter("jkUtils.OpenWeatherMap.Base").Value = data["base"] ?? "";
if(data.weather[0] != null) {
Program.Parameter("jkUtils.OpenWeatherMap.Weather.Id").Value = data.weather[0].id ?? "";
Program.Parameter("jkUtils.OpenWeatherMap.Weather.Main").Value = data.weather[0].main ?? "";
Program.Parameter("jkUtils.OpenWeatherMap.Weather.Description").Value = data.weather[0].description ?? "";
Program.Parameter("jkUtils.OpenWeatherMap.Weather.Icon").Value = data.weather[0].icon ?? "";
/*
// Potential fix for problems in recieving JSON UTF encoded data
Program.Parameter("jkUtils.OpenWeatherMap.Weather.Description").Value = Regex.Replace(
data.weather[0].description,
@"\\u(?<value>[0-9a-f]{4})",
match => {
string digits = match.Groups["value"].Value;
int number = int.Parse(digits, NumberStyles.HexNumber);
return char.ConvertFromUtf32(number);
}) ?? "";
*/
} else {
Program.Parameter("jkUtils.OpenWeatherMap.Weather.Id").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Weather.Main").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Weather.Description").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Weather.Icon").Value = "";
}
if(data.sys != null) {
Program.Parameter("jkUtils.OpenWeatherMap.Sys.Message").Value = data.sys.message ?? "";
Program.Parameter("jkUtils.OpenWeatherMap.Sys.Country").Value = data.sys.country ?? "";
Program.Parameter("jkUtils.OpenWeatherMap.Sys.Sunrise").Value = data.sys.sunrise ?? "";
Program.Parameter("jkUtils.OpenWeatherMap.Sys.Sunset").Value = data.sys.sunset ?? "";
} else {
Program.Parameter("jkUtils.OpenWeatherMap.Sys.Message").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Sys.Country").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Sys.Sunrise").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Sys.Sunset").Value = "";
}
if(data.coord != null) {
Program.Parameter("jkUtils.OpenWeatherMap.Coord.Lon").Value = data.coord.lon ?? "";
Program.Parameter("jkUtils.OpenWeatherMap.Coord.Lat").Value = data.coord.lat ?? "";
} else {
Program.Parameter("jkUtils.OpenWeatherMap.Coord.Lon").Value = "";
Program.Parameter("jkUtils.OpenWeatherMap.Coord.Lat").Value = "";
}
//STENCIL: Program.Parameter("jkUtils.OpenWeatherMap.").Value = data. ?? "";
}
Program.Notify("jkutils - OpenWeatherMap","Data has been updated.");
//Program.RaiseEvent("jkUtils.OpenWeatherMap.LastUpdated", UCTTimeNowString, "Updated");
}
catch (Exception e)
{
Program.Notify("jkutils - OpenWeatherMap", "Update of data failed.");
//DEBUG: Program.Notify("OpenWeatherMap ERROR!", e.Message);
Console.WriteLine( e.Message );
//Pause(10);
}
});
return true;
});
//
// Web service calls handling
//
When.WebServiceCallReceived(Program.Module.Domain + "/" + Program.Module.Address, (args) => {
string[] reqs = ((string)args).Split('/');
var res = "";
try
{
string command = reqs[2];
switch(command)
{
case "Control.Refresh":
//Program.Notify("jkutils: OpenWeatherMap","Update triggered.");
_checkWeather();
break;
}
}
catch (Exception ex)
{
res = "{ 'ResponseValue' : 'ERROR: " + ex.Message + " " + ex.StackTrace + "' }";
}
// unable to process request
return res;
});
while (Program.IsEnabled)
{
_checkWeather();
Pause(Program.Option("UpdateInterval").DecimalValue * 60); // pause before next check
//Pause(10);
}
HomeAutomation.HomeGenie.Automation
503
jkUtils - OpenWeatherData
Gathers weather data from http://www.OpenWeatherMap.org/ [API Version 2.5]
No service key required to fetch data.
Weather and Environment
2017-05-01T11:36:23.810082Z
2017-05-01T11:36:24.804028Z
CSharp
true