rivian-python-client 1.1.1__tar.gz → 1.1.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: rivian-python-client
3
- Version: 1.1.1
3
+ Version: 1.1.3
4
4
  Summary: Rivian API Client (Unofficial)
5
5
  License: MIT
6
6
  Author: Brian Retterer
@@ -15,8 +15,8 @@ Classifier: Programming Language :: Python :: 3.12
15
15
  Provides-Extra: ble
16
16
  Requires-Dist: aiohttp (>=3.0.0)
17
17
  Requires-Dist: backports-strenum (>=1.2.4,<2.0.0) ; python_version < "3.11"
18
- Requires-Dist: bleak (>=0.21,<0.22) ; extra == "ble"
19
- Requires-Dist: cryptography (>=41.0.1,<42.0.0)
18
+ Requires-Dist: bleak (>=0.21,<1.0.0) ; extra == "ble"
19
+ Requires-Dist: cryptography (>=41.0.1,<43.0)
20
20
  Requires-Dist: dbus-fast (>=2.11.0,<3.0.0) ; (sys_platform == "linux") and (extra == "ble")
21
21
  Description-Content-Type: text/markdown
22
22
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "rivian-python-client"
3
- version = "1.1.1"
3
+ version = "1.1.3"
4
4
  description = "Rivian API Client (Unofficial)"
5
5
  readme = "README.md"
6
6
  authors = ["Brian Retterer <bretterer@gmail.com>"]
@@ -10,19 +10,19 @@ packages = [
10
10
  ]
11
11
 
12
12
  [tool.poetry.dependencies]
13
- python = ">=3.9, <3.13"
13
+ python = ">=3.9,<3.13"
14
14
  aiohttp = ">=3.0.0"
15
- cryptography = "^41.0.1"
15
+ cryptography = ">=41.0.1,<43.0"
16
16
  backports-strenum = { version = "^1.2.4", python = "<3.11" }
17
- bleak = { version = "^0.21", optional = true }
17
+ bleak = { version = ">=0.21,<1.0.0", optional = true }
18
18
  dbus-fast = {version = "^2.11.0", optional = true, platform = "linux"}
19
19
 
20
20
  [tool.poetry.group.dev.dependencies]
21
- pytest = "^7.1.2"
22
- pytest-asyncio = ">=0.18.3,<0.22.0"
23
- python-dotenv = "^0.20.0"
24
- aresponses = "^2.1.5"
25
- mypy = "^1.7.0"
21
+ pytest = ">=7.1.2,<9.0.0"
22
+ pytest-asyncio = ">=0.18.3,<0.24.0"
23
+ python-dotenv = ">=0.20,<1.1"
24
+ aresponses = ">=2.1.5,<4.0.0"
25
+ mypy = ">=1.7.0,<2.0.0"
26
26
 
27
27
  [tool.poetry.extras]
28
28
  ble = ["bleak", "dbus-fast"]
@@ -28,6 +28,12 @@ type Query {
28
28
 
29
29
  type Mutation {
30
30
  createCsrfToken: CreateCsrfTokenResponse
31
+ createDepartureSchedule(
32
+ vehicleId: String!
33
+ schedule: InputDepartureSchedule!
34
+ ): Success
35
+ deleteDepartureSchedule(vehicleId: String!, scheduleId: String!): Success
36
+ departNow(vehicleId: String!, scheduleId: String!, skipDate: String!): Success
31
37
  disenrollPhone(attrs: DisenrollPhoneAttributes!): DisenrollPhoneResponse
32
38
  enrollPhone(attrs: EnrollPhoneAttributes!): EnrollPhoneResponse
33
39
  login(email: String!, password: String!): LoginResponse
@@ -36,16 +42,61 @@ type Mutation {
36
42
  otpToken: String!
37
43
  otpCode: String!
38
44
  ): MobileLoginResponse
45
+ logout: LogoutResponse
46
+ resendOTPCode(otpToken: String!): ResendOTPCodeResponse
39
47
  sendVehicleCommand(attrs: VehicleCommandAttributes!): SendVehicleCommandState
40
48
  setChargingSchedules(
41
49
  vehicleId: String!
42
50
  chargingSchedules: [InputChargingSchedule!]!
43
51
  ): OK
44
52
  setVehicleName(vehicleId: String!, name: String!): OK
53
+ skipNextScheduledDeparture(
54
+ vehicleId: String!
55
+ scheduleId: String!
56
+ skipDate: String!
57
+ ): Success
58
+ updateDepartureSchedule(
59
+ vehicleId: String!
60
+ scheduleId: String!
61
+ schedule: InputDepartureSchedule!
62
+ ): Success
45
63
  }
46
64
 
47
65
  type Subscription {
48
- vehicleState(id: String!): VehicleState
66
+ chargingSession(vehicleId: String!): ChargingSession!
67
+ otaInstallSchedules(vehicleId: String!): ParallaxMessageResponse!
68
+ otaInstallState(vehicleId: String!): ParallaxMessageResponse!
69
+ vehicleCloudConnection(id: String!): VehicleCloudConnection!
70
+ vehicleCommandState(id: String!): GetVehicleCommandState!
71
+ vehicleDepartureSchedules(vehicleId: String!): [DepartureSchedule!]!
72
+ vehicleGeofences(vehicleId: String!): ParallaxMessageResponse
73
+ vehicleState(id: String!): VehicleState!
74
+ }
75
+
76
+ enum DefogDefrostLevel {
77
+ Off
78
+ Defog
79
+ Defrost
80
+ }
81
+
82
+ enum SurfaceHeatVentLevel {
83
+ Off
84
+ Heat1
85
+ Heat2
86
+ Heat3
87
+ Vent1
88
+ Vent2
89
+ Vent3
90
+ }
91
+
92
+ enum WeekDay {
93
+ Monday
94
+ Tuesday
95
+ Wednesday
96
+ Thursday
97
+ Friday
98
+ Saturday
99
+ Sunday
49
100
  }
50
101
 
51
102
  input CoordinatesInput {
@@ -74,6 +125,38 @@ input InputChargingSchedule {
74
125
  enabled: Boolean!
75
126
  }
76
127
 
128
+ input InputComfortSettings {
129
+ surfaceHeatVentLevels: InputSurfaceHeatVentLevels!
130
+ cabinTempCelsius: Float!
131
+ frontDefogDefrost: DefogDefrostLevel!
132
+ }
133
+
134
+ input InputDepartureSchedule {
135
+ name: String!
136
+ isEnabled: Boolean!
137
+ repeatsWeekly: InputRepeatsWeekly!
138
+ departureSettings: InputDepartureSettings!
139
+ }
140
+
141
+ input InputDepartureSettings {
142
+ shouldOverrideChargeSchedule: Boolean!
143
+ comfortSettings: InputComfortSettings!
144
+ }
145
+
146
+ input InputRepeatsWeekly {
147
+ days: [WeekDay!]!
148
+ startsAtMin: Int!
149
+ skippedOn: [String!]!
150
+ }
151
+
152
+ input InputSurfaceHeatVentLevels {
153
+ frontLeftSeat: SurfaceHeatVentLevel!
154
+ frontRightSeat: SurfaceHeatVentLevel!
155
+ rearLeftSeat: SurfaceHeatVentLevel!
156
+ rearRightSeat: SurfaceHeatVentLevel!
157
+ steeringWheel: SurfaceHeatVentLevel!
158
+ }
159
+
77
160
  input NetworkPreference {
78
161
  networkId: String!
79
162
  preference: Float
@@ -104,6 +187,27 @@ type CampSpeaker {
104
187
  serialNumber: String!
105
188
  }
106
189
 
190
+ type ChargingChartData {
191
+ soc: Float!
192
+ powerKW: Float!
193
+ startTime: Float!
194
+ endTime: Float!
195
+ timeEstimationValidityStatus: String!
196
+ vehicleChargerState: String!
197
+ }
198
+
199
+ type ChargingLiveData {
200
+ powerKW: Float!
201
+ kilometersChargedPerHour: Float!
202
+ rangeAddedThisSession: Float!
203
+ totalChargedEnergy: Float!
204
+ timeElapsed: Float
205
+ timeRemaining: Float
206
+ price: Float
207
+ currency: String
208
+ isFreeSession: Boolean
209
+ }
210
+
107
211
  type ChargingSchedule {
108
212
  startTime: Int!
109
213
  duration: Int!
@@ -113,6 +217,17 @@ type ChargingSchedule {
113
217
  weekDays: [String!]!
114
218
  }
115
219
 
220
+ type ChargingSession {
221
+ chartData: [ChargingChartData!]!
222
+ liveData: ChargingLiveData!
223
+ }
224
+
225
+ type ComfortSettings {
226
+ surfaceHeatVentLevels: SurfaceHeatVentLevels!
227
+ cabinTempCelsius: Float!
228
+ frontDefogDefrost: DefogDefrostLevel!
229
+ }
230
+
116
231
  type CreateCsrfTokenResponse {
117
232
  csrfToken: String!
118
233
  appSessionToken: String!
@@ -142,6 +257,19 @@ type DeliveryAppointment {
142
257
  timeZone: String!
143
258
  }
144
259
 
260
+ type DepartureSchedule {
261
+ id: String!
262
+ name: String!
263
+ isEnabled: Boolean!
264
+ occurrence: RepeatsWeekly!
265
+ departureSettings: DepartureSettings!
266
+ }
267
+
268
+ type DepartureSettings {
269
+ shouldOverrideChargeSchedule: Boolean!
270
+ comfortSettings: ComfortSettings!
271
+ }
272
+
145
273
  type DisenrollPhoneResponse {
146
274
  success: Boolean!
147
275
  }
@@ -164,6 +292,10 @@ type GetVehicleCommandState {
164
292
  statusCode: Int
165
293
  }
166
294
 
295
+ type LogoutResponse {
296
+ success: Boolean!
297
+ }
298
+
167
299
  type MobileLoginResponse {
168
300
  accessToken: String!
169
301
  refreshToken: String!
@@ -189,6 +321,11 @@ type OTAUpdateDetails {
189
321
  locale: String!
190
322
  }
191
323
 
324
+ type ParallaxMessageResponse {
325
+ payload: String! # base64 encoded??
326
+ sequenceNumber: Int!
327
+ }
328
+
192
329
  type PlanTripResponse {
193
330
  routes: [Route!]!
194
331
  tripPlanStatus: String!
@@ -219,6 +356,16 @@ type RegistrationChannel {
219
356
  type: String!
220
357
  }
221
358
 
359
+ type RepeatsWeekly {
360
+ days: [WeekDay!]!
361
+ startsAtMin: Int!
362
+ skippedOn: [String!]!
363
+ }
364
+
365
+ type ResendOTPCodeResponse {
366
+ success: Boolean!
367
+ }
368
+
222
369
  type Route {
223
370
  routeResponse: String!
224
371
  destinationReached: Boolean!
@@ -238,11 +385,23 @@ type SendVehicleCommandState {
238
385
  state: Int!
239
386
  }
240
387
 
388
+ type Success {
389
+ success: Boolean!
390
+ }
391
+
241
392
  type SupportedFeature {
242
393
  name: String!
243
394
  status: String!
244
395
  }
245
396
 
397
+ type SurfaceHeatVentLevels {
398
+ frontLeftSeat: SurfaceHeatVentLevel!
399
+ frontRightSeat: SurfaceHeatVentLevel!
400
+ rearLeftSeat: SurfaceHeatVentLevel!
401
+ rearRightSeat: SurfaceHeatVentLevel!
402
+ steeringWheel: SurfaceHeatVentLevel!
403
+ }
404
+
246
405
  type TimeStampedFloat implements TimeStamped {
247
406
  timeStamp: String!
248
407
  value: Float!
@@ -366,13 +525,23 @@ type Vehicle {
366
525
  }
367
526
 
368
527
  type VehicleCloudConnection {
369
- lastSync: String!
528
+ isOnline: Boolean!
529
+ lastSync: String
370
530
  }
371
531
 
372
532
  type VehicleLocation implements TimeStamped {
373
533
  timeStamp: String!
374
534
  latitude: Float!
375
535
  longitude: Float!
536
+ isAuthorized: Boolean
537
+ }
538
+
539
+ type VehicleLocationError implements TimeStamped {
540
+ timeStamp: String!
541
+ bearing: Float!
542
+ positionHorizontal: Float!
543
+ positionVertical: Float!
544
+ speed: Float!
376
545
  }
377
546
 
378
547
  type VehicleMobileConfiguration {
@@ -409,6 +578,12 @@ type VehicleState {
409
578
 
410
579
  brakeFluidLow: TimeStampedString
411
580
 
581
+ btmFfHardwareFailureStatus: TimeStampedString
582
+ btmIcHardwareFailureStatus: TimeStampedString
583
+ btmLfdHardwareFailureStatus: TimeStampedString
584
+ btmRfdHardwareFailureStatus: TimeStampedString
585
+ btmRfHardwareFailureStatus: TimeStampedString
586
+
412
587
  cabinClimateDriverTemperature: TimeStampedFloat
413
588
  cabinClimateInteriorTemperature: TimeStampedFloat
414
589
  cabinPreconditioningStatus: TimeStampedString
@@ -416,9 +591,13 @@ type VehicleState {
416
591
 
417
592
  carWashMode: TimeStampedString
418
593
 
594
+ chargePortState: TimeStampedString
419
595
  chargerDerateStatus: TimeStampedString
420
596
  chargerState: TimeStampedString
421
597
  chargerStatus: TimeStampedString
598
+ chargingDisabledAC: TimeStampedInt
599
+ chargingDisabledAll: TimeStampedInt
600
+ chargingTimeEstimationValidity: TimeStampedString
422
601
 
423
602
  closureFrunkClosed: TimeStampedString
424
603
  closureFrunkLocked: TimeStampedString
@@ -464,9 +643,13 @@ type VehicleState {
464
643
 
465
644
  gnssAltitude: TimeStampedNullableFloat
466
645
  gnssBearing: TimeStampedFloat
646
+ gnssError: VehicleLocationError
467
647
  gnssLocation: VehicleLocation
468
648
  gnssSpeed: TimeStampedFloat
469
649
 
650
+ limitedAccelCold: TimeStampedInt
651
+ limitedRegenCold: TimeStampedInt
652
+
470
653
  otaAvailableVersion: TimeStampedString
471
654
  otaAvailableVersionGitHash: TimeStampedString
472
655
  otaAvailableVersionNumber: TimeStampedInt
@@ -493,6 +676,8 @@ type VehicleState {
493
676
 
494
677
  rangeThreshold: TimeStampedString
495
678
 
679
+ rearHitchStatus: TimeStampedString
680
+
496
681
  remoteChargingAvailable: TimeStampedInt
497
682
 
498
683
  seatFrontLeftHeat: TimeStampedString
@@ -510,6 +695,10 @@ type VehicleState {
510
695
 
511
696
  timeToEndOfCharge: TimeStampedFloat
512
697
 
698
+ tirePressureFrontLeft: TimeStampedNullableFloat # only available via subscription
699
+ tirePressureFrontRight: TimeStampedNullableFloat # only available via subscription
700
+ tirePressureRearLeft: TimeStampedNullableFloat # only available via subscription
701
+ tirePressureRearRight: TimeStampedNullableFloat # only available via subscription
513
702
  tirePressureStatusFrontLeft: TimeStampedString
514
703
  tirePressureStatusFrontRight: TimeStampedString
515
704
  tirePressureStatusRearLeft: TimeStampedString
@@ -90,7 +90,7 @@ def get_message_signature(secret_key: bytes, message: bytes) -> str:
90
90
 
91
91
 
92
92
  def get_secret_key(private_key_str: str, public_key_str: str) -> bytes:
93
- """Get HKDF derived secrety key from private/public key pair."""
93
+ """Get HKDF derived secret key from private/public key pair."""
94
94
  private_key = decode_private_key(private_key_str)
95
95
  public_key = decode_public_key(public_key_str)
96
96
  secret = private_key.exchange(ec.ECDH(), public_key)