Volvo: refactor (#1902)
This commit is contained in:
parent
d550c7132f
commit
3363c34722
3 changed files with 78 additions and 54 deletions
|
|
@ -101,12 +101,12 @@ type MaintenanceStatus struct {
|
|||
OilServiceDueKm int `json:"oilServiceDue_km"`
|
||||
}
|
||||
|
||||
// Timestamp implements JSON unmarshal for RFC3339 string timestamp
|
||||
// Timestamp implements JSON unmarshal
|
||||
type Timestamp struct {
|
||||
time.Time
|
||||
}
|
||||
|
||||
// UnmarshalJSON decodes RFC3339 string timestamp into time.Time
|
||||
// UnmarshalJSON decodes string timestamp into time.Time
|
||||
func (ct *Timestamp) UnmarshalJSON(data []byte) error {
|
||||
s := strings.Trim(string(data), "\"")
|
||||
|
||||
|
|
|
|||
|
|
@ -151,7 +151,7 @@ var _ api.VehicleOdometer = (*Volvo)(nil)
|
|||
func (v *Volvo) Odometer() (float64, error) {
|
||||
res, err := v.statusG()
|
||||
if res, ok := res.(volvo.Status); err == nil && ok {
|
||||
return res.Odometer, nil
|
||||
return res.Odometer / 1e3, nil
|
||||
}
|
||||
|
||||
return 0, err
|
||||
|
|
@ -163,13 +163,9 @@ var _ api.VehicleFinishTimer = (*Volvo)(nil)
|
|||
func (v *Volvo) FinishTime() (time.Time, error) {
|
||||
res, err := v.statusG()
|
||||
if res, ok := res.(volvo.Status); err == nil && ok {
|
||||
timestamp, err := time.Parse("2006-01-02T15:04:05-0700", res.HvBattery.TimeToHVBatteryFullyChargedTimestamp)
|
||||
|
||||
if err == nil {
|
||||
timestamp = timestamp.Add(time.Duration(res.HvBattery.DistanceToHVBatteryEmpty) * time.Minute)
|
||||
if timestamp.Before(time.Now()) {
|
||||
return time.Time{}, api.ErrNotAvailable
|
||||
}
|
||||
timestamp := res.HvBattery.TimeToHVBatteryFullyChargedTimestamp.Add(time.Duration(res.HvBattery.DistanceToHVBatteryEmpty) * time.Minute)
|
||||
if timestamp.Before(time.Now()) {
|
||||
return time.Time{}, api.ErrNotAvailable
|
||||
}
|
||||
|
||||
return timestamp, err
|
||||
|
|
|
|||
|
|
@ -1,5 +1,10 @@
|
|||
package volvo
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
const ApiURI = "https://vocapi.wirelesscar.net/customerapi/rest/v3.0"
|
||||
|
||||
type AccountResponse struct {
|
||||
|
|
@ -20,50 +25,73 @@ type VehicleRelation struct {
|
|||
}
|
||||
|
||||
type Status struct {
|
||||
AverageFuelConsumption float32 `json:"averageFuelConsumption"`
|
||||
AverageFuelConsumptionTimestamp string `json:"averageFuelConsumptionTimestamp"`
|
||||
AverageSpeed int `json:"averageSpeed"`
|
||||
AverageSpeedTimestamp string `json:"averageSpeedTimestamp"`
|
||||
BrakeFluid string `json:"brakeFluid"`
|
||||
BrakeFluidTimestamp string `json:"brakeFluidTimestamp"`
|
||||
CarLocked bool `json:"carLocked"`
|
||||
CarLockedTimestamp string `json:"carLockedTimestamp"`
|
||||
ConnectionStatus string `json:"connectionStatus"` // Disconnected
|
||||
ConnectionStatusTimestamp string `json:"connectionStatusTimestamp"`
|
||||
DistanceToEmpty int `json:"distanceToEmpty"`
|
||||
DistanceToEmptyTimestamp string `json:"distanceToEmptyTimestamp"`
|
||||
EngineRunning bool `json:"engineRunning"`
|
||||
EngineRunningTimestamp string `json:"engineRunningTimestamp"`
|
||||
FuelAmount int `json:"fuelAmount"`
|
||||
FuelAmountLevel int `json:"fuelAmountLevel"`
|
||||
FuelAmountLevelTimestamp string `json:"fuelAmountLevelTimestamp"`
|
||||
FuelAmountTimestamp string `json:"fuelAmountTimestamp"`
|
||||
AverageFuelConsumption float32 `json:"averageFuelConsumption"`
|
||||
AverageFuelConsumptionTimestamp Timestamp `json:"averageFuelConsumptionTimestamp"`
|
||||
AverageSpeed int `json:"averageSpeed"`
|
||||
AverageSpeedTimestamp Timestamp `json:"averageSpeedTimestamp"`
|
||||
BrakeFluid string `json:"brakeFluid"`
|
||||
BrakeFluidTimestamp Timestamp `json:"brakeFluidTimestamp"`
|
||||
CarLocked bool `json:"carLocked"`
|
||||
CarLockedTimestamp Timestamp `json:"carLockedTimestamp"`
|
||||
ConnectionStatus string `json:"connectionStatus"` // Disconnected
|
||||
ConnectionStatusTimestamp Timestamp `json:"connectionStatusTimestamp"`
|
||||
DistanceToEmpty int `json:"distanceToEmpty"`
|
||||
DistanceToEmptyTimestamp Timestamp `json:"distanceToEmptyTimestamp"`
|
||||
EngineRunning bool `json:"engineRunning"`
|
||||
EngineRunningTimestamp Timestamp `json:"engineRunningTimestamp"`
|
||||
FuelAmount int `json:"fuelAmount"`
|
||||
FuelAmountLevel int `json:"fuelAmountLevel"`
|
||||
FuelAmountLevelTimestamp Timestamp `json:"fuelAmountLevelTimestamp"`
|
||||
FuelAmountTimestamp Timestamp `json:"fuelAmountTimestamp"`
|
||||
HvBattery struct {
|
||||
HvBatteryChargeStatusDerived string `json:"hvBatteryChargeStatusDerived"` // CableNotPluggedInCar, CablePluggedInCar, Charging
|
||||
HvBatteryChargeStatusDerivedTimestamp string `json:"hvBatteryChargeStatusDerivedTimestamp"`
|
||||
HvBatteryChargeModeStatus string `json:"hvBatteryChargeModeStatus"`
|
||||
HvBatteryChargeModeStatusTimestamp string `json:"hvBatteryChargeModeStatusTimestamp"`
|
||||
HvBatteryChargeStatus string `json:"hvBatteryChargeStatus"` // Started, ChargeProgress, ChargeEnd, Interrupted
|
||||
HvBatteryChargeStatusTimestamp string `json:"hvBatteryChargeStatusTimestamp"`
|
||||
HvBatteryLevel int `json:"hvBatteryLevel"`
|
||||
HvBatteryLevelTimestamp string `json:"hvBatteryLevelTimestamp"`
|
||||
DistanceToHVBatteryEmpty int `json:"distanceToHVBatteryEmpty"`
|
||||
DistanceToHVBatteryEmptyTimestamp string `json:"distanceToHVBatteryEmptyTimestamp"`
|
||||
TimeToHVBatteryFullyCharged int `json:"timeToHVBatteryFullyCharged"`
|
||||
TimeToHVBatteryFullyChargedTimestamp string `json:"timeToHVBatteryFullyChargedTimestamp"`
|
||||
HvBatteryChargeStatusDerived string `json:"hvBatteryChargeStatusDerived"` // CableNotPluggedInCar, CablePluggedInCar, Charging
|
||||
HvBatteryChargeStatusDerivedTimestamp Timestamp `json:"hvBatteryChargeStatusDerivedTimestamp"`
|
||||
HvBatteryChargeModeStatus string `json:"hvBatteryChargeModeStatus"`
|
||||
HvBatteryChargeModeStatusTimestamp Timestamp `json:"hvBatteryChargeModeStatusTimestamp"`
|
||||
HvBatteryChargeStatus string `json:"hvBatteryChargeStatus"` // Started, ChargeProgress, ChargeEnd, Interrupted
|
||||
HvBatteryChargeStatusTimestamp Timestamp `json:"hvBatteryChargeStatusTimestamp"`
|
||||
HvBatteryLevel int `json:"hvBatteryLevel"`
|
||||
HvBatteryLevelTimestamp Timestamp `json:"hvBatteryLevelTimestamp"`
|
||||
DistanceToHVBatteryEmpty int `json:"distanceToHVBatteryEmpty"`
|
||||
DistanceToHVBatteryEmptyTimestamp Timestamp `json:"distanceToHVBatteryEmptyTimestamp"`
|
||||
TimeToHVBatteryFullyCharged int `json:"timeToHVBatteryFullyCharged"`
|
||||
TimeToHVBatteryFullyChargedTimestamp Timestamp `json:"timeToHVBatteryFullyChargedTimestamp"`
|
||||
} `json:"hvBattery"`
|
||||
Odometer float64 `json:"odometer"`
|
||||
OdometerTimestamp string `json:"odometerTimestamp"`
|
||||
PrivacyPolicyEnabled bool `json:"privacyPolicyEnabled"`
|
||||
PrivacyPolicyEnabledTimestamp string `json:"privacyPolicyEnabledTimestamp"`
|
||||
RemoteClimatizationStatus string `json:"remoteClimatizationStatus"` // CableConnectedWithoutPower
|
||||
RemoteClimatizationStatusTimestamp string `json:"remoteClimatizationStatusTimestamp"`
|
||||
ServiceWarningStatus string `json:"serviceWarningStatus"`
|
||||
ServiceWarningStatusTimestamp string `json:"serviceWarningStatusTimestamp"`
|
||||
TimeFullyAccessibleUntil string `json:"timeFullyAccessibleUntil"`
|
||||
TimePartiallyAccessibleUntil string `json:"timePartiallyAccessibleUntil"`
|
||||
TripMeter1 int `json:"tripMeter1"`
|
||||
TripMeter1Timestamp string `json:"tripMeter1Timestamp"`
|
||||
TripMeter2 int `json:"tripMeter2"`
|
||||
TripMeter2Timestamp string `json:"tripMeter2Timestamp"`
|
||||
Odometer float64 `json:"odometer"`
|
||||
OdometerTimestamp Timestamp `json:"odometerTimestamp"`
|
||||
PrivacyPolicyEnabled bool `json:"privacyPolicyEnabled"`
|
||||
PrivacyPolicyEnabledTimestamp Timestamp `json:"privacyPolicyEnabledTimestamp"`
|
||||
RemoteClimatizationStatus string `json:"remoteClimatizationStatus"` // CableConnectedWithoutPower
|
||||
RemoteClimatizationStatusTimestamp Timestamp `json:"remoteClimatizationStatusTimestamp"`
|
||||
ServiceWarningStatus string `json:"serviceWarningStatus"`
|
||||
ServiceWarningStatusTimestamp Timestamp `json:"serviceWarningStatusTimestamp"`
|
||||
TimeFullyAccessibleUntil string `json:"timeFullyAccessibleUntil"`
|
||||
TimePartiallyAccessibleUntil string `json:"timePartiallyAccessibleUntil"`
|
||||
TripMeter1 int `json:"tripMeter1"`
|
||||
TripMeter1Timestamp Timestamp `json:"tripMeter1Timestamp"`
|
||||
TripMeter2 int `json:"tripMeter2"`
|
||||
TripMeter2Timestamp Timestamp `json:"tripMeter2Timestamp"`
|
||||
}
|
||||
|
||||
const timeFormat = "2006-01-02T15:04:05-0700"
|
||||
|
||||
// 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), "\"")
|
||||
|
||||
if s == "null" {
|
||||
return nil
|
||||
}
|
||||
|
||||
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