rivian-python-client 2.2.0b11__tar.gz → 2.2.0b12__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 (101) hide show
  1. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/PKG-INFO +1 -1
  2. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/__version__.py +1 -1
  3. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/body.py +3 -3
  4. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/comfort.py +12 -12
  5. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/departure.py +21 -21
  6. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/device_table.py +24 -6
  7. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/dynamics.py +14 -8
  8. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/holiday_celebration.py +13 -2
  9. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/navigation.py +4 -4
  10. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/ota.py +17 -18
  11. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/body.proto +10 -9
  12. rivian_python_client-2.2.0b12/src/rivian/parallax/proto/body_pb2.py +84 -0
  13. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/charging.proto +2 -0
  14. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/comfort.proto +1 -1
  15. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/device_table.proto +43 -8
  16. rivian_python_client-2.2.0b12/src/rivian/parallax/proto/device_table_pb2.py +60 -0
  17. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/device_table_pb2.pyi +54 -4
  18. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/dynamics.proto +1 -1
  19. rivian_python_client-2.2.0b12/src/rivian/parallax/proto/dynamics_pb2.py +74 -0
  20. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/dynamics_pb2.pyi +4 -4
  21. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/holiday_celebration.proto +13 -4
  22. rivian_python_client-2.2.0b12/src/rivian/parallax/proto/holiday_celebration_pb2.py +56 -0
  23. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/holiday_celebration_pb2.pyi +13 -2
  24. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/navigation.proto +2 -2
  25. rivian_python_client-2.2.0b12/src/rivian/parallax/proto/navigation_pb2.py +76 -0
  26. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/navigation_pb2.pyi +4 -4
  27. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/ota.proto +4 -4
  28. rivian_python_client-2.2.0b12/src/rivian/parallax/proto/ota_pb2.py +78 -0
  29. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/ota_pb2.pyi +6 -6
  30. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/vehicle.proto +2 -2
  31. rivian_python_client-2.2.0b11/src/rivian/parallax/proto/body_pb2.py +0 -84
  32. rivian_python_client-2.2.0b11/src/rivian/parallax/proto/device_table_pb2.py +0 -52
  33. rivian_python_client-2.2.0b11/src/rivian/parallax/proto/dynamics_pb2.py +0 -74
  34. rivian_python_client-2.2.0b11/src/rivian/parallax/proto/holiday_celebration_pb2.py +0 -54
  35. rivian_python_client-2.2.0b11/src/rivian/parallax/proto/navigation_pb2.py +0 -76
  36. rivian_python_client-2.2.0b11/src/rivian/parallax/proto/ota_pb2.py +0 -78
  37. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/.gitignore +0 -0
  38. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/README.md +0 -0
  39. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/pyproject.toml +0 -0
  40. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/__init__.py +0 -0
  41. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/ble.py +0 -0
  42. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/const.py +0 -0
  43. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/exceptions.py +0 -0
  44. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/__init__.py +0 -0
  45. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/charging.py +0 -0
  46. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/core.py +0 -0
  47. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/energy.py +0 -0
  48. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/energy_edge_compute.py +0 -0
  49. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/gearguard_streaming.py +0 -0
  50. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/geofence.py +0 -0
  51. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/parallax.py +0 -0
  52. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/__init__.py +0 -0
  53. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/body_pb2.pyi +0 -0
  54. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/charging_pb2.py +0 -0
  55. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/charging_pb2.pyi +0 -0
  56. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/comfort_pb2.py +0 -0
  57. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/comfort_pb2.pyi +0 -0
  58. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/departure.proto +0 -0
  59. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/departure_pb2.py +0 -0
  60. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/departure_pb2.pyi +0 -0
  61. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/energy.proto +0 -0
  62. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/energy_edge_compute.proto +0 -0
  63. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/energy_edge_compute_pb2.py +0 -0
  64. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/energy_edge_compute_pb2.pyi +0 -0
  65. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/energy_pb2.py +0 -0
  66. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/energy_pb2.pyi +0 -0
  67. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/gearguard_streaming.proto +0 -0
  68. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/gearguard_streaming_pb2.py +0 -0
  69. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/gearguard_streaming_pb2.pyi +0 -0
  70. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/geofence.proto +0 -0
  71. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/geofence_pb2.py +0 -0
  72. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/geofence_pb2.pyi +0 -0
  73. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/parallax.proto +0 -0
  74. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/parallax_pb2.py +0 -0
  75. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/parallax_pb2.pyi +0 -0
  76. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/secure_file_transfer.proto +0 -0
  77. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/secure_file_transfer_pb2.py +0 -0
  78. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/secure_file_transfer_pb2.pyi +0 -0
  79. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/security.proto +0 -0
  80. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/security_pb2.py +0 -0
  81. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/security_pb2.pyi +0 -0
  82. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/user_passcodes.proto +0 -0
  83. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/user_passcodes_pb2.py +0 -0
  84. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/user_passcodes_pb2.pyi +0 -0
  85. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/vehicle_access.proto +0 -0
  86. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/vehicle_access_pb2.py +0 -0
  87. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/vehicle_access_pb2.pyi +0 -0
  88. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/vehicle_pb2.py +0 -0
  89. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/proto/vehicle_pb2.pyi +0 -0
  90. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/secure_file_transfer.py +0 -0
  91. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/security.py +0 -0
  92. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/user_passcodes.py +0 -0
  93. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/vehicle.py +0 -0
  94. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/parallax/vehicle_access.py +0 -0
  95. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/py.typed +0 -0
  96. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/rivian.py +0 -0
  97. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/schemas/charging.graphql +0 -0
  98. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/schemas/gateway.graphql +0 -0
  99. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/schemas/orders.graphql +0 -0
  100. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/src/rivian/utils.py +0 -0
  101. {rivian_python_client-2.2.0b11 → rivian_python_client-2.2.0b12}/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.0b11
3
+ Version: 2.2.0b12
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.0b11'
4
+ __version__ = VERSION = '2.2.0b12'
@@ -126,8 +126,8 @@ _WINDOW_MAP: Final[dict[int, str]] = {
126
126
 
127
127
  # GraphQL's windowXCalibrated values.
128
128
  _CALIBRATION_MAP: Final[dict[int, str]] = {
129
- body_pb2.CALIBRATION_STATUS_CALIBRATED: "Calibrated",
130
- body_pb2.CALIBRATION_STATUS_NOT_CALIBRATED: "Not_Calibrated",
129
+ body_pb2.CALIBRATION_STATUS_CALIBRATED: "calibrated",
130
+ body_pb2.CALIBRATION_STATUS_NOT_CALIBRATED: "not_calibrated",
131
131
  }
132
132
 
133
133
  _TRAILER_PRESENCE_MAP: Final[dict[int, str]] = {
@@ -204,7 +204,7 @@ def decode_windows(m: body_pb2.WindowsState) -> dict[str, Any]:
204
204
  Fields:
205
205
  windowFrontLeftCalibrated, windowFrontRightCalibrated,
206
206
  windowRearLeftCalibrated, windowRearRightCalibrated,
207
- windowRearCalibrated: str ("Calibrated" | "Not_Calibrated")
207
+ windowRearCalibrated: str ("calibrated" | "not_calibrated")
208
208
  """
209
209
  return {
210
210
  _WINDOW_MAP[w.instance]: _enum(
@@ -63,10 +63,10 @@ _CLIMATE_HOLD_UNAVAILABILITY_REASON_MAP: Final[dict[int, str]] = {
63
63
  }
64
64
 
65
65
  _DEFROST_MAP: Final[dict[int, str]] = {
66
- comfort_pb2.DEFROST_DEFOG: "Defog",
67
- comfort_pb2.DEFROST_ACTIVE: "Defrost",
68
- comfort_pb2.DEFROST_DEFOG_DEFROST: "Defog_Defrost",
69
- comfort_pb2.DEFROST_OFF: "Off",
66
+ comfort_pb2.DEFROST_DEFOG: "defog",
67
+ comfort_pb2.DEFROST_ACTIVE: "defrost",
68
+ comfort_pb2.DEFROST_DEFOG_DEFROST: "defog_defrost",
69
+ comfort_pb2.DEFROST_OFF: "off",
70
70
  }
71
71
 
72
72
  # GraphQL's cabinPreconditioningStatus / cabinPreconditioningType values.
@@ -132,10 +132,10 @@ _CABIN_SURFACE_MAP: Final[dict[int, str]] = {
132
132
  }
133
133
 
134
134
  _CONDITIONING_LEVEL_MAP: Final[dict[int | None, str]] = {
135
- None: "Off",
136
- comfort_pb2.CONDITIONING_LEVEL_1: "Level_1",
137
- comfort_pb2.CONDITIONING_LEVEL_2: "Level_2",
138
- comfort_pb2.CONDITIONING_LEVEL_3: "Level_3",
135
+ None: "off",
136
+ comfort_pb2.CONDITIONING_LEVEL_1: "level_1",
137
+ comfort_pb2.CONDITIONING_LEVEL_2: "level_2",
138
+ comfort_pb2.CONDITIONING_LEVEL_3: "level_3",
139
139
  }
140
140
 
141
141
  _CONDITIONING_TYPE_MAP: Final[dict[int, str]] = {
@@ -248,8 +248,8 @@ def decode_defrost_status(m: comfort_pb2.DefrostDefogStatus) -> dict[str, Any]:
248
248
  """comfort.cabin.defrost_defog_status — windshield defrost state.
249
249
 
250
250
  Fields:
251
- defrostDefogStatus: str | None ("Defog" | "Defrost" | "Defog_Defrost"
252
- | "Off")
251
+ defrostDefogStatus: str | None ("defog" | "defrost" | "defog_defrost"
252
+ | "off")
253
253
  """
254
254
  return {
255
255
  "defrostDefogStatus": _enum(
@@ -293,8 +293,8 @@ def decode_seat_conditioning(m: comfort_pb2.SeatConditioningStatus) -> dict[str,
293
293
  seatFrontLeftHeat, seatFrontLeftVent, seatFrontRightHeat,
294
294
  seatFrontRightVent, seatRearLeftHeat, seatRearRightHeat,
295
295
  seatThirdRowLeftHeat, seatThirdRowRightHeat: str
296
- ("Off" | "Level_1" | "Level_2" | "Level_3")
297
- steeringWheelHeat: str ("Off" | "Level_1")
296
+ ("off" | "level_1" | "level_2" | "level_3")
297
+ steeringWheelHeat: str ("off" | "level_1")
298
298
  plus <surface>Heat/Vent for any other surface sent (middle seats,
299
299
  rearGlass, frontGlass, sideviewMirrors, wiperArea)
300
300
 
@@ -12,28 +12,28 @@ _Schedules = departure_pb2.DepartureSchedules
12
12
 
13
13
  # Days field -> gateway WeekDay value.
14
14
  _WEEKDAYS = (
15
- ("monday", "Monday"),
16
- ("tuesday", "Tuesday"),
17
- ("wednesday", "Wednesday"),
18
- ("thursday", "Thursday"),
19
- ("friday", "Friday"),
20
- ("saturday", "Saturday"),
21
- ("sunday", "Sunday"),
15
+ ("monday", "monday"),
16
+ ("tuesday", "tuesday"),
17
+ ("wednesday", "wednesday"),
18
+ ("thursday", "thursday"),
19
+ ("friday", "friday"),
20
+ ("saturday", "saturday"),
21
+ ("sunday", "sunday"),
22
22
  )
23
23
 
24
24
  _DEFOG_DEFROST = {
25
- departure_pb2.DEFOG_DEFROST_OFF: "Off",
26
- departure_pb2.DEFOG_DEFROST_DEFOG: "Defog",
27
- departure_pb2.DEFOG_DEFROST_DEFROST: "Defrost",
25
+ departure_pb2.DEFOG_DEFROST_OFF: "off",
26
+ departure_pb2.DEFOG_DEFROST_DEFOG: "defog",
27
+ departure_pb2.DEFOG_DEFROST_DEFROST: "defrost",
28
28
  }
29
29
  _SURFACE_LEVEL = {
30
- departure_pb2.SURFACE_OFF: "Off",
31
- departure_pb2.SURFACE_HEAT_1: "Heat1",
32
- departure_pb2.SURFACE_HEAT_2: "Heat2",
33
- departure_pb2.SURFACE_HEAT_3: "Heat3",
34
- departure_pb2.SURFACE_VENT_1: "Vent1",
35
- departure_pb2.SURFACE_VENT_2: "Vent2",
36
- departure_pb2.SURFACE_VENT_3: "Vent3",
30
+ departure_pb2.SURFACE_OFF: "off",
31
+ departure_pb2.SURFACE_HEAT_1: "heat_1",
32
+ departure_pb2.SURFACE_HEAT_2: "heat_2",
33
+ departure_pb2.SURFACE_HEAT_3: "heat_3",
34
+ departure_pb2.SURFACE_VENT_1: "vent_1",
35
+ departure_pb2.SURFACE_VENT_2: "vent_2",
36
+ departure_pb2.SURFACE_VENT_3: "vent_3",
37
37
  }
38
38
  _SURFACES = (
39
39
  ("front_left_seat", "frontLeftSeat"),
@@ -86,14 +86,14 @@ def decode_departure_schedules(m: departure_pb2.DepartureSchedules) -> dict[str,
86
86
  Fields:
87
87
  departureSchedules: list[dict] — the gateway's DepartureSchedule shape:
88
88
  id: str, name: str, isEnabled: bool
89
- occurrence: {"days": list[str] ("Monday" ... "Sunday"; order
89
+ occurrence: {"days": list[str] ("monday" ... "sunday"; order
90
90
  inferred), "startsAtMin": int (minutes after local midnight)}
91
91
  departureSettings: {"shouldOverrideChargeSchedule": bool,
92
92
  "comfortSettings": {"cabinTempCelsius": float,
93
- "frontDefogDefrost": "Off" | "Defog" | "Defrost",
93
+ "frontDefogDefrost": "off" | "defog" | "defrost",
94
94
  "surfaceHeatVentLevels": {frontLeftSeat, frontRightSeat,
95
- rearLeftSeat, rearRightSeat, steeringWheel: "Off" |
96
- "Heat1" ... "Vent3"}}}
95
+ rearLeftSeat, rearRightSeat, steeringWheel: "off" |
96
+ "heat_1" ... "vent_3"}}}
97
97
  departureSchedulesUpdatedAt: datetime
98
98
  """
99
99
  result: dict[str, Any] = {
@@ -5,6 +5,7 @@ from __future__ import annotations
5
5
  import uuid
6
6
  from typing import Any, Final
7
7
 
8
+ from ..utils import from_epoch
8
9
  from .core import RVMDecoder, _enum, _present
9
10
  from .proto import device_table_pb2
10
11
 
@@ -59,9 +60,14 @@ def decode_vas_keyper_devices(m: device_table_pb2.VasKeyperDevices) -> dict[str,
59
60
  infoC: int — 1 while active, 2147483647 while inactive, else the
60
61
  pairing attempt number
61
62
  infoA, infoB: int — unknown
63
+ keyPermissions: int — raw
64
+ keyCreatedAt, keyExpiresAt: datetime — when sent and non-zero
65
+ keyMaterial: str — which key material is set ("owner" | "friend" |
66
+ "card" | "fob" | "phone" | "fob2")
62
67
  deviceId: str — hex; for a key card, the GraphQL `devices[].id`
68
+ nfcDeviceId: str — hex; fob2's NFC id (deviceId is its BLE id)
63
69
  phoneId: str — the phone's UUID; phone keys
64
- credentialHex: str — hex; likely key material
70
+ credentialHex: str — hex; the wrapped shared secret
65
71
  deviceOem: str ("unknown" | "rivian" | "apple" | "google" |
66
72
  "samsung" | "vw") — the device maker
67
73
  """
@@ -100,17 +106,29 @@ def decode_vas_keyper_devices(m: device_table_pb2.VasKeyperDevices) -> dict[str,
100
106
  result[key] = v
101
107
  if (v := _present(credentials.info, "status")) is not None:
102
108
  result["keyStatus"] = _enum(_KEY_STATUS_MAP, v, what="key status")
103
- for field in ("card", "fob", "phone"):
104
- if not credentials.HasField(field):
105
- continue
109
+ if (v := _present(credentials.info, "permissions")) is not None:
110
+ result["keyPermissions"] = v
111
+ for field, key in (
112
+ ("created_at", "keyCreatedAt"),
113
+ ("expires_at", "keyExpiresAt"),
114
+ ):
115
+ if v := _present(credentials.info, field):
116
+ result[key] = from_epoch(v)
117
+ if (field := credentials.WhichOneof("material")) is not None:
118
+ result["keyMaterial"] = field
106
119
  material = getattr(credentials, field)
107
- if (ident := _present(material, "id")) is not None:
120
+ id_field, cred_field = (
121
+ ("ble_id", "ble_credential") if field == "fob2" else ("id", "credential")
122
+ )
123
+ if (ident := _present(material, id_field)) is not None:
108
124
  if field == "phone" and len(ident) == 16:
109
125
  result["phoneId"] = str(uuid.UUID(bytes=ident))
110
126
  else:
111
127
  result["deviceId"] = ident.hex()
112
- if (cred := _present(material, "credential")) is not None:
128
+ if (cred := _present(material, cred_field)) is not None:
113
129
  result["credentialHex"] = cred.hex()
130
+ if field == "fob2" and (ident := _present(material, "nfc_id")) is not None:
131
+ result["nfcDeviceId"] = ident.hex()
114
132
  if (v := _present(credentials, "key_type")) is not None:
115
133
  result["keyType"] = _enum(_KEY_TYPE_MAP, v, what="key type")
116
134
  if (v := _present(credentials, "device_oem")) is not None:
@@ -53,9 +53,8 @@ _TEMPERATURE_IMPACT_MAP: Final[dict[int, str]] = {
53
53
  dynamics_pb2.TEMPERATURE_COLD_IMPACT: "cold_impact",
54
54
  }
55
55
 
56
- # "OK" is the GraphQL value for normal.
57
56
  _TIRE_PRESSURE_STATUS_MAP: Final[dict[int, str]] = {
58
- dynamics_pb2.TIRE_PRESSURE_STATUS_NORMAL: "OK",
57
+ dynamics_pb2.TIRE_PRESSURE_STATUS_NORMAL: "ok",
59
58
  dynamics_pb2.TIRE_PRESSURE_STATUS_WARNING_HARD: "warning_hard",
60
59
  dynamics_pb2.TIRE_PRESSURE_STATUS_WARNING_SOFT: "warning_soft",
61
60
  dynamics_pb2.TIRE_PRESSURE_STATUS_WARNING_PUNCTURE: "warning_puncture",
@@ -195,15 +194,21 @@ def decode_range(m: dynamics_pb2.Range) -> dict[str, Any]:
195
194
  }
196
195
 
197
196
 
197
+ # The app's enum class for tire validity was stripped; only 0 and 1 are known.
198
+ _TIRE_VALID: Final = 0
199
+ _TIRE_VALIDITY_MAP: Final[dict[int, str]] = {_TIRE_VALID: "valid", 1: "invalid"}
200
+
201
+
198
202
  @RVMDecoder.register("dynamics.tires.state", dynamics_pb2.TiresState)
199
203
  def decode_tires(m: dynamics_pb2.TiresState) -> dict[str, Any]:
200
204
  """dynamics.tires.state — per-tire pressure, status and validity.
201
205
 
202
206
  Fields:
203
207
  tirePressureFrontLeft, tirePressureFrontRight, etc.: float (bar)
204
- tirePressureStatusFrontLeft, etc.: str ("OK" | "warning_hard" |
208
+ tirePressureStatusFrontLeft, etc.: str ("ok" | "warning_hard" |
205
209
  "warning_soft" | "warning_puncture")
206
- tirePressureStatusValidFrontLeft, etc.: str ("valid" | "invalid")
210
+ tirePressureStatusValidFrontLeft, etc.: str ("valid" | "invalid"),
211
+ or the raw int for an unmapped validity
207
212
  """
208
213
  result: dict[str, Any] = {}
209
214
  for s in m.tire:
@@ -212,10 +217,11 @@ def decode_tires(m: dynamics_pb2.TiresState) -> dict[str, Any]:
212
217
  continue
213
218
  suffix = _TIRE_POSITION_MAP[s.pos]
214
219
 
215
- # Pressure and status are stale while invalid.
216
- valid = not s.invalid
217
- result[f"tirePressureStatusValid{suffix}"] = "valid" if valid else "invalid"
218
- if not valid:
220
+ # Pressure and status are stale unless valid.
221
+ result[f"tirePressureStatusValid{suffix}"] = _enum(
222
+ _TIRE_VALIDITY_MAP, s.validity, what="tire validity"
223
+ )
224
+ if s.validity != _TIRE_VALID:
219
225
  continue
220
226
 
221
227
  if (pressure := _present(s, "pressure")) is not None:
@@ -20,6 +20,12 @@ def decode_holiday_celebration_enabled(
20
20
  return {}
21
21
 
22
22
 
23
+ _COSTUME_THEME_MAP: Final[dict[int, str]] = {
24
+ holiday_celebration_pb2.CAR_COSTUME_THEME_NONE: "none",
25
+ holiday_celebration_pb2.CAR_COSTUME_THEME_GHOSTBUSTERS: "ghostbusters",
26
+ holiday_celebration_pb2.CAR_COSTUME_THEME_GHOSTBUSTERS_DISPLAY: "ghostbusters_display",
27
+ }
28
+
23
29
  _COSTUME_EFFECT_TRIGGER_MAP: Final[dict[int, str]] = {
24
30
  holiday_celebration_pb2.COSTUME_EFFECT_TRIGGER_MANUAL: "manual",
25
31
  holiday_celebration_pb2.COSTUME_EFFECT_TRIGGER_MOTION: "motion",
@@ -81,14 +87,19 @@ def decode_car_costume_state(
81
87
 
82
88
  Fields:
83
89
  carCostumeAvailability: int
84
- costumeTheme: int
90
+ costumeTheme: str | None ("none" | "ghostbusters" |
91
+ "ghostbusters_display"; inferred), None when unset
85
92
  costumeMotionTriggerDetected: bool
86
93
  activeCostumeEffect: int
87
94
  costumeStartTime: datetime, only when sent
88
95
  """
89
96
  result: dict[str, Any] = {
90
97
  "carCostumeAvailability": m.car_costume_availability,
91
- "costumeTheme": m.costume_theme,
98
+ "costumeTheme": (
99
+ _enum(_COSTUME_THEME_MAP, m.costume_theme, what="costume theme")
100
+ if m.costume_theme
101
+ else None
102
+ ),
92
103
  "costumeMotionTriggerDetected": m.motion_trigger_detected,
93
104
  "activeCostumeEffect": m.active_costume_effect,
94
105
  }
@@ -85,7 +85,7 @@ def _decode_origin(origin: navigation_pb2.GpsFix) -> dict[str, Any]:
85
85
  result = _decode_geocoordinate(
86
86
  _present(origin, "location"), "originLatitude", "originLongitude"
87
87
  )
88
- result["originHeading"] = origin.heading
88
+ result["originBearing"] = origin.bearing
89
89
  if (origin_epoch := _present(origin, "time")) is not None:
90
90
  result["originTime"] = from_epoch(origin_epoch)
91
91
  return result
@@ -282,7 +282,7 @@ def decode_trip_info(m: navigation_pb2.TripInfo) -> dict[str, Any]:
282
282
  tripId: str — changes on every route computation, so it can't
283
283
  correlate messages
284
284
  originLatitude, originLongitude: float
285
- originHeading: float (degrees)
285
+ originBearing: float (degrees)
286
286
  originTime: datetime
287
287
  originStateOfCharge: float (percent)
288
288
  distance, duration: float — driving totals (meters, seconds),
@@ -354,7 +354,7 @@ def decode_trip_progress(m: navigation_pb2.TripProgress) -> dict[str, Any]:
354
354
  (meters, seconds)
355
355
  latitude, longitude: float
356
356
  speed: float (m/s)
357
- heading: float (degrees)
357
+ bearing: float (degrees)
358
358
  locationTime: datetime — time of the position fix
359
359
  """
360
360
  result: dict[str, Any] = {}
@@ -371,7 +371,7 @@ def decode_trip_progress(m: navigation_pb2.TripProgress) -> dict[str, Any]:
371
371
  _decode_geocoordinate(_present(fix, "location"), "latitude", "longitude")
372
372
  )
373
373
  result["speed"] = fix.speed
374
- result["heading"] = fix.heading
374
+ result["bearing"] = fix.bearing
375
375
  if (fix_epoch := _present(fix, "time")) is not None:
376
376
  result["locationTime"] = from_epoch(fix_epoch)
377
377
  return result
@@ -27,24 +27,23 @@ _OTA_STATUS_MAP: Final[dict[int, str]] = {
27
27
 
28
28
 
29
29
  _Deployment = ota_pb2.DeploymentState
30
- # The app's GraphQL-style strings.
31
30
  _CURRENT_STATUS_MAP: Final[dict[int, str]] = {
32
- _Deployment.CURRENT_STATUS_INSTALL_SUCCESS: "Install_Success",
33
- _Deployment.CURRENT_STATUS_INSTALL_FAILED: "Install_Failed",
34
- _Deployment.CURRENT_STATUS_INSTALL_UNABLE_TO_START: "Install_Unable_To_Start",
31
+ _Deployment.CURRENT_STATUS_INSTALL_SUCCESS: "install_success",
32
+ _Deployment.CURRENT_STATUS_INSTALL_FAILED: "install_failed",
33
+ _Deployment.CURRENT_STATUS_INSTALL_UNABLE_TO_START: "install_unable_to_start",
35
34
  }
36
35
 
37
36
  _DEPLOYMENT_INTENT_MAP: Final[dict[int, str]] = {
38
- _Deployment.DEPLOYMENT_INTENT_PERFORMANCE_UPGRADE: "Performance_Upgrade",
39
- _Deployment.DEPLOYMENT_INTENT_BUG_FIX: "Bug_Fix",
40
- _Deployment.DEPLOYMENT_INTENT_SECURITY_UPDATE: "Security_Update",
41
- _Deployment.DEPLOYMENT_INTENT_FEATURE_ADDITION: "Feature_Addition",
37
+ _Deployment.DEPLOYMENT_INTENT_PERFORMANCE_UPGRADE: "performance_upgrade",
38
+ _Deployment.DEPLOYMENT_INTENT_BUG_FIX: "bug_fix",
39
+ _Deployment.DEPLOYMENT_INTENT_SECURITY_UPDATE: "security_update",
40
+ _Deployment.DEPLOYMENT_INTENT_FEATURE_ADDITION: "feature_addition",
42
41
  }
43
42
 
44
43
  _SOFTWARE_CATEGORY_MAP: Final[dict[int, str]] = {
45
- _Deployment.SOFTWARE_CATEGORY_FIRMWARE: "Firmware",
46
- _Deployment.SOFTWARE_CATEGORY_HD_MAPS: "HD_Maps",
47
- _Deployment.SOFTWARE_CATEGORY_VEHICLE_CONFIG: "Vehicle_Config",
44
+ _Deployment.SOFTWARE_CATEGORY_FIRMWARE: "firmware",
45
+ _Deployment.SOFTWARE_CATEGORY_HD_MAPS: "hd_maps",
46
+ _Deployment.SOFTWARE_CATEGORY_VEHICLE_CONFIG: "vehicle_config",
48
47
  }
49
48
 
50
49
 
@@ -56,8 +55,8 @@ def _decode_version(
56
55
  for field, key in (
57
56
  ("version_string", "Version"),
58
57
  ("version_year", "VersionYear"),
59
- ("version_build", "VersionWeek"),
60
- ("build_id", "VersionGitHash"),
58
+ ("version_week", "VersionWeek"),
59
+ ("git_hash", "VersionGitHash"),
61
60
  ):
62
61
  if (v := _present(version, field)) is not None:
63
62
  result[f"{prefix}{key}"] = v
@@ -80,7 +79,7 @@ def decode_deployment_state(m: ota_pb2.DeploymentState) -> dict[str, Any]:
80
79
  otaCurrentVersionYear, otaCurrentVersionWeek,
81
80
  otaCurrentVersionNumber: int
82
81
  otaCurrentVersionGitHash: str
83
- otaSoftwareCategory: str ("Firmware" | "HD_Maps" | "Vehicle_Config")
82
+ otaSoftwareCategory: str ("firmware" | "hd_maps" | "vehicle_config")
84
83
  otaUpdateInProgress: bool
85
84
  otaDeploymentId: str — UUID, only while an update is in flight
86
85
  otaAvailableVersion, otaAvailableVersionYear,
@@ -94,13 +93,13 @@ def decode_deployment_state(m: ota_pb2.DeploymentState) -> dict[str, Any]:
94
93
  otaDownloadProgress, otaInstallProgress: int (0-100)
95
94
  otaTimeRemaining: int (seconds; counts down during
96
95
  "install_countdown", a static default otherwise)
97
- otaCurrentStatus: str | None ("Install_Success" | "Install_Failed" |
98
- "Install_Unable_To_Start") — the last install's result
96
+ otaCurrentStatus: str | None ("install_success" | "install_failed" |
97
+ "install_unable_to_start") — the last install's result
99
98
  otaInstallReady: str ("ota_available" | "ota_not_available")
100
99
  otaInstallDuration: int (minutes)
101
100
  otaInstallTimeOfDay: int (minutes after local midnight), when set
102
- otaDeploymentIntent: str | None ("Performance_Upgrade" | "Bug_Fix" |
103
- "Security_Update" | "Feature_Addition")
101
+ otaDeploymentIntent: str | None ("performance_upgrade" | "bug_fix" |
102
+ "security_update" | "feature_addition")
104
103
  otaSkipAllowed: bool, otaSkipCount: int
105
104
  otaPendingReasons: list[str] — what's blocking an install, e.g.
106
105
  "not_parked", "unplugged", "lv_batt"
@@ -12,16 +12,17 @@ message ClosuresState {
12
12
  int32 open_position_percent = 3;
13
13
  // Unset on doors and windows; briefly GENERAL while re-reporting.
14
14
  ClosureFault fault = 4;
15
- optional WindowsNextAction windows_next_action = 5; // on GROUP_WINDOWS
16
-
17
- // One field per closure type. Briefly SNA / not-available while the
15
+ // One member per closure type. Briefly SNA / not-available while the
18
16
  // vehicle re-reports after an app command.
19
- optional FrunkNextAction frunk_next_action = 6;
20
- optional LiftgateNextAction liftgate_next_action = 7;
21
- optional SideBinNextAction side_bin_next_action = 8;
22
- optional TailgateNextAction tailgate_next_action = 9;
23
- optional ChargePortDoorNextAction charge_port_door_next_action = 10;
24
- int32 tonneau_next_action = 11; // enum type unknown
17
+ oneof next_action {
18
+ WindowsNextAction windows_next_action = 5; // on GROUP_WINDOWS
19
+ FrunkNextAction frunk_next_action = 6;
20
+ LiftgateNextAction liftgate_next_action = 7;
21
+ SideBinNextAction side_bin_next_action = 8;
22
+ TailgateNextAction tailgate_next_action = 9;
23
+ ChargePortDoorNextAction charge_port_door_next_action = 10;
24
+ int32 tonneau_next_action = 11; // the app's enum (class stripped)
25
+ }
25
26
  }
26
27
  repeated Closure closure = 1;
27
28
  }
@@ -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/body.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/body.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/body.proto\x12\x14rivian.parallax.body\"\x89\x06\n\rClosuresState\x12<\n\x07\x63losure\x18\x01 \x03(\x0b\x32+.rivian.parallax.body.ClosuresState.Closure\x1a\xb9\x05\n\x07\x43losure\x12+\n\x02id\x18\x01 \x01(\x0e\x32\x1f.rivian.parallax.body.ClosureId\x12\x36\n\x05state\x18\x02 \x01(\x0e\x32\".rivian.parallax.body.ClosureStateH\x01\x88\x01\x01\x12\x1d\n\x15open_position_percent\x18\x03 \x01(\x05\x12\x31\n\x05\x66\x61ult\x18\x04 \x01(\x0e\x32\".rivian.parallax.body.ClosureFault\x12\x46\n\x13windows_next_action\x18\x05 \x01(\x0e\x32\'.rivian.parallax.body.WindowsNextActionH\x00\x12\x42\n\x11\x66runk_next_action\x18\x06 \x01(\x0e\x32%.rivian.parallax.body.FrunkNextActionH\x00\x12H\n\x14liftgate_next_action\x18\x07 \x01(\x0e\x32(.rivian.parallax.body.LiftgateNextActionH\x00\x12G\n\x14side_bin_next_action\x18\x08 \x01(\x0e\x32\'.rivian.parallax.body.SideBinNextActionH\x00\x12H\n\x14tailgate_next_action\x18\t \x01(\x0e\x32(.rivian.parallax.body.TailgateNextActionH\x00\x12V\n\x1c\x63harge_port_door_next_action\x18\n \x01(\x0e\x32..rivian.parallax.body.ChargePortDoorNextActionH\x00\x12\x1d\n\x13tonneau_next_action\x18\x0b \x01(\x05H\x00\x42\r\n\x0bnext_actionB\x08\n\x06_state\"\xe3\x01\n\nLocksState\x12\x33\n\x04lock\x18\x01 \x03(\x0b\x32%.rivian.parallax.body.LocksState.Lock\x1a\x9f\x01\n\x04Lock\x12(\n\x02id\x18\x01 \x01(\x0e\x32\x1c.rivian.parallax.body.LockId\x12\x33\n\x05state\x18\x02 \x01(\x0e\x32\x1f.rivian.parallax.body.LockStateH\x00\x88\x01\x01\x12.\n\x05\x66\x61ult\x18\x03 \x01(\x0e\x32\x1f.rivian.parallax.body.LockFaultB\x08\n\x06_state\"\xd1\x01\n\x0cWindowsState\x12\x39\n\x06window\x18\x01 \x03(\x0b\x32).rivian.parallax.body.WindowsState.Window\x1a\x85\x01\n\x06Window\x12\x36\n\x08instance\x18\x01 \x01(\x0e\x32$.rivian.parallax.body.WindowInstance\x12\x43\n\x12\x63\x61libration_status\x18\x02 \x01(\x0e\x32\'.rivian.parallax.body.CalibrationStatus\"\x9b\x01\n\x0cTrailerState\x12<\n\x08presence\x18\x01 \x01(\x0e\x32%.rivian.parallax.body.TrailerPresenceH\x00\x88\x01\x01\x12@\n\x11rear_hitch_status\x18\x02 \x01(\x0e\x32%.rivian.parallax.body.RearHitchStatusB\x0b\n\t_presence\"G\n\x0fWiperFluidLevel\x12\x34\n\x05state\x18\x02 \x01(\x0e\x32%.rivian.parallax.body.WiperFluidState*\xe8\x02\n\tClosureId\x12\x1a\n\x16\x43LOSURE_ID_UNSPECIFIED\x10\x00\x12\x13\n\x0f\x44OOR_FRONT_LEFT\x10\x01\x12\x14\n\x10\x44OOR_FRONT_RIGHT\x10\x02\x12\x12\n\x0e\x44OOR_REAR_LEFT\x10\x03\x12\x13\n\x0f\x44OOR_REAR_RIGHT\x10\x04\x12\t\n\x05\x46RUNK\x10\x05\x12\x0c\n\x08TAILGATE\x10\x06\x12\x0c\n\x08LIFTGATE\x10\x07\x12\x11\n\rSIDE_BIN_LEFT\x10\x08\x12\x12\n\x0eSIDE_BIN_RIGHT\x10\t\x12\x0f\n\x0b\x43HARGE_PORT\x10\n\x12\x0b\n\x07TONNEAU\x10\x0b\x12\x15\n\x11WINDOW_FRONT_LEFT\x10\x0c\x12\x16\n\x12WINDOW_FRONT_RIGHT\x10\r\x12\x14\n\x10WINDOW_REAR_LEFT\x10\x0e\x12\x15\n\x11WINDOW_REAR_RIGHT\x10\x0f\x12\x0f\n\x0bWINDOW_REAR\x10\x10\x12\x12\n\rGROUP_WINDOWS\x10\x90N*\xad\x01\n\x0c\x43losureState\x12\x1d\n\x19\x43LOSURE_STATE_UNSPECIFIED\x10\x00\x12\x16\n\x12\x43LOSURE_STATE_OPEN\x10\x01\x12\x18\n\x14\x43LOSURE_STATE_CLOSED\x10\x02\x12\x16\n\x12\x43LOSURE_STATE_AJAR\x10\x03\x12\x19\n\x15\x43LOSURE_STATE_OPENING\x10\x04\x12\x19\n\x15\x43LOSURE_STATE_CLOSING\x10\x05*\xf3\x02\n\x06LockId\x12\x17\n\x13LOCK_ID_UNSPECIFIED\x10\x00\x12\x18\n\x14LOCK_DOOR_FRONT_LEFT\x10\x01\x12\x19\n\x15LOCK_DOOR_FRONT_RIGHT\x10\x02\x12\x17\n\x13LOCK_DOOR_REAR_LEFT\x10\x03\x12\x18\n\x14LOCK_DOOR_REAR_RIGHT\x10\x04\x12\x0e\n\nLOCK_FRUNK\x10\x05\x12\x11\n\rLOCK_TAILGATE\x10\x06\x12\x11\n\rLOCK_LIFTGATE\x10\x07\x12\x16\n\x12LOCK_SIDE_BIN_LEFT\x10\x08\x12\x17\n\x13LOCK_SIDE_BIN_RIGHT\x10\t\x12\x14\n\x10LOCK_CHARGE_PORT\x10\n\x12\x17\n\x13LOCK_TRUNK_SECURITY\x10\x0b\x12\x17\n\x13LOCK_CENTER_CONSOLE\x10\x0c\x12\x12\n\x0eLOCK_GLOVE_BOX\x10\r\x12\x13\n\x0fLOCK_GEAR_GUARD\x10\x0e\x12\x10\n\x0cLOCK_TONNEAU\x10\x0f*z\n\tLockState\x12\x1a\n\x16LOCK_STATE_UNSPECIFIED\x10\x00\x12\x15\n\x11LOCK_STATE_LOCKED\x10\x01\x12\x17\n\x13LOCK_STATE_UNLOCKED\x10\x02\x12!\n\x1dLOCK_STATE_PARTIALLY_UNLOCKED\x10\x03*?\n\tLockFault\x12\x1a\n\x16LOCK_FAULT_UNSPECIFIED\x10\x00\x12\x16\n\x12LOCK_FAULT_FAULTED\x10\x01*\xcb\x01\n\x0eWindowInstance\x12\x1f\n\x1bWINDOW_INSTANCE_UNSPECIFIED\x10\x00\x12\x1e\n\x1aWINDOW_INSTANCE_FRONT_LEFT\x10\x01\x12\x1f\n\x1bWINDOW_INSTANCE_FRONT_RIGHT\x10\x02\x12\x1d\n\x19WINDOW_INSTANCE_REAR_LEFT\x10\x03\x12\x1e\n\x1aWINDOW_INSTANCE_REAR_RIGHT\x10\x04\x12\x18\n\x14WINDOW_INSTANCE_REAR\x10\x05*\x81\x01\n\x11\x43\x61librationStatus\x12\"\n\x1e\x43\x41LIBRATION_STATUS_UNSPECIFIED\x10\x00\x12!\n\x1d\x43\x41LIBRATION_STATUS_CALIBRATED\x10\x01\x12%\n!CALIBRATION_STATUS_NOT_CALIBRATED\x10\x02*\xd8\x01\n\x0fRearHitchStatus\x12!\n\x1dREAR_HITCH_STATUS_UNSPECIFIED\x10\x00\x12!\n\x1dREAR_HITCH_STATUS_NOT_PRESENT\x10\x01\x12\x1f\n\x1bREAR_HITCH_STATUS_ACCESSORY\x10\x02\x12\x1e\n\x1aREAR_HITCH_STATUS_TRAILER1\x10\x03\x12\x1e\n\x1aREAR_HITCH_STATUS_TRAILER2\x10\x04\x12\x1e\n\x1aREAR_HITCH_STATUS_TRAILER3\x10\x05*\xaa\x01\n\x0c\x43losureFault\x12\x1d\n\x19\x43LOSURE_FAULT_UNSPECIFIED\x10\x00\x12\x1a\n\x16\x43LOSURE_FAULT_NO_FAULT\x10\x01\x12\x19\n\x15\x43LOSURE_FAULT_GENERAL\x10\x02\x12&\n\"CLOSURE_FAULT_NO_POWERED_OPERATION\x10\x03\x12\x1c\n\x18\x43LOSURE_FAULT_OBSTRUCTED\x10\x04*\x97\x01\n\x0fTrailerPresence\x12 \n\x1cTRAILER_PRESENCE_UNSPECIFIED\x10\x00\x12\x17\n\x13TRAILER_NOT_PRESENT\x10\x01\x12\x13\n\x0fTRAILER_PRESENT\x10\x02\x12\x1f\n\x1bTRAILER_PRESENT_WITH_BRAKES\x10\x03\x12\x13\n\x0fTRAILER_INVALID\x10\x04*\x9f\x04\n\x18\x43hargePortDoorNextAction\x12\x18\n\x14\x43HARGE_PORT_DOOR_SNA\x10\x00\x12!\n\x1d\x43HARGE_PORT_DOOR_OPEN_ALLOWED\x10\x01\x12\'\n#CHARGE_PORT_DOOR_OPEN_NOT_AVAILABLE\x10\x02\x12-\n)CHARGE_PORT_DOOR_OPEN_NOT_ALLOWED_FAULTED\x10\x03\x12\x1c\n\x18\x43HARGE_PORT_DOOR_OPENING\x10\x04\x12\"\n\x1e\x43HARGE_PORT_DOOR_CLOSE_ALLOWED\x10\x05\x12;\n7CHARGE_PORT_DOOR_OBSTRUCTED_WHILE_OPENING_CLOSE_ALLOWED\x10\x06\x12:\n6CHARGE_PORT_DOOR_OBSTRUCTED_WHILE_OPENING_OPEN_ALLOWED\x10\x07\x12;\n7CHARGE_PORT_DOOR_OBSTRUCTED_WHILE_CLOSING_CLOSE_ALLOWED\x10\x08\x12(\n$CHARGE_PORT_DOOR_CLOSE_NOT_AVAILABLE\x10\t\x12.\n*CHARGE_PORT_DOOR_CLOSE_NOT_ALLOWED_FAULTED\x10\n\x12\x1c\n\x18\x43HARGE_PORT_DOOR_CLOSING\x10\x0b*\xb0\x03\n\x0f\x46runkNextAction\x12\r\n\tFRUNK_SNA\x10\x00\x12\x16\n\x12\x46RUNK_OPEN_ALLOWED\x10\x01\x12\x17\n\x13\x46RUNK_CLOSE_ALLOWED\x10\x02\x12\x11\n\rFRUNK_OPENING\x10\x03\x12\x11\n\rFRUNK_CLOSING\x10\x04\x12\x1c\n\x18\x46RUNK_OPEN_NOT_AVAILABLE\x10\x05\x12\x1d\n\x19\x46RUNK_CLOSE_NOT_AVAILABLE\x10\x06\x12\"\n\x1e\x46RUNK_OPEN_NOT_ALLOWED_FAULTED\x10\x07\x12#\n\x1f\x46RUNK_CLOSE_NOT_ALLOWED_FAULTED\x10\x08\x12)\n%FRUNK_OPEN_ALLOWED_NO_POWER_OPERATION\x10\t\x12.\n*FRUNK_CLOSE_NOT_ALLOWED_NO_POWER_OPERATION\x10\n\x12*\n&FRUNK_OBSTRUCTED_OPENING_CLOSE_ALLOWED\x10\x0b\x12*\n&FRUNK_OBSTRUCTED_CLOSING_CLOSE_ALLOWED\x10\x0c*\xa7\x06\n\x12LiftgateNextAction\x12\x10\n\x0cLIFTGATE_SNA\x10\x00\x12\x19\n\x15LIFTGATE_OPEN_ALLOWED\x10\x01\x12\x1a\n\x16LIFTGATE_CLOSE_ALLOWED\x10\x02\x12\x14\n\x10LIFTGATE_OPENING\x10\x03\x12\x14\n\x10LIFTGATE_CLOSING\x10\x04\x12\x1f\n\x1bLIFTGATE_OPEN_NOT_AVAILABLE\x10\x05\x12 \n\x1cLIFTGATE_CLOSE_NOT_AVAILABLE\x10\x06\x12%\n!LIFTGATE_OPEN_NOT_ALLOWED_FAULTED\x10\x07\x12&\n\"LIFTGATE_CLOSE_NOT_ALLOWED_FAULTED\x10\x08\x12,\n(LIFTGATE_OPEN_ALLOWED_NO_POWER_OPERATION\x10\t\x12\x31\n-LIFTGATE_CLOSE_NOT_ALLOWED_NO_POWER_OPERATION\x10\n\x12-\n)LIFTGATE_OBSTRUCTED_OPENING_CLOSE_ALLOWED\x10\x0b\x12-\n)LIFTGATE_OBSTRUCTED_CLOSING_CLOSE_ALLOWED\x10\x0c\x12.\n*LIFTGATE_LOWER_GATE_OPEN_CLOSE_NOT_ALLOWED\x10\r\x12&\n\"LIFTGATE_OPENING_PAUSE_NOT_ALLOWED\x10\x0e\x12&\n\"LIFTGATE_CLOSING_PAUSE_NOT_ALLOWED\x10\x0f\x12+\n\'LIFTGATE_OPEN_ALLOWED_OBSTACLE_DETECTED\x10\x10\x12*\n&LIFTGATE_OPEN_ALLOWED_TRAILER_DETECTED\x10\x11\x12,\n(LIFTGATE_CLOSE_ALLOWED_OBSTACLE_DETECTED\x10\x12\x12+\n\'LIFTGATE_CLOSE_ALLOWED_TRAILER_DETECTED\x10\x13\x12\x17\n\x13LIFTGATE_PROCESSING\x10\x14*\xb2\x02\n\x11SideBinNextAction\x12\x10\n\x0cSIDE_BIN_SNA\x10\x00\x12\x19\n\x15SIDE_BIN_OPEN_ALLOWED\x10\x01\x12\x14\n\x10SIDE_BIN_OPENING\x10\x02\x12\x1f\n\x1bSIDE_BIN_OPEN_NOT_AVAILABLE\x10\x03\x12%\n!SIDE_BIN_OPEN_NOT_ALLOWED_FAULTED\x10\x04\x12\x32\n.SIDE_BIN_STUCK_AJAR_WHILE_OPENING_OPEN_ALLOWED\x10\x05\x12-\n)SIDE_BIN_OPEN_ALREADY_NO_ACTION_AVAILABLE\x10\x06\x12/\n+SIDE_BIN_OPEN_ALLOWED_CONFIRM_VEHICLE_ANGLE\x10\x07*\x8c\x03\n\x12TailgateNextAction\x12\x10\n\x0cTAILGATE_SNA\x10\x00\x12\x19\n\x15TAILGATE_OPEN_ALLOWED\x10\x01\x12\x14\n\x10TAILGATE_OPENING\x10\x02\x12\x1f\n\x1bTAILGATE_OPEN_NOT_AVAILABLE\x10\x03\x12%\n!TAILGATE_OPEN_NOT_ALLOWED_FAULTED\x10\x04\x12\x32\n.TAILGATE_STUCK_AJAR_WHILE_OPENING_OPEN_ALLOWED\x10\x05\x12-\n)TAILGATE_OPEN_ALREADY_NO_ACTION_AVAILABLE\x10\x06\x12/\n+TAILGATE_OPEN_ALLOWED_CONFIRM_VEHICLE_ANGLE\x10\x07\x12+\n\'TAILGATE_OPEN_ALLOWED_OBSTACLE_DETECTED\x10\x08\x12*\n&TAILGATE_OPEN_ALLOWED_TRAILER_DETECTED\x10\t*\xb0\x03\n\x11WindowsNextAction\x12\x0f\n\x0bWINDOWS_SNA\x10\x00\x12\x18\n\x14WINDOWS_OPEN_ALLOWED\x10\x01\x12\x19\n\x15WINDOWS_CLOSE_ALLOWED\x10\x02\x12\x13\n\x0fWINDOWS_OPENING\x10\x03\x12\x13\n\x0fWINDOWS_CLOSING\x10\x04\x12\x12\n\x0eWINDOWS_MOVING\x10\x05\x12\x1e\n\x1aWINDOWS_OPEN_NOT_AVAILABLE\x10\x06\x12\x1f\n\x1bWINDOWS_CLOSE_NOT_AVAILABLE\x10\x07\x12$\n WINDOWS_OPEN_NOT_ALLOWED_FAULTED\x10\x08\x12%\n!WINDOWS_CLOSE_NOT_ALLOWED_FAULTED\x10\t\x12\x32\n.WINDOWS_OBSTRUCTED_WHILE_CLOSING_CLOSE_ALLOWED\x10\n\x12*\n&WINDOWS_CLOSE_NOT_ALLOWED_UNCALIBRATED\x10\x0b\x12)\n%WINDOWS_OPEN_NOT_ALLOWED_UNCALIBRATED\x10\x0c*\x8a\x01\n\x0fWiperFluidState\x12!\n\x1dWIPER_FLUID_STATE_UNSPECIFIED\x10\x00\x12\x1c\n\x18WIPER_FLUID_STATE_NORMAL\x10\x01\x12\x19\n\x15WIPER_FLUID_STATE_LOW\x10\x02\x12\x1b\n\x17WIPER_FLUID_STATE_EMPTY\x10\x03\x62\x06proto3')
28
+
29
+ _globals = globals()
30
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
31
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'rivian.parallax.proto.body_pb2', _globals)
32
+ if not _descriptor._USE_C_DESCRIPTORS:
33
+ DESCRIPTOR._loaded_options = None
34
+ _globals['_CLOSUREID']._serialized_start=1512
35
+ _globals['_CLOSUREID']._serialized_end=1872
36
+ _globals['_CLOSURESTATE']._serialized_start=1875
37
+ _globals['_CLOSURESTATE']._serialized_end=2048
38
+ _globals['_LOCKID']._serialized_start=2051
39
+ _globals['_LOCKID']._serialized_end=2422
40
+ _globals['_LOCKSTATE']._serialized_start=2424
41
+ _globals['_LOCKSTATE']._serialized_end=2546
42
+ _globals['_LOCKFAULT']._serialized_start=2548
43
+ _globals['_LOCKFAULT']._serialized_end=2611
44
+ _globals['_WINDOWINSTANCE']._serialized_start=2614
45
+ _globals['_WINDOWINSTANCE']._serialized_end=2817
46
+ _globals['_CALIBRATIONSTATUS']._serialized_start=2820
47
+ _globals['_CALIBRATIONSTATUS']._serialized_end=2949
48
+ _globals['_REARHITCHSTATUS']._serialized_start=2952
49
+ _globals['_REARHITCHSTATUS']._serialized_end=3168
50
+ _globals['_CLOSUREFAULT']._serialized_start=3171
51
+ _globals['_CLOSUREFAULT']._serialized_end=3341
52
+ _globals['_TRAILERPRESENCE']._serialized_start=3344
53
+ _globals['_TRAILERPRESENCE']._serialized_end=3495
54
+ _globals['_CHARGEPORTDOORNEXTACTION']._serialized_start=3498
55
+ _globals['_CHARGEPORTDOORNEXTACTION']._serialized_end=4041
56
+ _globals['_FRUNKNEXTACTION']._serialized_start=4044
57
+ _globals['_FRUNKNEXTACTION']._serialized_end=4476
58
+ _globals['_LIFTGATENEXTACTION']._serialized_start=4479
59
+ _globals['_LIFTGATENEXTACTION']._serialized_end=5286
60
+ _globals['_SIDEBINNEXTACTION']._serialized_start=5289
61
+ _globals['_SIDEBINNEXTACTION']._serialized_end=5595
62
+ _globals['_TAILGATENEXTACTION']._serialized_start=5598
63
+ _globals['_TAILGATENEXTACTION']._serialized_end=5994
64
+ _globals['_WINDOWSNEXTACTION']._serialized_start=5997
65
+ _globals['_WINDOWSNEXTACTION']._serialized_end=6429
66
+ _globals['_WIPERFLUIDSTATE']._serialized_start=6432
67
+ _globals['_WIPERFLUIDSTATE']._serialized_end=6570
68
+ _globals['_CLOSURESSTATE']._serialized_start=59
69
+ _globals['_CLOSURESSTATE']._serialized_end=836
70
+ _globals['_CLOSURESSTATE_CLOSURE']._serialized_start=139
71
+ _globals['_CLOSURESSTATE_CLOSURE']._serialized_end=836
72
+ _globals['_LOCKSSTATE']._serialized_start=839
73
+ _globals['_LOCKSSTATE']._serialized_end=1066
74
+ _globals['_LOCKSSTATE_LOCK']._serialized_start=907
75
+ _globals['_LOCKSSTATE_LOCK']._serialized_end=1066
76
+ _globals['_WINDOWSSTATE']._serialized_start=1069
77
+ _globals['_WINDOWSSTATE']._serialized_end=1278
78
+ _globals['_WINDOWSSTATE_WINDOW']._serialized_start=1145
79
+ _globals['_WINDOWSSTATE_WINDOW']._serialized_end=1278
80
+ _globals['_TRAILERSTATE']._serialized_start=1281
81
+ _globals['_TRAILERSTATE']._serialized_end=1436
82
+ _globals['_WIPERFLUIDLEVEL']._serialized_start=1438
83
+ _globals['_WIPERFLUIDLEVEL']._serialized_end=1509
84
+ # @@protoc_insertion_point(module_scope)
@@ -21,6 +21,8 @@ message ScheduleTimeWindow {
21
21
  DayOfWeek end_day = 7;
22
22
  }
23
23
 
24
+ // The app's proto has uint32 days; its ChargingSmartDayOfWeek.fromInt maps
25
+ // them as below (unlike SmartChargingDay, which starts on Monday).
24
26
  enum DayOfWeek {
25
27
  DAY_OF_WEEK_UNSPECIFIED = 0;
26
28
  SUNDAY = 1;
@@ -59,7 +59,7 @@ message CabinTemperatures {
59
59
  optional float driver_set_point = 4; // °C
60
60
 
61
61
  message ZoneTemperature {
62
- int32 seat = 1;
62
+ int32 seat = 1; // the app's enum (class stripped)
63
63
  float temperature = 2; // °C
64
64
  }
65
65
  }