diff --git a/charger/config.go b/charger/config.go index cf8e442ff..bbb307371 100644 --- a/charger/config.go +++ b/charger/config.go @@ -5,6 +5,7 @@ import ( "strings" "github.com/andig/evcc/api" + "github.com/pkg/errors" ) type apiFunction string @@ -38,5 +39,9 @@ func NewFromConfig(typ string, other map[string]interface{}) (charger api.Charge return nil, fmt.Errorf("invalid charger type: %s", typ) } + if err != nil { + err = errors.Wrap(err, fmt.Sprintf("cannot create %s charger", typ)) + } + return charger, err } diff --git a/cmd/config.go b/cmd/config.go index af8aa902e..f33f06e93 100644 --- a/cmd/config.go +++ b/cmd/config.go @@ -90,6 +90,11 @@ func (cp *ConfigProvider) configureMeters(conf config) { if err != nil { log.FATAL.Fatal(err) } + + if _, exists := cp.meters[cc.Name]; exists { + log.FATAL.Fatalf("duplicate meter name: %s already defined and must be unique", cc.Name) + } + cp.meters[cc.Name] = m } } @@ -101,6 +106,11 @@ func (cp *ConfigProvider) configureChargers(conf config) { if err != nil { log.FATAL.Fatal(err) } + + if _, exists := cp.chargers[cc.Name]; exists { + log.FATAL.Fatalf("duplicate charger name: %s already defined and must be unique", cc.Name) + } + cp.chargers[cc.Name] = c } } @@ -112,6 +122,11 @@ func (cp *ConfigProvider) configureVehicles(conf config) { if err != nil { log.FATAL.Fatal(err) } + + if _, exists := cp.vehicles[cc.Name]; exists { + log.FATAL.Fatalf("duplicate vehicle name: %s already defined and must be unique", cc.Name) + } + cp.vehicles[cc.Name] = v } } diff --git a/meter/config.go b/meter/config.go index a8f3c9e3b..48353b66b 100644 --- a/meter/config.go +++ b/meter/config.go @@ -5,6 +5,7 @@ import ( "strings" "github.com/andig/evcc/api" + "github.com/pkg/errors" ) // NewFromConfig creates meter from configuration @@ -22,5 +23,9 @@ func NewFromConfig(typ string, other map[string]interface{}) (meter api.Meter, e err = fmt.Errorf("invalid meter type: %s", typ) } + if err != nil { + err = errors.Wrap(err, fmt.Sprintf("cannot create %s meter", typ)) + } + return meter, err } diff --git a/vehicle/config.go b/vehicle/config.go index 674255dcb..f5540d4fa 100644 --- a/vehicle/config.go +++ b/vehicle/config.go @@ -5,6 +5,7 @@ import ( "strings" "github.com/andig/evcc/api" + "github.com/pkg/errors" ) // NewFromConfig creates vehicle from configuration @@ -28,5 +29,9 @@ func NewFromConfig(typ string, other map[string]interface{}) (v api.Vehicle, err err = fmt.Errorf("invalid vehicle type: %s", typ) } + if err != nil { + err = errors.Wrap(err, fmt.Sprintf("cannot create %s vehicle", typ)) + } + return }