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); }
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); } }
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)); }
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 } } }