Align soc retry handling
This commit is contained in:
parent
4ce8e5a72e
commit
d9c15954e6
3 changed files with 29 additions and 53 deletions
|
|
@ -65,12 +65,18 @@ func (d *dumper) Dump(name string, v interface{}) {
|
|||
}
|
||||
|
||||
if v, ok := v.(api.Battery); ok {
|
||||
soc, err := v.SoC()
|
||||
var soc float64
|
||||
var err error
|
||||
|
||||
for err != nil && errors.Is(err, api.ErrMustRetry) {
|
||||
fmt.Fprint(w, ".")
|
||||
time.Sleep(3 * time.Second)
|
||||
soc, err = v.SoC()
|
||||
// wait up to 1m for the vehicle to wakeup
|
||||
start := time.Now()
|
||||
for soc, err = v.SoC(); err != nil && errors.Is(err, api.ErrMustRetry); {
|
||||
if time.Since(start) > time.Minute {
|
||||
err = api.ErrTimeout
|
||||
} else {
|
||||
fmt.Fprint(w, ".")
|
||||
time.Sleep(3 * time.Second)
|
||||
}
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
|
|
@ -116,10 +122,6 @@ func (d *dumper) Dump(name string, v interface{}) {
|
|||
|
||||
// vehicle
|
||||
|
||||
if v, ok := v.(api.Vehicle); ok {
|
||||
fmt.Fprintf(w, "Capacity:\t%dkWh\n", v.Capacity())
|
||||
}
|
||||
|
||||
if v, ok := v.(api.VehicleRange); ok {
|
||||
if rng, err := v.Range(); err != nil {
|
||||
fmt.Fprintf(w, "Range:\t%v\n", err)
|
||||
|
|
@ -173,5 +175,9 @@ func (d *dumper) Dump(name string, v interface{}) {
|
|||
v.Diagnose()
|
||||
}
|
||||
|
||||
if v, ok := v.(api.Vehicle); ok {
|
||||
fmt.Fprintf(w, "Capacity:\t%dkWh\n", v.Capacity())
|
||||
}
|
||||
|
||||
w.Flush()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -72,26 +72,24 @@ func main() {
|
|||
}
|
||||
|
||||
case "soc":
|
||||
var soc float64
|
||||
var err error
|
||||
|
||||
start := time.Now()
|
||||
for {
|
||||
for soc, err = v.SoC(); err != nil && errors.Is(err, api.ErrMustRetry); {
|
||||
if time.Since(start) > time.Minute {
|
||||
log.Fatal(api.ErrTimeout)
|
||||
err = api.ErrTimeout
|
||||
} else {
|
||||
time.Sleep(5 * time.Second)
|
||||
}
|
||||
|
||||
soc, err := v.SoC()
|
||||
if err != nil {
|
||||
if errors.Is(err, api.ErrMustRetry) {
|
||||
time.Sleep(5 * time.Second)
|
||||
continue
|
||||
}
|
||||
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
fmt.Println(int(math.Round(soc)))
|
||||
break
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
fmt.Println(int(math.Round(soc)))
|
||||
|
||||
default:
|
||||
log.Fatal("invalid action:", action)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,6 @@
|
|||
package cmd
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/evcc-io/evcc/api"
|
||||
"github.com/evcc-io/evcc/server"
|
||||
"github.com/evcc-io/evcc/util"
|
||||
|
|
@ -49,32 +45,8 @@ func runVehicle(cmd *cobra.Command, args []string) {
|
|||
}
|
||||
|
||||
d := dumper{len: len(vehicles)}
|
||||
NEXT:
|
||||
|
||||
for name, v := range vehicles {
|
||||
start := time.Now()
|
||||
|
||||
WAIT:
|
||||
// wait up to 1m for the vehicle to wakeup
|
||||
for {
|
||||
if time.Since(start) > time.Minute {
|
||||
log.ERROR.Println(api.ErrTimeout)
|
||||
continue NEXT
|
||||
}
|
||||
|
||||
if _, err := v.SoC(); err != nil {
|
||||
if errors.Is(err, api.ErrMustRetry) {
|
||||
time.Sleep(5 * time.Second)
|
||||
fmt.Print(".")
|
||||
continue WAIT
|
||||
}
|
||||
|
||||
log.ERROR.Println(err)
|
||||
continue NEXT
|
||||
}
|
||||
|
||||
break
|
||||
}
|
||||
|
||||
d.DumpWithHeader(name, v)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue