Fix yaml meters added to dynamic config (#12030)

This commit is contained in:
andig 2024-02-03 12:41:48 +01:00 • committed by GitHub
parent 111b032778
commit 7e37fb4a8f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 43 additions and 6 deletions

View file

@ -32,9 +32,10 @@ const (
Vehicles = "vehicles"
// meters
BatteryMeters = "batteryMeters"
GridMeter = "GridMeter"
GridMeter = "gridMeter"
PvMeters = "pvMeters"
BatteryMeters = "batteryMeters"
AuxMeters = "auxMeters"
// battery settings
BatteryCapacity = "batteryCapacity"

View file

@ -247,6 +247,9 @@ func (site *Site) restoreMeters() {
if v, err := settings.String(keys.BatteryMeters); err == nil && v != "" {
site.Meters.BatteryMetersRef = append(site.Meters.BatteryMetersRef, strings.Split(v, ",")...)
}
if v, err := settings.String(keys.AuxMeters); err == nil && v != "" {
site.Meters.AuxMetersRef = append(site.Meters.AuxMetersRef, strings.Split(v, ",")...)
}
}
// restoreSettings restores site settings

View file

@ -9,6 +9,7 @@ import (
"github.com/evcc-io/evcc/core/loadpoint"
"github.com/evcc-io/evcc/core/site"
"github.com/evcc-io/evcc/server/db/settings"
"github.com/evcc-io/evcc/util/config"
)
var _ site.API = (*Site)(nil)
@ -21,6 +22,24 @@ const (
PlannerTariff = "planner"
)
// isConfigurable checks if the meter is configurable
func isConfigurable(ref string) bool {
dev, _ := config.Meters().ByName(ref)
_, ok := dev.(config.ConfigurableDevice[api.Meter])
return ok
}
// filterConfigurable filters configurable meters
func filterConfigurable(ref []string) []string {
var res []string
for _, r := range ref {
if isConfigurable(r) {
res = append(res, r)
}
}
return res
}
// GetTitle returns the title
func (site *Site) GetTitle() string {
site.RLock()
@ -68,8 +87,7 @@ func (site *Site) SetPVMeterRefs(ref []string) {
defer site.Unlock()
site.Meters.PVMetersRef = ref
// site.publish("siteGridMeterRef", meter)
settings.SetString(keys.PvMeters, strings.Join(ref, ","))
settings.SetString(keys.PvMeters, strings.Join(filterConfigurable(ref), ","))
}
// GetBatteryMeterRefs returns the BatteryMeterRef
@ -85,8 +103,23 @@ func (site *Site) SetBatteryMeterRefs(ref []string) {
defer site.Unlock()
site.Meters.BatteryMetersRef = ref
// site.publish("siteGridMeterRef", meter)
settings.SetString(keys.BatteryMeters, strings.Join(ref, ","))
settings.SetString(keys.BatteryMeters, strings.Join(filterConfigurable(ref), ","))
}
// GetAuxMeterRefs returns the AuxMeterRef
func (site *Site) GetAuxMeterRefs() []string {
site.RLock()
defer site.RUnlock()
return site.Meters.AuxMetersRef
}
// SetAuxMeterRefs sets the AuxMeterRef
func (site *Site) SetAuxMeterRefs(ref []string) {
site.Lock()
defer site.Unlock()
site.Meters.AuxMetersRef = ref
settings.SetString(keys.AuxMeters, strings.Join(filterConfigurable(ref), ","))
}
// Loadpoints returns the list loadpoints