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.
@@ -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 }
@@ -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', '~> 12.0'
22
+ spec.add_development_dependency 'rake', '~> 13.0'
23
23
  spec.add_development_dependency 'rspec', '~> 3.1'
24
- spec.add_development_dependency 'vcr', '~> 4.0'
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.2
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: 2019-10-04 00:00:00.000000000 Z
11
+ date: 2020-11-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: faraday
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: faraday_middleware
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: faye-websocket
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: '12.0'
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: '12.0'
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: '4.0'
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: '4.0'
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.0.6
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