Skip to content

Instantly share code, notes, and snippets.

@davepermen
Created April 11, 2025 14:55
Show Gist options
  • Save davepermen/f5fd7c14d31af95109a753dd10eda195 to your computer and use it in GitHub Desktop.
Save davepermen/f5fd7c14d31af95109a753dd10eda195 to your computer and use it in GitHub Desktop.
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