Пример #1
0
        public async Task <string> GetWeather(string location)
        {
            var client  = new OpenWeatherMap.OpenWeatherMapClient(getWeatherApiAppId());
            var weather = await client.CurrentWeather.GetByName(location);

            return($"City: {weather.City.Name} w/ {weather.Clouds.Value} clouds; last updated {weather.LastUpdate.Value:d}");
        }
Пример #2
0
        static async System.Threading.Tasks.Task Main(string[] args)
        {
            string choice;
            var    client = new OpenWeatherMap.OpenWeatherMapClient(cnfg.Api_token);

            Console.WriteLine("City or coords?");
            choice = Console.ReadLine();

            double[]    tmp_arr = new double[3];
            int         ii;
            WeatherData response;

            switch (choice)
            {
            case "0":
                response = cnfg.GetResponse("?q=" + Console.ReadLine());

                break;

            case "1":
                response = cnfg.GetResponse("?lat=" + cnfg.Shir + "&lon=" + cnfg.Dolg);

                break;

            default:
                response = cnfg.GetResponse("?lat=" + cnfg.Shir + "&lon=" + cnfg.Dolg);

                for (int i = 3; i < response.List.Length; i += 8)
                {
                    ii = 0;
                    for (int j = i; i - j < 2; j--, ii++)
                    {
                        tmp_arr[0] = response.List[j].Main["temp"];
                        tmp_arr[1] = response.List[j - 1].Main["temp_min"];
                        tmp_arr[2] = response.List[j - 2].Main["temp_max"];
                    }
                    Console.WriteLine(
                        "Max: {0} kelvin\nAvg: {1} kelvin\n\n", tmp_arr.Max(), Math.Round(tmp_arr.Average(), 2)
                        );
                }


                Console.WriteLine(response.List);
                break;
            }



            Console.ReadKey();
        }
Пример #3
0
        private async Task LoadWeather()
        {
            IsLoading = true;

            try
            {
                var client = new OpenWeatherMap.OpenWeatherMapClient();
                var cityId = SettingsHelper.Settings.CityId.GetValue <double>();
                if (cityId == default(double))
                {
                    cityId = 2113015;//set Chiba-Japan as default value
                }
                Weather = await client.GetWeatherAsync(cityId);
            }
            catch (Exception ex)
            {
                Debugger.WriteErrorLog("Error occured while loading weather.", ex);
                await new MessageDialog(ex.Message, "Error occured while loading weather.").ShowAsync();
            }

            IsLoading = false;
        }
Пример #4
0
        //HERE are my sources for this
        //https://books.google.com/books?id=_2brYQqb_RYC&pg=PA26&lpg=PA26&dq=average+watts/m%5E2+surface+peak&source=bl&ots=ImzfwuObq1&sig=oWaRpcitRVbF5M0YApRiLwb-qoA&hl=en&sa=X&ved=0ahUKEwi41IKkxLPaAhUBWK0KHXLbB3EQ6AEIiQEwBw#v=onepage&q=average%20watts%2Fm%5E2%20surface%20peak&f=false
        //https://solarpowerrocks.com/solar-basics/how-do-solar-panels-work-in-cloudy-weather/


        /*
         * Assumptions:
         * 1kw/m^2 during sunlight
         * 25% efficiency during cloudy day
         * 100% efficiency during sunny day
         *
         * panel is 15% efficient at converting power
         *
         * full power during daylight
         *
         * */
        public static PowerData MakePredictionAndGetAngles(string weather)
        {
            const double wattsPerM2           = 1000;
            const double coefficientForClouds = 0.25;
            const double panelAreaInM2        = 0.0687;
            const double panelEfficiency      = 0.15;

            //Get the minutes of the day that are avaiulable
            ExcelPackage   package = new ExcelPackage(new System.IO.FileInfo("wwwroot/xls/NOAA_Solar_Calculations_day.xlsx"));
            ExcelWorksheet sheet   = package.Workbook.Worksheets[1];
            var            start   = sheet.Dimension.Start;
            var            end     = sheet.Dimension.End;
            //double solarMinutes = Convert.ToDouble(sheet.Cells[27, 2].Text);
            //DateTime sunrise = Convert.ToDateTime(sheet.Cells[25, 2].Text);
            //DateTime sunset = Convert.ToDateTime(sheet.Cells[26, 2].Text);
            double    solarMinutes;
            PowerData data = new PowerData();

            //Now get all teh angle data
            List <DateTime> TimeFractions = new List <DateTime>();
            List <double>   AngleH        = new List <double>();
            List <double>   AngleA        = new List <double>();

            //Also get the coordinates
            var lat = Convert.ToDouble(sheet.Cells[3, 2].Text);
            var lng = Convert.ToDouble(sheet.Cells[4, 2].Text);
            int row = start.Row;

            //Get sunrise and sunset
            double sunrise = Convert.ToDouble(sheet.Cells[2, 25].Text);
            double sunset  = Convert.ToDouble(sheet.Cells[2, 26].Text);

            solarMinutes = (sunset - sunrise) * 24 * 60;

            //Skip headers
            row++;
            //Parse rows one by one
            while (row < end.Row)
            {
                if (row < 180 && row > 90)
                {
                    //Add the thing from this row to each
                    TimeFractions.Add(Convert.ToDateTime(sheet.Cells[row, 5].Text));
                    AngleH.Add(Convert.ToDouble(sheet.Cells[row, 33].Text));
                    AngleA.Add(Convert.ToDouble(sheet.Cells[row, 34].Text));
                }
                //increment row
                row++;
            }

            //Closes package
            package.Dispose();


            //Now get the weather
            OpenWeatherMap.OpenWeatherMapClient client = new OpenWeatherMap.OpenWeatherMapClient("933839ed82ba0ad5f89513a943b6f71c");
            OpenWeatherMap.Coordinates          coord  = new OpenWeatherMap.Coordinates();
            coord.Latitude  = lat;
            coord.Longitude = lng;

            //This is lowkey a little bit dangerous
            var currentWeather = client.CurrentWeather.GetByCoordinates(coord).Result;


            double cloudyNess = currentWeather.Clouds.Value;

            data.City           = currentWeather.City.Name;
            data.UrlForIcon     = "http://openweathermap.org/img/w/" + currentWeather.Weather.Icon + ".png";
            data.CurrentWeather = currentWeather.Weather.Value;

            //Make the predictions
            if (cloudyNess < 50)
            {
                data.DailyPower   = wattsPerM2 * panelAreaInM2 * panelEfficiency * (solarMinutes / 60.0) * ((100 - cloudyNess) / 100);
                data.CurrentPower = wattsPerM2 * panelAreaInM2 * panelEfficiency;
            }
            else
            {
                data.DailyPower   = wattsPerM2 * panelAreaInM2 * panelEfficiency * solarMinutes / 60.0;
                data.CurrentPower = wattsPerM2 * panelAreaInM2 * panelEfficiency;
            }

            data.Times = TimeFractions;
            //Process 3d angles
            if (cloudyNess < 50)
            {
                data.AngleA = AngleA;
                data.AngleH = AngleH;
            }
            else
            {
                data.AngleH = new List <double>();
                data.AngleA = new List <double>();
                foreach (var t in data.Times)
                {
                    data.AngleA.Add(0);
                    data.AngleH.Add(0);
                }
            }

            data.X = new List <double>();
            data.Y = new List <double>();
            data.Z = new List <double>();

            foreach (var angle in AngleA)
            {
                data.X.Add(5 * Math.Sin(angle));
                data.Z.Add(5 * Math.Cos(angle));
            }

            foreach (var angle in AngleH)
            {
                data.Y.Add(5 * Math.Tan(angle));
            }
            data.countAngs  = data.Y.Count;
            data.HoursOfSun = (int)solarMinutes / 60;
            return(data);
        }