Skip to content

rickbassham/tesla

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

tesla

-- import "."

Package tesla is a client for interacting with the Tesla Owner's API. Unofficial documentation can be found at https://tesla-api.timdorr.com. This package implements all of the documented endpoints, as well as websocket streaming for live data while driving.

Usage

const (
	// DefaultBaseURL is the URL for the Tesla owner's API.
	DefaultBaseURL = "https://owner-api.teslamotors.com"
)
var (
	// TrunkFront is the front trunk, or frunk.
	TrunkFront = Trunk("front")
	// TrunkRear is the rear trunk.
	TrunkRear = Trunk("rear")
)
var (
	// WindowCommandVent will move the windows down.
	WindowCommandVent = WindowCommand("vent")
	// WindowCommandClose will close the windows.
	WindowCommandClose = WindowCommand("close")
)
var (
	// SunroofCommandVent will open the sunroof.
	SunroofCommandVent = SunroofCommand("vent")
	// SunroofCommandClose will close the sunroof.
	SunroofCommandClose = SunroofCommand("close")
)
var (
	// SeatFrontDriver is the driver's seat.
	SeatFrontDriver = Seat(0)
	// SeatFrontPassenger is the front passenger seat.
	SeatFrontPassenger = Seat(1)
	// SeatRearDriver is the rear seat on the driver's side.
	SeatRearDriver = Seat(2)
	// SeatRearCenter is the rear seat in the center.
	SeatRearCenter = Seat(3)
	// SeatRearPassenger is the rear seat on the passenger's side.
	SeatRearPassenger = Seat(4)
)
var (
	// SeatHeatLevelZero turns off the heated seat.
	SeatHeatLevelZero = SeatHeatLevel(0)
	// SeatHeatLevelOne is the lowest heat setting.
	SeatHeatLevelOne = SeatHeatLevel(1)
	// SeatHeatLevelTwo is the middle heat setting.
	SeatHeatLevelTwo = SeatHeatLevel(2)
	// SeatHeatLevelThree is the highest heat setting.
	SeatHeatLevelThree = SeatHeatLevel(3)
)
var (
	// ErrMissingRefreshToken is returned when an API call is made without the required refresh token.
	ErrMissingRefreshToken = errors.New("missing refresh token")
	// ErrMissingAccessToken is returned when an API call is made without the required access token.
	ErrMissingAccessToken = errors.New("missing access token, authenticate first")
	// ErrCommandError is returned with executing a command against the vehicle and the Tesla API returns an error message.
	ErrCommandError = errors.New("error executing command")
)

type ChargeState

type ChargeState struct {
	BatteryHeaterOn             bool        `json:"battery_heater_on"`
	BatteryLevel                int         `json:"battery_level"`
	BatteryRange                float64     `json:"battery_range"`
	ChargeCurrentRequest        int         `json:"charge_current_request"`
	ChargeCurrentRequestMax     int         `json:"charge_current_request_max"`
	ChargeEnableRequest         bool        `json:"charge_enable_request"`
	ChargeEnergyAdded           float64     `json:"charge_energy_added"`
	ChargeLimitSoc              int         `json:"charge_limit_soc"`
	ChargeLimitSocMax           int         `json:"charge_limit_soc_max"`
	ChargeLimitSocMin           int         `json:"charge_limit_soc_min"`
	ChargeLimitSocStd           int         `json:"charge_limit_soc_std"`
	ChargeMilesAddedIdeal       float64     `json:"charge_miles_added_ideal"`
	ChargeMilesAddedRated       float64     `json:"charge_miles_added_rated"`
	ChargePortColdWeatherMode   bool        `json:"charge_port_cold_weather_mode"`
	ChargePortDoorOpen          bool        `json:"charge_port_door_open"`
	ChargePortLatch             string      `json:"charge_port_latch"`
	ChargeRate                  float64     `json:"charge_rate"`
	ChargeToMaxRange            bool        `json:"charge_to_max_range"`
	ChargerActualCurrent        int         `json:"charger_actual_current"`
	ChargerPhases               interface{} `json:"charger_phases"`
	ChargerPilotCurrent         int         `json:"charger_pilot_current"`
	ChargerPower                int         `json:"charger_power"`
	ChargerVoltage              int         `json:"charger_voltage"`
	ChargingState               string      `json:"charging_state"`
	ConnChargeCable             string      `json:"conn_charge_cable"`
	EstBatteryRange             float64     `json:"est_battery_range"`
	FastChargerBrand            string      `json:"fast_charger_brand"`
	FastChargerPresent          bool        `json:"fast_charger_present"`
	FastChargerType             string      `json:"fast_charger_type"`
	IdealBatteryRange           float64     `json:"ideal_battery_range"`
	ManagedChargingActive       bool        `json:"managed_charging_active"`
	ManagedChargingStartTime    *int        `json:"managed_charging_start_time"`
	ManagedChargingUserCanceled bool        `json:"managed_charging_user_canceled"`
	MaxRangeChargeCounter       int         `json:"max_range_charge_counter"`
	MinutesToFullCharge         int         `json:"minutes_to_full_charge"`
	NotEnoughPowerToHeat        bool        `json:"not_enough_power_to_heat"`
	ScheduledChargingPending    bool        `json:"scheduled_charging_pending"`
	ScheduledChargingStartTime  *int        `json:"scheduled_charging_start_time"`
	ScheduledDepartureTime      *int        `json:"scheduled_departure_time"`
	TimeToFullCharge            float64     `json:"time_to_full_charge"`
	Timestamp                   int64       `json:"timestamp"`
	TripCharging                bool        `json:"trip_charging"`
	UsableBatteryLevel          int         `json:"usable_battery_level"`
	UserChargeEnableRequest     interface{} `json:"user_charge_enable_request"`
}

ChargeState is the current state of charging for the vehicle.

type ChargingSites

type ChargingSites struct {
	CongestionSyncTimeUtcSecs int `json:"congestion_sync_time_utc_secs"`
	DestinationCharging       []struct {
		Location struct {
			Lat  float64 `json:"lat"`
			Long float64 `json:"long"`
		} `json:"location"`
		Name          string  `json:"name"`
		Type          string  `json:"type"`
		DistanceMiles float64 `json:"distance_miles"`
	} `json:"destination_charging"`
	Superchargers []struct {
		Location struct {
			Lat  float64 `json:"lat"`
			Long float64 `json:"long"`
		} `json:"location"`
		Name            string  `json:"name"`
		Type            string  `json:"type"`
		DistanceMiles   float64 `json:"distance_miles"`
		AvailableStalls int     `json:"available_stalls"`
		TotalStalls     int     `json:"total_stalls"`
		SiteClosed      bool    `json:"site_closed"`
	} `json:"superchargers"`
	Timestamp int64 `json:"timestamp"`
}

ChargingSites represents nearby Tesla-operated charging stations.

type ClimateState

type ClimateState struct {
	BatteryHeater              bool    `json:"battery_heater"`
	BatteryHeaterNoPower       bool    `json:"battery_heater_no_power"`
	ClimateKeeperMode          string  `json:"climate_keeper_mode"`
	DefrostMode                int     `json:"defrost_mode"`
	DriverTempSetting          float64 `json:"driver_temp_setting"`
	FanStatus                  int     `json:"fan_status"`
	InsideTemp                 float64 `json:"inside_temp"`
	IsAutoConditioningOn       bool    `json:"is_auto_conditioning_on"`
	IsClimateOn                bool    `json:"is_climate_on"`
	IsFrontDefrosterOn         bool    `json:"is_front_defroster_on"`
	IsPreconditioning          bool    `json:"is_preconditioning"`
	IsRearDefrosterOn          bool    `json:"is_rear_defroster_on"`
	LeftTempDirection          int     `json:"left_temp_direction"`
	MaxAvailTemp               float64 `json:"max_avail_temp"`
	MinAvailTemp               float64 `json:"min_avail_temp"`
	OutsideTemp                float64 `json:"outside_temp"`
	PassengerTempSetting       float64 `json:"passenger_temp_setting"`
	RemoteHeaterControlEnabled bool    `json:"remote_heater_control_enabled"`
	RightTempDirection         int     `json:"right_temp_direction"`
	SeatHeaterLeft             int     `json:"seat_heater_left"`
	SeatHeaterRearCenter       int     `json:"seat_heater_rear_center"`
	SeatHeaterRearLeft         int     `json:"seat_heater_rear_left"`
	SeatHeaterRearLeftBack     int     `json:"seat_heater_rear_left_back"`
	SeatHeaterRearRight        int     `json:"seat_heater_rear_right"`
	SeatHeaterRearRightBack    int     `json:"seat_heater_rear_right_back"`
	SeatHeaterRight            int     `json:"seat_heater_right"`
	SideMirrorHeaters          bool    `json:"side_mirror_heaters"`
	SteeringWheelHeater        bool    `json:"steering_wheel_heater"`
	Timestamp                  int64   `json:"timestamp"`
	WiperBladeHeater           bool    `json:"wiper_blade_heater"`
}

ClimateState represents the current state of climate control for the vehicle.

type Conn

type Conn struct {
}

Conn represents a connection to the Tesla owner's API.

func NewConn

func NewConn(rt http.RoundTripper, baseURL, clientID, clientSecret string) *Conn

NewConn creates a new connection.

func (*Conn) ActuateSunroof

func (c *Conn) ActuateSunroof(id int, cmd SunroofCommand) error

ActuateSunroof controls the panoramic sunroof on the Model S.

func (*Conn) ActuateWindows

func (c *Conn) ActuateWindows(id int, cmd WindowCommand, latitude, longitude float64) error

ActuateWindows controls the windows. Will vent or close all windows simultaneously.

Location must be near the current location of the car for close operation to succeed. For vent, the lat and lon values are ignored, and may both be 0 (which has been observed from the app itself).

func (*Conn) Authenticate

func (c *Conn) Authenticate(email, password string) error

Authenticate starts the initial authentication process via an OAuth 2.0 Password Grant with the same credentials used for tesla.com and the mobile apps.

The current client ID and secret are available at https://pastebin.com/pS7Z6yyP.

We will get back an access_token which is treated as an OAuth 2.0 Bearer Token. This token is passed along in an Authorization header with all future requests:

func (*Conn) AutoConditioningStart

func (c *Conn) AutoConditioningStart(id int) error

AutoConditioningStart will start the climate control (HVAC) system. Will cool or heat automatically, depending on set temperature.

func (*Conn) AutoConditioningStop

func (c *Conn) AutoConditioningStop(id int) error

AutoConditioningStop will stop the climate control (HVAC) system.

func (*Conn) CancelSoftwareUpdate

func (c *Conn) CancelSoftwareUpdate(id int) error

CancelSoftwareUpdate cancels a software update, if one is scheduled and has not yet started.

func (*Conn) CloseChargePortDoor

func (c *Conn) CloseChargePortDoor(id int) error

CloseChargePortDoor closes the charge port for vehicles with a motorized charge port door.

func (*Conn) FlashLights

func (c *Conn) FlashLights(id int) error

FlashLights flashes the headlights once.

func (*Conn) GetChargeState

func (c *Conn) GetChargeState(id int) (*ChargeState, error)

GetChargeState gets information on the state of charge in the battery and its various settings.

func (*Conn) GetClimateState

func (c *Conn) GetClimateState(id int) (*ClimateState, error)

GetClimateState retrieves information on the current internal temperature and climate control system.

func (*Conn) GetDriveState

func (c *Conn) GetDriveState(id int) (*DriveState, error)

GetDriveState retrieves the driving and position state of the vehicle.

func (*Conn) GetGUISettings

func (c *Conn) GetGUISettings(id int) (*GUISettings, error)

GetGUISettings retrieves the current GUI settings for the vehicle.

func (*Conn) GetMobileEnabled

func (c *Conn) GetMobileEnabled(id int) (bool, error)

GetMobileEnabled returns whether or not the Mobile Access setting is enabled in the vehicle.

func (*Conn) GetNearbyChargingSites

func (c *Conn) GetNearbyChargingSites(id int) (*ChargingSites, error)

GetNearbyChargingSites returns a list of nearby Tesla-operated charging stations. (Requires car software version 2018.48 or higher.)

func (*Conn) GetVehicle

func (c *Conn) GetVehicle(id int) (*Vehicle, error)

GetVehicle returns a vehicle by id.

func (*Conn) GetVehicleConfig

func (c *Conn) GetVehicleConfig(id int) (*VehicleConfig, error)

GetVehicleConfig retrieves the vehicles config.

func (*Conn) GetVehicleState

func (c *Conn) GetVehicleState(id int) (*VehicleState, error)

GetVehicleState retrieves the given vehicles current state.

func (*Conn) GetVehicles

func (c *Conn) GetVehicles() ([]Vehicle, error)

GetVehicles retrieves a list of vehicles for the currently authenticated account.

func (*Conn) HonkHorn

func (c *Conn) HonkHorn(id int) error

HonkHorn honks the horn twice.

func (*Conn) LockDoors

func (c *Conn) LockDoors(id int) error

LockDoors locks the doors to the car. Retracts the handles on the S and X, if they are extended.

func (*Conn) MediaNextFavorite

func (c *Conn) MediaNextFavorite(id int) error

MediaNextFavorite skips to the next saved favorite in the media system.

func (*Conn) MediaNextTrack

func (c *Conn) MediaNextTrack(id int) error

MediaNextTrack skips to the next track in the current playlist.

func (*Conn) MediaPreviousFavorite

func (c *Conn) MediaPreviousFavorite(id int) error

MediaPreviousFavorite skips to the previous saved favorite in the media system.

func (*Conn) MediaPreviousTrack

func (c *Conn) MediaPreviousTrack(id int) error

MediaPreviousTrack skips to the previous track in the current playlist. Does nothing for streaming from Stitcher.

func (*Conn) MediaTogglePlayback

func (c *Conn) MediaTogglePlayback(id int) error

MediaTogglePlayback toggles the media between playing and paused. For the radio, this mutes or unmutes the audio.

func (*Conn) MediaVolumeDown

func (c *Conn) MediaVolumeDown(id int) error

MediaVolumeDown turns down the volume of the media system.

func (*Conn) MediaVolumeUp

func (c *Conn) MediaVolumeUp(id int) error

MediaVolumeUp turns up the volume of the media system.

func (*Conn) OpenChargePortDoor

func (c *Conn) OpenChargePortDoor(id int) error

OpenChargePortDoor opens the charge port.

func (*Conn) OpenTrunk

func (c *Conn) OpenTrunk(id int, trunk Trunk) error

OpenTrunk opens either the front or rear trunk. On the Model S and X, it will also close the rear trunk.

func (*Conn) RemoteStart

func (c *Conn) RemoteStart(id int, password string) error

RemoteStart enables keyless driving. There is a two minute window after issuing the command to start driving the car. The password provided is the password for the authenticated tesla.com account.

func (*Conn) ResetValetPin

func (c *Conn) ResetValetPin(id int) error

ResetValetPin clears the currently set PIN for Valet Mode when deactivated. A new PIN will be required when activating again.

func (*Conn) ScheduleSoftwareUpdate

func (c *Conn) ScheduleSoftwareUpdate(id int, offset time.Duration) error

ScheduleSoftwareUpdate schedules a software update to be installed, if one is available.

The offset given is how long to delay installing the update.

func (*Conn) SetAccessToken

func (c *Conn) SetAccessToken(accessToken string)

SetAccessToken allows you to override the access token received from Authenticate.

func (*Conn) SetChargeLimit

func (c *Conn) SetChargeLimit(id int, percent int) error

SetChargeLimit sets the charge limit to the given value.

func (*Conn) SetChargeLimitMaxRange

func (c *Conn) SetChargeLimitMaxRange(id int) error

SetChargeLimitMaxRange sets the charge limit to "max range" or 100%.

func (*Conn) SetChargeLimitStandard

func (c *Conn) SetChargeLimitStandard(id int) error

SetChargeLimitStandard sets the charge limit to "standard" or ~90%.

func (*Conn) SetDebugMode

func (c *Conn) SetDebugMode(debug bool)

SetDebugMode turns debug mode on or off. If on, all requests and responses are dumped in their raw state to stdout.

func (*Conn) SetHeatedSteeringWheel

func (c *Conn) SetHeatedSteeringWheel(id int, on bool) error

SetHeatedSteeringWheel turns steering wheel heater on or off.

func (*Conn) SetPreconditioningMax

func (c *Conn) SetPreconditioningMax(id int, on bool) error

SetPreconditioningMax toggles the climate controls between Max Defrost and the previous setting.

func (*Conn) SetRefreshToken

func (c *Conn) SetRefreshToken(refreshToken string)

SetRefreshToken allows you to override the refresh token received from Authenticate.

func (*Conn) SetSeatHeater

func (c *Conn) SetSeatHeater(id int, seat Seat, heatLevel SeatHeatLevel) error

SetSeatHeater sets the specified seat's heater level.

func (*Conn) SetSentryMode

func (c *Conn) SetSentryMode(id int, on bool) error

SetSentryMode turns sentry mode on or off.

func (*Conn) SetTemperatures

func (c *Conn) SetTemperatures(id int, driver, passenger float64) error

SetTemperatures sets the target temperature for the climate control (HVAC) system.

Note: The parameters are always in Celsius, regardless of the region the car is in or the display settings of the car.

func (*Conn) SetValetMode

func (c *Conn) SetValetMode(id int, on bool, pin string) error

SetValetMode activates or deactivates Valet Mode.

Valet Mode limits the car's top speed to 70MPH and 80kW of acceleration power. It also disables Homelink, Bluetooth and Wifi settings, and the ability to disable mobile access to the car. It also hides your favorites, home, and work locations in navigation.

func (*Conn) Share

func (c *Conn) Share(id int, tag language.Tag, text string) error

Share sends a location for the car to start navigation or play a video in theatre mode.

func (*Conn) SpeedLimitActivate

func (c *Conn) SpeedLimitActivate(id int, pin string) error

SpeedLimitActivate activates Speed Limit Mode at the currently set speed.

func (*Conn) SpeedLimitClearPin

func (c *Conn) SpeedLimitClearPin(id int, pin string) error

SpeedLimitClearPin clears the currently set PIN for Speed Limit Mode.

func (*Conn) SpeedLimitDeactivate

func (c *Conn) SpeedLimitDeactivate(id int, pin string) error

SpeedLimitDeactivate deactivates Speed Limit Mode if it is currently active.

func (*Conn) SpeedLimitSetLimit

func (c *Conn) SpeedLimitSetLimit(id int, limitMPH int) error

SpeedLimitSetLimit sets the maximum speed allowed when Speed Limit Mode is active.

func (*Conn) StartCharging

func (c *Conn) StartCharging(id int) error

StartCharging will start the vehicle charging if the vehicle is plugged in but not currently charging.

func (*Conn) StopCharging

func (c *Conn) StopCharging(id int) error

StopCharging will stop the vehicle charging if the vehicle is currently charging.

func (*Conn) Stream

func (c *Conn) Stream(id int, token string) (*Stream, error)

Stream will initiate a stream of data from the car, with updates going to the returned channel. New messages are received approximately every 250ms, but that is not reliable. If the API closes the stream, the returned channel will be closed as well.

func (*Conn) TriggerHomelink

func (c *Conn) TriggerHomelink(id int, latitude, longitude float64) error

TriggerHomelink opens or closes the primary Homelink device. The provided location must be in proximity of stored location of the Homelink device.

func (*Conn) UnlockDoors

func (c *Conn) UnlockDoors(id int) error

UnlockDoors unlocks the doors to the car. Extends the handles on the S and X.

func (*Conn) UpdateRefreshToken

func (c *Conn) UpdateRefreshToken() error

UpdateRefreshToken will do an OAuth 2.0 Refresh Token Grant and obtain a new access token. Note: This will invalidate the previous access token.

func (*Conn) WakeUp

func (c *Conn) WakeUp(id int) (*Vehicle, error)

WakeUp will wake up the vehicle to make it available to receive other commands.

type DriveState

type DriveState struct {
	GpsAsOf                 int         `json:"gps_as_of"`
	Heading                 int         `json:"heading"`
	Latitude                float64     `json:"latitude"`
	Longitude               float64     `json:"longitude"`
	NativeLatitude          float64     `json:"native_latitude"`
	NativeLocationSupported int         `json:"native_location_supported"`
	NativeLongitude         float64     `json:"native_longitude"`
	NativeType              string      `json:"native_type"`
	Power                   int         `json:"power"`
	ShiftState              interface{} `json:"shift_state"`
	Speed                   interface{} `json:"speed"`
	Timestamp               int64       `json:"timestamp"`
}

DriveState is the current state of driving for the vehicle.

type GUISettings

type GUISettings struct {
	GUI24HourTime       bool   `json:"gui_24_hour_time"`
	GUIChargeRateUnits  string `json:"gui_charge_rate_units"`
	GUIDistanceUnits    string `json:"gui_distance_units"`
	GUIRangeDisplay     string `json:"gui_range_display"`
	GUITemperatureUnits string `json:"gui_temperature_units"`
	ShowRangeUnits      bool   `json:"show_range_units"`
	Timestamp           int64  `json:"timestamp"`
}

GUISettings represents the configured settings in the vehicle GUI.

type HTTPStatusError

type HTTPStatusError struct {
}

HTTPStatusError is returned if the response code received from the API is non-200.

func (HTTPStatusError) Error

func (err HTTPStatusError) Error() string

type Seat

type Seat int

Seat represents a seat in the vehicle.

type SeatHeatLevel

type SeatHeatLevel int

SeatHeatLevel represents a heat level for a seat. 0 is off, 3 is max.

type Stream

type Stream struct {
}

func (*Stream) Close

func (s *Stream) Close()

func (*Stream) Data

func (s *Stream) Data() <-chan StreamingMessage

func (*Stream) Err

func (s *Stream) Err() error

type StreamingMessage

type StreamingMessage struct {
	Timestamp    time.Time
	Speed        int
	Odometer     float64
	SOC          int
	Elevation    int
	EstHeading   int
	EstLatitude  float64
	EstLongitude float64
	Power        int
	ShiftState   int
	Range        int
	EstRange     int
	Heading      int
}

StreamingMessage represents the current state of the car.

type SunroofCommand

type SunroofCommand string

SunroofCommand is used to identify which direction the sunroof should move.

type Trunk

type Trunk string

Trunk is used to identify which trunk you are using.

type Vehicle

type Vehicle struct {
	ID                     int      `json:"id"`
	VehicleID              int      `json:"vehicle_id"`
	VIN                    string   `json:"vin"`
	DisplayName            string   `json:"display_name"`
	OptionCodes            string   `json:"option_codes"`
	Color                  *string  `json:"color"`
	Tokens                 []string `json:"tokens"`
	State                  string   `json:"state"`
	InService              bool     `json:"in_service"`
	CalendarEnabled        bool     `json:"calendar_enabled"`
	APIVersion             int      `json:"api_version"`
	BackseatToken          *string  `json:"backseat_token"`
	BackseatTokenUpdatedAt *int     `json:"backseat_token_updated_at"`
}

Vehicle represents the basic data about the vehicle.

type VehicleConfig

type VehicleConfig struct {
	CanAcceptNavigationRequests bool   `json:"can_accept_navigation_requests"`
	CanActuateTrunks            bool   `json:"can_actuate_trunks"`
	CarSpecialType              string `json:"car_special_type"`
	CarType                     string `json:"car_type"`
	ChargePortType              string `json:"charge_port_type"`
	EuVehicle                   bool   `json:"eu_vehicle"`
	ExteriorColor               string `json:"exterior_color"`
	HasAirSuspension            bool   `json:"has_air_suspension"`
	HasLudicrousMode            bool   `json:"has_ludicrous_mode"`
	KeyVersion                  int    `json:"key_version"`
	MotorizedChargePort         bool   `json:"motorized_charge_port"`
	PerfConfig                  string `json:"perf_config"`
	Plg                         bool   `json:"plg"`
	RearSeatHeaters             int    `json:"rear_seat_heaters"`
	RearSeatType                int    `json:"rear_seat_type"`
	Rhd                         bool   `json:"rhd"`
	RoofColor                   string `json:"roof_color"`
	SeatType                    int    `json:"seat_type"`
	SpoilerType                 string `json:"spoiler_type"`
	SunRoofInstalled            int    `json:"sun_roof_installed"`
	ThirdRowSeats               string `json:"third_row_seats"`
	Timestamp                   int64  `json:"timestamp"`
	TrimBadging                 string `json:"trim_badging"`
	WheelType                   string `json:"wheel_type"`
}

VehicleConfig represents the current capabilities of the vehicle.

type VehicleState

type VehicleState struct {
	APIVersion          int    `json:"api_version"`
	AutoparkStateV3     string `json:"autopark_state_v3"`
	AutoparkStyle       string `json:"autopark_style"`
	CalendarSupported   bool   `json:"calendar_supported"`
	CarVersion          string `json:"car_version"`
	CenterDisplayState  int    `json:"center_display_state"`
	Df                  int    `json:"df"`
	Dr                  int    `json:"dr"`
	FdWindow            int    `json:"fd_window"`
	FpWindow            int    `json:"fp_window"`
	Ft                  int    `json:"ft"`
	HomelinkDeviceCount int    `json:"homelink_device_count"`
	HomelinkNearby      bool   `json:"homelink_nearby"`
	IsUserPresent       bool   `json:"is_user_present"`
	LastAutoparkError   string `json:"last_autopark_error"`
	Locked              bool   `json:"locked"`
	MediaState          struct {
		RemoteControlEnabled bool `json:"remote_control_enabled"`
	} `json:"media_state"`
	NotificationsSupported  bool    `json:"notifications_supported"`
	Odometer                float64 `json:"odometer"`
	ParsedCalendarSupported bool    `json:"parsed_calendar_supported"`
	Pf                      int     `json:"pf"`
	Pr                      int     `json:"pr"`
	RdWindow                int     `json:"rd_window"`
	RemoteStart             bool    `json:"remote_start"`
	RemoteStartEnabled      bool    `json:"remote_start_enabled"`
	RemoteStartSupported    bool    `json:"remote_start_supported"`
	RpWindow                int     `json:"rp_window"`
	Rt                      int     `json:"rt"`
	SentryMode              bool    `json:"sentry_mode"`
	SentryModeAvailable     bool    `json:"sentry_mode_available"`
	SmartSummonAvailable    bool    `json:"smart_summon_available"`
	SoftwareUpdate          struct {
		DownloadPerc        int    `json:"download_perc"`
		ExpectedDurationSec int    `json:"expected_duration_sec"`
		InstallPerc         int    `json:"install_perc"`
		ScheduledTimeMs     int64  `json:"scheduled_time_ms"`
		Status              string `json:"status"`
		Version             string `json:"version"`
	} `json:"software_update"`
	SpeedLimitMode struct {
		Active          bool    `json:"active"`
		CurrentLimitMph float64 `json:"current_limit_mph"`
		MaxLimitMph     int     `json:"max_limit_mph"`
		MinLimitMph     int     `json:"min_limit_mph"`
		PinCodeSet      bool    `json:"pin_code_set"`
	} `json:"speed_limit_mode"`
	SummonStandbyModeEnabled bool   `json:"summon_standby_mode_enabled"`
	SunRoofPercentOpen       int    `json:"sun_roof_percent_open"`
	SunRoofState             string `json:"sun_roof_state"`
	Timestamp                int64  `json:"timestamp"`
	ValetMode                bool   `json:"valet_mode"`
	ValetPinNeeded           bool   `json:"valet_pin_needed"`
	VehicleName              string `json:"vehicle_name"`
}

VehicleState represents the current vehicle state.

type WindowCommand

type WindowCommand string

WindowCommand is used to identify which direction the window should move.