Nissan: refactor (#1901)
This commit is contained in:
parent
1194568cf2
commit
d550c7132f
3 changed files with 35 additions and 22 deletions
|
|
@ -56,8 +56,6 @@ func (v *API) Vehicles() ([]string, error) {
|
|||
return vehicles, err
|
||||
}
|
||||
|
||||
const timeFormat = "2006-01-02T15:04:05Z"
|
||||
|
||||
// Battery provides battery api response
|
||||
func (v *API) BatteryStatus(vin string) (Response, error) {
|
||||
uri := fmt.Sprintf("%s/v1/cars/%s/battery-status", CarAdapterBaseURL, vin)
|
||||
|
|
|
|||
|
|
@ -39,12 +39,9 @@ func NewProvider(api *API, vin string, expiry, cache time.Duration) *Provider {
|
|||
func (v *Provider) status(battery func() (Response, error), refresh func() (Response, error)) (Response, error) {
|
||||
res, err := battery()
|
||||
|
||||
var ts time.Time
|
||||
if err == nil {
|
||||
ts, err = time.Parse(timeFormat, res.Data.Attributes.LastUpdateTime)
|
||||
|
||||
// return the current value
|
||||
if time.Since(ts) <= v.expiry {
|
||||
// result valid?
|
||||
if res.Data.Attributes.LastUpdateTime.Add(v.expiry).After(time.Now()) {
|
||||
v.refreshTime = time.Time{}
|
||||
return res, err
|
||||
}
|
||||
|
|
@ -132,13 +129,11 @@ func (v *Provider) FinishTime() (time.Time, error) {
|
|||
res, err := v.statusG()
|
||||
|
||||
if res, ok := res.(Response); err == nil && ok {
|
||||
timestamp, err := time.Parse(time.RFC3339, res.Data.Attributes.Timestamp)
|
||||
|
||||
if res.Data.Attributes.RemainingTime == nil {
|
||||
return time.Time{}, api.ErrNotAvailable
|
||||
}
|
||||
|
||||
return timestamp.Add(time.Duration(*res.Data.Attributes.RemainingTime) * time.Minute), err
|
||||
return res.Data.Attributes.Timestamp.Add(time.Duration(*res.Data.Attributes.RemainingTime) * time.Minute), err
|
||||
}
|
||||
|
||||
return time.Time{}, err
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package nissan
|
|||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
// api constants
|
||||
|
|
@ -92,16 +93,35 @@ type Error struct {
|
|||
}
|
||||
|
||||
type attributes struct {
|
||||
Timestamp string `json:"timestamp"`
|
||||
ChargingStatus float32 `json:"chargingStatus"`
|
||||
InstantaneousPower int `json:"instantaneousPower"`
|
||||
RangeHvacOff int `json:"rangeHvacOff"` // Nissan
|
||||
BatteryAutonomy int `json:"batteryAutonomy"` // Renault
|
||||
BatteryLevel int `json:"batteryLevel"`
|
||||
BatteryCapacity int `json:"batteryCapacity"` // Nissan
|
||||
BatteryTemperature int `json:"batteryTemperature"`
|
||||
PlugStatus int `json:"plugStatus"`
|
||||
LastUpdateTime string `json:"lastUpdateTime"`
|
||||
ChargePower int `json:"chargePower"`
|
||||
RemainingTime *int `json:"chargingRemainingTime"`
|
||||
Timestamp Timestamp `json:"timestamp"`
|
||||
ChargingStatus float32 `json:"chargingStatus"`
|
||||
InstantaneousPower int `json:"instantaneousPower"`
|
||||
RangeHvacOff int `json:"rangeHvacOff"` // Nissan
|
||||
BatteryAutonomy int `json:"batteryAutonomy"` // Renault
|
||||
BatteryLevel int `json:"batteryLevel"`
|
||||
BatteryCapacity int `json:"batteryCapacity"` // Nissan
|
||||
BatteryTemperature int `json:"batteryTemperature"`
|
||||
PlugStatus int `json:"plugStatus"`
|
||||
LastUpdateTime Timestamp `json:"lastUpdateTime"`
|
||||
ChargePower int `json:"chargePower"`
|
||||
RemainingTime *int `json:"chargingRemainingTime"`
|
||||
}
|
||||
|
||||
const timeFormat = "2006-01-02T15:04:05Z"
|
||||
|
||||
// Timestamp implements JSON unmarshal
|
||||
type Timestamp struct {
|
||||
time.Time
|
||||
}
|
||||
|
||||
// UnmarshalJSON decodes string timestamp into time.Time
|
||||
func (ct *Timestamp) UnmarshalJSON(data []byte) error {
|
||||
s := strings.Trim(string(data), "\"")
|
||||
|
||||
t, err := time.Parse(timeFormat, s)
|
||||
if err == nil {
|
||||
(*ct).Time = t
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue