Add st(a)rt, st(o)p, (w)akeup options to vehicle command (#2870)

This commit is contained in:
andig 2022-03-13 12:56:00 +00:00 • committed by GitHub
parent 627d2afa1b
commit f952427674
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 86 additions and 25 deletions

View file

@ -18,20 +18,13 @@ var chargerCmd = &cobra.Command{
Run: runCharger,
}
const (
pCurrent = "current"
pEnable = "enable"
pDisable = "disable"
pWakeup = "wakeup"
)
func init() {
rootCmd.AddCommand(chargerCmd)
chargerCmd.PersistentFlags().StringP("name", "n", "", "select charger by name")
chargerCmd.PersistentFlags().IntP(pCurrent, "I", -1, "set current")
chargerCmd.PersistentFlags().BoolP(pEnable, "e", false, pEnable)
chargerCmd.PersistentFlags().BoolP(pDisable, "d", false, pDisable)
chargerCmd.PersistentFlags().BoolP(pWakeup, "w", false, pWakeup)
chargerCmd.PersistentFlags().StringP(flagName, "n", "", "select charger by name")
chargerCmd.PersistentFlags().IntP(flagCurrent, "I", -1, "set current")
chargerCmd.PersistentFlags().BoolP(flagEnable, "e", false, flagEnable)
chargerCmd.PersistentFlags().BoolP(flagDisable, "d", false, flagDisable)
chargerCmd.PersistentFlags().BoolP(flagWakeup, "w", false, flagWakeup)
}
func runCharger(cmd *cobra.Command, args []string) {
@ -50,7 +43,7 @@ func runCharger(cmd *cobra.Command, args []string) {
}
// select single charger
if name := cmd.PersistentFlags().Lookup("name").Value.String(); name != "" {
if name := cmd.PersistentFlags().Lookup(flagName).Value.String(); name != "" {
for _, cfg := range conf.Chargers {
if cfg.Name == name {
conf.Chargers = []qualifiedConfig{cfg}
@ -73,35 +66,43 @@ func runCharger(cmd *cobra.Command, args []string) {
}
var current int64
if flag := cmd.PersistentFlags().Lookup(pCurrent).Value.String(); flag != "-1" {
if flag := cmd.PersistentFlags().Lookup(flagCurrent); flag.Changed {
var err error
current, err = strconv.ParseInt(flag, 10, 64)
current, err = strconv.ParseInt(flag.Value.String(), 10, 64)
if err != nil {
log.ERROR.Fatalln(err)
}
}
d := dumper{len: len(chargers)}
for name, v := range chargers {
var flagUsed bool
for _, v := range chargers {
if current >= 0 {
flagUsed = true
if err := v.MaxCurrent(current); err != nil {
log.ERROR.Println("set current:", err)
}
}
if flag := cmd.PersistentFlags().Lookup(pEnable).Value.String(); flag == "true" {
if cmd.PersistentFlags().Lookup(flagEnable).Changed {
flagUsed = true
if err := v.Enable(true); err != nil {
log.ERROR.Println("enable:", err)
}
}
if flag := cmd.PersistentFlags().Lookup(pDisable).Value.String(); flag == "true" {
if cmd.PersistentFlags().Lookup(flagDisable).Changed {
flagUsed = true
if err := v.Enable(false); err != nil {
log.ERROR.Println("disable:", err)
}
}
if flag := cmd.PersistentFlags().Lookup(pWakeup).Value.String(); flag == "true" {
if cmd.PersistentFlags().Lookup(flagWakeup).Changed {
flagUsed = true
if vv, ok := v.(api.AlarmClock); ok {
if err := vv.WakeUp(); err != nil {
log.ERROR.Println("wakeup:", err)
@ -110,8 +111,13 @@ func runCharger(cmd *cobra.Command, args []string) {
log.ERROR.Println("wakeup: not implemented")
}
}
}
d.DumpWithHeader(name, v)
if !flagUsed {
d := dumper{len: len(chargers)}
for name, v := range chargers {
d.DumpWithHeader(name, v)
}
}
close(stopC)

11
cmd/flags.go Normal file
View file

@ -0,0 +1,11 @@
package cmd
const (
flagName = "name"
flagCurrent = "current"
flagEnable = "enable"
flagDisable = "disable"
flagWakeup = "wakeup"
flagStart = "start"
flagStop = "stop"
)

View file

@ -17,7 +17,10 @@ var vehicleCmd = &cobra.Command{
func init() {
rootCmd.AddCommand(vehicleCmd)
vehicleCmd.PersistentFlags().StringP("name", "n", "", "select vehicle by name")
vehicleCmd.PersistentFlags().StringP(flagName, "n", "", "select vehicle by name")
vehicleCmd.PersistentFlags().BoolP(flagStart, "a", false, "start charge")
vehicleCmd.PersistentFlags().BoolP(flagStop, "o", false, "stop charge")
vehicleCmd.PersistentFlags().BoolP(flagWakeup, "w", false, flagWakeup)
}
func runVehicle(cmd *cobra.Command, args []string) {
@ -36,7 +39,7 @@ func runVehicle(cmd *cobra.Command, args []string) {
}
// select single charger
if name := cmd.PersistentFlags().Lookup("name").Value.String(); name != "" {
if name := cmd.PersistentFlags().Lookup(flagName).Value.String(); name != "" {
for _, cfg := range conf.Vehicles {
if cfg.Name == name {
conf.Vehicles = []qualifiedConfig{cfg}
@ -57,7 +60,48 @@ func runVehicle(cmd *cobra.Command, args []string) {
d := dumper{len: len(vehicles)}
for name, v := range vehicles {
d.DumpWithHeader(name, v)
var flagUsed bool
for _, v := range vehicles {
if cmd.PersistentFlags().Lookup(flagWakeup).Changed {
flagUsed = true
if vv, ok := v.(api.AlarmClock); ok {
if err := vv.WakeUp(); err != nil {
log.ERROR.Println("wakeup:", err)
}
} else {
log.ERROR.Println("wakeup: not implemented")
}
}
if cmd.PersistentFlags().Lookup(flagStart).Changed {
flagUsed = true
if vv, ok := v.(api.VehicleStartCharge); ok {
if err := vv.StartCharge(); err != nil {
log.ERROR.Println("start charge:", err)
}
} else {
log.ERROR.Println("start charge: not implemented")
}
}
if cmd.PersistentFlags().Lookup(flagStop).Changed {
flagUsed = true
if vv, ok := v.(api.VehicleStopCharge); ok {
if err := vv.StopCharge(); err != nil {
log.ERROR.Println("stop charge:", err)
}
} else {
log.ERROR.Println("stop charge: not implemented")
}
}
}
if !flagUsed {
for name, v := range vehicles {
d.DumpWithHeader(name, v)
}
}
}