From 8ab2a78e684e1c4f088c0f7cd6fcd06f76943892 Mon Sep 17 00:00:00 2001 From: andig Date: Mon, 10 Mar 2025 11:08:36 +0100 Subject: [PATCH] Solar forecast: reset inconsistent metrics (#19605) --- core/site.go | 22 ++++++++++++++++++---- core/site_tariffs.go | 4 ++-- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/core/site.go b/core/site.go index 5149d0b20..04f0ce293 100644 --- a/core/site.go +++ b/core/site.go @@ -323,14 +323,28 @@ func (site *Site) restoreSettings() error { fcstEnergy, err := settings.Float(keys.SolarAccForecast) if err == nil && settings.Json(keys.SolarAccYield, &pvEnergy) == nil { - site.fcstEnergy.Accumulated = fcstEnergy - + var nok bool for _, name := range site.Meters.PVMetersRef { if fcst, ok := pvEnergy[name]; ok { site.pvEnergy[name].Accumulated = fcst } else { - // TODO decide auto-reset? - site.log.WARN.Printf("cannot restore accumulated solar yield for: %s (may need to reset solar statistics)", name) + nok = true + site.log.WARN.Printf("accumulated solar yield: cannot restore %s", name) + } + } + + if !nok { + site.fcstEnergy.Accumulated = fcstEnergy + site.log.DEBUG.Printf("accumulated solar yield: restored %.3fkWh forecasted, %+v produced", fcstEnergy, pvEnergy) + } else { + // reset metrics + site.log.WARN.Printf("accumulated solar yield: metrics reset") + + settings.Delete(keys.SolarAccForecast) + settings.Delete(keys.SolarAccYield) + + for _, pe := range site.pvEnergy { + pe.Accumulated = 0 } } } diff --git a/core/site_tariffs.go b/core/site_tariffs.go index 6b58d6d58..bd5d8dae7 100644 --- a/core/site_tariffs.go +++ b/core/site_tariffs.go @@ -157,8 +157,8 @@ func (site *Site) solarDetails(solar timeseries) solarDetails { scale := produced / fcst site.log.DEBUG.Printf("solar forecast: accumulated %.3fkWh, produced %.3fkWh, scale %.3f", fcst, produced, scale) - const minEnergy = 0.1 - if produced > minEnergy && fcst > minEnergy { /*kWh*/ + const minEnergy = 0.5 // kWh + if produced+fcst > minEnergy { res.Scale = lo.ToPtr(scale) } }