rivian-python-client 2.2.0b12__tar.gz → 2.3.0__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.
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/PKG-INFO +28 -4
- rivian_python_client-2.3.0/README.md +52 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/pyproject.toml +1 -3
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/__version__.py +1 -1
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/const.py +1 -27
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/__init__.py +13 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/charging.py +3 -1
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/comfort.py +10 -4
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/holiday_celebration.py +29 -7
- rivian_python_client-2.3.0/src/rivian/parallax/operation.py +39 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/charging.proto +3 -0
- rivian_python_client-2.3.0/src/rivian/parallax/proto/charging_pb2.py +86 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/charging_pb2.pyi +4 -2
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/holiday_celebration.proto +9 -5
- rivian_python_client-2.3.0/src/rivian/parallax/proto/holiday_celebration_pb2.py +56 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/holiday_celebration_pb2.pyi +6 -2
- rivian_python_client-2.3.0/src/rivian/parallax/proto/operation.proto +31 -0
- rivian_python_client-2.3.0/src/rivian/parallax/proto/operation_pb2.py +44 -0
- rivian_python_client-2.3.0/src/rivian/parallax/proto/operation_pb2.pyi +45 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/rivian.py +261 -63
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/schemas/charging.graphql +0 -21
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/utils.py +2 -2
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/ws_monitor.py +37 -22
- rivian_python_client-2.2.0b12/README.md +0 -26
- rivian_python_client-2.2.0b12/src/rivian/parallax/proto/charging_pb2.py +0 -86
- rivian_python_client-2.2.0b12/src/rivian/parallax/proto/holiday_celebration_pb2.py +0 -56
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/.gitignore +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/__init__.py +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/ble.py +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/exceptions.py +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/body.py +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/core.py +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/departure.py +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/device_table.py +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/dynamics.py +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/energy.py +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/energy_edge_compute.py +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/gearguard_streaming.py +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/geofence.py +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/navigation.py +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/ota.py +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/parallax.py +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/__init__.py +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/body.proto +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/body_pb2.py +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/body_pb2.pyi +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/comfort.proto +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/comfort_pb2.py +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/comfort_pb2.pyi +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/departure.proto +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/departure_pb2.py +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/departure_pb2.pyi +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/device_table.proto +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/device_table_pb2.py +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/device_table_pb2.pyi +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/dynamics.proto +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/dynamics_pb2.py +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/dynamics_pb2.pyi +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/energy.proto +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/energy_edge_compute.proto +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/energy_edge_compute_pb2.py +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/energy_edge_compute_pb2.pyi +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/energy_pb2.py +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/energy_pb2.pyi +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/gearguard_streaming.proto +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/gearguard_streaming_pb2.py +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/gearguard_streaming_pb2.pyi +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/geofence.proto +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/geofence_pb2.py +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/geofence_pb2.pyi +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/navigation.proto +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/navigation_pb2.py +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/navigation_pb2.pyi +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/ota.proto +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/ota_pb2.py +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/ota_pb2.pyi +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/parallax.proto +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/parallax_pb2.py +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/parallax_pb2.pyi +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/secure_file_transfer.proto +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/secure_file_transfer_pb2.py +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/secure_file_transfer_pb2.pyi +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/security.proto +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/security_pb2.py +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/security_pb2.pyi +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/user_passcodes.proto +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/user_passcodes_pb2.py +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/user_passcodes_pb2.pyi +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/vehicle.proto +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/vehicle_access.proto +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/vehicle_access_pb2.py +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/vehicle_access_pb2.pyi +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/vehicle_pb2.py +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/proto/vehicle_pb2.pyi +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/secure_file_transfer.py +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/security.py +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/user_passcodes.py +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/vehicle.py +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/vehicle_access.py +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/py.typed +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/schemas/gateway.graphql +0 -0
- {rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/schemas/orders.graphql +0 -0
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: rivian-python-client
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.3.0
|
|
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
|
|
7
|
-
Requires-Python: >=3.
|
|
7
|
+
Requires-Python: >=3.11
|
|
8
8
|
Requires-Dist: aiohttp>=3.0.0
|
|
9
|
-
Requires-Dist: backports-strenum>=1.2.4; python_version < '3.11'
|
|
10
9
|
Requires-Dist: cryptography>=41.0.1
|
|
11
10
|
Requires-Dist: protobuf<8,>=6.31.1
|
|
12
|
-
Requires-Dist: typing-extensions>=4.14.1; python_version < '3.11'
|
|
13
11
|
Provides-Extra: ble
|
|
14
12
|
Requires-Dist: bleak>=0.21; extra == 'ble'
|
|
15
13
|
Requires-Dist: dbus-fast>=2.11.0; (sys_platform == 'linux') and extra == 'ble'
|
|
@@ -41,3 +39,29 @@ pre-commit install
|
|
|
41
39
|
```
|
|
42
40
|
uv run pytest
|
|
43
41
|
```
|
|
42
|
+
|
|
43
|
+
## Parallax
|
|
44
|
+
|
|
45
|
+
`subscribe_for_parallax_messages` streams the vehicle's Parallax RVM topics,
|
|
46
|
+
whose payloads are protobuf. `rivian.parallax` decodes them into dicts keyed
|
|
47
|
+
like the GraphQL vehicle state where a matching property exists:
|
|
48
|
+
|
|
49
|
+
```python
|
|
50
|
+
from rivian import parallax
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def on_message(data):
|
|
54
|
+
if decoded := parallax.decode_parallax_subscription_message(data):
|
|
55
|
+
print(decoded)
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
`parallax.PARALLAX_RVMS` lists every topic with a decoder, and
|
|
59
|
+
`parallax.CHARGING_RVMS` the ones relevant to a charging session.
|
|
60
|
+
|
|
61
|
+
The schemas in `src/rivian/parallax/proto/*.proto` are reverse-engineered. After
|
|
62
|
+
editing one, regenerate its `*_pb2` modules (don't edit those by hand):
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
uv run python -m grpc_tools.protoc --proto_path=src --python_out=src \
|
|
66
|
+
--pyi_out=src src/rivian/parallax/proto/*.proto
|
|
67
|
+
```
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Python: Rivian API Client
|
|
2
|
+
|
|
3
|
+
Currently a Work In Progress
|
|
4
|
+
|
|
5
|
+
## Dependencies
|
|
6
|
+
|
|
7
|
+
[uv](https://docs.astral.sh/uv/)
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Setup
|
|
14
|
+
|
|
15
|
+
Install project dependencies into the uv virtual environment and run pre-commit
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
uv sync --all-extras
|
|
19
|
+
pre-commit install
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Run Tests
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
uv run pytest
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Parallax
|
|
29
|
+
|
|
30
|
+
`subscribe_for_parallax_messages` streams the vehicle's Parallax RVM topics,
|
|
31
|
+
whose payloads are protobuf. `rivian.parallax` decodes them into dicts keyed
|
|
32
|
+
like the GraphQL vehicle state where a matching property exists:
|
|
33
|
+
|
|
34
|
+
```python
|
|
35
|
+
from rivian import parallax
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def on_message(data):
|
|
39
|
+
if decoded := parallax.decode_parallax_subscription_message(data):
|
|
40
|
+
print(decoded)
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
`parallax.PARALLAX_RVMS` lists every topic with a decoder, and
|
|
44
|
+
`parallax.CHARGING_RVMS` the ones relevant to a charging session.
|
|
45
|
+
|
|
46
|
+
The schemas in `src/rivian/parallax/proto/*.proto` are reverse-engineered. After
|
|
47
|
+
editing one, regenerate its `*_pb2` modules (don't edit those by hand):
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
uv run python -m grpc_tools.protoc --proto_path=src --python_out=src \
|
|
51
|
+
--pyi_out=src src/rivian/parallax/proto/*.proto
|
|
52
|
+
```
|
|
@@ -7,14 +7,12 @@ authors = [
|
|
|
7
7
|
{ name = "Nathan Spencer", email = "natekspencer@gmail.com" },
|
|
8
8
|
{ name = "Trevor Mack", email = "drummer8001@gmail.com" },
|
|
9
9
|
]
|
|
10
|
-
requires-python = ">=3.
|
|
10
|
+
requires-python = ">=3.11"
|
|
11
11
|
readme = "README.md"
|
|
12
12
|
license = "MIT"
|
|
13
13
|
dependencies = [
|
|
14
14
|
"aiohttp (>=3.0.0)",
|
|
15
15
|
"cryptography (>=41.0.1)",
|
|
16
|
-
"backports-strenum (>=1.2.4) ; python_version < '3.11'",
|
|
17
|
-
"typing_extensions (>=4.14.1) ; python_version < '3.11'",
|
|
18
16
|
"protobuf>=6.31.1,<8",
|
|
19
17
|
]
|
|
20
18
|
dynamic = ["version"]
|
|
@@ -2,34 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
from enum import StrEnum
|
|
6
6
|
from typing import Final
|
|
7
7
|
|
|
8
|
-
if sys.version_info >= (3, 11):
|
|
9
|
-
from enum import StrEnum
|
|
10
|
-
else:
|
|
11
|
-
from backports.strenum import StrEnum
|
|
12
|
-
|
|
13
|
-
LIVE_SESSION_PROPERTIES: Final[set[str]] = {
|
|
14
|
-
"chargerId",
|
|
15
|
-
"current",
|
|
16
|
-
"currentCurrency",
|
|
17
|
-
"currentMiles",
|
|
18
|
-
"currentPrice",
|
|
19
|
-
"isFreeSession",
|
|
20
|
-
"isRivianCharger",
|
|
21
|
-
"kilometersChargedPerHour",
|
|
22
|
-
"locationId",
|
|
23
|
-
"power",
|
|
24
|
-
"rangeAddedThisSession",
|
|
25
|
-
"soc",
|
|
26
|
-
"startTime",
|
|
27
|
-
"timeElapsed",
|
|
28
|
-
"timeRemaining",
|
|
29
|
-
"totalChargedEnergy",
|
|
30
|
-
"vehicleChargerState",
|
|
31
|
-
}
|
|
32
|
-
|
|
33
8
|
VEHICLE_STATE_PROPERTIES: Final[set[str]] = {
|
|
34
9
|
# VehicleCloudConnection
|
|
35
10
|
"cloudConnection",
|
|
@@ -38,7 +13,6 @@ VEHICLE_STATE_PROPERTIES: Final[set[str]] = {
|
|
|
38
13
|
"gnssLocation",
|
|
39
14
|
"gnssError",
|
|
40
15
|
# TimeStamped(String|[Nullable]Float|Int)
|
|
41
|
-
"activeDriverName",
|
|
42
16
|
"alarmSoundStatus",
|
|
43
17
|
"batteryCapacity",
|
|
44
18
|
"batteryCellType",
|
{rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/__init__.py
RENAMED
|
@@ -7,6 +7,9 @@ Public API:
|
|
|
7
7
|
Same, for a raw `subscribe_for_parallax_messages` message.
|
|
8
8
|
PARALLAX_RVMS: list[str] — every RVM with a registered decoder
|
|
9
9
|
CHARGING_RVMS: list[str] — the subset relevant to a charging session
|
|
10
|
+
encode_vehicle_operation(rvm, payload=b"", ...) -> str
|
|
11
|
+
Builds a `send_vehicle_operation` request; an empty payload reads
|
|
12
|
+
the RVM, anything else (e.g. `encode_climate_hold_setting`) writes it.
|
|
10
13
|
|
|
11
14
|
Layout:
|
|
12
15
|
core.py - registry, payload parsing and shared helpers
|
|
@@ -41,11 +44,17 @@ from . import ( # noqa: F401 (imported to register their decoders)
|
|
|
41
44
|
vehicle,
|
|
42
45
|
vehicle_access,
|
|
43
46
|
)
|
|
47
|
+
from .comfort import (
|
|
48
|
+
CLIMATE_HOLD_SETTING_RVM,
|
|
49
|
+
CLIMATE_HOLD_STATUS_RVM,
|
|
50
|
+
encode_climate_hold_setting,
|
|
51
|
+
)
|
|
44
52
|
from .core import (
|
|
45
53
|
RVMDecoder,
|
|
46
54
|
decode_parallax_message,
|
|
47
55
|
decode_parallax_subscription_message,
|
|
48
56
|
)
|
|
57
|
+
from .operation import encode_vehicle_operation
|
|
49
58
|
|
|
50
59
|
PARALLAX_RVMS: list[str] = list(RVMDecoder.decoders)
|
|
51
60
|
|
|
@@ -64,7 +73,11 @@ CHARGING_RVMS: list[str] = [
|
|
|
64
73
|
|
|
65
74
|
__all__ = [
|
|
66
75
|
"CHARGING_RVMS",
|
|
76
|
+
"CLIMATE_HOLD_SETTING_RVM",
|
|
77
|
+
"CLIMATE_HOLD_STATUS_RVM",
|
|
67
78
|
"PARALLAX_RVMS",
|
|
68
79
|
"decode_parallax_message",
|
|
69
80
|
"decode_parallax_subscription_message",
|
|
81
|
+
"encode_climate_hold_setting",
|
|
82
|
+
"encode_vehicle_operation",
|
|
70
83
|
]
|
{rivian_python_client-2.2.0b12 → rivian_python_client-2.3.0}/src/rivian/parallax/charging.py
RENAMED
|
@@ -374,7 +374,7 @@ def decode_energy_state(m: charging_pb2.EnergyState) -> dict[str, Any]:
|
|
|
374
374
|
energyChargerState, energyConnectionState: str — as
|
|
375
375
|
charging.session.status's chargerState / connectionState, which
|
|
376
376
|
these can lag
|
|
377
|
-
_field3: int — raw
|
|
377
|
+
_field3, _field8: int — raw
|
|
378
378
|
"""
|
|
379
379
|
result: dict[str, Any] = {}
|
|
380
380
|
if (v := _present(m, "charging_state")) is not None:
|
|
@@ -389,6 +389,8 @@ def decode_energy_state(m: charging_pb2.EnergyState) -> dict[str, Any]:
|
|
|
389
389
|
result["chargerStatus"] = _enum(_CHARGER_STATUS_MAP, v, what="charger status")
|
|
390
390
|
if (v := _present(m, "field_3")) is not None:
|
|
391
391
|
result["_field3"] = v
|
|
392
|
+
if (v := _present(m, "field_8")) is not None:
|
|
393
|
+
result["_field8"] = v
|
|
392
394
|
return result
|
|
393
395
|
|
|
394
396
|
|
|
@@ -7,6 +7,9 @@ from typing import Any, Final
|
|
|
7
7
|
from .core import _LOGGER, RVMDecoder, _enum, _present
|
|
8
8
|
from .proto import comfort_pb2
|
|
9
9
|
|
|
10
|
+
CLIMATE_HOLD_SETTING_RVM: Final = "comfort.cabin.climate_hold_setting"
|
|
11
|
+
CLIMATE_HOLD_STATUS_RVM: Final = "comfort.cabin.climate_hold_status"
|
|
12
|
+
|
|
10
13
|
|
|
11
14
|
@RVMDecoder.register(
|
|
12
15
|
"comfort.cabin.hvac_settings_status", comfort_pb2.HvacSettingsStatus
|
|
@@ -200,9 +203,12 @@ def decode_cabin_ventilation(m: comfort_pb2.CabinVentilationSetting) -> dict[str
|
|
|
200
203
|
return {"cabinVentilationEnabled": m.auto_cabin_ventilation_enabled}
|
|
201
204
|
|
|
202
205
|
|
|
203
|
-
|
|
204
|
-
"comfort.cabin.climate_hold_setting
|
|
205
|
-
)
|
|
206
|
+
def encode_climate_hold_setting(duration_seconds: int) -> bytes:
|
|
207
|
+
"""Encode a comfort.cabin.climate_hold_setting payload."""
|
|
208
|
+
return comfort_pb2.ClimateHoldSetting(duration=duration_seconds).SerializeToString()
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
@RVMDecoder.register(CLIMATE_HOLD_SETTING_RVM, comfort_pb2.ClimateHoldSetting)
|
|
206
212
|
def decode_climate_hold_setting(m: comfort_pb2.ClimateHoldSetting) -> dict[str, Any]:
|
|
207
213
|
"""comfort.cabin.climate_hold_setting — configured climate-hold duration.
|
|
208
214
|
|
|
@@ -212,7 +218,7 @@ def decode_climate_hold_setting(m: comfort_pb2.ClimateHoldSetting) -> dict[str,
|
|
|
212
218
|
return {"climateHoldDuration": m.duration}
|
|
213
219
|
|
|
214
220
|
|
|
215
|
-
@RVMDecoder.register(
|
|
221
|
+
@RVMDecoder.register(CLIMATE_HOLD_STATUS_RVM, comfort_pb2.ClimateHoldStatus)
|
|
216
222
|
def decode_climate_hold_status(m: comfort_pb2.ClimateHoldStatus) -> dict[str, Any]:
|
|
217
223
|
"""comfort.cabin.climate_hold_status — current climate-hold status.
|
|
218
224
|
|
|
@@ -14,10 +14,27 @@ from .proto import holiday_celebration_pb2
|
|
|
14
14
|
holiday_celebration_pb2.HolidayCelebrationEnabled,
|
|
15
15
|
)
|
|
16
16
|
def decode_holiday_celebration_enabled(
|
|
17
|
-
|
|
17
|
+
m: holiday_celebration_pb2.HolidayCelebrationEnabled,
|
|
18
18
|
) -> dict[str, Any]:
|
|
19
|
-
"""holiday_celebration.car_costume.holiday_celebration_enabled
|
|
20
|
-
|
|
19
|
+
"""holiday_celebration.car_costume.holiday_celebration_enabled.
|
|
20
|
+
|
|
21
|
+
The names are inferred; the app has no class for this topic.
|
|
22
|
+
|
|
23
|
+
Fields:
|
|
24
|
+
holidayCelebrationAvailable: bool — the (seasonal) feature is offered
|
|
25
|
+
holidayCelebrationEnabled: bool — the user's on/off switch
|
|
26
|
+
"""
|
|
27
|
+
return {
|
|
28
|
+
"holidayCelebrationAvailable": m.available,
|
|
29
|
+
"holidayCelebrationEnabled": m.enabled,
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
# Best guess; 2 hasn't been seen.
|
|
34
|
+
_CAR_COSTUME_AVAILABILITY_MAP: Final[dict[int, str]] = {
|
|
35
|
+
1: "available",
|
|
36
|
+
3: "unavailable",
|
|
37
|
+
}
|
|
21
38
|
|
|
22
39
|
|
|
23
40
|
_COSTUME_THEME_MAP: Final[dict[int, str]] = {
|
|
@@ -51,7 +68,7 @@ def decode_car_costume_settings(
|
|
|
51
68
|
costumeInteriorLightShowEnabled: bool
|
|
52
69
|
costumeInteriorOverheadLightsEnabled: bool
|
|
53
70
|
costumeLightsColor: int
|
|
54
|
-
costumeEffect: int
|
|
71
|
+
costumeEffect: int (1 none, 3 the display show; inferred)
|
|
55
72
|
costumeEffectTrigger: str ("manual" | "motion"), None when unset
|
|
56
73
|
"""
|
|
57
74
|
return {
|
|
@@ -86,15 +103,20 @@ def decode_car_costume_state(
|
|
|
86
103
|
Names come from the app; the int values are unmapped enums.
|
|
87
104
|
|
|
88
105
|
Fields:
|
|
89
|
-
carCostumeAvailability: int
|
|
106
|
+
carCostumeAvailability: str | int ("available" | "unavailable"; a
|
|
107
|
+
best guess), the raw int when unmapped
|
|
90
108
|
costumeTheme: str | None ("none" | "ghostbusters" |
|
|
91
109
|
"ghostbusters_display"; inferred), None when unset
|
|
92
110
|
costumeMotionTriggerDetected: bool
|
|
93
|
-
activeCostumeEffect: int
|
|
111
|
+
activeCostumeEffect: int (1 none, 3 the display show; inferred)
|
|
94
112
|
costumeStartTime: datetime, only when sent
|
|
95
113
|
"""
|
|
96
114
|
result: dict[str, Any] = {
|
|
97
|
-
"carCostumeAvailability":
|
|
115
|
+
"carCostumeAvailability": _enum(
|
|
116
|
+
_CAR_COSTUME_AVAILABILITY_MAP,
|
|
117
|
+
m.car_costume_availability,
|
|
118
|
+
what="car costume availability",
|
|
119
|
+
),
|
|
98
120
|
"costumeTheme": (
|
|
99
121
|
_enum(_COSTUME_THEME_MAP, m.costume_theme, what="costume theme")
|
|
100
122
|
if m.costume_theme
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"""Encoder for `sendVehicleOperation` requests."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import base64
|
|
6
|
+
import uuid
|
|
7
|
+
|
|
8
|
+
from .proto import operation_pb2
|
|
9
|
+
|
|
10
|
+
_Request = operation_pb2.VehicleOperationRequest
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def encode_vehicle_operation(
|
|
14
|
+
rvm: str,
|
|
15
|
+
payload: bytes = b"",
|
|
16
|
+
phone_id: bytes = bytes(16),
|
|
17
|
+
request_id: str | None = None,
|
|
18
|
+
) -> str:
|
|
19
|
+
"""Encode a `sendVehicleOperation` request as a base64 string.
|
|
20
|
+
|
|
21
|
+
An empty payload asks the vehicle to publish the current value of the RVM,
|
|
22
|
+
anything else writes it. The vehicle accepts an all-zero phone id.
|
|
23
|
+
"""
|
|
24
|
+
request = _Request(
|
|
25
|
+
metadata=_Request.Metadata(
|
|
26
|
+
phone_info=_Request.Metadata.PhoneInfo(field_1=1, phone_id=phone_id),
|
|
27
|
+
request_id=request_id or str(uuid.uuid4()),
|
|
28
|
+
),
|
|
29
|
+
operation=_Request.Operation(
|
|
30
|
+
rvm=rvm,
|
|
31
|
+
type=(
|
|
32
|
+
operation_pb2.OPERATION_WRITE
|
|
33
|
+
if payload
|
|
34
|
+
else operation_pb2.OPERATION_READ
|
|
35
|
+
),
|
|
36
|
+
payload=payload,
|
|
37
|
+
),
|
|
38
|
+
)
|
|
39
|
+
return base64.b64encode(request.SerializeToString()).decode("utf-8")
|
|
@@ -219,6 +219,9 @@ message EnergyState {
|
|
|
219
219
|
optional ChargerStatus charger_status = 2; // inferred
|
|
220
220
|
optional int32 field_3 = 3; // unknown
|
|
221
221
|
float power = 4; // kW; same as charging.session.power
|
|
222
|
+
// Unknown; sent with remote_command's start_available as the vehicle sleeps
|
|
223
|
+
// with a user-stopped session.
|
|
224
|
+
optional int32 field_8 = 8;
|
|
222
225
|
string field_10 = 10; // unknown
|
|
223
226
|
optional ConnectionState connection_state = 11;
|
|
224
227
|
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
+
# NO CHECKED-IN PROTOBUF GENCODE
|
|
4
|
+
# source: rivian/parallax/proto/charging.proto
|
|
5
|
+
# Protobuf Python Version: 6.31.1
|
|
6
|
+
"""Generated protocol buffer code."""
|
|
7
|
+
from google.protobuf import descriptor as _descriptor
|
|
8
|
+
from google.protobuf import descriptor_pool as _descriptor_pool
|
|
9
|
+
from google.protobuf import runtime_version as _runtime_version
|
|
10
|
+
from google.protobuf import symbol_database as _symbol_database
|
|
11
|
+
from google.protobuf.internal import builder as _builder
|
|
12
|
+
_runtime_version.ValidateProtobufRuntimeVersion(
|
|
13
|
+
_runtime_version.Domain.PUBLIC,
|
|
14
|
+
6,
|
|
15
|
+
31,
|
|
16
|
+
1,
|
|
17
|
+
'',
|
|
18
|
+
'rivian/parallax/proto/charging.proto'
|
|
19
|
+
)
|
|
20
|
+
# @@protoc_insertion_point(imports)
|
|
21
|
+
|
|
22
|
+
_sym_db = _symbol_database.Default()
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n$rivian/parallax/proto/charging.proto\x12\x18rivian.parallax.charging\"\xe8\x04\n\x12ScheduleTimeWindow\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x43\n\x06window\x18\x02 \x01(\x0b\x32\x33.rivian.parallax.charging.ScheduleTimeWindow.Window\x1a\xbe\x02\n\x06Window\x12\x12\n\nstart_time\x18\x01 \x01(\x05\x12\x10\n\x08\x65nd_time\x18\x02 \x01(\x05\x12\x10\n\x08\x64uration\x18\x03 \x01(\x05\x12\x11\n\x04\x61mps\x18\x04 \x01(\x05H\x00\x88\x01\x01\x12L\n\x08location\x18\x05 \x01(\x0b\x32:.rivian.parallax.charging.ScheduleTimeWindow.GeoCoordinate\x12I\n\tstart_day\x18\x06 \x01(\x0e\x32\x36.rivian.parallax.charging.ScheduleTimeWindow.DayOfWeek\x12G\n\x07\x65nd_day\x18\x07 \x01(\x0e\x32\x36.rivian.parallax.charging.ScheduleTimeWindow.DayOfWeekB\x07\n\x05_amps\x1a\x34\n\rGeoCoordinate\x12\x10\n\x08latitude\x18\x01 \x01(\x01\x12\x11\n\tlongitude\x18\x02 \x01(\x01\"\x84\x01\n\tDayOfWeek\x12\x1b\n\x17\x44\x41Y_OF_WEEK_UNSPECIFIED\x10\x00\x12\n\n\x06SUNDAY\x10\x01\x12\n\n\x06MONDAY\x10\x02\x12\x0b\n\x07TUESDAY\x10\x03\x12\r\n\tWEDNESDAY\x10\x04\x12\x0c\n\x08THURSDAY\x10\x05\x12\n\n\x06\x46RIDAY\x10\x06\x12\x0c\n\x08SATURDAY\x10\x07\"\xb6\x01\n\x13SessionNotification\x12\x1e\n\x16unexpected_stop_reason\x18\x01 \x01(\x05\x12\x44\n\rderate_status\x18\x02 \x01(\x0e\x32-.rivian.parallax.charging.ChargerDerateStatus\x12\x39\n\x0b\x66\x61ult_chime\x18\x03 \x01(\x0e\x32$.rivian.parallax.charging.FaultChime\"\\\n\x14SessionRemoteCommand\x12\x44\n\x0fstart_available\x18\x01 \x01(\x0e\x32+.rivian.parallax.charging.StartAvailability\"1\n\tSocSlider\x12\x16\n\tsoc_limit\x18\x01 \x01(\x05H\x00\x88\x01\x01\x42\x0c\n\n_soc_limit\"\x1f\n\nTripTarget\x12\x11\n\tsoc_limit\x18\x02 \x01(\x05\"\xf3\x01\n\x15SmartChargingSettings\x12S\n\x0eready_by_times\x18\x01 \x03(\x0b\x32;.rivian.parallax.charging.SmartChargingSettings.ReadyByTime\x12\x1c\n\x14\x63lean_energy_enabled\x18\x02 \x01(\x08\x1ag\n\x0bReadyByTime\x12\r\n\x05hours\x18\x01 \x01(\x05\x12\x0f\n\x07minutes\x18\x02 \x01(\x05\x12\x38\n\x04\x64\x61ys\x18\x03 \x03(\x0e\x32*.rivian.parallax.charging.SmartChargingDay\"\xf0\x01\n\x11SmartChargingInfo\x12K\n\x0bresume_time\x18\x01 \x01(\x0b\x32\x36.rivian.parallax.charging.SmartChargingInfo.ResumeTime\x12I\n\x0cnotification\x18\x02 \x01(\x0e\x32\x33.rivian.parallax.charging.SmartChargingNotification\x12\x15\n\rschedule_type\x18\x03 \x01(\x05\x1a,\n\nResumeTime\x12\x0f\n\x07seconds\x18\x01 \x01(\x03\x12\r\n\x05nanos\x18\x02 \x01(\x05\"\x1a\n\x18WeightedChargingForecast\"\xda\x01\n\rSessionStatus\x12H\n\x10\x63onnection_state\x18\x01 \x01(\x0e\x32).rivian.parallax.charging.ConnectionStateH\x00\x88\x01\x01\x12\x44\n\x0e\x63harging_state\x18\x02 \x01(\x0e\x32\'.rivian.parallax.charging.ChargingStateH\x01\x88\x01\x01\x12\x11\n\tevse_type\x18\x03 \x01(\x05\x42\x13\n\x11_connection_stateB\x11\n\x0f_charging_state\"v\n\x0eTimeEstimation\x12\x42\n\x08validity\x18\x01 \x01(\x0e\x32\x30.rivian.parallax.charging.TimeEstimationValidity\x12 \n\x18\x65stimated_time_remaining\x18\x02 \x01(\x05\"\x83\x03\n\x0b\x45nergyState\x12\x44\n\x0e\x63harging_state\x18\x01 \x01(\x0e\x32\'.rivian.parallax.charging.ChargingStateH\x00\x88\x01\x01\x12\x44\n\x0e\x63harger_status\x18\x02 \x01(\x0e\x32\'.rivian.parallax.charging.ChargerStatusH\x01\x88\x01\x01\x12\x14\n\x07\x66ield_3\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\r\n\x05power\x18\x04 \x01(\x02\x12\x14\n\x07\x66ield_8\x18\x08 \x01(\x05H\x03\x88\x01\x01\x12\x10\n\x08\x66ield_10\x18\n \x01(\t\x12H\n\x10\x63onnection_state\x18\x0b \x01(\x0e\x32).rivian.parallax.charging.ConnectionStateH\x04\x88\x01\x01\x42\x11\n\x0f_charging_stateB\x11\n\x0f_charger_statusB\n\n\x08_field_3B\n\n\x08_field_8B\x13\n\x11_connection_state\"\x1d\n\x0cSessionPower\x12\r\n\x05power\x18\x01 \x01(\x02*\xb2\x05\n\x13\x43hargerDerateStatus\x12\x16\n\x12\x44\x45RATE_STATUS_NONE\x10\x00\x12\x1e\n\x1a\x44\x45RATE_STATUS_WARM_ADAPTER\x10\x01\x12\x1e\n\x1a\x44\x45RATE_STATUS_DC_WARM_PLUG\x10\x02\x12\x1e\n\x1a\x44\x45RATE_STATUS_AC_WARM_PLUG\x10\x03\x12\x1f\n\x1b\x44\x45RATE_STATUS_EVSE_DERATING\x10\x04\x12\x1d\n\x19\x44\x45RATE_STATUS_NEARING_TOC\x10\x05\x12/\n+DERATE_STATUS_NEAR_TOC_LFP_BATT_CALIBRATING\x10\x06\x12\"\n\x1e\x44\x45RATE_STATUS_HVAC_PRIORITIZED\x10\x07\x12!\n\x1d\x44\x45RATE_STATUS_BATTERY_HEATING\x10\x08\x12!\n\x1d\x44\x45RATE_STATUS_BATTERY_COOLING\x10\t\x12\x32\n.DERATE_STATUS_CELL_THERMAL_LIM_COLD_NO_CURRENT\x10\n\x12\x31\n-DERATE_STATUS_CELL_THERMAL_LIM_HOT_NO_CURRENT\x10\x0b\x12\'\n#DERATE_STATUS_CELL_THERMAL_LIM_COLD\x10\x0c\x12&\n\"DERATE_STATUS_CELL_THERMAL_LIM_HOT\x10\r\x12+\n\'DERATE_STATUS_PACK_HARDWARE_THERMAL_LIM\x10\x0e\x12 \n\x1c\x44\x45RATE_STATUS_HIGH_SOC_SIGMA\x10\x0f\x12\"\n\x1e\x44\x45RATE_STATUS_HV_BATTERY_FAULT\x10\x10\x12\x1d\n\x19\x44\x45RATE_STATUS_DCAC_EXPORT\x10\x11*\xdb\x03\n\nFaultChime\x12\x14\n\x10\x46\x41ULT_CHIME_NONE\x10\x00\x12%\n!FAULT_CHIME_CHARGING_DISABLED_ALL\x10\x01\x12$\n FAULT_CHIME_CHARGING_DISABLED_DC\x10\x02\x12-\n)FAULT_CHIME_CHARGING_DISABLED_PIN_TEMP_DC\x10\x03\x12\x36\n2FAULT_CHIME_CHARGING_DISABLED_PIN_TEMP_GRADIENT_DC\x10\x04\x12$\n FAULT_CHIME_CHARGING_DEGRADED_DC\x10\x05\x12$\n FAULT_CHIME_CHARGING_DISABLED_AC\x10\x06\x12-\n)FAULT_CHIME_CHARGING_DISABLED_PIN_TEMP_AC\x10\x07\x12$\n FAULT_CHIME_CHARGING_DEGRADED_AC\x10\x08\x12\x34\n0FAULT_CHIME_CHARGING_DISABLED_PARTIAL_CONNECTION\x10\t\x12,\n(FAULT_CHIME_CHARGING_DISABLED_NOT_PARKED\x10\n*j\n\x11StartAvailability\x12\x1a\n\x16START_AVAILABILITY_SNA\x10\x00\x12\x1c\n\x18START_AVAILABILITY_FALSE\x10\x01\x12\x1b\n\x17START_AVAILABILITY_TRUE\x10\x02*\x97\x02\n\x10SmartChargingDay\x12\"\n\x1eSMART_CHARGING_DAY_UNSPECIFIED\x10\x00\x12\x1d\n\x19SMART_CHARGING_DAY_MONDAY\x10\x01\x12\x1e\n\x1aSMART_CHARGING_DAY_TUESDAY\x10\x02\x12 \n\x1cSMART_CHARGING_DAY_WEDNESDAY\x10\x03\x12\x1f\n\x1bSMART_CHARGING_DAY_THURSDAY\x10\x04\x12\x1d\n\x19SMART_CHARGING_DAY_FRIDAY\x10\x05\x12\x1f\n\x1bSMART_CHARGING_DAY_SATURDAY\x10\x06\x12\x1d\n\x19SMART_CHARGING_DAY_SUNDAY\x10\x07*\xbc\x02\n\x19SmartChargingNotification\x12#\n\x1fSMART_CHARGING_NOTIFICATION_SNA\x10\x00\x12:\n6SMART_CHARGING_NOTIFICATION_CHARGING_WITH_CLEAN_ENERGY\x10\x01\x12/\n+SMART_CHARGING_NOTIFICATION_CHARGING_PAUSED\x10\x02\x12<\n8SMART_CHARGING_NOTIFICATION_CLEAN_ENERGY_NOT_ENOUGH_TIME\x10\x03\x12O\nKSMART_CHARGING_NOTIFICATION_CLEAN_ENERGY_FORECAST_UNAVAILABLE_OR_INCOMPLETE\x10\x04*\xaf\x01\n\x0f\x43onnectionState\x12\x19\n\x15\x43ONNECTION_STATE_INIT\x10\x00\x12!\n\x1d\x43ONNECTION_STATE_DISCONNECTED\x10\x01\x12\x1e\n\x1a\x43ONNECTION_STATE_CONNECTED\x10\x02\x12\x1a\n\x16\x43ONNECTION_STATE_ERROR\x10\x03\x12\"\n\x1e\x43ONNECTION_STATE_V2L_CONNECTED\x10\x04*\xc4\x06\n\rChargingState\x12\x1e\n\x1a\x43HARGING_STATE_UNSPECIFIED\x10\x00\x12\x12\n\x0e\x43HARGING_READY\x10\x01\x12\x17\n\x13\x43HARGING_CONNECTING\x10\x02\x12\x13\n\x0f\x43HARGING_ACTIVE\x10\x03\x12\x15\n\x11\x43HARGING_COMPLETE\x10\x04\x12\x16\n\x12\x43HARGING_SCHEDULED\x10\x05\x12\x1a\n\x16\x43HARGING_VEHICLE_ERROR\x10\x06\x12\x1a\n\x16\x43HARGING_STATION_ERROR\x10\x07\x12\x19\n\x15\x43HARGING_USER_STOPPED\x10\x08\x12\x1c\n\x18\x43HARGING_STATION_STOPPED\x10\t\x12\x1a\n\x16\x43HARGING_PAYMENT_ERROR\x10\n\x12\x17\n\x13\x43HARGING_CERT_ERROR\x10\x0b\x12\x16\n\x12\x43HARGING_TLS_ERROR\x10\x0c\x12(\n$CHARGING_ERROR_AC_ADAPTER_USED_ON_DC\x10\r\x12(\n$CHARGING_ERROR_DC_ADAPTER_USED_ON_AC\x10\x0e\x12\'\n#CHARGING_ERROR_INCOMPATIBLE_CHARGER\x10\x0f\x12\x1c\n\x18\x43HARGING_SD_COMPENSATION\x10\x10\x12\x16\n\x12WAITING_ON_CHARGER\x10\x11\x12%\n!CHARGER_NOT_READY_OR_INCOMPATIBLE\x10\x12\x12\x1c\n\x18\x43HARGING_VEHICLE_STOPPED\x10\x13\x12+\n\'CHARGING_PAYMENT_ERROR_START_RIVIAN_APP\x10\x14\x12&\n\"CHARGING_TLS_ERROR_UNKNOWN_CHARGER\x10\x15\x12&\n\"CHARGING_TLS_ERROR_UNEXPECTED_FAIL\x10\x16\x12\'\n#CHARGING_TLS_ERROR_START_RIVIAN_APP\x10\x17\x12\"\n\x1e\x43HARGING_SMART_CHARGING_PAUSED\x10\x18\x12\"\n\x1e\x43HARGING_SMART_CHARGING_ACTIVE\x10\x19*\xb4\x01\n\x16TimeEstimationValidity\x12!\n\x1dTIME_ESTIMATION_VALIDITY_NONE\x10\x00\x12\"\n\x1eTIME_ESTIMATION_VALIDITY_VALID\x10\x01\x12$\n TIME_ESTIMATION_VALIDITY_INVALID\x10\x02\x12-\n)TIME_ESTIMATION_VALIDITY_PACK_DISCHARGING\x10\x03*\xa0\x01\n\rChargerStatus\x12\x1e\n\x1a\x43HARGER_STATUS_UNSPECIFIED\x10\x00\x12 \n\x1c\x43HARGER_STATUS_NOT_CONNECTED\x10\x01\x12&\n\"CHARGER_STATUS_CONNECTED_NO_CHARGE\x10\x02\x12%\n!CHARGER_STATUS_CONNECTED_CHARGING\x10\x03\x62\x06proto3')
|
|
28
|
+
|
|
29
|
+
_globals = globals()
|
|
30
|
+
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
31
|
+
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'rivian.parallax.proto.charging_pb2', _globals)
|
|
32
|
+
if not _descriptor._USE_C_DESCRIPTORS:
|
|
33
|
+
DESCRIPTOR._loaded_options = None
|
|
34
|
+
_globals['_CHARGERDERATESTATUS']._serialized_start=2328
|
|
35
|
+
_globals['_CHARGERDERATESTATUS']._serialized_end=3018
|
|
36
|
+
_globals['_FAULTCHIME']._serialized_start=3021
|
|
37
|
+
_globals['_FAULTCHIME']._serialized_end=3496
|
|
38
|
+
_globals['_STARTAVAILABILITY']._serialized_start=3498
|
|
39
|
+
_globals['_STARTAVAILABILITY']._serialized_end=3604
|
|
40
|
+
_globals['_SMARTCHARGINGDAY']._serialized_start=3607
|
|
41
|
+
_globals['_SMARTCHARGINGDAY']._serialized_end=3886
|
|
42
|
+
_globals['_SMARTCHARGINGNOTIFICATION']._serialized_start=3889
|
|
43
|
+
_globals['_SMARTCHARGINGNOTIFICATION']._serialized_end=4205
|
|
44
|
+
_globals['_CONNECTIONSTATE']._serialized_start=4208
|
|
45
|
+
_globals['_CONNECTIONSTATE']._serialized_end=4383
|
|
46
|
+
_globals['_CHARGINGSTATE']._serialized_start=4386
|
|
47
|
+
_globals['_CHARGINGSTATE']._serialized_end=5222
|
|
48
|
+
_globals['_TIMEESTIMATIONVALIDITY']._serialized_start=5225
|
|
49
|
+
_globals['_TIMEESTIMATIONVALIDITY']._serialized_end=5405
|
|
50
|
+
_globals['_CHARGERSTATUS']._serialized_start=5408
|
|
51
|
+
_globals['_CHARGERSTATUS']._serialized_end=5568
|
|
52
|
+
_globals['_SCHEDULETIMEWINDOW']._serialized_start=67
|
|
53
|
+
_globals['_SCHEDULETIMEWINDOW']._serialized_end=683
|
|
54
|
+
_globals['_SCHEDULETIMEWINDOW_WINDOW']._serialized_start=176
|
|
55
|
+
_globals['_SCHEDULETIMEWINDOW_WINDOW']._serialized_end=494
|
|
56
|
+
_globals['_SCHEDULETIMEWINDOW_GEOCOORDINATE']._serialized_start=496
|
|
57
|
+
_globals['_SCHEDULETIMEWINDOW_GEOCOORDINATE']._serialized_end=548
|
|
58
|
+
_globals['_SCHEDULETIMEWINDOW_DAYOFWEEK']._serialized_start=551
|
|
59
|
+
_globals['_SCHEDULETIMEWINDOW_DAYOFWEEK']._serialized_end=683
|
|
60
|
+
_globals['_SESSIONNOTIFICATION']._serialized_start=686
|
|
61
|
+
_globals['_SESSIONNOTIFICATION']._serialized_end=868
|
|
62
|
+
_globals['_SESSIONREMOTECOMMAND']._serialized_start=870
|
|
63
|
+
_globals['_SESSIONREMOTECOMMAND']._serialized_end=962
|
|
64
|
+
_globals['_SOCSLIDER']._serialized_start=964
|
|
65
|
+
_globals['_SOCSLIDER']._serialized_end=1013
|
|
66
|
+
_globals['_TRIPTARGET']._serialized_start=1015
|
|
67
|
+
_globals['_TRIPTARGET']._serialized_end=1046
|
|
68
|
+
_globals['_SMARTCHARGINGSETTINGS']._serialized_start=1049
|
|
69
|
+
_globals['_SMARTCHARGINGSETTINGS']._serialized_end=1292
|
|
70
|
+
_globals['_SMARTCHARGINGSETTINGS_READYBYTIME']._serialized_start=1189
|
|
71
|
+
_globals['_SMARTCHARGINGSETTINGS_READYBYTIME']._serialized_end=1292
|
|
72
|
+
_globals['_SMARTCHARGINGINFO']._serialized_start=1295
|
|
73
|
+
_globals['_SMARTCHARGINGINFO']._serialized_end=1535
|
|
74
|
+
_globals['_SMARTCHARGINGINFO_RESUMETIME']._serialized_start=1491
|
|
75
|
+
_globals['_SMARTCHARGINGINFO_RESUMETIME']._serialized_end=1535
|
|
76
|
+
_globals['_WEIGHTEDCHARGINGFORECAST']._serialized_start=1537
|
|
77
|
+
_globals['_WEIGHTEDCHARGINGFORECAST']._serialized_end=1563
|
|
78
|
+
_globals['_SESSIONSTATUS']._serialized_start=1566
|
|
79
|
+
_globals['_SESSIONSTATUS']._serialized_end=1784
|
|
80
|
+
_globals['_TIMEESTIMATION']._serialized_start=1786
|
|
81
|
+
_globals['_TIMEESTIMATION']._serialized_end=1904
|
|
82
|
+
_globals['_ENERGYSTATE']._serialized_start=1907
|
|
83
|
+
_globals['_ENERGYSTATE']._serialized_end=2294
|
|
84
|
+
_globals['_SESSIONPOWER']._serialized_start=2296
|
|
85
|
+
_globals['_SESSIONPOWER']._serialized_end=2325
|
|
86
|
+
# @@protoc_insertion_point(module_scope)
|
|
@@ -337,20 +337,22 @@ class TimeEstimation(_message.Message):
|
|
|
337
337
|
def __init__(self, validity: _Optional[_Union[TimeEstimationValidity, str]] = ..., estimated_time_remaining: _Optional[int] = ...) -> None: ...
|
|
338
338
|
|
|
339
339
|
class EnergyState(_message.Message):
|
|
340
|
-
__slots__ = ("charging_state", "charger_status", "field_3", "power", "field_10", "connection_state")
|
|
340
|
+
__slots__ = ("charging_state", "charger_status", "field_3", "power", "field_8", "field_10", "connection_state")
|
|
341
341
|
CHARGING_STATE_FIELD_NUMBER: _ClassVar[int]
|
|
342
342
|
CHARGER_STATUS_FIELD_NUMBER: _ClassVar[int]
|
|
343
343
|
FIELD_3_FIELD_NUMBER: _ClassVar[int]
|
|
344
344
|
POWER_FIELD_NUMBER: _ClassVar[int]
|
|
345
|
+
FIELD_8_FIELD_NUMBER: _ClassVar[int]
|
|
345
346
|
FIELD_10_FIELD_NUMBER: _ClassVar[int]
|
|
346
347
|
CONNECTION_STATE_FIELD_NUMBER: _ClassVar[int]
|
|
347
348
|
charging_state: ChargingState
|
|
348
349
|
charger_status: ChargerStatus
|
|
349
350
|
field_3: int
|
|
350
351
|
power: float
|
|
352
|
+
field_8: int
|
|
351
353
|
field_10: str
|
|
352
354
|
connection_state: ConnectionState
|
|
353
|
-
def __init__(self, charging_state: _Optional[_Union[ChargingState, str]] = ..., charger_status: _Optional[_Union[ChargerStatus, str]] = ..., field_3: _Optional[int] = ..., power: _Optional[float] = ..., field_10: _Optional[str] = ..., connection_state: _Optional[_Union[ConnectionState, str]] = ...) -> None: ...
|
|
355
|
+
def __init__(self, charging_state: _Optional[_Union[ChargingState, str]] = ..., charger_status: _Optional[_Union[ChargerStatus, str]] = ..., field_3: _Optional[int] = ..., power: _Optional[float] = ..., field_8: _Optional[int] = ..., field_10: _Optional[str] = ..., connection_state: _Optional[_Union[ConnectionState, str]] = ...) -> None: ...
|
|
354
356
|
|
|
355
357
|
class SessionPower(_message.Message):
|
|
356
358
|
__slots__ = ("power",)
|
|
@@ -5,8 +5,11 @@ package rivian.parallax.holiday_celebration;
|
|
|
5
5
|
// Reverse-engineered `holiday_celebration.*` RVM payloads; see ../holiday_celebration.py.
|
|
6
6
|
|
|
7
7
|
// holiday_celebration.car_costume.holiday_celebration_enabled
|
|
8
|
-
//
|
|
9
|
-
message HolidayCelebrationEnabled {
|
|
8
|
+
// No app class; names are inferred.
|
|
9
|
+
message HolidayCelebrationEnabled {
|
|
10
|
+
bool available = 1; // the feature is offered (seasonal)
|
|
11
|
+
bool enabled = 2; // the user's on/off switch
|
|
12
|
+
}
|
|
10
13
|
|
|
11
14
|
// holiday_celebration.car_costume.settings -- int enum types unknown.
|
|
12
15
|
message CarCostumeSettings {
|
|
@@ -17,7 +20,7 @@ message CarCostumeSettings {
|
|
|
17
20
|
bool interior_light_show_enabled = 6;
|
|
18
21
|
bool interior_overhead_lights_enabled = 7;
|
|
19
22
|
int32 lights_color = 9;
|
|
20
|
-
int32 costume_effect = 11;
|
|
23
|
+
int32 costume_effect = 11; // the app's enum (class stripped); 1 none, 3 display show (inferred)
|
|
21
24
|
CostumeEffectTrigger effect_trigger = 12;
|
|
22
25
|
}
|
|
23
26
|
|
|
@@ -29,11 +32,12 @@ enum CostumeEffectTrigger {
|
|
|
29
32
|
|
|
30
33
|
// holiday_celebration.car_costume.state -- int enum types unknown.
|
|
31
34
|
message CarCostumeState {
|
|
32
|
-
|
|
35
|
+
// The app's enum (class stripped); best guess 1 available, 3 unavailable.
|
|
36
|
+
int32 car_costume_availability = 1;
|
|
33
37
|
CarCostumeTheme costume_theme = 2;
|
|
34
38
|
bool motion_trigger_detected = 3;
|
|
35
39
|
Timestamp costume_start_time = 4;
|
|
36
|
-
int32 active_costume_effect = 6; //
|
|
40
|
+
int32 active_costume_effect = 6; // as CarCostumeSettings.costume_effect
|
|
37
41
|
|
|
38
42
|
message Timestamp {
|
|
39
43
|
int64 seconds = 1;
|
|
@@ -0,0 +1,56 @@
|
|
|
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/holiday_celebration.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/holiday_celebration.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/holiday_celebration.proto\x12#rivian.parallax.holiday_celebration\"?\n\x19HolidayCelebrationEnabled\x12\x11\n\tavailable\x18\x01 \x01(\x08\x12\x0f\n\x07\x65nabled\x18\x02 \x01(\x08\"\xef\x02\n\x12\x43\x61rCostumeSettings\x12 \n\x18\x63\x65lebration_sound_volume\x18\x01 \x01(\x05\x12\x1e\n\x16interior_music_enabled\x18\x02 \x01(\x08\x12\x1b\n\x13interior_music_type\x18\x03 \x01(\x05\x12*\n\"motion_exterior_light_sound_effect\x18\x04 \x01(\x05\x12#\n\x1binterior_light_show_enabled\x18\x06 \x01(\x08\x12(\n interior_overhead_lights_enabled\x18\x07 \x01(\x08\x12\x14\n\x0clights_color\x18\t \x01(\x05\x12\x16\n\x0e\x63ostume_effect\x18\x0b \x01(\x05\x12Q\n\x0e\x65\x66\x66\x65\x63t_trigger\x18\x0c \x01(\x0e\x32\x39.rivian.parallax.holiday_celebration.CostumeEffectTrigger\"\xc9\x02\n\x0f\x43\x61rCostumeState\x12 \n\x18\x63\x61r_costume_availability\x18\x01 \x01(\x05\x12K\n\rcostume_theme\x18\x02 \x01(\x0e\x32\x34.rivian.parallax.holiday_celebration.CarCostumeTheme\x12\x1f\n\x17motion_trigger_detected\x18\x03 \x01(\x08\x12Z\n\x12\x63ostume_start_time\x18\x04 \x01(\x0b\x32>.rivian.parallax.holiday_celebration.CarCostumeState.Timestamp\x12\x1d\n\x15\x61\x63tive_costume_effect\x18\x06 \x01(\x05\x1a+\n\tTimestamp\x12\x0f\n\x07seconds\x18\x01 \x01(\x03\x12\r\n\x05nanos\x18\x02 \x01(\x05\"\xe9\x0b\n\x1cHalloweenCelebrationSettings\x12\x65\n\rcostume_theme\x18\x01 \x01(\x0b\x32N.rivian.parallax.holiday_celebration.HalloweenCelebrationSettings.CostumeTheme\x12\x62\n\x0csound_volume\x18\x02 \x01(\x0b\x32L.rivian.parallax.holiday_celebration.HalloweenCelebrationSettings.Int32Value\x12\x62\n\rmusic_enabled\x18\x03 \x01(\x0b\x32K.rivian.parallax.holiday_celebration.HalloweenCelebrationSettings.BoolValue\x12`\n\nmusic_type\x18\x04 \x01(\x0b\x32L.rivian.parallax.holiday_celebration.HalloweenCelebrationSettings.Int32Value\x12\x63\n\x0csound_effect\x18\x05 \x01(\x0b\x32M.rivian.parallax.holiday_celebration.HalloweenCelebrationSettings.StringValue\x12\"\n\x15\x65xterior_sound_effect\x18\x06 \x01(\x05H\x00\x88\x01\x01\x12j\n\x15\x65xterior_sounds_muted\x18\x07 \x01(\x0b\x32K.rivian.parallax.holiday_celebration.HalloweenCelebrationSettings.BoolValue\x12g\n\x12light_show_enabled\x18\x08 \x01(\x0b\x32K.rivian.parallax.holiday_celebration.HalloweenCelebrationSettings.BoolValue\x12u\n interior_overhead_lights_enabled\x18\t \x01(\x0b\x32K.rivian.parallax.holiday_celebration.HalloweenCelebrationSettings.BoolValue\x12p\n\x1b\x65xterior_light_show_enabled\x18\n \x01(\x0b\x32K.rivian.parallax.holiday_celebration.HalloweenCelebrationSettings.BoolValue\x12\x62\n\x0clights_color\x18\x0b \x01(\x0b\x32L.rivian.parallax.holiday_celebration.HalloweenCelebrationSettings.Int32Value\x12o\n\x18\x63\x61r_costume_availability\x18\x0c \x01(\x0b\x32M.rivian.parallax.holiday_celebration.HalloweenCelebrationSettings.StringValue\x12\'\n\x1amotion_light_sound_enabled\x18\r \x01(\x08H\x01\x88\x01\x01\x1a\x36\n\x0c\x43ostumeTheme\x12\x17\n\ntheme_name\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\r\n\x0b_theme_name\x1a)\n\tBoolValue\x12\x12\n\x05value\x18\x01 \x01(\x08H\x00\x88\x01\x01\x42\x08\n\x06_value\x1a*\n\nInt32Value\x12\x12\n\x05value\x18\x01 \x01(\x05H\x00\x88\x01\x01\x42\x08\n\x06_value\x1a+\n\x0bStringValue\x12\x12\n\x05value\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_valueB\x18\n\x16_exterior_sound_effectB\x1d\n\x1b_motion_light_sound_enabled*\x84\x01\n\x14\x43ostumeEffectTrigger\x12&\n\"COSTUME_EFFECT_TRIGGER_UNSPECIFIED\x10\x00\x12!\n\x1d\x43OSTUME_EFFECT_TRIGGER_MANUAL\x10\x01\x12!\n\x1d\x43OSTUME_EFFECT_TRIGGER_MOTION\x10\x02*\xa0\x01\n\x0f\x43\x61rCostumeTheme\x12!\n\x1d\x43\x41R_COSTUME_THEME_UNSPECIFIED\x10\x00\x12\x1a\n\x16\x43\x41R_COSTUME_THEME_NONE\x10\x01\x12\"\n\x1e\x43\x41R_COSTUME_THEME_GHOSTBUSTERS\x10\x02\x12*\n&CAR_COSTUME_THEME_GHOSTBUSTERS_DISPLAY\x10\x03\x62\x06proto3')
|
|
28
|
+
|
|
29
|
+
_globals = globals()
|
|
30
|
+
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
31
|
+
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'rivian.parallax.proto.holiday_celebration_pb2', _globals)
|
|
32
|
+
if not _descriptor._USE_C_DESCRIPTORS:
|
|
33
|
+
DESCRIPTOR._loaded_options = None
|
|
34
|
+
_globals['_COSTUMEEFFECTTRIGGER']._serialized_start=2372
|
|
35
|
+
_globals['_COSTUMEEFFECTTRIGGER']._serialized_end=2504
|
|
36
|
+
_globals['_CARCOSTUMETHEME']._serialized_start=2507
|
|
37
|
+
_globals['_CARCOSTUMETHEME']._serialized_end=2667
|
|
38
|
+
_globals['_HOLIDAYCELEBRATIONENABLED']._serialized_start=88
|
|
39
|
+
_globals['_HOLIDAYCELEBRATIONENABLED']._serialized_end=151
|
|
40
|
+
_globals['_CARCOSTUMESETTINGS']._serialized_start=154
|
|
41
|
+
_globals['_CARCOSTUMESETTINGS']._serialized_end=521
|
|
42
|
+
_globals['_CARCOSTUMESTATE']._serialized_start=524
|
|
43
|
+
_globals['_CARCOSTUMESTATE']._serialized_end=853
|
|
44
|
+
_globals['_CARCOSTUMESTATE_TIMESTAMP']._serialized_start=810
|
|
45
|
+
_globals['_CARCOSTUMESTATE_TIMESTAMP']._serialized_end=853
|
|
46
|
+
_globals['_HALLOWEENCELEBRATIONSETTINGS']._serialized_start=856
|
|
47
|
+
_globals['_HALLOWEENCELEBRATIONSETTINGS']._serialized_end=2369
|
|
48
|
+
_globals['_HALLOWEENCELEBRATIONSETTINGS_COSTUMETHEME']._serialized_start=2126
|
|
49
|
+
_globals['_HALLOWEENCELEBRATIONSETTINGS_COSTUMETHEME']._serialized_end=2180
|
|
50
|
+
_globals['_HALLOWEENCELEBRATIONSETTINGS_BOOLVALUE']._serialized_start=2182
|
|
51
|
+
_globals['_HALLOWEENCELEBRATIONSETTINGS_BOOLVALUE']._serialized_end=2223
|
|
52
|
+
_globals['_HALLOWEENCELEBRATIONSETTINGS_INT32VALUE']._serialized_start=2225
|
|
53
|
+
_globals['_HALLOWEENCELEBRATIONSETTINGS_INT32VALUE']._serialized_end=2267
|
|
54
|
+
_globals['_HALLOWEENCELEBRATIONSETTINGS_STRINGVALUE']._serialized_start=2269
|
|
55
|
+
_globals['_HALLOWEENCELEBRATIONSETTINGS_STRINGVALUE']._serialized_end=2312
|
|
56
|
+
# @@protoc_insertion_point(module_scope)
|
|
@@ -27,8 +27,12 @@ CAR_COSTUME_THEME_GHOSTBUSTERS: CarCostumeTheme
|
|
|
27
27
|
CAR_COSTUME_THEME_GHOSTBUSTERS_DISPLAY: CarCostumeTheme
|
|
28
28
|
|
|
29
29
|
class HolidayCelebrationEnabled(_message.Message):
|
|
30
|
-
__slots__ = ()
|
|
31
|
-
|
|
30
|
+
__slots__ = ("available", "enabled")
|
|
31
|
+
AVAILABLE_FIELD_NUMBER: _ClassVar[int]
|
|
32
|
+
ENABLED_FIELD_NUMBER: _ClassVar[int]
|
|
33
|
+
available: bool
|
|
34
|
+
enabled: bool
|
|
35
|
+
def __init__(self, available: bool = ..., enabled: bool = ...) -> None: ...
|
|
32
36
|
|
|
33
37
|
class CarCostumeSettings(_message.Message):
|
|
34
38
|
__slots__ = ("celebration_sound_volume", "interior_music_enabled", "interior_music_type", "motion_exterior_light_sound_effect", "interior_light_show_enabled", "interior_overhead_lights_enabled", "lights_color", "costume_effect", "effect_trigger")
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
syntax = "proto3";
|
|
2
|
+
|
|
3
|
+
package rivian.parallax.operation;
|
|
4
|
+
|
|
5
|
+
// Reverse-engineered `sendVehicleOperation` request; see ../operation.py.
|
|
6
|
+
|
|
7
|
+
message VehicleOperationRequest {
|
|
8
|
+
Metadata metadata = 1;
|
|
9
|
+
Operation operation = 2;
|
|
10
|
+
|
|
11
|
+
message Metadata {
|
|
12
|
+
PhoneInfo phone_info = 1;
|
|
13
|
+
string request_id = 2; // a UUID
|
|
14
|
+
|
|
15
|
+
message PhoneInfo {
|
|
16
|
+
int32 field_1 = 1; // unknown; always 1
|
|
17
|
+
bytes phone_id = 2; // 16 bytes; the vehicle accepts all zeros
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
message Operation {
|
|
22
|
+
string rvm = 1;
|
|
23
|
+
optional OperationType type = 2; // always sent
|
|
24
|
+
bytes payload = 4; // the RVM's message; absent when reading
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
enum OperationType {
|
|
29
|
+
OPERATION_READ = 0;
|
|
30
|
+
OPERATION_WRITE = 1;
|
|
31
|
+
}
|