diff --git a/cmd/dumper.go b/cmd/dumper.go index 216f02160..7079aad0b 100644 --- a/cmd/dumper.go +++ b/cmd/dumper.go @@ -130,9 +130,9 @@ func (d *dumper) Dump(name string, v interface{}) { if v, ok := v.(api.VehicleOdometer); ok { if odo, err := v.Odometer(); err != nil { - fmt.Fprintf(w, "Odometer:\t%.0f\n", err) + fmt.Fprintf(w, "Odometer:\t%v\n", err) } else { - fmt.Fprintf(w, "Odometer:\t%vkm\n", odo) + fmt.Fprintf(w, "Odometer:\t%.0fkm\n", odo) } } diff --git a/util/request/helper.go b/util/request/helper.go index 97af488d1..a3c67c36d 100644 --- a/util/request/helper.go +++ b/util/request/helper.go @@ -51,6 +51,7 @@ func (r *Helper) GetBody(url string) ([]byte, error) { // decodeJSON reads HTTP response and decodes JSON body if error is nil func decodeJSON(resp *http.Response, res interface{}) error { if err := ResponseError(resp); err != nil { + _ = json.NewDecoder(resp.Body).Decode(&res) return err } diff --git a/vehicle/audi/api.go b/vehicle/audi/api.go index c86a44fda..c0ab25d07 100644 --- a/vehicle/audi/api.go +++ b/vehicle/audi/api.go @@ -61,5 +61,9 @@ func (v *API) Status(vin string) (StatusResponse, error) { uri := fmt.Sprintf("%s/bs/vsr/v1/Audi/DE/vehicles/%s/status", DefaultBaseURI, vin) err := v.getJSON(uri, &res) + if err != nil && res.Error.ErrorCode != "" { + err = fmt.Errorf("%w (%s: %s)", err, res.Error.ErrorCode, res.Error.Description) + } + return res, err } diff --git a/vehicle/audi/types.go b/vehicle/audi/types.go index 5af000169..ef15d7fcd 100644 --- a/vehicle/audi/types.go +++ b/vehicle/audi/types.go @@ -7,6 +7,12 @@ type StatusResponse struct { Data []ServiceDefinition } } + Error Error +} + +type Error struct { + ErrorCode string + Description string } func (s *StatusResponse) ServiceByID(id string) *ServiceDefinition {