Esempio n. 1
0
        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;
        }
Esempio n. 2
0
 void ChangeWindUnits()
 {
     windUnits++;
     if (windUnits == WindUnits.Max)
     {
         windUnits = WindUnits.Min + 1;
     }
     SetWind();
 }
Esempio n. 3
0
 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 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;
 }
Esempio n. 5
0
        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));
            }
        }
Esempio n. 6
0
        /// <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");
        }
Esempio n. 7
0
        /// <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");
        }
Esempio n. 8
0
        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;
        }
Esempio n. 9
0
        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)));
        }
Esempio n. 10
0
		void ChangeWindUnits ()
		{
			windUnits++;
			if (windUnits == WindUnits.Max)
				windUnits = WindUnits.Min + 1;
			SetWind ();
		}
Esempio n. 11
0
        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);
        }
Esempio n. 12
0
        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);
        }