diff --git a/cmd/config.go b/cmd/config.go index 79f335d67..ba238b265 100644 --- a/cmd/config.go +++ b/cmd/config.go @@ -76,6 +76,10 @@ type ConfigProvider struct { visited map[string]bool } +func (cp *ConfigProvider) resetVisitors() { + cp.visited = nil +} + // Meter provides meters by name func (cp *ConfigProvider) Meter(name string) api.Meter { if meter, ok := cp.meters[name]; ok { diff --git a/cmd/dump.go b/cmd/dump.go index 490e5025b..6b7295d85 100644 --- a/cmd/dump.go +++ b/cmd/dump.go @@ -46,14 +46,35 @@ func runDump(cmd *cobra.Command, args []string) { d.Header("config", "=") fmt.Println("") + // allow duplicate requests to meters + cp.resetVisitors() + if name := site.Meters.GridMeterRef; name != "" { d.DumpWithHeader(fmt.Sprintf("grid: %s", name), cp.Meter(name)) } - if name := site.Meters.PVMeterRef; name != "" { - d.DumpWithHeader(fmt.Sprintf("pv: %s", name), cp.Meter(name)) + + if len(site.Meters.PVMetersRef) == 0 { + if name := site.Meters.PVMeterRef; name != "" { + d.DumpWithHeader(fmt.Sprintf("pv: %s", name), cp.Meter(name)) + } + } else { + for id, name := range site.Meters.PVMetersRef { + if name != "" { + d.DumpWithHeader(fmt.Sprintf("pv %d: %s", id, name), cp.Meter(name)) + } + } } - if name := site.Meters.BatteryMeterRef; name != "" { - d.DumpWithHeader(fmt.Sprintf("battery: %s", name), cp.Meter(name)) + + if len(site.Meters.BatteryMetersRef) == 0 { + if name := site.Meters.BatteryMeterRef; name != "" { + d.DumpWithHeader(fmt.Sprintf("battery: %s", name), cp.Meter(name)) + } + } else { + for id, name := range site.Meters.BatteryMetersRef { + if name != "" { + d.DumpWithHeader(fmt.Sprintf("Battery %d: %s", id, name), cp.Meter(name)) + } + } } for id, lpI := range site.LoadPoints() {