rivian-python-client 2.2.0b9__tar.gz → 2.2.0b11__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.
Files changed (98) hide show
  1. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/PKG-INFO +1 -1
  2. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/__version__.py +1 -1
  3. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/charging.py +18 -13
  4. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/comfort.py +5 -3
  5. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/device_table.py +20 -4
  6. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/dynamics.py +16 -1
  7. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/energy_edge_compute.py +17 -14
  8. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/holiday_celebration.py +1 -1
  9. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/ota.py +8 -2
  10. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/charging.proto +6 -3
  11. rivian_python_client-2.2.0b11/src/rivian/parallax/proto/charging_pb2.py +86 -0
  12. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/charging_pb2.pyi +4 -2
  13. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/comfort.proto +2 -2
  14. rivian_python_client-2.2.0b11/src/rivian/parallax/proto/comfort_pb2.py +84 -0
  15. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/device_table.proto +13 -2
  16. rivian_python_client-2.2.0b11/src/rivian/parallax/proto/device_table_pb2.py +52 -0
  17. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/device_table_pb2.pyi +26 -8
  18. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/dynamics.proto +1 -1
  19. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/holiday_celebration.proto +1 -1
  20. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/holiday_celebration_pb2.py +12 -12
  21. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/holiday_celebration_pb2.pyi +2 -2
  22. rivian_python_client-2.2.0b9/src/rivian/parallax/proto/charging_pb2.py +0 -86
  23. rivian_python_client-2.2.0b9/src/rivian/parallax/proto/comfort_pb2.py +0 -84
  24. rivian_python_client-2.2.0b9/src/rivian/parallax/proto/device_table_pb2.py +0 -50
  25. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/.gitignore +0 -0
  26. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/README.md +0 -0
  27. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/pyproject.toml +0 -0
  28. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/__init__.py +0 -0
  29. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/ble.py +0 -0
  30. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/const.py +0 -0
  31. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/exceptions.py +0 -0
  32. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/__init__.py +0 -0
  33. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/body.py +0 -0
  34. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/core.py +0 -0
  35. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/departure.py +0 -0
  36. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/energy.py +0 -0
  37. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/gearguard_streaming.py +0 -0
  38. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/geofence.py +0 -0
  39. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/navigation.py +0 -0
  40. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/parallax.py +0 -0
  41. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/__init__.py +0 -0
  42. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/body.proto +0 -0
  43. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/body_pb2.py +0 -0
  44. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/body_pb2.pyi +0 -0
  45. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/comfort_pb2.pyi +0 -0
  46. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/departure.proto +0 -0
  47. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/departure_pb2.py +0 -0
  48. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/departure_pb2.pyi +0 -0
  49. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/dynamics_pb2.py +0 -0
  50. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/dynamics_pb2.pyi +0 -0
  51. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/energy.proto +0 -0
  52. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/energy_edge_compute.proto +0 -0
  53. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/energy_edge_compute_pb2.py +0 -0
  54. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/energy_edge_compute_pb2.pyi +0 -0
  55. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/energy_pb2.py +0 -0
  56. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/energy_pb2.pyi +0 -0
  57. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/gearguard_streaming.proto +0 -0
  58. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/gearguard_streaming_pb2.py +0 -0
  59. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/gearguard_streaming_pb2.pyi +0 -0
  60. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/geofence.proto +0 -0
  61. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/geofence_pb2.py +0 -0
  62. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/geofence_pb2.pyi +0 -0
  63. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/navigation.proto +0 -0
  64. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/navigation_pb2.py +0 -0
  65. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/navigation_pb2.pyi +0 -0
  66. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/ota.proto +0 -0
  67. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/ota_pb2.py +0 -0
  68. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/ota_pb2.pyi +0 -0
  69. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/parallax.proto +0 -0
  70. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/parallax_pb2.py +0 -0
  71. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/parallax_pb2.pyi +0 -0
  72. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/secure_file_transfer.proto +0 -0
  73. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/secure_file_transfer_pb2.py +0 -0
  74. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/secure_file_transfer_pb2.pyi +0 -0
  75. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/security.proto +0 -0
  76. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/security_pb2.py +0 -0
  77. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/security_pb2.pyi +0 -0
  78. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/user_passcodes.proto +0 -0
  79. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/user_passcodes_pb2.py +0 -0
  80. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/user_passcodes_pb2.pyi +0 -0
  81. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/vehicle.proto +0 -0
  82. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/vehicle_access.proto +0 -0
  83. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/vehicle_access_pb2.py +0 -0
  84. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/vehicle_access_pb2.pyi +0 -0
  85. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/vehicle_pb2.py +0 -0
  86. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/proto/vehicle_pb2.pyi +0 -0
  87. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/secure_file_transfer.py +0 -0
  88. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/security.py +0 -0
  89. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/user_passcodes.py +0 -0
  90. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/vehicle.py +0 -0
  91. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/parallax/vehicle_access.py +0 -0
  92. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/py.typed +0 -0
  93. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/rivian.py +0 -0
  94. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/schemas/charging.graphql +0 -0
  95. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/schemas/gateway.graphql +0 -0
  96. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/schemas/orders.graphql +0 -0
  97. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/utils.py +0 -0
  98. {rivian_python_client-2.2.0b9 → rivian_python_client-2.2.0b11}/src/rivian/ws_monitor.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: rivian-python-client
3
- Version: 2.2.0b9
3
+ Version: 2.2.0b11
4
4
  Summary: Rivian API Client (Unofficial)
5
5
  Author-email: Brian Retterer <bretterer@gmail.com>, "J.R. Gutierrez" <jrgutier@gmail.com>, Nathan Spencer <natekspencer@gmail.com>, Trevor Mack <drummer8001@gmail.com>
6
6
  License-Expression: MIT
@@ -1,4 +1,4 @@
1
1
  # This file is auto-generated by Hatchling. As such, do not:
2
2
  # - modify
3
3
  # - track in version control e.g. be sure to add to .gitignore
4
- __version__ = VERSION = '2.2.0b9'
4
+ __version__ = VERSION = '2.2.0b11'
@@ -362,24 +362,29 @@ _CHARGER_STATUS_MAP: Final[dict[int, str]] = {
362
362
  def decode_energy_state(m: charging_pb2.EnergyState) -> dict[str, Any]:
363
363
  """charging.energy.state — charger connection and charging state.
364
364
 
365
+ Partial updates, so each field only when sent; most messages carry only
366
+ power (not reported; charging.session.power has it). charging.session.status
367
+ is the reliable source for the connection and charging states.
368
+
365
369
  Fields:
366
370
  chargerStatus: str — GraphQL chargerStatus values
367
371
  ("chrgr_sts_not_connected" | "chrgr_sts_connected_no_chrg" |
368
- "chrgr_sts_connected_charging"); inferred
369
- chargerState, connectionState: str | None — as in
370
- charging.session.status
372
+ "chrgr_sts_connected_charging"); inferred. Only sent when the
373
+ plug state changes on some vehicles
374
+ energyChargerState, energyConnectionState: str — as
375
+ charging.session.status's chargerState / connectionState, which
376
+ these can lag
371
377
  _field3: int — raw
372
378
  """
373
- result: dict[str, Any] = {
374
- "chargerState": _enum(
375
- _CHARGING_STATE_MAP, m.charging_state or None, what="charging state"
376
- ),
377
- "connectionState": _enum(
378
- _CONNECTION_STATE_MAP,
379
- m.connection_state or None,
380
- what="charging connection state",
381
- ),
382
- }
379
+ result: dict[str, Any] = {}
380
+ if (v := _present(m, "charging_state")) is not None:
381
+ result["energyChargerState"] = _enum(
382
+ _CHARGING_STATE_MAP, v, what="charging state"
383
+ )
384
+ if (v := _present(m, "connection_state")) is not None:
385
+ result["energyConnectionState"] = _enum(
386
+ _CONNECTION_STATE_MAP, v, what="charging connection state"
387
+ )
383
388
  if (v := _present(m, "charger_status")) is not None:
384
389
  result["chargerStatus"] = _enum(_CHARGER_STATUS_MAP, v, what="charger status")
385
390
  if (v := _present(m, "field_3")) is not None:
@@ -173,13 +173,15 @@ def decode_cabin_temperatures(m: comfort_pb2.CabinTemperatures) -> dict[str, Any
173
173
 
174
174
  Fields:
175
175
  cabinClimateInteriorTemperature: float (°C)
176
- cabinClimateDriverTemperature: float (°C) — set point, same as
177
- `hvacTargetTemperature`
176
+ cabinClimateDriverTemperature: float | None (°C) — set point, same
177
+ as `hvacTargetTemperature`; None when the vehicle doesn't send it
178
178
  cabinClimateExteriorTemperature: float (°C), when sent
179
179
  """
180
180
  result: dict[str, Any] = {
181
181
  "cabinClimateInteriorTemperature": round(m.interior_temperature, 1),
182
- "cabinClimateDriverTemperature": round(m.driver_set_point, 1),
182
+ "cabinClimateDriverTemperature": (
183
+ round(v, 1) if (v := _present(m, "driver_set_point")) is not None else None
184
+ ),
183
185
  }
184
186
  if (v := _present(m, "exterior_temperature")) is not None:
185
187
  result["cabinClimateExteriorTemperature"] = round(v, 1)
@@ -16,6 +16,15 @@ _KEY_STATUS_MAP: Final[dict[int, str]] = {
16
16
  _Devices.KEY_STATUS_PAIRING: "pairing",
17
17
  }
18
18
 
19
+ _DEVICE_OEM_MAP: Final[dict[int, str]] = {
20
+ _Devices.DEVICE_OEM_UNKNOWN: "unknown",
21
+ _Devices.DEVICE_OEM_RIVIAN: "rivian",
22
+ _Devices.DEVICE_OEM_APPLE: "apple",
23
+ _Devices.DEVICE_OEM_GOOGLE: "google",
24
+ _Devices.DEVICE_OEM_SAMSUNG: "samsung",
25
+ _Devices.DEVICE_OEM_VW: "vw",
26
+ }
27
+
19
28
  _KEY_TYPE_MAP: Final[dict[int, str]] = {
20
29
  _Devices.KEY_TYPE_PHONE: "phone",
21
30
  _Devices.KEY_TYPE_KEY_CARD: "key_card",
@@ -35,13 +44,15 @@ def decode_vas_keyper_devices(m: device_table_pb2.VasKeyperDevices) -> dict[str,
35
44
  Fields (partial updates, so each only when sent):
36
45
  deviceName: str — phone keys, e.g. the phone's name
37
46
  keyType: str ("phone" | "key_card" | "key_fob"; key_fob inferred)
47
+ keyDeletable: bool
48
+ wccVersion: int
38
49
  mappedIdentityId: str — the GraphQL device's `mappedIdentityId`
39
50
  hrid: str — short human-readable id (key card)
40
51
  profileId: str — the driver profile the key belongs to (as in
41
52
  vehicle.profiles.active_user)
42
53
  publicKey: str — hex; phone keys
43
54
  keyRevision: int — key table revision when the entry was last written
44
- vehicleResponseRequired: bool
55
+ vehicleResponseRequired: int — raw
45
56
  keyStatus: str ("active" | "inactive" | "waiting_to_pair" |
46
57
  "pairing"); inactive covers unpaired, no longer paired and
47
58
  deleted keys
@@ -51,7 +62,8 @@ def decode_vas_keyper_devices(m: device_table_pb2.VasKeyperDevices) -> dict[str,
51
62
  deviceId: str — hex; for a key card, the GraphQL `devices[].id`
52
63
  phoneId: str — the phone's UUID; phone keys
53
64
  credentialHex: str — hex; likely key material
54
- active: bool
65
+ deviceOem: str ("unknown" | "rivian" | "apple" | "google" |
66
+ "samsung" | "vw") — the device maker
55
67
  """
56
68
  result: dict[str, Any] = {}
57
69
  if m.HasField("label"):
@@ -59,6 +71,10 @@ def decode_vas_keyper_devices(m: device_table_pb2.VasKeyperDevices) -> dict[str,
59
71
  result["deviceName"] = v
60
72
  if (v := _present(m.label, "key_type")) is not None:
61
73
  result["keyType"] = _enum(_KEY_TYPE_MAP, v, what="key type")
74
+ if (v := _present(m.label, "deletable")) is not None:
75
+ result["keyDeletable"] = v
76
+ if (v := _present(m.label, "wcc_version")) is not None:
77
+ result["wccVersion"] = v
62
78
  if m.HasField("device"):
63
79
  for field, key in (
64
80
  ("mapped_identity_id", "mappedIdentityId"),
@@ -97,6 +113,6 @@ def decode_vas_keyper_devices(m: device_table_pb2.VasKeyperDevices) -> dict[str,
97
113
  result["credentialHex"] = cred.hex()
98
114
  if (v := _present(credentials, "key_type")) is not None:
99
115
  result["keyType"] = _enum(_KEY_TYPE_MAP, v, what="key type")
100
- if (v := _present(credentials, "active")) is not None:
101
- result["active"] = v
116
+ if (v := _present(credentials, "device_oem")) is not None:
117
+ result["deviceOem"] = _enum(_DEVICE_OEM_MAP, v, what="device OEM")
102
118
  return result
@@ -94,6 +94,21 @@ def decode_gear(m: dynamics_pb2.Gear) -> dict[str, Any]:
94
94
  return {"gearStatus": _enum(_GEAR_MAP, m.gear, what="gear")}
95
95
 
96
96
 
97
+ # Some vehicles send the fix time as GPS time (milliseconds since the GPS
98
+ # epoch, 1980-01-06, without leap seconds) instead of Unix time. Any time
99
+ # before 2020 is taken as GPS time.
100
+ _GPS_EPOCH_OFFSET_MS: Final = 315_964_800_000
101
+ _GPS_LEAP_SECONDS_MS: Final = 18_000
102
+ _GPS_TIME_CUTOFF_MS: Final = 1_577_836_800_000 # 2020-01-01 in Unix ms
103
+
104
+
105
+ def _gnss_unix_ms(time: int) -> int:
106
+ """A GNSS fix time as Unix epoch milliseconds."""
107
+ if 0 < time < _GPS_TIME_CUTOFF_MS:
108
+ return time + _GPS_EPOCH_OFFSET_MS - _GPS_LEAP_SECONDS_MS
109
+ return time
110
+
111
+
97
112
  @RVMDecoder.register("dynamics.vehicle.gnss", dynamics_pb2.Gnss)
98
113
  def decode_gnss(m: dynamics_pb2.Gnss) -> dict[str, Any]:
99
114
  """dynamics.vehicle.gnss — GPS position, altitude, bearing and speed.
@@ -111,7 +126,7 @@ def decode_gnss(m: dynamics_pb2.Gnss) -> dict[str, Any]:
111
126
  """
112
127
  if not m.ByteSize():
113
128
  return {}
114
- fix_time = from_epoch(m.time)
129
+ fix_time = from_epoch(_gnss_unix_ms(m.time))
115
130
  return {
116
131
  "gnssTimeStamp": fix_time,
117
132
  "gnssLocation": {
@@ -98,16 +98,19 @@ def decode_charge_session_breakdown(
98
98
 
99
99
  Fields:
100
100
  totalChargedEnergy: float (kWh)
101
- power: float (kW)
101
+ chargeSessionPower: float (kW; charging.session.power reports `power`)
102
102
  rangeAddedThisSession: float (km)
103
103
  kilometersChargedPerHour: float (km of range per hour; 0 while
104
104
  power is 0, since it can be stale)
105
- timeToEndOfCharge: int (minutes)
105
+ chargeSessionTimeToEndOfCharge: int (minutes;
106
+ charging.session.time_estimation reports `timeToEndOfCharge`)
106
107
  activeChargingTime: int (minutes; pauses while stopped/scheduled)
107
108
  packEnergy, thermalEnergy, outletsEnergy, systemEnergy: float (kWh)
108
109
  isFreeSession: bool
109
110
  currentPrice: float, currentCurrency: str — only when there's a cost
110
- chargerState: str — as in charging.session.status
111
+ chargeSessionChargerState: str — the session's state, which goes
112
+ stale after a session (charging.session.status reports
113
+ `chargerState`)
111
114
 
112
115
  A session's totals survive stops and holds, and persist after plug-in
113
116
  until the next session starts. The last message before charging
@@ -116,10 +119,10 @@ def decode_charge_session_breakdown(
116
119
  power = round(m.power, 2)
117
120
  result: dict[str, Any] = {
118
121
  "totalChargedEnergy": round(m.total_energy, 4),
119
- "power": power,
122
+ "chargeSessionPower": power,
120
123
  "rangeAddedThisSession": float(m.range_added),
121
124
  "kilometersChargedPerHour": float(m.range_rate) if power > 0 else 0.0,
122
- "timeToEndOfCharge": m.time_remaining,
125
+ "chargeSessionTimeToEndOfCharge": m.time_remaining,
123
126
  "activeChargingTime": m.active_charging_time,
124
127
  "packEnergy": round(m.pack_energy, 4),
125
128
  "thermalEnergy": round(m.thermal_energy, 4),
@@ -132,7 +135,7 @@ def decode_charge_session_breakdown(
132
135
  result["currentPrice"] = cost.units + cost.nanos / 1e9
133
136
  result["currentCurrency"] = cost.currency_code
134
137
  if m.HasField("charging_state"):
135
- result["chargerState"] = _enum(
138
+ result["chargeSessionChargerState"] = _enum(
136
139
  _CHARGING_STATE_MAP, m.charging_state, what="charging state"
137
140
  )
138
141
  return result
@@ -150,11 +153,11 @@ def decode_charging_graph_global(
150
153
  Fields:
151
154
  startTime: datetime (session start)
152
155
  timeElapsed: int (seconds spent charging)
153
- power: float (kW, latest segment)
154
- kilometersChargedPerHour: float (estimated from power)
156
+ chargingGraphPower: float (kW, latest segment)
157
+ chargingGraphKilometersChargedPerHour: float (estimated from power)
155
158
 
156
- Power updates about once a minute; prefer charge_session_breakdown
157
- for live power and rate.
159
+ Power updates about once a minute; charging.session.power and
160
+ charge_session_breakdown report live power and rate.
158
161
  """
159
162
  segments = m.segment
160
163
  if not segments:
@@ -179,12 +182,12 @@ def decode_charging_graph_global(
179
182
 
180
183
  latest_power = round(segments[-1].power, 2)
181
184
  if latest_power > 0 and segments[-1].state != charging_pb2.CHARGING_USER_STOPPED:
182
- result["power"] = latest_power
183
- result["kilometersChargedPerHour"] = round(
185
+ result["chargingGraphPower"] = latest_power
186
+ result["chargingGraphKilometersChargedPerHour"] = round(
184
187
  latest_power * _FALLBACK_KM_PER_KWH, 1
185
188
  )
186
189
  else:
187
- result["power"] = 0.0
188
- result["kilometersChargedPerHour"] = 0.0
190
+ result["chargingGraphPower"] = 0.0
191
+ result["chargingGraphKilometersChargedPerHour"] = 0.0
189
192
 
190
193
  return result
@@ -135,7 +135,7 @@ def decode_halloween_celebration_settings(
135
135
  halloweenLightShowEnabled: bool
136
136
  halloweenInteriorOverheadLightsEnabled: bool
137
137
  halloweenExteriorLightShowEnabled: bool
138
- halloweenLightsColor: str
138
+ halloweenLightsColor: int
139
139
  halloweenCarCostumeAvailability: str
140
140
  halloweenMotionLightSoundEnabled: bool
141
141
  """
@@ -211,8 +211,14 @@ def decode_ota_config(m: ota_pb2.OtaConfig) -> dict[str, Any]:
211
211
  and (v := _present(daily.location, "name")) is not None
212
212
  ):
213
213
  entry["location"] = v
214
- if one_time and (
215
- seconds := _present(schedule.single_occurrence.starts_at, "seconds")
214
+ # A non-positive starts_at is a "not set" sentinel.
215
+ if (
216
+ one_time
217
+ and (
218
+ (seconds := _present(schedule.single_occurrence.starts_at, "seconds"))
219
+ or 0
220
+ )
221
+ > 0
216
222
  ):
217
223
  entry["installTime"] = from_epoch(seconds)
218
224
  entry["enabled"] = schedule.enabled
@@ -209,13 +209,16 @@ enum TimeEstimationValidity {
209
209
  }
210
210
 
211
211
  // charging.energy.state
212
- // The states match charging.session.status, give or take a message.
212
+ // Partial updates: most messages carry only power, and the states are sent
213
+ // only when the plug state changes, so they can't be relied on. The states
214
+ // match charging.session.status, give or take a message.
213
215
  message EnergyState {
214
- ChargingState charging_state = 1;
216
+ optional ChargingState charging_state = 1;
215
217
  optional ChargerStatus charger_status = 2; // inferred
216
218
  optional int32 field_3 = 3; // unknown
219
+ float power = 4; // kW; same as charging.session.power
217
220
  string field_10 = 10; // unknown
218
- ConnectionState connection_state = 11;
221
+ optional ConnectionState connection_state = 11;
219
222
  }
220
223
 
221
224
  enum ChargerStatus {
@@ -0,0 +1,86 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # NO CHECKED-IN PROTOBUF GENCODE
4
+ # source: rivian/parallax/proto/charging.proto
5
+ # Protobuf Python Version: 6.31.1
6
+ """Generated protocol buffer code."""
7
+ from google.protobuf import descriptor as _descriptor
8
+ from google.protobuf import descriptor_pool as _descriptor_pool
9
+ from google.protobuf import runtime_version as _runtime_version
10
+ from google.protobuf import symbol_database as _symbol_database
11
+ from google.protobuf.internal import builder as _builder
12
+ _runtime_version.ValidateProtobufRuntimeVersion(
13
+ _runtime_version.Domain.PUBLIC,
14
+ 6,
15
+ 31,
16
+ 1,
17
+ '',
18
+ 'rivian/parallax/proto/charging.proto'
19
+ )
20
+ # @@protoc_insertion_point(imports)
21
+
22
+ _sym_db = _symbol_database.Default()
23
+
24
+
25
+
26
+
27
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n$rivian/parallax/proto/charging.proto\x12\x18rivian.parallax.charging\"\xe8\x04\n\x12ScheduleTimeWindow\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x43\n\x06window\x18\x02 \x01(\x0b\x32\x33.rivian.parallax.charging.ScheduleTimeWindow.Window\x1a\xbe\x02\n\x06Window\x12\x12\n\nstart_time\x18\x01 \x01(\x05\x12\x10\n\x08\x65nd_time\x18\x02 \x01(\x05\x12\x10\n\x08\x64uration\x18\x03 \x01(\x05\x12\x11\n\x04\x61mps\x18\x04 \x01(\x05H\x00\x88\x01\x01\x12L\n\x08location\x18\x05 \x01(\x0b\x32:.rivian.parallax.charging.ScheduleTimeWindow.GeoCoordinate\x12I\n\tstart_day\x18\x06 \x01(\x0e\x32\x36.rivian.parallax.charging.ScheduleTimeWindow.DayOfWeek\x12G\n\x07\x65nd_day\x18\x07 \x01(\x0e\x32\x36.rivian.parallax.charging.ScheduleTimeWindow.DayOfWeekB\x07\n\x05_amps\x1a\x34\n\rGeoCoordinate\x12\x10\n\x08latitude\x18\x01 \x01(\x01\x12\x11\n\tlongitude\x18\x02 \x01(\x01\"\x84\x01\n\tDayOfWeek\x12\x1b\n\x17\x44\x41Y_OF_WEEK_UNSPECIFIED\x10\x00\x12\n\n\x06SUNDAY\x10\x01\x12\n\n\x06MONDAY\x10\x02\x12\x0b\n\x07TUESDAY\x10\x03\x12\r\n\tWEDNESDAY\x10\x04\x12\x0c\n\x08THURSDAY\x10\x05\x12\n\n\x06\x46RIDAY\x10\x06\x12\x0c\n\x08SATURDAY\x10\x07\"\xb6\x01\n\x13SessionNotification\x12\x1e\n\x16unexpected_stop_reason\x18\x01 \x01(\x05\x12\x44\n\rderate_status\x18\x02 \x01(\x0e\x32-.rivian.parallax.charging.ChargerDerateStatus\x12\x39\n\x0b\x66\x61ult_chime\x18\x03 \x01(\x0e\x32$.rivian.parallax.charging.FaultChime\"\\\n\x14SessionRemoteCommand\x12\x44\n\x0fstart_available\x18\x01 \x01(\x0e\x32+.rivian.parallax.charging.StartAvailability\"1\n\tSocSlider\x12\x16\n\tsoc_limit\x18\x01 \x01(\x05H\x00\x88\x01\x01\x42\x0c\n\n_soc_limit\"\x1f\n\nTripTarget\x12\x11\n\tsoc_limit\x18\x02 \x01(\x05\"\xf3\x01\n\x15SmartChargingSettings\x12S\n\x0eready_by_times\x18\x01 \x03(\x0b\x32;.rivian.parallax.charging.SmartChargingSettings.ReadyByTime\x12\x1c\n\x14\x63lean_energy_enabled\x18\x02 \x01(\x08\x1ag\n\x0bReadyByTime\x12\r\n\x05hours\x18\x01 \x01(\x05\x12\x0f\n\x07minutes\x18\x02 \x01(\x05\x12\x38\n\x04\x64\x61ys\x18\x03 \x03(\x0e\x32*.rivian.parallax.charging.SmartChargingDay\"\xf0\x01\n\x11SmartChargingInfo\x12K\n\x0bresume_time\x18\x01 \x01(\x0b\x32\x36.rivian.parallax.charging.SmartChargingInfo.ResumeTime\x12I\n\x0cnotification\x18\x02 \x01(\x0e\x32\x33.rivian.parallax.charging.SmartChargingNotification\x12\x15\n\rschedule_type\x18\x03 \x01(\x05\x1a,\n\nResumeTime\x12\x0f\n\x07seconds\x18\x01 \x01(\x03\x12\r\n\x05nanos\x18\x02 \x01(\x05\"\x1a\n\x18WeightedChargingForecast\"\xda\x01\n\rSessionStatus\x12H\n\x10\x63onnection_state\x18\x01 \x01(\x0e\x32).rivian.parallax.charging.ConnectionStateH\x00\x88\x01\x01\x12\x44\n\x0e\x63harging_state\x18\x02 \x01(\x0e\x32\'.rivian.parallax.charging.ChargingStateH\x01\x88\x01\x01\x12\x11\n\tevse_type\x18\x03 \x01(\x05\x42\x13\n\x11_connection_stateB\x11\n\x0f_charging_state\"v\n\x0eTimeEstimation\x12\x42\n\x08validity\x18\x01 \x01(\x0e\x32\x30.rivian.parallax.charging.TimeEstimationValidity\x12 \n\x18\x65stimated_time_remaining\x18\x02 \x01(\x05\"\xe1\x02\n\x0b\x45nergyState\x12\x44\n\x0e\x63harging_state\x18\x01 \x01(\x0e\x32\'.rivian.parallax.charging.ChargingStateH\x00\x88\x01\x01\x12\x44\n\x0e\x63harger_status\x18\x02 \x01(\x0e\x32\'.rivian.parallax.charging.ChargerStatusH\x01\x88\x01\x01\x12\x14\n\x07\x66ield_3\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\r\n\x05power\x18\x04 \x01(\x02\x12\x10\n\x08\x66ield_10\x18\n \x01(\t\x12H\n\x10\x63onnection_state\x18\x0b \x01(\x0e\x32).rivian.parallax.charging.ConnectionStateH\x03\x88\x01\x01\x42\x11\n\x0f_charging_stateB\x11\n\x0f_charger_statusB\n\n\x08_field_3B\x13\n\x11_connection_state\"\x1d\n\x0cSessionPower\x12\r\n\x05power\x18\x01 \x01(\x02*\xb2\x05\n\x13\x43hargerDerateStatus\x12\x16\n\x12\x44\x45RATE_STATUS_NONE\x10\x00\x12\x1e\n\x1a\x44\x45RATE_STATUS_WARM_ADAPTER\x10\x01\x12\x1e\n\x1a\x44\x45RATE_STATUS_DC_WARM_PLUG\x10\x02\x12\x1e\n\x1a\x44\x45RATE_STATUS_AC_WARM_PLUG\x10\x03\x12\x1f\n\x1b\x44\x45RATE_STATUS_EVSE_DERATING\x10\x04\x12\x1d\n\x19\x44\x45RATE_STATUS_NEARING_TOC\x10\x05\x12/\n+DERATE_STATUS_NEAR_TOC_LFP_BATT_CALIBRATING\x10\x06\x12\"\n\x1e\x44\x45RATE_STATUS_HVAC_PRIORITIZED\x10\x07\x12!\n\x1d\x44\x45RATE_STATUS_BATTERY_HEATING\x10\x08\x12!\n\x1d\x44\x45RATE_STATUS_BATTERY_COOLING\x10\t\x12\x32\n.DERATE_STATUS_CELL_THERMAL_LIM_COLD_NO_CURRENT\x10\n\x12\x31\n-DERATE_STATUS_CELL_THERMAL_LIM_HOT_NO_CURRENT\x10\x0b\x12\'\n#DERATE_STATUS_CELL_THERMAL_LIM_COLD\x10\x0c\x12&\n\"DERATE_STATUS_CELL_THERMAL_LIM_HOT\x10\r\x12+\n\'DERATE_STATUS_PACK_HARDWARE_THERMAL_LIM\x10\x0e\x12 \n\x1c\x44\x45RATE_STATUS_HIGH_SOC_SIGMA\x10\x0f\x12\"\n\x1e\x44\x45RATE_STATUS_HV_BATTERY_FAULT\x10\x10\x12\x1d\n\x19\x44\x45RATE_STATUS_DCAC_EXPORT\x10\x11*\xdb\x03\n\nFaultChime\x12\x14\n\x10\x46\x41ULT_CHIME_NONE\x10\x00\x12%\n!FAULT_CHIME_CHARGING_DISABLED_ALL\x10\x01\x12$\n FAULT_CHIME_CHARGING_DISABLED_DC\x10\x02\x12-\n)FAULT_CHIME_CHARGING_DISABLED_PIN_TEMP_DC\x10\x03\x12\x36\n2FAULT_CHIME_CHARGING_DISABLED_PIN_TEMP_GRADIENT_DC\x10\x04\x12$\n FAULT_CHIME_CHARGING_DEGRADED_DC\x10\x05\x12$\n FAULT_CHIME_CHARGING_DISABLED_AC\x10\x06\x12-\n)FAULT_CHIME_CHARGING_DISABLED_PIN_TEMP_AC\x10\x07\x12$\n FAULT_CHIME_CHARGING_DEGRADED_AC\x10\x08\x12\x34\n0FAULT_CHIME_CHARGING_DISABLED_PARTIAL_CONNECTION\x10\t\x12,\n(FAULT_CHIME_CHARGING_DISABLED_NOT_PARKED\x10\n*j\n\x11StartAvailability\x12\x1a\n\x16START_AVAILABILITY_SNA\x10\x00\x12\x1c\n\x18START_AVAILABILITY_FALSE\x10\x01\x12\x1b\n\x17START_AVAILABILITY_TRUE\x10\x02*\x97\x02\n\x10SmartChargingDay\x12\"\n\x1eSMART_CHARGING_DAY_UNSPECIFIED\x10\x00\x12\x1d\n\x19SMART_CHARGING_DAY_MONDAY\x10\x01\x12\x1e\n\x1aSMART_CHARGING_DAY_TUESDAY\x10\x02\x12 \n\x1cSMART_CHARGING_DAY_WEDNESDAY\x10\x03\x12\x1f\n\x1bSMART_CHARGING_DAY_THURSDAY\x10\x04\x12\x1d\n\x19SMART_CHARGING_DAY_FRIDAY\x10\x05\x12\x1f\n\x1bSMART_CHARGING_DAY_SATURDAY\x10\x06\x12\x1d\n\x19SMART_CHARGING_DAY_SUNDAY\x10\x07*\xbc\x02\n\x19SmartChargingNotification\x12#\n\x1fSMART_CHARGING_NOTIFICATION_SNA\x10\x00\x12:\n6SMART_CHARGING_NOTIFICATION_CHARGING_WITH_CLEAN_ENERGY\x10\x01\x12/\n+SMART_CHARGING_NOTIFICATION_CHARGING_PAUSED\x10\x02\x12<\n8SMART_CHARGING_NOTIFICATION_CLEAN_ENERGY_NOT_ENOUGH_TIME\x10\x03\x12O\nKSMART_CHARGING_NOTIFICATION_CLEAN_ENERGY_FORECAST_UNAVAILABLE_OR_INCOMPLETE\x10\x04*\xaf\x01\n\x0f\x43onnectionState\x12\x19\n\x15\x43ONNECTION_STATE_INIT\x10\x00\x12!\n\x1d\x43ONNECTION_STATE_DISCONNECTED\x10\x01\x12\x1e\n\x1a\x43ONNECTION_STATE_CONNECTED\x10\x02\x12\x1a\n\x16\x43ONNECTION_STATE_ERROR\x10\x03\x12\"\n\x1e\x43ONNECTION_STATE_V2L_CONNECTED\x10\x04*\xc4\x06\n\rChargingState\x12\x1e\n\x1a\x43HARGING_STATE_UNSPECIFIED\x10\x00\x12\x12\n\x0e\x43HARGING_READY\x10\x01\x12\x17\n\x13\x43HARGING_CONNECTING\x10\x02\x12\x13\n\x0f\x43HARGING_ACTIVE\x10\x03\x12\x15\n\x11\x43HARGING_COMPLETE\x10\x04\x12\x16\n\x12\x43HARGING_SCHEDULED\x10\x05\x12\x1a\n\x16\x43HARGING_VEHICLE_ERROR\x10\x06\x12\x1a\n\x16\x43HARGING_STATION_ERROR\x10\x07\x12\x19\n\x15\x43HARGING_USER_STOPPED\x10\x08\x12\x1c\n\x18\x43HARGING_STATION_STOPPED\x10\t\x12\x1a\n\x16\x43HARGING_PAYMENT_ERROR\x10\n\x12\x17\n\x13\x43HARGING_CERT_ERROR\x10\x0b\x12\x16\n\x12\x43HARGING_TLS_ERROR\x10\x0c\x12(\n$CHARGING_ERROR_AC_ADAPTER_USED_ON_DC\x10\r\x12(\n$CHARGING_ERROR_DC_ADAPTER_USED_ON_AC\x10\x0e\x12\'\n#CHARGING_ERROR_INCOMPATIBLE_CHARGER\x10\x0f\x12\x1c\n\x18\x43HARGING_SD_COMPENSATION\x10\x10\x12\x16\n\x12WAITING_ON_CHARGER\x10\x11\x12%\n!CHARGER_NOT_READY_OR_INCOMPATIBLE\x10\x12\x12\x1c\n\x18\x43HARGING_VEHICLE_STOPPED\x10\x13\x12+\n\'CHARGING_PAYMENT_ERROR_START_RIVIAN_APP\x10\x14\x12&\n\"CHARGING_TLS_ERROR_UNKNOWN_CHARGER\x10\x15\x12&\n\"CHARGING_TLS_ERROR_UNEXPECTED_FAIL\x10\x16\x12\'\n#CHARGING_TLS_ERROR_START_RIVIAN_APP\x10\x17\x12\"\n\x1e\x43HARGING_SMART_CHARGING_PAUSED\x10\x18\x12\"\n\x1e\x43HARGING_SMART_CHARGING_ACTIVE\x10\x19*\xb4\x01\n\x16TimeEstimationValidity\x12!\n\x1dTIME_ESTIMATION_VALIDITY_NONE\x10\x00\x12\"\n\x1eTIME_ESTIMATION_VALIDITY_VALID\x10\x01\x12$\n TIME_ESTIMATION_VALIDITY_INVALID\x10\x02\x12-\n)TIME_ESTIMATION_VALIDITY_PACK_DISCHARGING\x10\x03*\xa0\x01\n\rChargerStatus\x12\x1e\n\x1a\x43HARGER_STATUS_UNSPECIFIED\x10\x00\x12 \n\x1c\x43HARGER_STATUS_NOT_CONNECTED\x10\x01\x12&\n\"CHARGER_STATUS_CONNECTED_NO_CHARGE\x10\x02\x12%\n!CHARGER_STATUS_CONNECTED_CHARGING\x10\x03\x62\x06proto3')
28
+
29
+ _globals = globals()
30
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
31
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'rivian.parallax.proto.charging_pb2', _globals)
32
+ if not _descriptor._USE_C_DESCRIPTORS:
33
+ DESCRIPTOR._loaded_options = None
34
+ _globals['_CHARGERDERATESTATUS']._serialized_start=2294
35
+ _globals['_CHARGERDERATESTATUS']._serialized_end=2984
36
+ _globals['_FAULTCHIME']._serialized_start=2987
37
+ _globals['_FAULTCHIME']._serialized_end=3462
38
+ _globals['_STARTAVAILABILITY']._serialized_start=3464
39
+ _globals['_STARTAVAILABILITY']._serialized_end=3570
40
+ _globals['_SMARTCHARGINGDAY']._serialized_start=3573
41
+ _globals['_SMARTCHARGINGDAY']._serialized_end=3852
42
+ _globals['_SMARTCHARGINGNOTIFICATION']._serialized_start=3855
43
+ _globals['_SMARTCHARGINGNOTIFICATION']._serialized_end=4171
44
+ _globals['_CONNECTIONSTATE']._serialized_start=4174
45
+ _globals['_CONNECTIONSTATE']._serialized_end=4349
46
+ _globals['_CHARGINGSTATE']._serialized_start=4352
47
+ _globals['_CHARGINGSTATE']._serialized_end=5188
48
+ _globals['_TIMEESTIMATIONVALIDITY']._serialized_start=5191
49
+ _globals['_TIMEESTIMATIONVALIDITY']._serialized_end=5371
50
+ _globals['_CHARGERSTATUS']._serialized_start=5374
51
+ _globals['_CHARGERSTATUS']._serialized_end=5534
52
+ _globals['_SCHEDULETIMEWINDOW']._serialized_start=67
53
+ _globals['_SCHEDULETIMEWINDOW']._serialized_end=683
54
+ _globals['_SCHEDULETIMEWINDOW_WINDOW']._serialized_start=176
55
+ _globals['_SCHEDULETIMEWINDOW_WINDOW']._serialized_end=494
56
+ _globals['_SCHEDULETIMEWINDOW_GEOCOORDINATE']._serialized_start=496
57
+ _globals['_SCHEDULETIMEWINDOW_GEOCOORDINATE']._serialized_end=548
58
+ _globals['_SCHEDULETIMEWINDOW_DAYOFWEEK']._serialized_start=551
59
+ _globals['_SCHEDULETIMEWINDOW_DAYOFWEEK']._serialized_end=683
60
+ _globals['_SESSIONNOTIFICATION']._serialized_start=686
61
+ _globals['_SESSIONNOTIFICATION']._serialized_end=868
62
+ _globals['_SESSIONREMOTECOMMAND']._serialized_start=870
63
+ _globals['_SESSIONREMOTECOMMAND']._serialized_end=962
64
+ _globals['_SOCSLIDER']._serialized_start=964
65
+ _globals['_SOCSLIDER']._serialized_end=1013
66
+ _globals['_TRIPTARGET']._serialized_start=1015
67
+ _globals['_TRIPTARGET']._serialized_end=1046
68
+ _globals['_SMARTCHARGINGSETTINGS']._serialized_start=1049
69
+ _globals['_SMARTCHARGINGSETTINGS']._serialized_end=1292
70
+ _globals['_SMARTCHARGINGSETTINGS_READYBYTIME']._serialized_start=1189
71
+ _globals['_SMARTCHARGINGSETTINGS_READYBYTIME']._serialized_end=1292
72
+ _globals['_SMARTCHARGINGINFO']._serialized_start=1295
73
+ _globals['_SMARTCHARGINGINFO']._serialized_end=1535
74
+ _globals['_SMARTCHARGINGINFO_RESUMETIME']._serialized_start=1491
75
+ _globals['_SMARTCHARGINGINFO_RESUMETIME']._serialized_end=1535
76
+ _globals['_WEIGHTEDCHARGINGFORECAST']._serialized_start=1537
77
+ _globals['_WEIGHTEDCHARGINGFORECAST']._serialized_end=1563
78
+ _globals['_SESSIONSTATUS']._serialized_start=1566
79
+ _globals['_SESSIONSTATUS']._serialized_end=1784
80
+ _globals['_TIMEESTIMATION']._serialized_start=1786
81
+ _globals['_TIMEESTIMATION']._serialized_end=1904
82
+ _globals['_ENERGYSTATE']._serialized_start=1907
83
+ _globals['_ENERGYSTATE']._serialized_end=2260
84
+ _globals['_SESSIONPOWER']._serialized_start=2262
85
+ _globals['_SESSIONPOWER']._serialized_end=2291
86
+ # @@protoc_insertion_point(module_scope)
@@ -337,18 +337,20 @@ class TimeEstimation(_message.Message):
337
337
  def __init__(self, validity: _Optional[_Union[TimeEstimationValidity, str]] = ..., estimated_time_remaining: _Optional[int] = ...) -> None: ...
338
338
 
339
339
  class EnergyState(_message.Message):
340
- __slots__ = ("charging_state", "charger_status", "field_3", "field_10", "connection_state")
340
+ __slots__ = ("charging_state", "charger_status", "field_3", "power", "field_10", "connection_state")
341
341
  CHARGING_STATE_FIELD_NUMBER: _ClassVar[int]
342
342
  CHARGER_STATUS_FIELD_NUMBER: _ClassVar[int]
343
343
  FIELD_3_FIELD_NUMBER: _ClassVar[int]
344
+ POWER_FIELD_NUMBER: _ClassVar[int]
344
345
  FIELD_10_FIELD_NUMBER: _ClassVar[int]
345
346
  CONNECTION_STATE_FIELD_NUMBER: _ClassVar[int]
346
347
  charging_state: ChargingState
347
348
  charger_status: ChargerStatus
348
349
  field_3: int
350
+ power: float
349
351
  field_10: str
350
352
  connection_state: ConnectionState
351
- def __init__(self, charging_state: _Optional[_Union[ChargingState, str]] = ..., charger_status: _Optional[_Union[ChargerStatus, str]] = ..., field_3: _Optional[int] = ..., field_10: _Optional[str] = ..., connection_state: _Optional[_Union[ConnectionState, str]] = ...) -> None: ...
353
+ def __init__(self, charging_state: _Optional[_Union[ChargingState, str]] = ..., charger_status: _Optional[_Union[ChargerStatus, str]] = ..., field_3: _Optional[int] = ..., power: _Optional[float] = ..., field_10: _Optional[str] = ..., connection_state: _Optional[_Union[ConnectionState, str]] = ...) -> None: ...
352
354
 
353
355
  class SessionPower(_message.Message):
354
356
  __slots__ = ("power",)
@@ -55,8 +55,8 @@ message CabinTemperatures {
55
55
  optional float exterior_temperature = 2; // °C
56
56
  float interior_temperature = 3; // °C
57
57
  // The app's interior display temperature: the set point, same as
58
- // HvacSettingsStatus's target.
59
- float driver_set_point = 4; // °C
58
+ // HvacSettingsStatus's target. Not sent by every vehicle.
59
+ optional float driver_set_point = 4; // °C
60
60
 
61
61
  message ZoneTemperature {
62
62
  int32 seat = 1;
@@ -0,0 +1,84 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # NO CHECKED-IN PROTOBUF GENCODE
4
+ # source: rivian/parallax/proto/comfort.proto
5
+ # Protobuf Python Version: 6.31.1
6
+ """Generated protocol buffer code."""
7
+ from google.protobuf import descriptor as _descriptor
8
+ from google.protobuf import descriptor_pool as _descriptor_pool
9
+ from google.protobuf import runtime_version as _runtime_version
10
+ from google.protobuf import symbol_database as _symbol_database
11
+ from google.protobuf.internal import builder as _builder
12
+ _runtime_version.ValidateProtobufRuntimeVersion(
13
+ _runtime_version.Domain.PUBLIC,
14
+ 6,
15
+ 31,
16
+ 1,
17
+ '',
18
+ 'rivian/parallax/proto/comfort.proto'
19
+ )
20
+ # @@protoc_insertion_point(imports)
21
+
22
+ _sym_db = _symbol_database.Default()
23
+
24
+
25
+
26
+
27
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n#rivian/parallax/proto/comfort.proto\x12\x17rivian.parallax.comfort\"0\n\x12HvacSettingsStatus\x12\x1a\n\x12target_temperature\x18\x01 \x01(\x02\"\xa4\x01\n\x0eUserModesState\x12\x12\n\nin_service\x18\x01 \x01(\x08\x12\x15\n\rcar_wash_mode\x18\x02 \x01(\x08\x12\x10\n\x08pet_mode\x18\x03 \x01(\x05\x12\x11\n\tcamp_mode\x18\x04 \x01(\x05\x12\x16\n\x0etransport_mode\x18\x05 \x01(\x05\x12\x14\n\x0c\x63limate_keep\x18\x06 \x01(\x05\x12\x14\n\x0c\x66\x61\x63tory_mode\x18\x07 \x01(\x05\"\x98\x01\n\x1a\x43\x61\x62inPreconditioningStatus\x12>\n\x06status\x18\x01 \x01(\x0e\x32..rivian.parallax.comfort.PreconditioningStatus\x12:\n\x04type\x18\x02 \x01(\x0e\x32,.rivian.parallax.comfort.PreconditioningType\"\xa9\x02\n\x11\x43\x61\x62inTemperatures\x12P\n\x0ctemperatures\x18\x01 \x03(\x0b\x32:.rivian.parallax.comfort.CabinTemperatures.ZoneTemperature\x12!\n\x14\x65xterior_temperature\x18\x02 \x01(\x02H\x00\x88\x01\x01\x12\x1c\n\x14interior_temperature\x18\x03 \x01(\x02\x12\x1d\n\x10\x64river_set_point\x18\x04 \x01(\x02H\x01\x88\x01\x01\x1a\x34\n\x0fZoneTemperature\x12\x0c\n\x04seat\x18\x01 \x01(\x05\x12\x13\n\x0btemperature\x18\x02 \x01(\x02\x42\x17\n\x15_exterior_temperatureB\x13\n\x11_driver_set_point\"A\n\x17\x43\x61\x62inVentilationSetting\x12&\n\x1e\x61uto_cabin_ventilation_enabled\x18\x01 \x01(\x08\"&\n\x12\x43limateHoldSetting\x12\x10\n\x08\x64uration\x18\x01 \x01(\x05\"\xd7\x02\n\x11\x43limateHoldStatus\x12?\n\x06status\x18\x01 \x01(\x0e\x32/.rivian.parallax.comfort.ClimateHoldStatusValue\x12\x46\n\x0c\x61vailability\x18\x02 \x01(\x0e\x32\x30.rivian.parallax.comfort.ClimateHoldAvailability\x12W\n\x15unavailability_reason\x18\x03 \x01(\x0e\x32\x38.rivian.parallax.comfort.ClimateHoldUnavailabilityReason\x12\x44\n\x08\x65nd_time\x18\x04 \x01(\x0b\x32\x32.rivian.parallax.comfort.ClimateHoldStatus.EndTime\x1a\x1a\n\x07\x45ndTime\x12\x0f\n\x07seconds\x18\x01 \x01(\x03\"L\n\x12\x44\x65\x66rostDefogStatus\x12\x36\n\x06status\x18\x01 \x01(\x0e\x32&.rivian.parallax.comfort.DefrostStatus\"\xda\x01\n\rPetModeStatus\x12\x35\n\x06status\x18\x01 \x01(\x0e\x32%.rivian.parallax.comfort.PetModeState\x12M\n\x12temperature_status\x18\x02 \x01(\x0e\x32\x31.rivian.parallax.comfort.PetModeTemperatureStatus\x12\x43\n\rcabin_climate\x18\x03 \x01(\x0e\x32,.rivian.parallax.comfort.PetModeCabinClimate\"\xa4\x02\n\x16SeatConditioningStatus\x12H\n\x07surface\x18\x01 \x03(\x0b\x32\x37.rivian.parallax.comfort.SeatConditioningStatus.Surface\x1a\xbf\x01\n\x07Surface\x12\x31\n\x02id\x18\x01 \x01(\x0e\x32%.rivian.parallax.comfort.CabinSurface\x12\x37\n\x04type\x18\x02 \x01(\x0e\x32).rivian.parallax.comfort.ConditioningType\x12>\n\x05state\x18\x03 \x01(\x0e\x32*.rivian.parallax.comfort.ConditioningLevelH\x00\x88\x01\x01\x42\x08\n\x06_state*\x85\x03\n\x15PreconditioningStatus\x12&\n\"PRECONDITIONING_STATUS_UNSPECIFIED\x10\x00\x12\x1c\n\x18PRECONDITIONING_INITIATE\x10\x01\x12\x1a\n\x16PRECONDITIONING_ACTIVE\x10\x02\x12\"\n\x1ePRECONDITIONING_ACTIVE_WARNING\x10\x03\x12%\n!PRECONDITIONING_COMPLETE_MAINTAIN\x10\x04\x12-\n)PRECONDITIONING_TIMEOUT_TEMP_NOT_ACHIEVED\x10\x05\x12!\n\x1dPRECONDITIONING_ERROR_SOC_LOW\x10\x06\x12&\n\"PRECONDITIONING_ERROR_SYSTEM_FAULT\x10\x07\x12\x1f\n\x1bPRECONDITIONING_UNAVAILABLE\x10\x08\x12$\n PRECONDITIONING_TIMEOUT_COMPLETE\x10\t*\xe4\x01\n\x13PreconditioningType\x12$\n PRECONDITIONING_TYPE_UNSPECIFIED\x10\x00\x12&\n\"PRECONDITIONING_TYPE_USER_SELECTED\x10\x01\x12*\n&PRECONDITIONING_TYPE_SCREEN_PROTECTION\x10\x02\x12\"\n\x1ePRECONDITIONING_TYPE_SCHEDULED\x10\x03\x12/\n+PRECONDITIONING_TYPE_AUTO_CABIN_VENTILATION\x10\x04*\xba\x01\n\x16\x43limateHoldStatusValue\x12#\n\x1f\x43LIMATE_HOLD_STATUS_UNSPECIFIED\x10\x00\x12#\n\x1f\x43LIMATE_HOLD_STATUS_UNAVAILABLE\x10\x01\x12\x1b\n\x17\x43LIMATE_HOLD_STATUS_OFF\x10\x02\x12\x1a\n\x16\x43LIMATE_HOLD_STATUS_ON\x10\x03\x12\x1d\n\x19\x43LIMATE_HOLD_STATUS_FAULT\x10\x04*\x9d\x01\n\x17\x43limateHoldAvailability\x12)\n%CLIMATE_HOLD_AVAILABILITY_UNSPECIFIED\x10\x00\x12\x1a\n\x16\x43LIMATE_HOLD_AVAILABLE\x10\x01\x12\x1d\n\x19\x43LIMATE_HOLD_CONTROLLABLE\x10\x02\x12\x1c\n\x18\x43LIMATE_HOLD_UNAVAILABLE\x10\x03*\xc7\x01\n\x1f\x43limateHoldUnavailabilityReason\x12+\n\'CLIMATE_HOLD_UNAVAILABILITY_UNSPECIFIED\x10\x00\x12\'\n#CLIMATE_HOLD_UNAVAILABILITY_UNKNOWN\x10\x01\x12\'\n#CLIMATE_HOLD_UNAVAILABILITY_LOW_SOC\x10\x02\x12%\n!CLIMATE_HOLD_UNAVAILABILITY_FAULT\x10\x03*\x82\x01\n\rDefrostStatus\x12\x1e\n\x1a\x44\x45\x46ROST_STATUS_UNSPECIFIED\x10\x00\x12\x11\n\rDEFROST_DEFOG\x10\x01\x12\x12\n\x0e\x44\x45\x46ROST_ACTIVE\x10\x02\x12\x19\n\x15\x44\x45\x46ROST_DEFOG_DEFROST\x10\x03\x12\x0f\n\x0b\x44\x45\x46ROST_OFF\x10\x04*~\n\x13PetModeCabinClimate\x12&\n\"PET_MODE_CABIN_CLIMATE_COMFORTABLE\x10\x00\x12\x1f\n\x1bPET_MODE_CABIN_CLIMATE_COLD\x10\x01\x12\x1e\n\x1aPET_MODE_CABIN_CLIMATE_HOT\x10\x02*]\n\x0cPetModeState\x12\x10\n\x0cPET_MODE_OFF\x10\x00\x12\x0f\n\x0bPET_MODE_ON\x10\x01\x12\x15\n\x11PET_MODE_DISABLED\x10\x02\x12\x13\n\x0fPET_MODE_FAULTY\x10\x03*\x9a\x01\n\x18PetModeTemperatureStatus\x12 \n\x1cPET_MODE_TEMPERATURE_DEFAULT\x10\x00\x12\x1d\n\x19PET_MODE_TEMPERATURE_COLD\x10\x01\x12\x1c\n\x18PET_MODE_TEMPERATURE_HOT\x10\x02\x12\x1f\n\x1bPET_MODE_TEMPERATURE_FAULTY\x10\x03*\xce\x02\n\x0c\x43\x61\x62inSurface\x12\x1d\n\x19\x43\x41\x42IN_SURFACE_UNSPECIFIED\x10\x00\x12\x12\n\x0eSTEERING_WHEEL\x10\x01\x12\x0e\n\nREAR_GLASS\x10\x02\x12\x0f\n\x0b\x46RONT_GLASS\x10\x03\x12\x14\n\x10SIDEVIEW_MIRRORS\x10\x04\x12\x13\n\x0fSEAT_ROW_1_LEFT\x10\x05\x12\x15\n\x11SEAT_ROW_1_MIDDLE\x10\x06\x12\x14\n\x10SEAT_ROW_1_RIGHT\x10\x07\x12\x13\n\x0fSEAT_ROW_2_LEFT\x10\x08\x12\x15\n\x11SEAT_ROW_2_MIDDLE\x10\t\x12\x14\n\x10SEAT_ROW_2_RIGHT\x10\n\x12\x13\n\x0fSEAT_ROW_3_LEFT\x10\x0b\x12\x15\n\x11SEAT_ROW_3_MIDDLE\x10\x0c\x12\x14\n\x10SEAT_ROW_3_RIGHT\x10\r\x12\x0e\n\nWIPER_AREA\x10\x0e*c\n\x10\x43onditioningType\x12!\n\x1d\x43ONDITIONING_TYPE_UNSPECIFIED\x10\x00\x12\x15\n\x11\x43ONDITIONING_HEAT\x10\x01\x12\x15\n\x11\x43ONDITIONING_VENT\x10\x02*\x85\x01\n\x11\x43onditioningLevel\x12\"\n\x1e\x43ONDITIONING_LEVEL_UNSPECIFIED\x10\x00\x12\x18\n\x14\x43ONDITIONING_LEVEL_1\x10\x01\x12\x18\n\x14\x43ONDITIONING_LEVEL_2\x10\x02\x12\x18\n\x14\x43ONDITIONING_LEVEL_3\x10\x03\x62\x06proto3')
28
+
29
+ _globals = globals()
30
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
31
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'rivian.parallax.proto.comfort_pb2', _globals)
32
+ if not _descriptor._USE_C_DESCRIPTORS:
33
+ DESCRIPTOR._loaded_options = None
34
+ _globals['_PRECONDITIONINGSTATUS']._serialized_start=1784
35
+ _globals['_PRECONDITIONINGSTATUS']._serialized_end=2173
36
+ _globals['_PRECONDITIONINGTYPE']._serialized_start=2176
37
+ _globals['_PRECONDITIONINGTYPE']._serialized_end=2404
38
+ _globals['_CLIMATEHOLDSTATUSVALUE']._serialized_start=2407
39
+ _globals['_CLIMATEHOLDSTATUSVALUE']._serialized_end=2593
40
+ _globals['_CLIMATEHOLDAVAILABILITY']._serialized_start=2596
41
+ _globals['_CLIMATEHOLDAVAILABILITY']._serialized_end=2753
42
+ _globals['_CLIMATEHOLDUNAVAILABILITYREASON']._serialized_start=2756
43
+ _globals['_CLIMATEHOLDUNAVAILABILITYREASON']._serialized_end=2955
44
+ _globals['_DEFROSTSTATUS']._serialized_start=2958
45
+ _globals['_DEFROSTSTATUS']._serialized_end=3088
46
+ _globals['_PETMODECABINCLIMATE']._serialized_start=3090
47
+ _globals['_PETMODECABINCLIMATE']._serialized_end=3216
48
+ _globals['_PETMODESTATE']._serialized_start=3218
49
+ _globals['_PETMODESTATE']._serialized_end=3311
50
+ _globals['_PETMODETEMPERATURESTATUS']._serialized_start=3314
51
+ _globals['_PETMODETEMPERATURESTATUS']._serialized_end=3468
52
+ _globals['_CABINSURFACE']._serialized_start=3471
53
+ _globals['_CABINSURFACE']._serialized_end=3805
54
+ _globals['_CONDITIONINGTYPE']._serialized_start=3807
55
+ _globals['_CONDITIONINGTYPE']._serialized_end=3906
56
+ _globals['_CONDITIONINGLEVEL']._serialized_start=3909
57
+ _globals['_CONDITIONINGLEVEL']._serialized_end=4042
58
+ _globals['_HVACSETTINGSSTATUS']._serialized_start=64
59
+ _globals['_HVACSETTINGSSTATUS']._serialized_end=112
60
+ _globals['_USERMODESSTATE']._serialized_start=115
61
+ _globals['_USERMODESSTATE']._serialized_end=279
62
+ _globals['_CABINPRECONDITIONINGSTATUS']._serialized_start=282
63
+ _globals['_CABINPRECONDITIONINGSTATUS']._serialized_end=434
64
+ _globals['_CABINTEMPERATURES']._serialized_start=437
65
+ _globals['_CABINTEMPERATURES']._serialized_end=734
66
+ _globals['_CABINTEMPERATURES_ZONETEMPERATURE']._serialized_start=636
67
+ _globals['_CABINTEMPERATURES_ZONETEMPERATURE']._serialized_end=688
68
+ _globals['_CABINVENTILATIONSETTING']._serialized_start=736
69
+ _globals['_CABINVENTILATIONSETTING']._serialized_end=801
70
+ _globals['_CLIMATEHOLDSETTING']._serialized_start=803
71
+ _globals['_CLIMATEHOLDSETTING']._serialized_end=841
72
+ _globals['_CLIMATEHOLDSTATUS']._serialized_start=844
73
+ _globals['_CLIMATEHOLDSTATUS']._serialized_end=1187
74
+ _globals['_CLIMATEHOLDSTATUS_ENDTIME']._serialized_start=1161
75
+ _globals['_CLIMATEHOLDSTATUS_ENDTIME']._serialized_end=1187
76
+ _globals['_DEFROSTDEFOGSTATUS']._serialized_start=1189
77
+ _globals['_DEFROSTDEFOGSTATUS']._serialized_end=1265
78
+ _globals['_PETMODESTATUS']._serialized_start=1268
79
+ _globals['_PETMODESTATUS']._serialized_end=1486
80
+ _globals['_SEATCONDITIONINGSTATUS']._serialized_start=1489
81
+ _globals['_SEATCONDITIONINGSTATUS']._serialized_end=1781
82
+ _globals['_SEATCONDITIONINGSTATUS_SURFACE']._serialized_start=1590
83
+ _globals['_SEATCONDITIONINGSTATUS_SURFACE']._serialized_end=1781
84
+ # @@protoc_insertion_point(module_scope)
@@ -15,6 +15,8 @@ message VasKeyperDevices {
15
15
  message Label {
16
16
  optional string name = 1; // set on phone keys, e.g. the phone's name
17
17
  optional KeyType key_type = 3; // same as credentials.key_type
18
+ optional bool deletable = 4;
19
+ optional int32 wcc_version = 5;
18
20
  }
19
21
 
20
22
  message Device {
@@ -23,7 +25,7 @@ message VasKeyperDevices {
23
25
  optional string profile_id = 3; // the driver profile the key belongs to
24
26
  optional string public_key = 4; // phone keys; 64 bytes as hex
25
27
  optional int32 revision = 5; // key table revision when last written
26
- optional bool vehicle_response_required = 6;
28
+ optional int32 vehicle_response_required = 6;
27
29
  }
28
30
 
29
31
  message Credentials {
@@ -32,7 +34,7 @@ message VasKeyperDevices {
32
34
  KeyMaterial fob = 6; // key fob
33
35
  KeyMaterial phone = 7; // phone keys; id is the phone's UUID
34
36
  optional KeyType key_type = 9;
35
- optional bool active = 10;
37
+ optional DeviceOem device_oem = 10;
36
38
 
37
39
  message Info {
38
40
  optional int32 a = 1; // unknown
@@ -58,6 +60,15 @@ message VasKeyperDevices {
58
60
  KEY_TYPE_KEY_FOB = 4; // inferred
59
61
  }
60
62
 
63
+ enum DeviceOem {
64
+ DEVICE_OEM_UNKNOWN = 0;
65
+ DEVICE_OEM_RIVIAN = 1;
66
+ DEVICE_OEM_APPLE = 2;
67
+ DEVICE_OEM_GOOGLE = 3;
68
+ DEVICE_OEM_SAMSUNG = 4;
69
+ DEVICE_OEM_VW = 5;
70
+ }
71
+
61
72
  message KeyMaterial {
62
73
  optional bytes id = 1;
63
74
  optional bytes credential = 2; // likely key material
@@ -0,0 +1,52 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # NO CHECKED-IN PROTOBUF GENCODE
4
+ # source: rivian/parallax/proto/device_table.proto
5
+ # Protobuf Python Version: 6.31.1
6
+ """Generated protocol buffer code."""
7
+ from google.protobuf import descriptor as _descriptor
8
+ from google.protobuf import descriptor_pool as _descriptor_pool
9
+ from google.protobuf import runtime_version as _runtime_version
10
+ from google.protobuf import symbol_database as _symbol_database
11
+ from google.protobuf.internal import builder as _builder
12
+ _runtime_version.ValidateProtobufRuntimeVersion(
13
+ _runtime_version.Domain.PUBLIC,
14
+ 6,
15
+ 31,
16
+ 1,
17
+ '',
18
+ 'rivian/parallax/proto/device_table.proto'
19
+ )
20
+ # @@protoc_insertion_point(imports)
21
+
22
+ _sym_db = _symbol_database.Default()
23
+
24
+
25
+
26
+
27
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n(rivian/parallax/proto/device_table.proto\x12\x1crivian.parallax.device_table\"\xd6\x0e\n\x10VasKeyperDevices\x12\x43\n\x05label\x18\x01 \x01(\x0b\x32\x34.rivian.parallax.device_table.VasKeyperDevices.Label\x12\x45\n\x06\x64\x65vice\x18\x02 \x01(\x0b\x32\x35.rivian.parallax.device_table.VasKeyperDevices.Device\x12O\n\x0b\x63redentials\x18\x03 \x01(\x0b\x32:.rivian.parallax.device_table.VasKeyperDevices.Credentials\x1a\xcf\x01\n\x05Label\x12\x11\n\x04name\x18\x01 \x01(\tH\x00\x88\x01\x01\x12M\n\x08key_type\x18\x03 \x01(\x0e\x32\x36.rivian.parallax.device_table.VasKeyperDevices.KeyTypeH\x01\x88\x01\x01\x12\x16\n\tdeletable\x18\x04 \x01(\x08H\x02\x88\x01\x01\x12\x18\n\x0bwcc_version\x18\x05 \x01(\x05H\x03\x88\x01\x01\x42\x07\n\x05_nameB\x0b\n\t_key_typeB\x0c\n\n_deletableB\x0e\n\x0c_wcc_version\x1a\x96\x02\n\x06\x44\x65vice\x12\x1f\n\x12mapped_identity_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04hrid\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x17\n\nprofile_id\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x17\n\npublic_key\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x15\n\x08revision\x18\x05 \x01(\x05H\x04\x88\x01\x01\x12&\n\x19vehicle_response_required\x18\x06 \x01(\x05H\x05\x88\x01\x01\x42\x15\n\x13_mapped_identity_idB\x07\n\x05_hridB\r\n\x0b_profile_idB\r\n\x0b_public_keyB\x0b\n\t_revisionB\x1c\n\x1a_vehicle_response_required\x1a\x9d\x05\n\x0b\x43redentials\x12M\n\x04info\x18\x01 \x01(\x0b\x32?.rivian.parallax.device_table.VasKeyperDevices.Credentials.Info\x12H\n\x04\x63\x61rd\x18\x05 \x01(\x0b\x32:.rivian.parallax.device_table.VasKeyperDevices.KeyMaterial\x12G\n\x03\x66ob\x18\x06 \x01(\x0b\x32:.rivian.parallax.device_table.VasKeyperDevices.KeyMaterial\x12I\n\x05phone\x18\x07 \x01(\x0b\x32:.rivian.parallax.device_table.VasKeyperDevices.KeyMaterial\x12M\n\x08key_type\x18\t \x01(\x0e\x32\x36.rivian.parallax.device_table.VasKeyperDevices.KeyTypeH\x00\x88\x01\x01\x12Q\n\ndevice_oem\x18\n \x01(\x0e\x32\x38.rivian.parallax.device_table.VasKeyperDevices.DeviceOemH\x01\x88\x01\x01\x1a\xa2\x01\n\x04Info\x12\x0e\n\x01\x61\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\x0e\n\x01\x63\x18\x04 \x01(\x05H\x01\x88\x01\x01\x12M\n\x06status\x18\x05 \x01(\x0e\x32\x38.rivian.parallax.device_table.VasKeyperDevices.KeyStatusH\x02\x88\x01\x01\x12\x0e\n\x01\x62\x18\x06 \x01(\x05H\x03\x88\x01\x01\x42\x04\n\x02_aB\x04\n\x02_cB\t\n\x07_statusB\x04\n\x02_bB\x0b\n\t_key_typeB\r\n\x0b_device_oem\x1aM\n\x0bKeyMaterial\x12\x0f\n\x02id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x17\n\ncredential\x18\x02 \x01(\x0cH\x01\x88\x01\x01\x42\x05\n\x03_idB\r\n\x0b_credential\"\x8f\x01\n\tKeyStatus\x12\x1a\n\x16KEY_STATUS_UNSPECIFIED\x10\x00\x12\x15\n\x11KEY_STATUS_ACTIVE\x10\x01\x12\x17\n\x13KEY_STATUS_INACTIVE\x10\x03\x12\x1e\n\x1aKEY_STATUS_WAITING_TO_PAIR\x10\x05\x12\x16\n\x12KEY_STATUS_PAIRING\x10\x07\"d\n\x07KeyType\x12\x18\n\x14KEY_TYPE_UNSPECIFIED\x10\x00\x12\x12\n\x0eKEY_TYPE_PHONE\x10\x02\x12\x15\n\x11KEY_TYPE_KEY_CARD\x10\x03\x12\x14\n\x10KEY_TYPE_KEY_FOB\x10\x04\"\x92\x01\n\tDeviceOem\x12\x16\n\x12\x44\x45VICE_OEM_UNKNOWN\x10\x00\x12\x15\n\x11\x44\x45VICE_OEM_RIVIAN\x10\x01\x12\x14\n\x10\x44\x45VICE_OEM_APPLE\x10\x02\x12\x15\n\x11\x44\x45VICE_OEM_GOOGLE\x10\x03\x12\x16\n\x12\x44\x45VICE_OEM_SAMSUNG\x10\x04\x12\x11\n\rDEVICE_OEM_VW\x10\x05\x62\x06proto3')
28
+
29
+ _globals = globals()
30
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
31
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'rivian.parallax.proto.device_table_pb2', _globals)
32
+ if not _descriptor._USE_C_DESCRIPTORS:
33
+ DESCRIPTOR._loaded_options = None
34
+ _globals['_VASKEYPERDEVICES']._serialized_start=75
35
+ _globals['_VASKEYPERDEVICES']._serialized_end=1953
36
+ _globals['_VASKEYPERDEVICES_LABEL']._serialized_start=317
37
+ _globals['_VASKEYPERDEVICES_LABEL']._serialized_end=524
38
+ _globals['_VASKEYPERDEVICES_DEVICE']._serialized_start=527
39
+ _globals['_VASKEYPERDEVICES_DEVICE']._serialized_end=805
40
+ _globals['_VASKEYPERDEVICES_CREDENTIALS']._serialized_start=808
41
+ _globals['_VASKEYPERDEVICES_CREDENTIALS']._serialized_end=1477
42
+ _globals['_VASKEYPERDEVICES_CREDENTIALS_INFO']._serialized_start=1287
43
+ _globals['_VASKEYPERDEVICES_CREDENTIALS_INFO']._serialized_end=1449
44
+ _globals['_VASKEYPERDEVICES_KEYMATERIAL']._serialized_start=1479
45
+ _globals['_VASKEYPERDEVICES_KEYMATERIAL']._serialized_end=1556
46
+ _globals['_VASKEYPERDEVICES_KEYSTATUS']._serialized_start=1559
47
+ _globals['_VASKEYPERDEVICES_KEYSTATUS']._serialized_end=1702
48
+ _globals['_VASKEYPERDEVICES_KEYTYPE']._serialized_start=1704
49
+ _globals['_VASKEYPERDEVICES_KEYTYPE']._serialized_end=1804
50
+ _globals['_VASKEYPERDEVICES_DEVICEOEM']._serialized_start=1807
51
+ _globals['_VASKEYPERDEVICES_DEVICEOEM']._serialized_end=1953
52
+ # @@protoc_insertion_point(module_scope)