private WeatherResult GetAverageWeatherResult(IEnumerable<WeatherResult> results, TemperatureUnits tempUnit, WindUnits windUnit) { WeatherResult aver = new WeatherResult(); aver.TemperatureUnit = tempUnit; aver.WindUnit = windUnit; aver.Temperature = 0; aver.Wind = 0; foreach (var weatherTemp in results) { aver.Temperature += weatherTemp.TemperatureUnit != tempUnit ? weatherTemp.Temperature.To(tempUnit) : weatherTemp.Temperature; aver.Wind += weatherTemp.WindUnit != windUnit ? weatherTemp.Wind.To(windUnit) : weatherTemp.Wind; } aver.Temperature = (float)Math.Round( aver.Temperature / (float)results.Count(), 2); aver.Wind = (float)Math.Round(aver.Wind / (float)results.Count(),2); return aver; }
void ChangeWindUnits() { windUnits++; if (windUnits == WindUnits.Max) { windUnits = WindUnits.Min + 1; } SetWind(); }
public ApiWeatherHttpClient(IHttpClient httpClient, string name, string url, string windKey, WindUnits windUnit, string temperatureKey, TemperatureUnits tempUnit) { _httpClient = httpClient; _name = name; _baseUri = new Uri(url); _windKey = windKey; _windUnit = windUnit; _temperatureKey = temperatureKey; _temperatureUnit = tempUnit; }
public SensorData(string data) { try { date = Convert.ToDateTime(data.Substring(0, 22)); age = DateTime.Now.Subtract(date).TotalSeconds; switch (data.Substring(23, 1)) { case "C": tempUnits = TempUnits.tempCelsius; break; case "F": tempUnits = TempUnits.tempFahrenheit; break; } switch (data.Substring(25, 1)) { case "K": windUnits = WindUnits.windKmPerHour; break; case "M": windUnits = WindUnits.windMilesPerHour; break; case "m": windUnits = WindUnits.windMeterPerSecond; break; } skyAmbientTemp = Convert.ToDouble(data.Substring(27, 6)); ambientTemp = Convert.ToDouble(data.Substring(34, 6)); sensorTemp = Convert.ToDouble(data.Substring(40, 6)); windSpeed = Convert.ToDouble(data.Substring(48, 6)); humidity = Convert.ToInt32(data.Substring(55, 3)); dewPoint = Convert.ToDouble(data.Substring(59, 6)); heaterSetting = Convert.ToInt32(data.Substring(66, 3)); rainFlag = (WetFlagValue)Convert.ToInt32(data.Substring(70, 1)); wetFlag = (WetFlagValue)Convert.ToInt32(data.Substring(72, 1)); sinceSeeconds = Convert.ToInt32(data.Substring(74, 5)); //lastWriten = Convert.ToDateTime(data.Substring(80, 12)); cloudCondition = (CloudCondition)Convert.ToInt32(data.Substring(93, 1)); windCondition = (WindCondition)Convert.ToInt32(data.Substring(95, 1)); rainCondition = (RainCondition)Convert.ToInt32(data.Substring(97, 1)); dayCondition = (DayCondition)Convert.ToInt32(data.Substring(99, 1)); var x = Convert.ToInt32(data.Substring(101, 1)); roofCloseRequested = (x == 1) ? true : false; } catch (Exception e) { throw new InvalidValueException(string.Format("Could not parse sensor data, caught: {0}", e.Message)); } }
/// <summary> /// Conver the wind value to the specified unit /// </summary> /// <param name="value"></param> /// <param name="unit"></param> /// <returns></returns> public static float To(this float value, WindUnits unit) { switch (unit) { case WindUnits.KPHs: return((float)Math.Round(value / 0.62137, 2)); case WindUnits.MPHs: return((float)Math.Round(value * 0.62137, 2)); } throw new Exception("Unit not valid"); }
/// <summary> /// Conver the wind value to the specified unit /// </summary> /// <param name="value"></param> /// <param name="unit"></param> /// <returns></returns> public static float To(this float value, WindUnits unit) { switch(unit) { case WindUnits.KPHs: return (float)Math.Round(value / 0.62137,2); case WindUnits.MPHs: return (float)Math.Round(value * 0.62137, 2); } throw new Exception("Unit not valid"); }
public async Task<WeatherResult> GetWeatherAsync(string location, TemperatureUnits tempUnit, WindUnits windUnit) { WeatherResult result=null; List<Task<WeatherResult>> tasks = new List<Task<WeatherResult>>(); foreach (var api in _apiClients) { tasks.Add(api.GetWeather(location)); } //Await until all the calls to GetWeather have finished. await Task.WhenAll(tasks); var interResults = tasks.Where(t=> t.Result!= null).Select(t => t.Result); if ( interResults.Any()) result = this.GetAverageWeatherResult(interResults,tempUnit, windUnit); return result; }
public async Task <IHttpActionResult> JsonGetWeather([FromUri] string location, [FromUri] TemperatureUnits tempUnit = TemperatureUnits.Celsius, [FromUri] WindUnits windUnit = WindUnits.KPHs) { if (String.IsNullOrEmpty(location)) { return(BadRequest()); } return(Json <WeatherResult>(await _manager.GetWeatherAsync(location, tempUnit, windUnit))); }
void ChangeWindUnits () { windUnits++; if (windUnits == WindUnits.Max) windUnits = WindUnits.Min + 1; SetWind (); }
private WeatherResult GetAverageWeatherResult(IEnumerable <WeatherResult> results, TemperatureUnits tempUnit, WindUnits windUnit) { WeatherResult aver = new WeatherResult(); aver.TemperatureUnit = tempUnit; aver.WindUnit = windUnit; aver.Temperature = 0; aver.Wind = 0; foreach (var weatherTemp in results) { aver.Temperature += weatherTemp.TemperatureUnit != tempUnit ? weatherTemp.Temperature.To(tempUnit) : weatherTemp.Temperature; aver.Wind += weatherTemp.WindUnit != windUnit ? weatherTemp.Wind.To(windUnit) : weatherTemp.Wind; } aver.Temperature = (float)Math.Round(aver.Temperature / (float)results.Count(), 2); aver.Wind = (float)Math.Round(aver.Wind / (float)results.Count(), 2); return(aver); }
public async Task <WeatherResult> GetWeatherAsync(string location, TemperatureUnits tempUnit, WindUnits windUnit) { WeatherResult result = null; List <Task <WeatherResult> > tasks = new List <Task <WeatherResult> >(); foreach (var api in _apiClients) { tasks.Add(api.GetWeather(location)); } //Await until all the calls to GetWeather have finished. await Task.WhenAll(tasks); var interResults = tasks.Where(t => t.Result != null).Select(t => t.Result); if (interResults.Any()) { result = this.GetAverageWeatherResult(interResults, tempUnit, windUnit); } return(result); }