summarise data from openmeteo
This commit is contained in:
@@ -39,6 +39,7 @@ func main() {
|
||||
}()
|
||||
|
||||
latest := &mqttingest.Latest{}
|
||||
forecastCache := &ForecastCache{}
|
||||
|
||||
d, err := db.Open(ctx, cfg.DB.ConnString)
|
||||
if err != nil {
|
||||
@@ -54,7 +55,7 @@ func main() {
|
||||
|
||||
// Start Open-Meteo poller (optional)
|
||||
if cfg.Pollers.OpenMeteo.Enabled {
|
||||
go runOpenMeteoPoller(ctx, d, site, cfg.Pollers.OpenMeteo.Model, cfg.Pollers.OpenMeteo.Interval)
|
||||
go runOpenMeteoPoller(ctx, d, forecastCache, site, cfg.Pollers.OpenMeteo.Model, cfg.Pollers.OpenMeteo.Interval)
|
||||
}
|
||||
|
||||
if cfg.Wunderground.Enabled {
|
||||
@@ -83,6 +84,10 @@ func main() {
|
||||
|
||||
latest.Update(ts, p)
|
||||
|
||||
if snap, ok := latest.Snapshot(); ok {
|
||||
logForecastDeviation(forecastCache, snap)
|
||||
}
|
||||
|
||||
if err := d.InsertWS90(ctx, db.InsertWS90Params{
|
||||
TS: ts,
|
||||
Site: cfg.Site.Name,
|
||||
@@ -119,20 +124,20 @@ func main() {
|
||||
}
|
||||
}
|
||||
|
||||
func runOpenMeteoPoller(ctx context.Context, d *db.DB, site providers.Site, model string, interval time.Duration) {
|
||||
func runOpenMeteoPoller(ctx context.Context, d *db.DB, cache *ForecastCache, site providers.Site, model string, interval time.Duration) {
|
||||
p := &providers.OpenMeteo{}
|
||||
t := time.NewTicker(interval)
|
||||
defer t.Stop()
|
||||
|
||||
// poll immediately at startup
|
||||
pollOnce(ctx, d, p, site, model)
|
||||
pollOnce(ctx, d, cache, p, site, model)
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return
|
||||
case <-t.C:
|
||||
pollOnce(ctx, d, p, site, model)
|
||||
pollOnce(ctx, d, cache, p, site, model)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -179,7 +184,7 @@ func runWundergroundUploader(ctx context.Context, latest *mqttingest.Latest, sta
|
||||
}
|
||||
}
|
||||
|
||||
func pollOnce(ctx context.Context, d *db.DB, p providers.Provider, site providers.Site, model string) {
|
||||
func pollOnce(ctx context.Context, d *db.DB, cache *ForecastCache, p providers.Provider, site providers.Site, model string) {
|
||||
log.Printf("forecast fetch start provider=%s model=%s site=%s", p.Name(), model, site.Name)
|
||||
|
||||
res, err := p.Fetch(ctx.Done(), site, model)
|
||||
@@ -188,6 +193,14 @@ func pollOnce(ctx context.Context, d *db.DB, p providers.Provider, site provider
|
||||
return
|
||||
}
|
||||
|
||||
if cache != nil {
|
||||
cache.Set(res)
|
||||
}
|
||||
|
||||
if summary := forecastSummary(res); summary != "" {
|
||||
log.Printf("forecast summary provider=%s model=%s %s", p.Name(), res.Model, summary)
|
||||
}
|
||||
|
||||
for _, pt := range res.Hourly {
|
||||
err := d.UpsertOpenMeteoHourly(ctx, db.InsertOpenMeteoHourlyParams{
|
||||
TS: pt.TS,
|
||||
|
||||
Reference in New Issue
Block a user