tesla_api 3.0.2 → 3.0.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.tool-versions +1 -1
- data/.travis.yml +2 -2
- data/docs/README.md +1 -1
- data/docs/api-basics/vehicles.md +5 -6
- data/docs/miscellaneous/endpoints.md +26 -4
- data/docs/vehicle/commands/climate.md +2 -0
- data/docs/vehicle/commands/homelink.md +1 -1
- data/docs/vehicle/commands/sharing.md +2 -2
- data/docs/vehicle/commands/valet.md +7 -5
- data/docs/vehicle/commands/wake.md +4 -1
- data/docs/vehicle/commands/windows.md +6 -2
- data/docs/vehicle/optioncodes.md +60 -27
- data/docs/vehicle/state/chargestate.md +17 -16
- data/docs/vehicle/state/climatestate.md +13 -19
- data/docs/vehicle/state/data.md +61 -54
- data/docs/vehicle/state/guisettings.md +1 -0
- data/docs/vehicle/state/nearbychargingsites.md +49 -74
- data/docs/vehicle/state/vehicleconfig.md +3 -3
- data/docs/vehicle/state/vehiclestate.md +43 -19
- data/lib/tesla_api.rb +4 -2
- data/lib/tesla_api/autopark.rb +23 -41
- data/lib/tesla_api/client.rb +13 -6
- data/lib/tesla_api/stream.rb +46 -40
- data/lib/tesla_api/vehicle.rb +5 -1
- data/lib/tesla_api/version.rb +1 -1
- data/spec/cassettes/client-login_timeout.yml +83 -0
- data/spec/cassettes/vehicle-vehicle_data.yml +115 -0
- data/spec/lib/tesla_api/client_spec.rb +30 -0
- data/spec/lib/tesla_api/vehicle_spec.rb +12 -0
- data/tesla_api.gemspec +3 -3
- metadata +14 -10
@@ -0,0 +1,115 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://owner-api.teslamotors.com/api/1/vehicles
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- github.com/timdorr/tesla-api v:3.0.6
|
12
|
+
Authorization:
|
13
|
+
- Bearer <TESLA_ACCESS_TOKEN>
|
14
|
+
Accept-Encoding:
|
15
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
16
|
+
Accept:
|
17
|
+
- '*/*'
|
18
|
+
response:
|
19
|
+
status:
|
20
|
+
code: 200
|
21
|
+
message: OK
|
22
|
+
headers:
|
23
|
+
Date:
|
24
|
+
- Tue, 10 Nov 2020 02:53:32 GMT
|
25
|
+
Content-Type:
|
26
|
+
- application/json; charset=utf-8
|
27
|
+
Transfer-Encoding:
|
28
|
+
- chunked
|
29
|
+
Connection:
|
30
|
+
- keep-alive
|
31
|
+
Vary:
|
32
|
+
- Accept-Encoding
|
33
|
+
X-Frame-Options:
|
34
|
+
- SAMEORIGIN
|
35
|
+
X-Xss-Protection:
|
36
|
+
- 1; mode=block
|
37
|
+
X-Content-Type-Options:
|
38
|
+
- nosniff
|
39
|
+
X-Txid:
|
40
|
+
- 8cab94e3aac7ad773c2e8347050cb4a5
|
41
|
+
Etag:
|
42
|
+
- W/"cfa5885744c037b595646a39aaae3d82"
|
43
|
+
Cache-Control:
|
44
|
+
- max-age=0, private, must-revalidate
|
45
|
+
X-Request-Id:
|
46
|
+
- fb945c7582221ba925e2f4a7628948b5fb945c7582221ba925e2f4a7628948b5
|
47
|
+
X-Runtime:
|
48
|
+
- '0.080884'
|
49
|
+
Strict-Transport-Security:
|
50
|
+
- max-age=15724800; includeSubDomains
|
51
|
+
body:
|
52
|
+
encoding: ASCII-8BIT
|
53
|
+
string:
|
54
|
+
'{"response":[{"id":26640707449551857,"vehicle_id":1817902171,"vin":"5YJSA1E51GF163743","display_name":"Nikola
|
55
|
+
2.0","option_codes":"AD15,MDL3,PBSB,RENA,BT37,ID3W,RF3G,S3PB,DRLH,DV2W,W39B,APF0,COUS,BC3B,CH07,PC30,FC3P,FG31,GLFR,HL31,HM31,IL31,LTPB,MR31,FM3B,RS3H,SA3P,STCP,SC04,SU3C,T3CA,TW00,TM00,UT3P,WR00,AU3P,APH3,AF00,ZCST,MI00,CDM0","color":null,"access_type":"OWNER","tokens":["no","nope"],"state":"online","in_service":false,"id_s":"26640707449551857","calendar_enabled":true,"api_version":10,"backseat_token":null,"backseat_token_updated_at":null,"vehicle_config":null}],"count":1}'
|
56
|
+
http_version:
|
57
|
+
recorded_at: Tue, 10 Nov 2020 02:53:32 GMT
|
58
|
+
- request:
|
59
|
+
method: get
|
60
|
+
uri: https://owner-api.teslamotors.com/api/1/vehicles/26640707449551857/data
|
61
|
+
body:
|
62
|
+
encoding: US-ASCII
|
63
|
+
string: ''
|
64
|
+
headers:
|
65
|
+
User-Agent:
|
66
|
+
- github.com/timdorr/tesla-api v:3.0.6
|
67
|
+
Authorization:
|
68
|
+
- Bearer <TESLA_ACCESS_TOKEN>
|
69
|
+
Accept-Encoding:
|
70
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
71
|
+
Accept:
|
72
|
+
- '*/*'
|
73
|
+
response:
|
74
|
+
status:
|
75
|
+
code: 200
|
76
|
+
message: OK
|
77
|
+
headers:
|
78
|
+
Date:
|
79
|
+
- Tue, 10 Nov 2020 02:53:38 GMT
|
80
|
+
Content-Type:
|
81
|
+
- application/json; charset=utf-8
|
82
|
+
Transfer-Encoding:
|
83
|
+
- chunked
|
84
|
+
Connection:
|
85
|
+
- keep-alive
|
86
|
+
Vary:
|
87
|
+
- Accept-Encoding
|
88
|
+
X-Frame-Options:
|
89
|
+
- SAMEORIGIN
|
90
|
+
X-Xss-Protection:
|
91
|
+
- 1; mode=block
|
92
|
+
X-Content-Type-Options:
|
93
|
+
- nosniff
|
94
|
+
X-Txid:
|
95
|
+
- 95b841542f321728c867e12aaf9bf6f5
|
96
|
+
Etag:
|
97
|
+
- W/"4696b909a01379b329bd3311b52b75c6"
|
98
|
+
Cache-Control:
|
99
|
+
- max-age=0, private, must-revalidate
|
100
|
+
X-Request-Id:
|
101
|
+
- 53f72c31caff4a2d436805fa1b47215453f72c31caff4a2d436805fa1b472154
|
102
|
+
X-Runtime:
|
103
|
+
- '5.578065'
|
104
|
+
Strict-Transport-Security:
|
105
|
+
- max-age=15724800; includeSubDomains
|
106
|
+
body:
|
107
|
+
encoding: ASCII-8BIT
|
108
|
+
string:
|
109
|
+
'{"response":{"id":26640707449551857,"user_id":1023,"vehicle_id":1817902171,"vin":"5YJSA1E41GF167745","display_name":"Nikola
|
110
|
+
2.0","option_codes":"AD15,MDL3,PBSB,RENA,BT37,ID3W,RF3G,S3PB,DRLH,DV2W,W39B,APF0,COUS,BC3B,CH07,PC30,FC3P,FG31,GLFR,HL31,HM31,IL31,LTPB,MR31,FM3B,RS3H,SA3P,STCP,SC04,SU3C,T3CA,TW00,TM00,UT3P,WR00,AU3P,APH3,AF00,ZCST,MI00,CDM0","color":null,"access_type":"OWNER","tokens":["9d33fab579bedf74","9eb517d37cab5bf8"],"state":"online","in_service":false,"id_s":"26640707449551857","calendar_enabled":true,"api_version":10,"backseat_token":null,"backseat_token_updated_at":null,"vehicle_config":{"can_accept_navigation_requests":true,"can_actuate_trunks":true,"car_special_type":"base","car_type":"models2","charge_port_type":"US","ece_restrictions":false,"eu_vehicle":false,"exterior_color":"White","has_air_suspension":true,"has_ludicrous_mode":false,"motorized_charge_port":true,"plg":true,"rear_seat_heaters":0,"rear_seat_type":0,"rhd":false,"roof_color":"None","seat_type":2,"spoiler_type":"None","sun_roof_installed":2,"third_row_seats":"None","timestamp":1604976818402,"trim_badging":"p90d","use_range_badging":false,"wheel_type":"AeroTurbine19"},"gui_settings":{"gui_24_hour_time":false,"gui_charge_rate_units":"mi/hr","gui_distance_units":"mi/hr","gui_range_display":"Rated","gui_temperature_units":"F","show_range_units":true,"timestamp":1604976818399},"drive_state":{"gps_as_of":1604976817,"heading":5,"latitude":3.972,"longitude":-4.9147,"native_latitude":3.982,"native_location_supported":1,"native_longitude":-4.947,"native_type":"wgs","power":0,"shift_state":null,"speed":null,"timestamp":1604976818416},"vehicle_state":{"api_version":10,"autopark_state_v2":"standby","autopark_style":"standard","calendar_supported":true,"car_version":"2020.36.16
|
111
|
+
3e9e4e8dd287","center_display_state":0,"df":0,"dr":0,"ft":0,"homelink_device_count":2,"homelink_nearby":true,"is_user_present":false,"last_autopark_error":"no_error","locked":false,"media_state":{"remote_control_enabled":true},"notifications_supported":true,"odometer":57509.856033,"parsed_calendar_supported":true,"pf":0,"pr":0,"remote_start":false,"remote_start_enabled":true,"remote_start_supported":true,"rt":0,"sentry_mode":false,"sentry_mode_available":true,"smart_summon_available":true,"software_update":{"download_perc":0,"expected_duration_sec":2700,"install_perc":1,"status":"","version":""},"speed_limit_mode":{"active":false,"current_limit_mph":50.0,"max_limit_mph":90,"min_limit_mph":50,"pin_code_set":true},"summon_standby_mode_enabled":false,"sun_roof_percent_open":0,"sun_roof_state":"closed","timestamp":1604976818414,"valet_mode":false,"valet_pin_needed":true,"vehicle_name":"Nikola
|
112
|
+
2.0"},"charge_state":{"battery_heater_on":false,"battery_level":90,"battery_range":224.81,"charge_current_request":40,"charge_current_request_max":40,"charge_enable_request":true,"charge_energy_added":29.41,"charge_limit_soc":90,"charge_limit_soc_max":100,"charge_limit_soc_min":50,"charge_limit_soc_std":90,"charge_miles_added_ideal":118.5,"charge_miles_added_rated":95.0,"charge_port_cold_weather_mode":null,"charge_port_door_open":true,"charge_port_latch":"Engaged","charge_rate":0.0,"charge_to_max_range":false,"charger_actual_current":0,"charger_phases":null,"charger_pilot_current":40,"charger_power":0,"charger_voltage":0,"charging_state":"Complete","conn_charge_cable":"SAE","est_battery_range":171.24,"fast_charger_brand":"<invalid>","fast_charger_present":false,"fast_charger_type":"<invalid>","ideal_battery_range":281.02,"managed_charging_active":false,"managed_charging_start_time":null,"managed_charging_user_canceled":false,"max_range_charge_counter":0,"minutes_to_full_charge":0,"not_enough_power_to_heat":false,"scheduled_charging_pending":false,"scheduled_charging_start_time":null,"time_to_full_charge":0.0,"timestamp":1604976818400,"trip_charging":false,"usable_battery_level":90,"user_charge_enable_request":null},"climate_state":{"battery_heater":false,"battery_heater_no_power":false,"climate_keeper_mode":"off","defrost_mode":0,"driver_temp_setting":22.8,"fan_status":0,"inside_temp":27.0,"is_auto_conditioning_on":false,"is_climate_on":false,"is_front_defroster_on":false,"is_preconditioning":false,"is_rear_defroster_on":false,"left_temp_direction":-223,"max_avail_temp":28.0,"min_avail_temp":15.0,"outside_temp":23.0,"passenger_temp_setting":22.8,"remote_heater_control_enabled":false,"right_temp_direction":-223,"seat_heater_left":0,"seat_heater_right":0,"side_mirror_heaters":false,"timestamp":1604976818413,"wiper_blade_heater":false}}}'
|
113
|
+
http_version:
|
114
|
+
recorded_at: Tue, 10 Nov 2020 02:53:38 GMT
|
115
|
+
recorded_with: VCR 4.0.0
|
@@ -73,4 +73,34 @@ RSpec.describe TeslaApi::Client do
|
|
73
73
|
expect(tesla_api.vehicles).to include(TeslaApi::Vehicle)
|
74
74
|
end
|
75
75
|
end
|
76
|
+
|
77
|
+
describe 'retry options', vcr: { cassette_name: 'client-login_timeout' } do
|
78
|
+
subject(:tesla_api) { TeslaApi::Client.new(
|
79
|
+
access_token: ENV['TESLA_ACCESS_TOKEN'],
|
80
|
+
retry_options: retry_options
|
81
|
+
) }
|
82
|
+
|
83
|
+
let(:retry_options) {{
|
84
|
+
max: 2,
|
85
|
+
methods: [:post],
|
86
|
+
retry_statuses: [408]
|
87
|
+
}}
|
88
|
+
|
89
|
+
context 'with retry' do
|
90
|
+
it 'obtains a Bearer token after retry' do
|
91
|
+
tesla_api.login!(ENV['TESLA_PASS'])
|
92
|
+
expect(tesla_api.access_token).to be
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
context 'without retry' do
|
97
|
+
let(:retry_options) { nil }
|
98
|
+
|
99
|
+
it 'raises an error' do
|
100
|
+
expect {
|
101
|
+
tesla_api.login!(ENV['TESLA_PASS'])
|
102
|
+
}.to raise_error(Faraday::ClientError)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
76
106
|
end
|
@@ -21,6 +21,18 @@ RSpec.describe TeslaApi::Vehicle do
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
+
describe '#vehicle_data', vcr: {cassette_name: 'vehicle-vehicle_data'} do
|
25
|
+
context 'data about the vehicle\'s overall state' do
|
26
|
+
subject { vehicle.data }
|
27
|
+
|
28
|
+
it { should include('display_name') }
|
29
|
+
it { should include('drive_state') }
|
30
|
+
it { should include('vehicle_state') }
|
31
|
+
it { should include('vehicle_config') }
|
32
|
+
it { should include('charge_state') }
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
24
36
|
describe '#data', vcr: {cassette_name: 'vehicle-data'} do
|
25
37
|
context 'data about the vehicle\'s overall state' do
|
26
38
|
subject { vehicle.data }
|
data/tesla_api.gemspec
CHANGED
@@ -14,14 +14,14 @@ Gem::Specification.new do |spec|
|
|
14
14
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
15
15
|
spec.require_paths = ['lib']
|
16
16
|
|
17
|
+
spec.add_dependency 'async-websocket'
|
17
18
|
spec.add_dependency 'faraday'
|
18
19
|
spec.add_dependency 'faraday_middleware'
|
19
|
-
spec.add_dependency 'faye-websocket'
|
20
20
|
|
21
21
|
spec.add_development_dependency 'bundler', '~> 2.0'
|
22
|
-
spec.add_development_dependency 'rake', '~>
|
22
|
+
spec.add_development_dependency 'rake', '~> 13.0'
|
23
23
|
spec.add_development_dependency 'rspec', '~> 3.1'
|
24
|
-
spec.add_development_dependency 'vcr', '~>
|
24
|
+
spec.add_development_dependency 'vcr', '~> 6.0'
|
25
25
|
spec.add_development_dependency 'webmock', '~> 3.0'
|
26
26
|
spec.add_development_dependency 'dotenv', '~> 2.0'
|
27
27
|
end
|
metadata
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tesla_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
4
|
+
version: 3.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim Dorr
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-11-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: async-websocket
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
@@ -25,7 +25,7 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: faraday
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
@@ -39,7 +39,7 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: faraday_middleware
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
@@ -72,14 +72,14 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
75
|
+
version: '13.0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
82
|
+
version: '13.0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: rspec
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -100,14 +100,14 @@ dependencies:
|
|
100
100
|
requirements:
|
101
101
|
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
103
|
+
version: '6.0'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
110
|
+
version: '6.0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: webmock
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -198,6 +198,7 @@ files:
|
|
198
198
|
- lib/tesla_api/vehicle.rb
|
199
199
|
- lib/tesla_api/version.rb
|
200
200
|
- spec/cassettes/client-login.yml
|
201
|
+
- spec/cassettes/client-login_timeout.yml
|
201
202
|
- spec/cassettes/client-refresh.yml
|
202
203
|
- spec/cassettes/client-vehicles.yml
|
203
204
|
- spec/cassettes/vehicle-activate_speed_limit.yml
|
@@ -252,6 +253,7 @@ files:
|
|
252
253
|
- spec/cassettes/vehicle-sun_roof_control-close.yml
|
253
254
|
- spec/cassettes/vehicle-sun_roof_control-vent.yml
|
254
255
|
- spec/cassettes/vehicle-vehicle_config.yml
|
256
|
+
- spec/cassettes/vehicle-vehicle_data.yml
|
255
257
|
- spec/cassettes/vehicle-vehicle_state.yml
|
256
258
|
- spec/cassettes/vehicle-wake_up.yml
|
257
259
|
- spec/cassettes/vehicle.yml
|
@@ -278,12 +280,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
278
280
|
- !ruby/object:Gem::Version
|
279
281
|
version: '0'
|
280
282
|
requirements: []
|
281
|
-
rubygems_version: 3.
|
283
|
+
rubygems_version: 3.1.4
|
282
284
|
signing_key:
|
283
285
|
specification_version: 4
|
284
286
|
summary: A wrapper for the Tesla JSON API
|
285
287
|
test_files:
|
286
288
|
- spec/cassettes/client-login.yml
|
289
|
+
- spec/cassettes/client-login_timeout.yml
|
287
290
|
- spec/cassettes/client-refresh.yml
|
288
291
|
- spec/cassettes/client-vehicles.yml
|
289
292
|
- spec/cassettes/vehicle-activate_speed_limit.yml
|
@@ -338,6 +341,7 @@ test_files:
|
|
338
341
|
- spec/cassettes/vehicle-sun_roof_control-close.yml
|
339
342
|
- spec/cassettes/vehicle-sun_roof_control-vent.yml
|
340
343
|
- spec/cassettes/vehicle-vehicle_config.yml
|
344
|
+
- spec/cassettes/vehicle-vehicle_data.yml
|
341
345
|
- spec/cassettes/vehicle-vehicle_state.yml
|
342
346
|
- spec/cassettes/vehicle-wake_up.yml
|
343
347
|
- spec/cassettes/vehicle.yml
|