Forecast: allow multiple solar tariffs (#18920)
This commit is contained in:
parent
2808a29c84
commit
70dca20f47
15 changed files with 274 additions and 51 deletions
35
cmd/setup.go
35
cmd/setup.go
|
|
@ -768,6 +768,35 @@ func configureTariff(u api.TariffUsage, conf config.Typed, t *api.Tariff) error
|
|||
return nil
|
||||
}
|
||||
|
||||
func configureSolarTariff(conf []config.Typed, t *api.Tariff) error {
|
||||
var eg errgroup.Group
|
||||
tt := make([]api.Tariff, len(conf))
|
||||
|
||||
for i, conf := range conf {
|
||||
eg.Go(func() error {
|
||||
if conf.Type == "" {
|
||||
return errors.New("missing type")
|
||||
}
|
||||
|
||||
name := fmt.Sprintf("%s-%s-%d", api.TariffUsageSolar, tariff.Name(conf), i)
|
||||
res, err := tariffInstance(name, conf)
|
||||
if err != nil {
|
||||
return &DeviceError{name, err}
|
||||
}
|
||||
|
||||
tt[i] = res
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
if err := eg.Wait(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
*t = tariff.NewCombined(tt)
|
||||
return nil
|
||||
}
|
||||
|
||||
func configureTariffs(conf globalconfig.Tariffs) (*tariff.Tariffs, error) {
|
||||
// migrate settings
|
||||
if settings.Exists(keys.Tariffs) {
|
||||
|
|
@ -789,7 +818,11 @@ func configureTariffs(conf globalconfig.Tariffs) (*tariff.Tariffs, error) {
|
|||
eg.Go(func() error { return configureTariff(api.TariffUsageFeedIn, conf.FeedIn, &tariffs.FeedIn) })
|
||||
eg.Go(func() error { return configureTariff(api.TariffUsageCo2, conf.Co2, &tariffs.Co2) })
|
||||
eg.Go(func() error { return configureTariff(api.TariffUsagePlanner, conf.Planner, &tariffs.Planner) })
|
||||
eg.Go(func() error { return configureTariff(api.TariffUsageSolar, conf.Solar, &tariffs.Solar) })
|
||||
if len(conf.Solar) == 1 {
|
||||
eg.Go(func() error { return configureTariff(api.TariffUsageSolar, conf.Solar[0], &tariffs.Planner) })
|
||||
} else {
|
||||
eg.Go(func() error { return configureSolarTariff(conf.Solar, &tariffs.Solar) })
|
||||
}
|
||||
|
||||
if err := eg.Wait(); err != nil {
|
||||
return nil, &ClassError{ClassTariff, err}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue