rivian-python-client 2.2.0b2__tar.gz → 2.2.0b3__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.0b2 → rivian_python_client-2.2.0b3}/PKG-INFO +1 -1
  2. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/__version__.py +1 -1
  3. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/comfort.py +35 -47
  4. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/dynamics.py +17 -27
  5. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/energy.py +6 -11
  6. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/energy_edge_compute.py +6 -8
  7. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/holiday_celebration.py +1 -3
  8. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/navigation.py +12 -32
  9. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/ota.py +4 -7
  10. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/charging.proto +1 -1
  11. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/charging_pb2.py +10 -10
  12. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/comfort.proto +11 -11
  13. rivian_python_client-2.2.0b3/src/rivian/parallax/proto/comfort_pb2.py +78 -0
  14. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/departure.proto +1 -1
  15. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/departure_pb2.py +11 -11
  16. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/dynamics.proto +11 -11
  17. rivian_python_client-2.2.0b3/src/rivian/parallax/proto/dynamics_pb2.py +72 -0
  18. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/energy.proto +5 -5
  19. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/energy_edge_compute.proto +11 -11
  20. rivian_python_client-2.2.0b3/src/rivian/parallax/proto/energy_edge_compute_pb2.py +49 -0
  21. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/energy_pb2.py +11 -11
  22. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/holiday_celebration.proto +1 -1
  23. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/holiday_celebration_pb2.py +12 -12
  24. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/navigation.proto +10 -10
  25. rivian_python_client-2.2.0b3/src/rivian/parallax/proto/navigation_pb2.py +78 -0
  26. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/ota.proto +2 -2
  27. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/ota_pb2.py +25 -25
  28. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/security.proto +1 -1
  29. rivian_python_client-2.2.0b3/src/rivian/parallax/proto/security_pb2.py +66 -0
  30. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/vehicle.proto +13 -13
  31. rivian_python_client-2.2.0b3/src/rivian/parallax/proto/vehicle_pb2.py +62 -0
  32. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/security.py +2 -2
  33. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/vehicle.py +27 -32
  34. rivian_python_client-2.2.0b2/src/rivian/parallax/proto/comfort_pb2.py +0 -78
  35. rivian_python_client-2.2.0b2/src/rivian/parallax/proto/dynamics_pb2.py +0 -72
  36. rivian_python_client-2.2.0b2/src/rivian/parallax/proto/energy_edge_compute_pb2.py +0 -49
  37. rivian_python_client-2.2.0b2/src/rivian/parallax/proto/navigation_pb2.py +0 -78
  38. rivian_python_client-2.2.0b2/src/rivian/parallax/proto/security_pb2.py +0 -66
  39. rivian_python_client-2.2.0b2/src/rivian/parallax/proto/vehicle_pb2.py +0 -62
  40. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/.gitignore +0 -0
  41. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/README.md +0 -0
  42. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/pyproject.toml +0 -0
  43. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/__init__.py +0 -0
  44. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/ble.py +0 -0
  45. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/const.py +0 -0
  46. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/exceptions.py +0 -0
  47. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/__init__.py +0 -0
  48. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/body.py +0 -0
  49. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/charging.py +0 -0
  50. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/core.py +0 -0
  51. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/departure.py +0 -0
  52. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/device_table.py +0 -0
  53. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/gearguard_streaming.py +0 -0
  54. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/geofence.py +0 -0
  55. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/parallax.py +0 -0
  56. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/__init__.py +0 -0
  57. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/body.proto +0 -0
  58. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/body_pb2.py +0 -0
  59. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/body_pb2.pyi +0 -0
  60. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/charging_pb2.pyi +0 -0
  61. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/comfort_pb2.pyi +0 -0
  62. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/departure_pb2.pyi +0 -0
  63. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/device_table.proto +0 -0
  64. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/device_table_pb2.py +0 -0
  65. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/device_table_pb2.pyi +0 -0
  66. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/dynamics_pb2.pyi +0 -0
  67. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/energy_edge_compute_pb2.pyi +0 -0
  68. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/energy_pb2.pyi +0 -0
  69. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/gearguard_streaming.proto +0 -0
  70. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/gearguard_streaming_pb2.py +0 -0
  71. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/gearguard_streaming_pb2.pyi +0 -0
  72. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/geofence.proto +0 -0
  73. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/geofence_pb2.py +0 -0
  74. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/geofence_pb2.pyi +0 -0
  75. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/holiday_celebration_pb2.pyi +0 -0
  76. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/navigation_pb2.pyi +0 -0
  77. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/ota_pb2.pyi +0 -0
  78. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/parallax.proto +0 -0
  79. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/parallax_pb2.py +0 -0
  80. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/parallax_pb2.pyi +0 -0
  81. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/secure_file_transfer.proto +0 -0
  82. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/secure_file_transfer_pb2.py +0 -0
  83. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/secure_file_transfer_pb2.pyi +0 -0
  84. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/security_pb2.pyi +0 -0
  85. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/user_passcodes.proto +0 -0
  86. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/user_passcodes_pb2.py +0 -0
  87. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/user_passcodes_pb2.pyi +0 -0
  88. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/vehicle_access.proto +0 -0
  89. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/vehicle_access_pb2.py +0 -0
  90. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/vehicle_access_pb2.pyi +0 -0
  91. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/proto/vehicle_pb2.pyi +0 -0
  92. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/secure_file_transfer.py +0 -0
  93. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/user_passcodes.py +0 -0
  94. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/parallax/vehicle_access.py +0 -0
  95. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/py.typed +0 -0
  96. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/rivian.py +0 -0
  97. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/schemas/charging.graphql +0 -0
  98. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/schemas/gateway.graphql +0 -0
  99. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/schemas/orders.graphql +0 -0
  100. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/src/rivian/utils.py +0 -0
  101. {rivian_python_client-2.2.0b2 → rivian_python_client-2.2.0b3}/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.0b2
3
+ Version: 2.2.0b3
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.0b2'
4
+ __version__ = VERSION = '2.2.0b3'
@@ -17,9 +17,7 @@ def decode_hvac_settings_status(m: comfort_pb2.HvacSettingsStatus) -> dict[str,
17
17
  Fields:
18
18
  hvacTargetTemperature: float (°C; 63.5 = "HI", set while defrosting)
19
19
  """
20
- if (v := _present(m, "target_temperature")) is None:
21
- return {}
22
- return {"hvacTargetTemperature": round(v, 1)}
20
+ return {"hvacTargetTemperature": round(m.target_temperature, 1)}
23
21
 
24
22
 
25
23
  @RVMDecoder.register("comfort.user_modes.state", comfort_pb2.UserModesState)
@@ -132,12 +130,10 @@ def decode_cabin_temperatures(m: comfort_pb2.CabinTemperatures) -> dict[str, Any
132
130
  cabinClimateDriverTemperature: float (°C) — set point, same as
133
131
  `hvacTargetTemperature`
134
132
  """
135
- result: dict[str, Any] = {}
136
- if (v := _present(m, "interior_temperature")) is not None:
137
- result["cabinClimateInteriorTemperature"] = round(v, 1)
138
- if (v := _present(m, "driver_set_point")) is not None:
139
- result["cabinClimateDriverTemperature"] = round(v, 1)
140
- return result
133
+ return {
134
+ "cabinClimateInteriorTemperature": round(m.interior_temperature, 1),
135
+ "cabinClimateDriverTemperature": round(m.driver_set_point, 1),
136
+ }
141
137
 
142
138
 
143
139
  @RVMDecoder.register(
@@ -146,24 +142,20 @@ def decode_cabin_temperatures(m: comfort_pb2.CabinTemperatures) -> dict[str, Any
146
142
  def decode_cabin_ventilation(m: comfort_pb2.CabinVentilationSetting) -> dict[str, Any]:
147
143
  """comfort.cabin.cabin_ventilation_setting — passive ventilation settings.
148
144
 
149
- Fields (each only when sent):
145
+ Fields:
150
146
  cabinVentilationEnabled: bool
151
- cabinVentilationMode: str ("AUTO" | "MANUAL" | "OFF")
147
+ cabinVentilationMode: str | None ("AUTO" | "MANUAL" | "OFF")
152
148
  cabinVentilationWindowsPosition: int (percent open)
153
149
  cabinVentilationSunroofPosition: int (percent open)
154
150
  cabinVentilationDuration: int (minutes)
155
151
  """
156
- result: dict[str, Any] = {}
157
- for field, key in (
158
- ("enabled", "cabinVentilationEnabled"),
159
- ("mode", "cabinVentilationMode"),
160
- ("windows_position", "cabinVentilationWindowsPosition"),
161
- ("sunroof_position", "cabinVentilationSunroofPosition"),
162
- ("duration", "cabinVentilationDuration"),
163
- ):
164
- if (v := _present(m, field)) is not None:
165
- result[key] = v
166
- return result
152
+ return {
153
+ "cabinVentilationEnabled": m.enabled,
154
+ "cabinVentilationMode": m.mode or None,
155
+ "cabinVentilationWindowsPosition": m.windows_position,
156
+ "cabinVentilationSunroofPosition": m.sunroof_position,
157
+ "cabinVentilationDuration": m.duration,
158
+ }
167
159
 
168
160
 
169
161
  @RVMDecoder.register(
@@ -185,29 +177,26 @@ def decode_climate_hold_status(m: comfort_pb2.ClimateHoldStatus) -> dict[str, An
185
177
  Fields:
186
178
  climateHoldStatus: str ("off" | "on" | "unavailable" | "fault" | "unspecified")
187
179
  climateHoldAvailability: str
188
- climateHoldUnavailabilityReason: str (only when not "unspecified")
189
- climateHoldEndTime: int (epoch seconds, only while a hold runs)
180
+ climateHoldUnavailabilityReason: str | None — None when unspecified
181
+ climateHoldEndTime: int | None (epoch seconds; None unless a hold runs)
190
182
  """
191
- result: dict[str, Any] = {}
192
- if (val := _present(m, "status")) is not None:
193
- result["climateHoldStatus"] = _enum(
194
- _CLIMATE_HOLD_STATUS_MAP, val, what="climate hold status"
195
- )
196
- if (val := _present(m, "availability")) is not None:
197
- result["climateHoldAvailability"] = _enum(
198
- _CLIMATE_HOLD_AVAILABILITY_MAP, val, what="climate hold availability"
199
- )
200
- if (val := _present(m, "unavailability_reason")) is not None:
201
- reason = _enum(
202
- _CLIMATE_HOLD_UNAVAILABILITY_REASON_MAP,
203
- val,
204
- what="climate hold unavailability reason",
205
- )
206
- if reason != "unspecified":
207
- result["climateHoldUnavailabilityReason"] = reason
208
- if m.end_time.seconds:
209
- result["climateHoldEndTime"] = m.end_time.seconds
210
- return result
183
+ reason = _enum(
184
+ _CLIMATE_HOLD_UNAVAILABILITY_REASON_MAP,
185
+ m.unavailability_reason,
186
+ what="climate hold unavailability reason",
187
+ )
188
+ return {
189
+ "climateHoldStatus": _enum(
190
+ _CLIMATE_HOLD_STATUS_MAP, m.status, what="climate hold status"
191
+ ),
192
+ "climateHoldAvailability": _enum(
193
+ _CLIMATE_HOLD_AVAILABILITY_MAP,
194
+ m.availability,
195
+ what="climate hold availability",
196
+ ),
197
+ "climateHoldUnavailabilityReason": None if reason == "unspecified" else reason,
198
+ "climateHoldEndTime": m.end_time.seconds or None,
199
+ }
211
200
 
212
201
 
213
202
  @RVMDecoder.register(
@@ -259,13 +248,12 @@ def decode_seat_conditioning(m: comfort_pb2.SeatConditioningStatus) -> dict[str,
259
248
  plus <surface>Heat/Vent for any other surface sent (middle seats,
260
249
  rearGlass, frontGlass, sideviewMirrors, wiperArea)
261
250
 
262
- Entries without a state are skipped.
251
+ A surface sent without a state is off.
263
252
  """
264
253
  result: dict[str, Any] = {}
265
254
  for surface in m.surface:
266
255
  surface_id, hvac_type = surface.id, surface.type
267
- if (state_val := _present(surface, "state")) is None:
268
- continue
256
+ state_val = _present(surface, "state")
269
257
  if surface_id in _CABIN_SURFACE_MAP and hvac_type in _CONDITIONING_TYPE_MAP:
270
258
  key = f"{_CABIN_SURFACE_MAP[surface_id]}{_CONDITIONING_TYPE_MAP[hvac_type]}"
271
259
  result[key] = _CONDITIONING_LEVEL_MAP.get(state_val, state_val)
@@ -71,8 +71,8 @@ def decode_drive_mode(m: dynamics_pb2.DriveMode) -> dict[str, Any]:
71
71
  """
72
72
  return {
73
73
  "driveMode": _enum(_DRIVE_MODE_MAP, _present(m, "mode"), what="drive mode"),
74
- "limitedAccelCold": _present(m, "limited_accel_cold"),
75
- "limitedRegenCold": _present(m, "limited_regen_cold"),
74
+ "limitedAccelCold": m.limited_accel_cold,
75
+ "limitedRegenCold": m.limited_regen_cold,
76
76
  }
77
77
 
78
78
 
@@ -83,7 +83,7 @@ def decode_gear(m: dynamics_pb2.Gear) -> dict[str, Any]:
83
83
  Fields:
84
84
  gearStatus: str
85
85
  """
86
- return {"gearStatus": _enum(_GEAR_MAP, _present(m, "gear"), what="gear")}
86
+ return {"gearStatus": _enum(_GEAR_MAP, m.gear, what="gear")}
87
87
 
88
88
 
89
89
  @RVMDecoder.register("dynamics.vehicle.gnss", dynamics_pb2.Gnss)
@@ -97,29 +97,19 @@ def decode_gnss(m: dynamics_pb2.Gnss) -> dict[str, Any]:
97
97
  gnssAltitude: float (meters)
98
98
  gnssBearing: float (degrees)
99
99
  """
100
- lat = _present(m, "latitude")
101
- lon = _present(m, "longitude")
102
- alt = _present(m, "altitude")
103
- bearing = _present(m, "bearing")
104
- epoch = _present(m, "time")
105
- fix_time = from_epoch(epoch) if epoch is not None else None
106
-
107
- result: dict[str, Any] = {}
108
- if fix_time is not None:
109
- result["gnssTimeStamp"] = fix_time
110
- if lat is not None and lon is not None:
111
- location: dict[str, Any] = {
112
- "latitude": round(lat, 6),
113
- "longitude": round(lon, 6),
114
- }
115
- if fix_time is not None:
116
- location["timeStamp"] = fix_time
117
- result["gnssLocation"] = location
118
- if alt is not None:
119
- result["gnssAltitude"] = round(alt, 1)
120
- if bearing is not None:
121
- result["gnssBearing"] = round(bearing, 1)
122
- return result
100
+ if not m.ByteSize():
101
+ return {}
102
+ fix_time = from_epoch(m.time)
103
+ return {
104
+ "gnssTimeStamp": fix_time,
105
+ "gnssLocation": {
106
+ "latitude": round(m.latitude, 6),
107
+ "longitude": round(m.longitude, 6),
108
+ "timeStamp": fix_time,
109
+ },
110
+ "gnssAltitude": round(m.altitude, 1),
111
+ "gnssBearing": round(m.bearing, 1),
112
+ }
123
113
 
124
114
 
125
115
  @RVMDecoder.register("dynamics.vehicle.location", dynamics_pb2.KnownLocation)
@@ -158,7 +148,7 @@ def decode_range(m: dynamics_pb2.Range) -> dict[str, Any]:
158
148
  coldRangeNotification: str
159
149
  """
160
150
  return {
161
- "distanceToEmpty": _present(m, "distance_to_empty"),
151
+ "distanceToEmpty": m.distance_to_empty,
162
152
  "rangeThreshold": _enum(
163
153
  _RANGE_THRESHOLD_MAP, _present(m, "threshold"), what="range threshold"
164
154
  ),
@@ -50,26 +50,21 @@ def decode_battery_state(m: energy_pb2.BatteryState) -> dict[str, Any]:
50
50
  batteryLevel: float (percent)
51
51
  batteryCapacity: float (kWh)
52
52
  range: float (km, if present)
53
- batteryTempMin, batteryTempMid, batteryTempMax: float (°C, if present)
53
+ batteryTempMin, batteryTempMid, batteryTempMax: float (°C)
54
54
  _bmsStateRaw: int — 4 idle, 5 discharging, 6 charging, others unnamed
55
55
  """
56
56
  result: dict[str, Any] = {}
57
57
  if m.HasField("charge_state"):
58
58
  charge_state = m.charge_state
59
- if (v := _present(charge_state, "soc")) is not None:
60
- result["batteryLevel"] = round(v, 2)
61
- if (v := _present(charge_state, "pack_energy")) is not None:
62
- result["batteryCapacity"] = round(v, 2)
59
+ result["batteryLevel"] = round(charge_state.soc, 2)
60
+ result["batteryCapacity"] = round(charge_state.pack_energy, 2)
63
61
  if (v := _present(charge_state, "range")) is not None:
64
62
  result["range"] = round(v, 1)
65
63
  if m.HasField("temperatures"):
66
64
  temps = m.temperatures
67
- if (v := _present(temps, "min")) is not None:
68
- result["batteryTempMin"] = round(v, 1)
69
- if (v := _present(temps, "mid")) is not None:
70
- result["batteryTempMid"] = round(v, 1)
71
- if (v := _present(temps, "max")) is not None:
72
- result["batteryTempMax"] = round(v, 1)
65
+ result["batteryTempMin"] = round(temps.min, 1)
66
+ result["batteryTempMid"] = round(temps.mid, 1)
67
+ result["batteryTempMax"] = round(temps.max, 1)
73
68
  if (v := _present(m, "bms_state_raw")) is not None:
74
69
  result["_bmsStateRaw"] = v
75
70
  return result
@@ -70,14 +70,12 @@ def decode_parked_energy_distributions(
70
70
  if not m.HasField(field):
71
71
  continue
72
72
  distribution = getattr(m, field)
73
- window: dict[str, float] = {}
74
- for measure, measure_key in _ENERGY_DISTRIBUTION_MAP.items():
75
- if (v := _present(distribution, measure)) is not None:
76
- window[measure_key] = round(v, 4)
77
- if (v := _present(distribution, "duration")) is not None:
78
- window["duration"] = v
79
- if window:
80
- result[key] = window
73
+ window: dict[str, float] = {
74
+ measure_key: round(getattr(distribution, measure), 4)
75
+ for measure, measure_key in _ENERGY_DISTRIBUTION_MAP.items()
76
+ }
77
+ window["duration"] = distribution.duration
78
+ result[key] = window
81
79
  return result
82
80
 
83
81
 
@@ -45,9 +45,7 @@ def decode_car_costume_state(
45
45
  Fields:
46
46
  costumeId: int (0 = none; other ids unmapped)
47
47
  """
48
- if (v := _present(m, "costume_id")) is None:
49
- return {}
50
- return {"costumeId": v}
48
+ return {"costumeId": m.costume_id}
51
49
 
52
50
 
53
51
  # Wrapped HalloweenCelebrationSettings field -> result key.
@@ -60,8 +60,7 @@ def _decode_origin(origin: TripInfo.Origin) -> dict[str, Any]:
60
60
  result = _decode_geocoordinate(
61
61
  _present(origin, "location"), "originLatitude", "originLongitude"
62
62
  )
63
- if (v := _present(origin, "heading")) is not None:
64
- result["originHeading"] = v
63
+ result["originHeading"] = origin.heading
65
64
  if (origin_epoch := _present(origin, "time")) is not None:
66
65
  result["originTime"] = from_epoch(origin_epoch)
67
66
  return result
@@ -93,11 +92,11 @@ def _decode_place(place: TripInfo.Place) -> dict[str, Any]:
93
92
  ("place_type", "placeType"),
94
93
  ("name", "name"),
95
94
  ("place_id", "placeId"),
96
- ("soc", "stateOfCharge"),
97
- ("range", "rangeRemaining"),
98
95
  ),
99
96
  )
100
97
  )
98
+ entry["stateOfCharge"] = place.soc
99
+ entry["rangeRemaining"] = place.range
101
100
  if (arrival := _decode_timestamp(_present(place, "arrival"))) is not None:
102
101
  entry["arrivalTime"] = arrival
103
102
  return entry
@@ -170,17 +169,12 @@ def _decode_categorized_ranges(leg: TripInfo.Leg) -> list[dict[str, Any]]:
170
169
 
171
170
  def _decode_leg(leg: TripInfo.Leg) -> dict[str, Any]:
172
171
  """Decode one route leg."""
173
- entry = _copy_present(
174
- leg,
175
- (
176
- ("distance", "distance"),
177
- ("duration", "duration"),
178
- ("road_label", "roadLabel"),
179
- ("polyline", "polyline"),
180
- ),
172
+ entry: dict[str, Any] = {"distance": leg.distance, "duration": leg.duration}
173
+ entry.update(
174
+ _copy_present(leg, (("road_label", "roadLabel"), ("polyline", "polyline")))
181
175
  )
182
- if leg.HasField("energy") and (v := _present(leg.energy, "kwh")) is not None:
183
- entry["energyUsed"] = v
176
+ if leg.HasField("energy"):
177
+ entry["energyUsed"] = leg.energy.kwh
184
178
  # flagged/unflagged_ranges_packed duplicate the index ranges.
185
179
  if index_ranges := _decode_index_ranges(leg):
186
180
  entry["indexRangeSegments"] = index_ranges
@@ -307,29 +301,15 @@ def decode_trip_progress(m: navigation_pb2.TripProgress) -> dict[str, Any]:
307
301
  result["nextWaypointArrivalTime"] = eta
308
302
  if (eta := _decode_timestamp(_present(m, "final_destination"))) is not None:
309
303
  result["finalDestinationArrivalTime"] = eta
310
- result.update(
311
- _copy_present(
312
- m,
313
- (
314
- ("distance_remaining", "distanceRemaining"),
315
- ("duration_remaining", "durationRemaining"),
316
- ),
317
- )
318
- )
304
+ result["distanceRemaining"] = m.distance_remaining
305
+ result["durationRemaining"] = m.duration_remaining
319
306
  if m.HasField("location_fix"):
320
307
  fix = m.location_fix
321
308
  result.update(
322
309
  _decode_geocoordinate(_present(fix, "location"), "latitude", "longitude")
323
310
  )
324
- result.update(
325
- _copy_present(
326
- fix,
327
- (
328
- ("speed", "speed"),
329
- ("heading", "heading"),
330
- ),
331
- )
332
- )
311
+ result["speed"] = fix.speed
312
+ result["heading"] = fix.heading
333
313
  if (fix_epoch := _present(fix, "time")) is not None:
334
314
  result["locationTime"] = from_epoch(fix_epoch)
335
315
  return result
@@ -110,13 +110,10 @@ def decode_deployment_state(m: ota_pb2.DeploymentState) -> dict[str, Any]:
110
110
  and (v := _present(progress.install_progress, "field_2")) is not None
111
111
  ):
112
112
  result["otaInstallProgress"] = v
113
- for field, key in (
114
- ("time_remaining", "otaTimeRemaining"),
115
- ("update_cycle_count", "otaUpdateCycleCount"),
116
- ("field_9", "_otaProgressField9"),
117
- ):
118
- if (v := _present(progress, field)) is not None:
119
- result[key] = v
113
+ result["otaTimeRemaining"] = progress.time_remaining
114
+ result["otaUpdateCycleCount"] = progress.update_cycle_count
115
+ if (v := _present(progress, "field_9")) is not None:
116
+ result["_otaProgressField9"] = v
120
117
  return result
121
118
 
122
119
 
@@ -140,5 +140,5 @@ enum ChargerStatus {
140
140
 
141
141
  // charging.session.power -- live charging power; empty when not charging.
142
142
  message SessionPower {
143
- optional float power = 1; // kW
143
+ float power = 1; // kW
144
144
  }
@@ -24,21 +24,21 @@ _sym_db = _symbol_database.Default()
24
24
 
25
25
 
26
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\"5\n\x13SessionNotification\x12\x13\n\x06\x66ield1\x18\x01 \x01(\x05H\x00\x88\x01\x01\x42\t\n\x07_field1\"a\n\x14SessionRemoteCommand\x12=\n\x07\x63ommand\x18\x01 \x01(\x0e\x32\'.rivian.parallax.charging.RemoteCommandH\x00\x88\x01\x01\x42\n\n\x08_command\"1\n\tSocSlider\x12\x16\n\tsoc_limit\x18\x01 \x01(\x05H\x00\x88\x01\x01\x42\x0c\n\n_soc_limit\",\n\nTripTarget\x12\x13\n\x06\x66ield2\x18\x02 \x01(\x05H\x00\x88\x01\x01\x42\t\n\x07_field2\"\x17\n\x15SmartChargingSettings\"\x13\n\x11SmartChargingInfo\"\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\tis_active\x18\x03 \x01(\x08\x42\x13\n\x11_connection_stateB\x11\n\x0f_charging_state\"2\n\x0eTimeEstimation\x12 \n\x18\x65stimated_time_remaining\x18\x02 \x01(\x05\"\xe0\x01\n\x0b\x45nergyState\x12\x14\n\x07\x66ield_1\x18\x01 \x01(\x05H\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\x10\n\x08\x66ield_10\x18\n \x01(\t\x12\x15\n\x08\x66ield_11\x18\x0b \x01(\x05H\x03\x88\x01\x01\x42\n\n\x08_field_1B\x11\n\x0f_charger_statusB\n\n\x08_field_3B\x0b\n\t_field_11\",\n\x0cSessionPower\x12\x12\n\x05power\x18\x01 \x01(\x02H\x00\x88\x01\x01\x42\x08\n\x06_power*b\n\rRemoteCommand\x12\x1e\n\x1aREMOTE_COMMAND_UNSPECIFIED\x10\x00\x12\x18\n\x14REMOTE_COMMAND_START\x10\x01\x12\x17\n\x13REMOTE_COMMAND_STOP\x10\x02*v\n\x0f\x43onnectionState\x12 \n\x1c\x43ONNECTION_STATE_UNSPECIFIED\x10\x00\x12!\n\x1d\x43ONNECTION_STATE_DISCONNECTED\x10\x01\x12\x1e\n\x1a\x43ONNECTION_STATE_CONNECTED\x10\x02*\xfc\x05\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*\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')
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\"5\n\x13SessionNotification\x12\x13\n\x06\x66ield1\x18\x01 \x01(\x05H\x00\x88\x01\x01\x42\t\n\x07_field1\"a\n\x14SessionRemoteCommand\x12=\n\x07\x63ommand\x18\x01 \x01(\x0e\x32\'.rivian.parallax.charging.RemoteCommandH\x00\x88\x01\x01\x42\n\n\x08_command\"1\n\tSocSlider\x12\x16\n\tsoc_limit\x18\x01 \x01(\x05H\x00\x88\x01\x01\x42\x0c\n\n_soc_limit\",\n\nTripTarget\x12\x13\n\x06\x66ield2\x18\x02 \x01(\x05H\x00\x88\x01\x01\x42\t\n\x07_field2\"\x17\n\x15SmartChargingSettings\"\x13\n\x11SmartChargingInfo\"\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\tis_active\x18\x03 \x01(\x08\x42\x13\n\x11_connection_stateB\x11\n\x0f_charging_state\"2\n\x0eTimeEstimation\x12 \n\x18\x65stimated_time_remaining\x18\x02 \x01(\x05\"\xe0\x01\n\x0b\x45nergyState\x12\x14\n\x07\x66ield_1\x18\x01 \x01(\x05H\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\x10\n\x08\x66ield_10\x18\n \x01(\t\x12\x15\n\x08\x66ield_11\x18\x0b \x01(\x05H\x03\x88\x01\x01\x42\n\n\x08_field_1B\x11\n\x0f_charger_statusB\n\n\x08_field_3B\x0b\n\t_field_11\"\x1d\n\x0cSessionPower\x12\r\n\x05power\x18\x01 \x01(\x02*b\n\rRemoteCommand\x12\x1e\n\x1aREMOTE_COMMAND_UNSPECIFIED\x10\x00\x12\x18\n\x14REMOTE_COMMAND_START\x10\x01\x12\x17\n\x13REMOTE_COMMAND_STOP\x10\x02*v\n\x0f\x43onnectionState\x12 \n\x1c\x43ONNECTION_STATE_UNSPECIFIED\x10\x00\x12!\n\x1d\x43ONNECTION_STATE_DISCONNECTED\x10\x01\x12\x1e\n\x1a\x43ONNECTION_STATE_CONNECTED\x10\x02*\xfc\x05\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*\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
28
 
29
29
  _globals = globals()
30
30
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
31
31
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'rivian.parallax.proto.charging_pb2', _globals)
32
32
  if not _descriptor._USE_C_DESCRIPTORS:
33
33
  DESCRIPTOR._loaded_options = None
34
- _globals['_REMOTECOMMAND']._serialized_start=1556
35
- _globals['_REMOTECOMMAND']._serialized_end=1654
36
- _globals['_CONNECTIONSTATE']._serialized_start=1656
37
- _globals['_CONNECTIONSTATE']._serialized_end=1774
38
- _globals['_CHARGINGSTATE']._serialized_start=1777
39
- _globals['_CHARGINGSTATE']._serialized_end=2541
40
- _globals['_CHARGERSTATUS']._serialized_start=2544
41
- _globals['_CHARGERSTATUS']._serialized_end=2704
34
+ _globals['_REMOTECOMMAND']._serialized_start=1541
35
+ _globals['_REMOTECOMMAND']._serialized_end=1639
36
+ _globals['_CONNECTIONSTATE']._serialized_start=1641
37
+ _globals['_CONNECTIONSTATE']._serialized_end=1759
38
+ _globals['_CHARGINGSTATE']._serialized_start=1762
39
+ _globals['_CHARGINGSTATE']._serialized_end=2526
40
+ _globals['_CHARGERSTATUS']._serialized_start=2529
41
+ _globals['_CHARGERSTATUS']._serialized_end=2689
42
42
  _globals['_SCHEDULETIMEWINDOW']._serialized_start=67
43
43
  _globals['_SCHEDULETIMEWINDOW']._serialized_end=683
44
44
  _globals['_SCHEDULETIMEWINDOW_WINDOW']._serialized_start=176
@@ -68,5 +68,5 @@ if not _descriptor._USE_C_DESCRIPTORS:
68
68
  _globals['_ENERGYSTATE']._serialized_start=1284
69
69
  _globals['_ENERGYSTATE']._serialized_end=1508
70
70
  _globals['_SESSIONPOWER']._serialized_start=1510
71
- _globals['_SESSIONPOWER']._serialized_end=1554
71
+ _globals['_SESSIONPOWER']._serialized_end=1539
72
72
  # @@protoc_insertion_point(module_scope)
@@ -7,7 +7,7 @@ package rivian.parallax.comfort;
7
7
  // comfort.cabin.hvac_settings_status
8
8
  // Requested set point; 63.5 ("HI") while defrost runs.
9
9
  message HvacSettingsStatus {
10
- optional float target_temperature = 1; // °C
10
+ float target_temperature = 1; // °C
11
11
  }
12
12
 
13
13
  // comfort.user_modes.state -- unmapped.
@@ -34,17 +34,17 @@ enum PreconditioningStatus {
34
34
 
35
35
  // comfort.cabin.cabin_temperatures
36
36
  message CabinTemperatures {
37
- optional float interior_temperature = 3; // °C
38
- optional float driver_set_point = 4; // °C; same as HvacSettingsStatus's target
37
+ float interior_temperature = 3; // °C
38
+ float driver_set_point = 4; // °C; same as HvacSettingsStatus's target
39
39
  }
40
40
 
41
41
  // comfort.cabin.cabin_ventilation_setting
42
42
  message CabinVentilationSetting {
43
- optional bool enabled = 1;
44
- optional string mode = 2; // "AUTO" | "MANUAL" | "OFF"
45
- optional int32 windows_position = 3; // percent open
46
- optional int32 sunroof_position = 4; // percent open
47
- optional int32 duration = 5; // minutes
43
+ bool enabled = 1;
44
+ string mode = 2; // "AUTO" | "MANUAL" | "OFF"
45
+ int32 windows_position = 3; // percent open
46
+ int32 sunroof_position = 4; // percent open
47
+ int32 duration = 5; // minutes
48
48
  }
49
49
 
50
50
  // comfort.cabin.climate_hold_setting
@@ -54,9 +54,9 @@ message ClimateHoldSetting {
54
54
 
55
55
  // comfort.cabin.climate_hold_status
56
56
  message ClimateHoldStatus {
57
- optional ClimateHoldStatusValue status = 1;
58
- optional ClimateHoldAvailability availability = 2;
59
- optional ClimateHoldUnavailabilityReason unavailability_reason = 3;
57
+ ClimateHoldStatusValue status = 1;
58
+ ClimateHoldAvailability availability = 2;
59
+ ClimateHoldUnavailabilityReason unavailability_reason = 3;
60
60
  EndTime end_time = 4; // empty when no hold is running
61
61
 
62
62
  message EndTime {
@@ -0,0 +1,78 @@
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: 7.35.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
+ 7,
15
+ 35,
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\"P\n\x0eUserModesState\x12\x13\n\x06\x66ield4\x18\x04 \x01(\x05H\x00\x88\x01\x01\x12\x13\n\x06\x66ield7\x18\x07 \x01(\x05H\x01\x88\x01\x01\x42\t\n\x07_field4B\t\n\x07_field7\"m\n\x1a\x43\x61\x62inPreconditioningStatus\x12>\n\x06status\x18\x01 \x01(\x0e\x32..rivian.parallax.comfort.PreconditioningStatus\x12\x0f\n\x07\x66ield_2\x18\x02 \x01(\x05\"K\n\x11\x43\x61\x62inTemperatures\x12\x1c\n\x14interior_temperature\x18\x03 \x01(\x02\x12\x18\n\x10\x64river_set_point\x18\x04 \x01(\x02\"~\n\x17\x43\x61\x62inVentilationSetting\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0c\n\x04mode\x18\x02 \x01(\t\x12\x18\n\x10windows_position\x18\x03 \x01(\x05\x12\x18\n\x10sunroof_position\x18\x04 \x01(\x05\x12\x10\n\x08\x64uration\x18\x05 \x01(\x05\"&\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\"\x95\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\"\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*\xad\x01\n\x15PreconditioningStatus\x12\x17\n\x13PRECONDITIONING_OFF\x10\x00\x12\x1e\n\x1aPRECONDITIONING_INITIATE_1\x10\x01\x12\x1e\n\x1aPRECONDITIONING_INITIATE_2\x10\x02\x12\x1a\n\x16PRECONDITIONING_ACTIVE\x10\x04\x12\x1f\n\x1bPRECONDITIONING_PET_COMFORT\x10\x08*\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*\xa0\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*T\n\rDefrostStatus\x12\x1e\n\x1a\x44\x45\x46ROST_STATUS_UNSPECIFIED\x10\x00\x12\x12\n\x0e\x44\x45\x46ROST_ACTIVE\x10\x02\x12\x0f\n\x0b\x44\x45\x46ROST_OFF\x10\x04*]\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=1424
35
+ _globals['_PRECONDITIONINGSTATUS']._serialized_end=1597
36
+ _globals['_CLIMATEHOLDSTATUSVALUE']._serialized_start=1600
37
+ _globals['_CLIMATEHOLDSTATUSVALUE']._serialized_end=1786
38
+ _globals['_CLIMATEHOLDAVAILABILITY']._serialized_start=1789
39
+ _globals['_CLIMATEHOLDAVAILABILITY']._serialized_end=1946
40
+ _globals['_CLIMATEHOLDUNAVAILABILITYREASON']._serialized_start=1949
41
+ _globals['_CLIMATEHOLDUNAVAILABILITYREASON']._serialized_end=2109
42
+ _globals['_DEFROSTSTATUS']._serialized_start=2111
43
+ _globals['_DEFROSTSTATUS']._serialized_end=2195
44
+ _globals['_PETMODESTATE']._serialized_start=2197
45
+ _globals['_PETMODESTATE']._serialized_end=2290
46
+ _globals['_PETMODETEMPERATURESTATUS']._serialized_start=2293
47
+ _globals['_PETMODETEMPERATURESTATUS']._serialized_end=2447
48
+ _globals['_CABINSURFACE']._serialized_start=2450
49
+ _globals['_CABINSURFACE']._serialized_end=2784
50
+ _globals['_CONDITIONINGTYPE']._serialized_start=2786
51
+ _globals['_CONDITIONINGTYPE']._serialized_end=2885
52
+ _globals['_CONDITIONINGLEVEL']._serialized_start=2888
53
+ _globals['_CONDITIONINGLEVEL']._serialized_end=3021
54
+ _globals['_HVACSETTINGSSTATUS']._serialized_start=64
55
+ _globals['_HVACSETTINGSSTATUS']._serialized_end=112
56
+ _globals['_USERMODESSTATE']._serialized_start=114
57
+ _globals['_USERMODESSTATE']._serialized_end=194
58
+ _globals['_CABINPRECONDITIONINGSTATUS']._serialized_start=196
59
+ _globals['_CABINPRECONDITIONINGSTATUS']._serialized_end=305
60
+ _globals['_CABINTEMPERATURES']._serialized_start=307
61
+ _globals['_CABINTEMPERATURES']._serialized_end=382
62
+ _globals['_CABINVENTILATIONSETTING']._serialized_start=384
63
+ _globals['_CABINVENTILATIONSETTING']._serialized_end=510
64
+ _globals['_CLIMATEHOLDSETTING']._serialized_start=512
65
+ _globals['_CLIMATEHOLDSETTING']._serialized_end=550
66
+ _globals['_CLIMATEHOLDSTATUS']._serialized_start=553
67
+ _globals['_CLIMATEHOLDSTATUS']._serialized_end=896
68
+ _globals['_CLIMATEHOLDSTATUS_ENDTIME']._serialized_start=870
69
+ _globals['_CLIMATEHOLDSTATUS_ENDTIME']._serialized_end=896
70
+ _globals['_DEFROSTDEFOGSTATUS']._serialized_start=898
71
+ _globals['_DEFROSTDEFOGSTATUS']._serialized_end=974
72
+ _globals['_PETMODESTATUS']._serialized_start=977
73
+ _globals['_PETMODESTATUS']._serialized_end=1126
74
+ _globals['_SEATCONDITIONINGSTATUS']._serialized_start=1129
75
+ _globals['_SEATCONDITIONINGSTATUS']._serialized_end=1421
76
+ _globals['_SEATCONDITIONINGSTATUS_SURFACE']._serialized_start=1230
77
+ _globals['_SEATCONDITIONINGSTATUS_SURFACE']._serialized_end=1421
78
+ # @@protoc_insertion_point(module_scope)
@@ -40,7 +40,7 @@ message DepartureSchedules {
40
40
  }
41
41
 
42
42
  message ComfortSettings {
43
- optional float cabin_temperature = 1; // °C
43
+ float cabin_temperature = 1; // °C
44
44
  DefogDefrostLevel front_defog_defrost = 2;
45
45
  SurfaceHeatVentLevels surface_heat_vent_levels = 3;
46
46
  }