示例#1
0
        public static string Build(Forecast forecast, SunriseSunset sunriseSunset)
        {
            var weatherSymbolEvaluator = new WeatherSymbolEvaluator();

            var morningWeather     = weatherSymbolEvaluator.Evaluate(forecast.GetWeatherSymbol(5));
            var morningTemperature = forecast.GetTemperature(5);

            var middayWeather     = weatherSymbolEvaluator.Evaluate(forecast.GetWeatherSymbol(10));
            var middayTemperature = forecast.GetTemperature(10);

            var eveningWeather     = weatherSymbolEvaluator.Evaluate(forecast.GetWeatherSymbol(16));
            var eveningTemperature = forecast.GetTemperature(16);

            var windDirection = new CompassPointEvaluator().Evaluate(forecast.GetWindDirection(10));
            var windSpeed     = forecast.GetWindSpeed(10);
            var wind          = char.ToUpper(windDirection[0]) + windDirection.Substring(1) + "lig vind " + windSpeed + " m/s";

            var sunrise = ConvertToSwedishTime(sunriseSunset.Results.Sunrise);
            var sunset  = ConvertToSwedishTime(sunriseSunset.Results.Sunset);

            var report = "På morgonen " + morningWeather + " och " + morningTemperature + " °C. Framåt dagen " + middayWeather +
                         " och " + middayTemperature + " °C. Till kvällen " + eveningWeather + " och " + eveningTemperature + " °C." +
                         Environment.NewLine + "Solen går upp " + sunrise + " och ner " + sunset + "." +
                         Environment.NewLine + wind + ".";

            return(report);
        }
        public void SunsetForMadisonWisconsinOnMarch16th()
        {
            var location = new Location(43, 0, 0);
            var config   = Configuration.Config;

            config.SetDateTimeConverter(DateTimeConverter.DateTimeModels.SolarTime, location);
            config.SetSunsetHourAngle(SunsetHourAngle.SunsetHourAngleModels.Basic);

            var solarNoon     = new DateTime(2020, 3, 16, 12, 0, 0);
            var sunriseSunset = new SunriseSunset(solarNoon, location.Latitude.FromDegreeToRadians());
            var sunset        = sunriseSunset.Sunset;

            Assert.AreEqual(solarNoon.Year, sunset.Year);
            Assert.AreEqual(solarNoon.Month, sunset.Month);
            Assert.AreEqual(solarNoon.Day, sunset.Day);
            Assert.AreEqual(17, sunset.Hour);
            Assert.AreEqual(52, sunset.Minute);
        }
        public void SunriseForNurembergOnOctober8()
        {
            var location = new Location(49.27, 11.05, 0);
            var config   = Configuration.Config;

            config.SetDateTimeConverter(DateTimeConverter.DateTimeModels.LocalTime, location);

            var solarNoon     = new DateTime(2020, 10, 8, 12, 0, 0);
            var sunriseSunset = new SunriseSunset(solarNoon, location.Latitude.FromDegreeToRadians());
            var sunrise       = sunriseSunset.Sunrise;

            var sunriseLocalTime = config.DateTimeConverter.SolarTimeToOriginalTime(sunrise);

            Assert.AreEqual(sunriseLocalTime.Year, sunriseLocalTime.Year);
            Assert.AreEqual(sunriseLocalTime.Month, sunriseLocalTime.Month);
            Assert.AreEqual(sunriseLocalTime.Day, sunriseLocalTime.Day);
            Assert.AreEqual(7, sunriseLocalTime.Hour);
            Assert.AreEqual(26, sunriseLocalTime.Minute, 11);
        }
示例#4
0
        public void GetNextTwilight(DateTime now, DateTime sunrise, DateTime sunset, bool isSunset)
        {
            SunriseSunset ss = new SunriseSunset()
            {
                sunrise = sunrise,
                sunset  = sunset
            };

            var result = client.GetIntervalTillNextTwilight(ss, now);

            if (isSunset)
            {
                Assert.True(result.Item1 == (sunset - now).TotalMilliseconds);
            }
            else
            {
                Assert.True(result.Item1 == (sunrise - now).TotalMilliseconds);
            }
        }
示例#5
0
        public SunriseSunsetDto GetSunriseSunsetByCityName(String cityName, EventTime eventTime)
        {
            logger.LogDebug("Starting search EventTime {} for city {}", eventTime, cityName);

            City city = cityDao.GetCityByName(cityName);

            if (city == null)
            {
                throw new Exception(String.Format("Could not find city: {0} in database ", cityName));
            }

            SunriseSunset sunriseSunset = sunriseSunsetHttpDao.GetDayDataByLongitudeAndLatitude(city.Longitude, city.Latitude);

            if (sunriseSunset == null)
            {
                throw new ArgumentNullException(String.Format("Could not find Sunrise and Sunset for city {0} ", city));
            }

            logger.LogDebug("EventTime found for city {}", sunriseSunset);

            return(transformToSunriseSunsetDto(eventTime, city.CityName, sunriseSunset.Sunrise, sunriseSunset.Sunset));
        }
示例#6
0
        public override void Run()
        {
            var latitude   = CloudConfigurationManager.GetSetting("Latitude");
            var longitude  = CloudConfigurationManager.GetSetting("Longitude");
            var timeZoneId = CloudConfigurationManager.GetSetting("TimeZoneName");
            var sunriseTimeOffsetMinutes = int.Parse(CloudConfigurationManager.GetSetting("SunriseTimeOffsetMinutes"));
            var sunsetTimeOffsetMinutes  = int.Parse(CloudConfigurationManager.GetSetting("SunsetTimeOffsetMinutes"));

            var           light             = Light.Unknown;
            SunriseSunset sunriseSunsetInfo = null;

            // figure out the UTC value of 4am in the configured time zone
            var dailyCheckTimeLocal = new DateTime(DateTimeOffset.UtcNow.Year,
                                                   DateTimeOffset.UtcNow.Month, DateTimeOffset.UtcNow.Day, 4, 0, 0);
            var timeZone          = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId);
            var dailyCheckTimeUtc = TimeZoneInfo.ConvertTimeToUtc(dailyCheckTimeLocal, timeZone);

            while (!_completedEvent.WaitOne(1000))
            {
                try
                {
                    // check on startup or everyday at 4am local time
                    if (sunriseSunsetInfo == null || ((sunriseSunsetInfo.Sunrise.Day < DateTimeOffset.UtcNow.Day ||
                                                       sunriseSunsetInfo.Sunrise.Month < DateTimeOffset.UtcNow.Month ||
                                                       sunriseSunsetInfo.Sunrise.Year < DateTimeOffset.UtcNow.Year) &&
                                                      DateTimeOffset.UtcNow.Hour == dailyCheckTimeUtc.Hour))
                    {
                        // use a temp variable that way if the call fails after 3 tries but we still have
                        // data from a previous successful call we can still use that
                        for (var i = 0; i < 3; i++)
                        {
                            var tmpSunriseSunsetInfo = SunriseSunsetRestClient.GetSunriseSunsetInfo(latitude, longitude).Result;
                            if (tmpSunriseSunsetInfo != null)
                            {
                                sunriseSunsetInfo = tmpSunriseSunsetInfo;
                                Trace.TraceInformation(string.Format("Today's sunrise is at {0} UTC and sunset is at {1} UTC",
                                                                     sunriseSunsetInfo.Sunrise.ToString("h:mm tt"),
                                                                     sunriseSunsetInfo.Sunset.ToString("h:mm tt")));
                                break;
                            }
                            Trace.TraceError("Error trying to get sunrise/sunset data, retrying...");
                            Thread.Sleep(30000); // wait 30 seconds and try again
                        }
                    }

                    if (sunriseSunsetInfo == null)
                    {
                        throw new Exception("Failed to get sunrise/sunset data after 3 retries");
                    }

                    var adjustedSunrise = sunriseSunsetInfo.Sunrise.AddMinutes(sunriseTimeOffsetMinutes);
                    var adjustedSunset  = sunriseSunsetInfo.Sunset.AddMinutes(sunsetTimeOffsetMinutes);

                    var daytime = (DateTimeOffset.UtcNow >= adjustedSunrise &&
                                   DateTimeOffset.UtcNow < adjustedSunset);

                    if (daytime)
                    {
                        if (light != Light.Off)
                        {
                            // turn light off
                            Trace.TraceInformation("Turning light off");
                            PublishLightState(Light.Off);
                            light = Light.Off;
                        }
                    }
                    else
                    {
                        if (light != Light.On)
                        {
                            // turn light on
                            Trace.TraceInformation("Turning light on");
                            PublishLightState(Light.On);
                            light = Light.On;
                        }
                    }
                }
                catch (Exception ex)
                {
                    Trace.TraceError("Error: " + ex.Message);
                    Thread.Sleep(TimeSpan.FromMinutes(1)); // throttle down in case this is a recurring error
                }
            }
        }