From 7e37fb4a8f7009c5e53b13a55e0fa9daccf1bedd Mon Sep 17 00:00:00 2001 From: andig Date: Sat, 3 Feb 2024 12:41:48 +0100 Subject: [PATCH] Fix yaml meters added to dynamic config (#12030) --- core/keys/site.go | 5 +++-- core/site.go | 3 +++ core/site_api.go | 41 +++++++++++++++++++++++++++++++++++++---- 3 files changed, 43 insertions(+), 6 deletions(-) diff --git a/core/keys/site.go b/core/keys/site.go index 63bc54837..a30ef7174 100644 --- a/core/keys/site.go +++ b/core/keys/site.go @@ -32,9 +32,10 @@ const ( Vehicles = "vehicles" // meters - BatteryMeters = "batteryMeters" - GridMeter = "GridMeter" + GridMeter = "gridMeter" PvMeters = "pvMeters" + BatteryMeters = "batteryMeters" + AuxMeters = "auxMeters" // battery settings BatteryCapacity = "batteryCapacity" diff --git a/core/site.go b/core/site.go index 2e248060a..c09327b97 100644 --- a/core/site.go +++ b/core/site.go @@ -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 diff --git a/core/site_api.go b/core/site_api.go index 74f0c5cbb..8a35ee052 100644 --- a/core/site_api.go +++ b/core/site_api.go @@ -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