Created
April 11, 2025 14:55
-
-
Save davepermen/f5fd7c14d31af95109a753dd10eda195 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using OpenMeteo; | |
OpenMeteoClient client = new(); | |
try | |
{ | |
if (await client.QueryAsync("Menziken", new() { Current = CurrentOptions.All, Daily = DailyOptions.All }) is WeatherForecast weatherForecast) | |
{ | |
Console.WriteLine($"found Menziken at {weatherForecast.Latitude} & {weatherForecast.Longitude}"); | |
Console.WriteLine(); | |
var airQuality = await client.QueryAsync(new AirQualityOptions(weatherForecast.Latitude, weatherForecast.Longitude, AirQualityOptions.HourlyOptions.All, "auto", "iso8601", "auto", 0, DateTime.Today.ToString("O"), DateTime.Today.ToString("O"))); | |
if (airQuality?.Hourly?.Birch_pollen?.Where(p => p != null).Cast<float>().ToArray() is float[] pollen) | |
{ | |
var daily = GroupDaily(pollen); | |
var unit = airQuality.Hourly_Units?.Birch_pollen ?? ""; | |
foreach(var day in daily) | |
{ | |
Console.WriteLine($"day: {day.Day.ToLongDateString()}"); | |
Console.WriteLine($"samples: {day.Samples.Length} from {day.StartHour}:00 to {day.EndHour}:00"); | |
var min = day.Samples.Index().MinBy(v => v.Item); | |
var max = day.Samples.Index().MaxBy(v => v.Item); | |
Console.WriteLine($"min: {min.Item} {unit} @ {day.StartHour + min.Index}:00"); | |
Console.WriteLine($"max: {max.Item} {unit} @ {day.StartHour + max.Index}:00"); | |
Console.WriteLine(); | |
} | |
} | |
} | |
} catch(Exception e) | |
{ | |
Console.WriteLine(e.ToString()); | |
} | |
static IEnumerable<DailySamples> GroupDaily(float[] data) | |
{ | |
var start = DateTime.Now.Hour; | |
var index = 0; | |
if(start != 24) | |
{ | |
yield return new DailySamples(DateTime.Today, start, 24, data[start..24]); | |
index++; | |
} | |
foreach(var chunk in data[(24 * index)..].Chunk(24)) | |
{ | |
yield return new DailySamples(DateTime.Today.AddDays(index), 0, chunk.Length, chunk); | |
index++; | |
} | |
} | |
record DailySamples(DateTime Day, int StartHour, int EndHour, float[] Samples); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment