diff --git a/cmd/charger.go b/cmd/charger.go index 3c918cb9a..291305483 100644 --- a/cmd/charger.go +++ b/cmd/charger.go @@ -42,12 +42,7 @@ func runCharger(cmd *cobra.Command, args []string) { log.FATAL.Fatal(err) } - // select single charger - if err := selectByName(args, &conf.Chargers); err != nil { - log.FATAL.Fatal(err) - } - - if err := configureChargers(conf.Chargers); err != nil { + if err := configureChargers(conf.Chargers, args...); err != nil { log.FATAL.Fatal(err) } diff --git a/cmd/charger_ramp.go b/cmd/charger_ramp.go index e0eb89b0c..abc759961 100644 --- a/cmd/charger_ramp.go +++ b/cmd/charger_ramp.go @@ -75,12 +75,7 @@ func runChargerRamp(cmd *cobra.Command, args []string) { log.FATAL.Fatal(err) } - // select single charger - if err := selectByName(args, &conf.Chargers); err != nil { - log.FATAL.Fatal(err) - } - - if err := configureChargers(conf.Chargers); err != nil { + if err := configureChargers(conf.Chargers, args...); err != nil { log.FATAL.Fatal(err) } diff --git a/cmd/flags.go b/cmd/flags.go index be33c747c..5e019e335 100644 --- a/cmd/flags.go +++ b/cmd/flags.go @@ -1,9 +1,6 @@ package cmd import ( - "fmt" - - "github.com/evcc-io/evcc/util/config" "github.com/spf13/cobra" "github.com/spf13/viper" ) @@ -64,20 +61,3 @@ func bindP(cmd *cobra.Command, key string, flagName ...string) { panic(err) } } - -func selectByName(args []string, conf *[]config.Named) error { - if len(args) != 1 { - return nil - } - - name := args[0] - - for _, c := range *conf { - if c.Name == name { - *conf = []config.Named{c} - return nil - } - } - - return fmt.Errorf("%s not found", name) -} diff --git a/cmd/meter.go b/cmd/meter.go index 3014a853d..2abd4a7cb 100644 --- a/cmd/meter.go +++ b/cmd/meter.go @@ -33,12 +33,7 @@ func runMeter(cmd *cobra.Command, args []string) { log.FATAL.Fatal(err) } - // select single meter - if err := selectByName(args, &conf.Meters); err != nil { - log.FATAL.Fatal(err) - } - - if err := configureMeters(conf.Meters); err != nil { + if err := configureMeters(conf.Meters, args...); err != nil { log.FATAL.Fatal(err) } diff --git a/cmd/setup.go b/cmd/setup.go index 133c8084d..2009a374b 100644 --- a/cmd/setup.go +++ b/cmd/setup.go @@ -174,12 +174,16 @@ func loadConfigFile(conf *globalConfig) error { return err } -func configureMeters(static []config.Named) error { +func configureMeters(static []config.Named, names ...string) error { for i, cc := range static { if cc.Name == "" { return fmt.Errorf("cannot create meter %d: missing name", i+1) } + if len(names) > 0 && !slices.Contains(names, cc.Name) { + continue + } + instance, err := meter.NewFromConfig(cc.Type, cc.Other) if err != nil { return fmt.Errorf("cannot create meter '%s': %w", cc.Name, err) @@ -199,6 +203,10 @@ func configureMeters(static []config.Named) error { for _, conf := range configurable { cc := conf.Named() + if len(names) > 0 && !slices.Contains(names, cc.Name) { + return nil + } + instance, err := meter.NewFromConfig(cc.Type, cc.Other) if err != nil { return fmt.Errorf("cannot create meter '%s': %w", cc.Name, err) @@ -212,7 +220,7 @@ func configureMeters(static []config.Named) error { return nil } -func configureChargers(static []config.Named) error { +func configureChargers(static []config.Named, names ...string) error { g, _ := errgroup.WithContext(context.Background()) for i, cc := range static { @@ -220,6 +228,10 @@ func configureChargers(static []config.Named) error { return fmt.Errorf("cannot create charger %d: missing name", i+1) } + if len(names) > 0 && !slices.Contains(names, cc.Name) { + continue + } + cc := cc g.Go(func() error { instance, err := charger.NewFromConfig(cc.Type, cc.Other) @@ -241,6 +253,11 @@ func configureChargers(static []config.Named) error { conf := conf g.Go(func() error { cc := conf.Named() + + if len(names) > 0 && !slices.Contains(names, cc.Name) { + return nil + } + instance, err := charger.NewFromConfig(cc.Type, cc.Other) if err != nil { return fmt.Errorf("cannot create charger '%s': %w", cc.Name, err) @@ -275,7 +292,7 @@ func vehicleInstance(cc config.Named) (api.Vehicle, error) { return instance, nil } -func configureVehicles(static []config.Named) error { +func configureVehicles(static []config.Named, names ...string) error { var mu sync.Mutex g, _ := errgroup.WithContext(context.Background()) @@ -287,6 +304,10 @@ func configureVehicles(static []config.Named) error { return fmt.Errorf("cannot create vehicle %d: missing name", i+1) } + if len(names) > 0 && !slices.Contains(names, cc.Name) { + continue + } + cc := cc g.Go(func() error { instance, err := vehicleInstance(cc) @@ -315,6 +336,11 @@ func configureVehicles(static []config.Named) error { conf := conf g.Go(func() error { cc := conf.Named() + + if len(names) > 0 && !slices.Contains(names, cc.Name) { + return nil + } + instance, err := vehicleInstance(cc) if err != nil { return fmt.Errorf("cannot create vehicle '%s': %w", cc.Name, err) diff --git a/cmd/vehicle.go b/cmd/vehicle.go index 5d8885e00..c745a81f1 100644 --- a/cmd/vehicle.go +++ b/cmd/vehicle.go @@ -34,11 +34,6 @@ func runVehicle(cmd *cobra.Command, args []string) { fatal(err) } - // select single vehicle - if err := selectByName(args, &conf.Vehicles); err != nil { - fatal(err) - } - // use cloud if cmd.Flags().Lookup(flagCloud).Changed { for _, conf := range conf.Vehicles { @@ -46,7 +41,7 @@ func runVehicle(cmd *cobra.Command, args []string) { } } - if err := configureVehicles(conf.Vehicles); err != nil { + if err := configureVehicles(conf.Vehicles, args...); err != nil { fatal(err) }