diff --git a/cmd/config.go b/cmd/config.go index 2f3b2bc98..79f335d67 100644 --- a/cmd/config.go +++ b/cmd/config.go @@ -73,11 +73,21 @@ type ConfigProvider struct { meters map[string]api.Meter chargers map[string]api.Charger vehicles map[string]api.Vehicle + visited map[string]bool } // Meter provides meters by name func (cp *ConfigProvider) Meter(name string) api.Meter { if meter, ok := cp.meters[name]; ok { + // track duplicate usage https://github.com/evcc-io/evcc/issues/1744 + if cp.visited == nil { + cp.visited = make(map[string]bool) + } + if _, ok := cp.visited[name]; ok { + log.FATAL.Fatalf("duplicate meter usage: %s", name) + } + cp.visited[name] = true + return meter } log.FATAL.Fatalf("invalid meter: %s", name) diff --git a/cmd/setup.go b/cmd/setup.go index 9e612d8c8..5593f43be 100644 --- a/cmd/setup.go +++ b/cmd/setup.go @@ -30,7 +30,7 @@ func init() { rand.Seed(time.Now().UnixNano()) } -var cp = &ConfigProvider{} +var cp = new(ConfigProvider) func loadConfigFile(cfgFile string) (conf config, err error) { if cfgFile != "" {