From b52a75023734e7d45fbb93a611de5d618ba96d2c Mon Sep 17 00:00:00 2001 From: andig Date: Thu, 11 Nov 2021 20:31:01 +0100 Subject: [PATCH] Volvo: split packages --- vehicle/volvo.go | 93 ++++++------------------------------------ vehicle/volvo/types.go | 69 +++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+), 81 deletions(-) create mode 100644 vehicle/volvo/types.go diff --git a/vehicle/volvo.go b/vehicle/volvo.go index 336d7d87d..1b6070985 100644 --- a/vehicle/volvo.go +++ b/vehicle/volvo.go @@ -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 { diff --git a/vehicle/volvo/types.go b/vehicle/volvo/types.go new file mode 100644 index 000000000..28813c4c6 --- /dev/null +++ b/vehicle/volvo/types.go @@ -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"` +}