Volvo: split packages
This commit is contained in:
parent
4eafc9453f
commit
b52a750237
2 changed files with 81 additions and 81 deletions
|
|
@ -10,79 +10,10 @@ import (
|
|||
"github.com/evcc-io/evcc/provider"
|
||||
"github.com/evcc-io/evcc/util"
|
||||
"github.com/evcc-io/evcc/util/request"
|
||||
"github.com/evcc-io/evcc/vehicle/volvo"
|
||||
)
|
||||
|
||||
const (
|
||||
volvoAPI = "https://vocapi.wirelesscar.net/customerapi/rest/v3.0"
|
||||
)
|
||||
|
||||
type volvoAccountResponse struct {
|
||||
FirstName string `json:"firstName"`
|
||||
LastName string `json:"lastName"`
|
||||
VehicleRelations []string `json:"accountVehicleRelations"`
|
||||
}
|
||||
|
||||
type volvoVehicleRelation struct {
|
||||
Account string `json:"account"`
|
||||
AccountID string `json:"accountId"`
|
||||
Vehicle string `json:"vehicle"`
|
||||
AccountVehicleRelation string `json:"accountVehicleRelation"`
|
||||
VehicleID string `json:"vehicleId"`
|
||||
Username string `json:"username"`
|
||||
Status string `json:"status"`
|
||||
CustomerVehicleRelationID int `json:"customerVehicleRelationId"`
|
||||
}
|
||||
|
||||
type volvoStatus 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"`
|
||||
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"`
|
||||
} `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"`
|
||||
}
|
||||
|
||||
// Volvo is an api.Vehicle implementation for Volvo cars
|
||||
// Volvo is an api.Vehicle implementation for Volvo. cars
|
||||
type Volvo struct {
|
||||
*embed
|
||||
*request.Helper
|
||||
|
|
@ -148,13 +79,13 @@ func (v *Volvo) request(uri string) (*http.Request, error) {
|
|||
func (v *Volvo) vehicles() ([]string, error) {
|
||||
var vehicles []string
|
||||
|
||||
req, err := v.request(fmt.Sprintf("%s/customeraccounts", volvoAPI))
|
||||
req, err := v.request(fmt.Sprintf("%s/customeraccounts", volvo.ApiURI))
|
||||
if err == nil {
|
||||
var res volvoAccountResponse
|
||||
var res volvo.AccountResponse
|
||||
err = v.DoJSON(req, &res)
|
||||
|
||||
for _, rel := range res.VehicleRelations {
|
||||
var vehicle volvoVehicleRelation
|
||||
var vehicle volvo.VehicleRelation
|
||||
if req, err := v.request(rel); err == nil {
|
||||
if err = v.DoJSON(req, &vehicle); err != nil {
|
||||
return vehicles, err
|
||||
|
|
@ -169,9 +100,9 @@ func (v *Volvo) vehicles() ([]string, error) {
|
|||
}
|
||||
|
||||
func (v *Volvo) status() (interface{}, error) {
|
||||
var res volvoStatus
|
||||
var res volvo.Status
|
||||
|
||||
req, err := v.request(fmt.Sprintf("%s/vehicles/%s/status", volvoAPI, v.vin))
|
||||
req, err := v.request(fmt.Sprintf("%s/vehicles/%s/status", volvo.ApiURI, v.vin))
|
||||
if err == nil {
|
||||
err = v.DoJSON(req, &res)
|
||||
}
|
||||
|
|
@ -182,7 +113,7 @@ func (v *Volvo) status() (interface{}, error) {
|
|||
// SoC implements the api.Vehicle interface
|
||||
func (v *Volvo) SoC() (float64, error) {
|
||||
res, err := v.statusG()
|
||||
if res, ok := res.(volvoStatus); err == nil && ok {
|
||||
if res, ok := res.(volvo.Status); err == nil && ok {
|
||||
return float64(res.HvBattery.HvBatteryLevel), nil
|
||||
}
|
||||
|
||||
|
|
@ -194,7 +125,7 @@ var _ api.ChargeState = (*Volvo)(nil)
|
|||
// Status implements the api.ChargeState interface
|
||||
func (v *Volvo) Status() (api.ChargeStatus, error) {
|
||||
res, err := v.statusG()
|
||||
if res, ok := res.(volvoStatus); err == nil && ok {
|
||||
if res, ok := res.(volvo.Status); err == nil && ok {
|
||||
switch res.HvBattery.HvBatteryChargeStatusDerived {
|
||||
case "CableNotPluggedInCar":
|
||||
return api.StatusA, nil
|
||||
|
|
@ -213,7 +144,7 @@ var _ api.VehicleRange = (*Volvo)(nil)
|
|||
// VehicleRange implements the api.VehicleRange interface
|
||||
func (v *Volvo) Range() (int64, error) {
|
||||
res, err := v.statusG()
|
||||
if res, ok := res.(volvoStatus); err == nil && ok {
|
||||
if res, ok := res.(volvo.Status); err == nil && ok {
|
||||
return int64(res.HvBattery.DistanceToHVBatteryEmpty), nil
|
||||
}
|
||||
|
||||
|
|
@ -225,7 +156,7 @@ var _ api.VehicleOdometer = (*Volvo)(nil)
|
|||
// VehicleOdometer implements the api.VehicleOdometer interface
|
||||
func (v *Volvo) Odometer() (float64, error) {
|
||||
res, err := v.statusG()
|
||||
if res, ok := res.(volvoStatus); err == nil && ok {
|
||||
if res, ok := res.(volvo.Status); err == nil && ok {
|
||||
return float64(res.Odometer), nil
|
||||
}
|
||||
|
||||
|
|
@ -237,7 +168,7 @@ var _ api.VehicleFinishTimer = (*Volvo)(nil)
|
|||
// FinishTime implements the VehicleFinishTimer interface
|
||||
func (v *Volvo) FinishTime() (time.Time, error) {
|
||||
res, err := v.statusG()
|
||||
if res, ok := res.(volvoStatus); err == nil && ok {
|
||||
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 {
|
||||
|
|
|
|||
69
vehicle/volvo/types.go
Normal file
69
vehicle/volvo/types.go
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
package volvo
|
||||
|
||||
const ApiURI = "https://vocapi.wirelesscar.net/customerapi/rest/v3.0"
|
||||
|
||||
type AccountResponse struct {
|
||||
FirstName string `json:"firstName"`
|
||||
LastName string `json:"lastName"`
|
||||
VehicleRelations []string `json:"accountVehicleRelations"`
|
||||
}
|
||||
|
||||
type VehicleRelation struct {
|
||||
Account string `json:"account"`
|
||||
AccountID string `json:"accountId"`
|
||||
Vehicle string `json:"vehicle"`
|
||||
AccountVehicleRelation string `json:"accountVehicleRelation"`
|
||||
VehicleID string `json:"vehicleId"`
|
||||
Username string `json:"username"`
|
||||
Status string `json:"status"`
|
||||
CustomerVehicleRelationID int `json:"customerVehicleRelationId"`
|
||||
}
|
||||
|
||||
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"`
|
||||
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"`
|
||||
} `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"`
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue