From 7efe7c3436cd4dbf1ad6fb352dfe8312ceddcec7 Mon Sep 17 00:00:00 2001 From: andig Date: Tue, 29 Mar 2022 09:29:25 +0200 Subject: [PATCH] Porsche: fix mobile api status request --- vehicle/porsche/api_mobile.go | 70 ++++++++++++++++++++++++++++++++++- vehicle/porsche/provider.go | 2 +- 2 files changed, 69 insertions(+), 3 deletions(-) diff --git a/vehicle/porsche/api_mobile.go b/vehicle/porsche/api_mobile.go index ba03b93f8..195d6b866 100644 --- a/vehicle/porsche/api_mobile.go +++ b/vehicle/porsche/api_mobile.go @@ -2,6 +2,7 @@ package porsche import ( "fmt" + "strings" "github.com/evcc-io/evcc/util" "github.com/evcc-io/evcc/util/request" @@ -11,6 +12,65 @@ import ( const ( MobileApiURI = "https://api.ppa.porsche.com" + + // vehicle status elements + ACV_STATE = "ACV_STATE" + BATTERY_CHARGING_STATE = "BATTERY_CHARGING_STATE" + BATTERY_LEVEL = "BATTERY_LEVEL" + BATTERY_TYPE = "BATTERY_TYPE" + BLEID_DDADATA = "BLEID_DDADATA" + CAR_ALARMS_HISTORY = "CAR_ALARMS_HISTORY" + CHARGING_PROFILES = "CHARGING_PROFILES" + CLIMATIZER_STATE = "CLIMATIZER_STATE" + E_RANGE = "E_RANGE" + FUEL_LEVEL = "FUEL_LEVEL" + FUEL_RESERVE = "FUEL_RESERVE" + GLOBAL_PRIVACY_MODE = "GLOBAL_PRIVACY_MODE" + GPS_LOCATION = "GPS_LOCATION" + HEATING_STATE = "HEATING_STATE" + INTERMEDIATE_SERVICE_RANGE = "INTERMEDIATE_SERVICE_RANGE" + INTERMEDIATE_SERVICE_TIME = "INTERMEDIATE_SERVICE_TIME" + LOCATION_ALARMS = "LOCATION_ALARMS" + LOCATION_ALARMS_HISTORY = "LOCATION_ALARMS_HISTORY" + LOCK_STATE_VEHICLE = "LOCK_STATE_VEHICLE" + MAIN_SERVICE_RANGE = "MAIN_SERVICE_RANGE" + MAIN_SERVICE_TIME = "MAIN_SERVICE_TIME" + MILEAGE = "MILEAGE" + OIL_LEVEL_CURRENT = "OIL_LEVEL_CURRENT" + OIL_LEVEL_MAX = "OIL_LEVEL_MAX" + OIL_LEVEL_MIN_WARNING = "OIL_LEVEL_MIN_WARNING" + OIL_SERVICE_RANGE = "OIL_SERVICE_RANGE" + OIL_SERVICE_TIME = "OIL_SERVICE_TIME" + OPEN_STATE_CHARGE_FLAP_LEFT = "OPEN_STATE_CHARGE_FLAP_LEFT" + OPEN_STATE_CHARGE_FLAP_RIGHT = "OPEN_STATE_CHARGE_FLAP_RIGHT" + OPEN_STATE_DOOR_FRONT_LEFT = "OPEN_STATE_DOOR_FRONT_LEFT" + OPEN_STATE_DOOR_FRONT_RIGHT = "OPEN_STATE_DOOR_FRONT_RIGHT" + OPEN_STATE_DOOR_REAR_LEFT = "OPEN_STATE_DOOR_REAR_LEFT" + OPEN_STATE_DOOR_REAR_RIGHT = "OPEN_STATE_DOOR_REAR_RIGHT" + OPEN_STATE_LID_FRONT = "OPEN_STATE_LID_FRONT" + OPEN_STATE_LID_REAR = "OPEN_STATE_LID_REAR" + OPEN_STATE_SERVICE_FLAP = "OPEN_STATE_SERVICE_FLAP" + OPEN_STATE_SPOILER = "OPEN_STATE_SPOILER" + OPEN_STATE_SUNROOF = "OPEN_STATE_SUNROOF" + OPEN_STATE_TOP = "OPEN_STATE_TOP" + OPEN_STATE_WINDOW_FRONT_LEFT = "OPEN_STATE_WINDOW_FRONT_LEFT" + OPEN_STATE_WINDOW_FRONT_RIGHT = "OPEN_STATE_WINDOW_FRONT_RIGHT" + OPEN_STATE_WINDOW_REAR_LEFT = "OPEN_STATE_WINDOW_REAR_LEFT" + OPEN_STATE_WINDOW_REAR_RIGHT = "OPEN_STATE_WINDOW_REAR_RIGHT" + PARKING_LIGHT = "PARKING_LIGHT" + RANGE = "RANGE" + REMOTE_ACCESS_AUTHORIZATION = "REMOTE_ACCESS_AUTHORIZATION" + SERVICE_PREDICTIONS = "SERVICE_PREDICTIONS" + SPEED_ALARMS = "SPEED_ALARMS" + SPEED_ALARMS_HISTORY = "SPEED_ALARMS_HISTORY" + THEFT_MODE = "THEFT_MODE" + TIMERS = "TIMERS" + TRIP_STATISTICS_CYCLIC = "TRIP_STATISTICS_CYCLIC" + TRIP_STATISTICS_LONG_TERM = "TRIP_STATISTICS_LONG_TERM" + TRIP_STATISTICS_SHORT_TERM = "TRIP_STATISTICS_SHORT_TERM" + VALET_ALARM = "VALET_ALARM" + VALET_ALARM_HISTORY = "VALET_ALARM_HISTORY" + VTS_MODES = "VTS_MODES" ) // API is an api.Vehicle implementation for Porsche PHEV cars @@ -47,9 +107,15 @@ func (v *MobileAPI) Vehicles() ([]StatusResponseMobile, error) { } // Status implements the vehicle status response -func (v *MobileAPI) Status(vin string) (StatusResponseMobile, error) { +func (v *MobileAPI) Status(vin string, items []string) (StatusResponseMobile, error) { var res StatusResponseMobile - uri := fmt.Sprintf("%s/app/connect/v1/vehicles/%s?mf=*", MobileApiURI, vin) + + mf := make([]string, 0, len(items)) + for _, i := range items { + mf = append(mf, "mf="+i) + } + + uri := fmt.Sprintf("%s/app/connect/v1/vehicles/%s?%s", MobileApiURI, vin, strings.Join(mf, "&")) err := v.GetJSON(uri, &res) return res, err } diff --git a/vehicle/porsche/provider.go b/vehicle/porsche/provider.go index 6c6dcdf4c..d0edaddaa 100644 --- a/vehicle/porsche/provider.go +++ b/vehicle/porsche/provider.go @@ -31,7 +31,7 @@ func NewProvider(log *util.Logger, api *API, emobility *EmobilityAPI, mobile *Mo }, cache).InterfaceGetter(), mobileG: provider.NewCached(func() (interface{}, error) { - return mobile.Status(vin) + return mobile.Status(vin, []string{BATTERY_LEVEL, BATTERY_CHARGING_STATE, CLIMATIZER_STATE, E_RANGE, HEATING_STATE, MILEAGE}) }, cache).InterfaceGetter(), }