tesla-fleet-api 1.0.1__py3-none-any.whl → 1.0.3__py3-none-any.whl
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.
- tesla_fleet_api/__init__.py +5 -7
- tesla_fleet_api/const.py +15 -1
- tesla_fleet_api/exceptions.py +39 -5
- tesla_fleet_api/tesla/__init__.py +3 -3
- tesla_fleet_api/tesla/bluetooth.py +11 -4
- tesla_fleet_api/tesla/charging.py +1 -1
- tesla_fleet_api/tesla/energysite.py +2 -2
- tesla_fleet_api/tesla/fleet.py +8 -8
- tesla_fleet_api/tesla/oauth.py +2 -2
- tesla_fleet_api/tesla/partner.py +1 -1
- tesla_fleet_api/tesla/user.py +1 -1
- tesla_fleet_api/tesla/vehicle/__init__.py +4 -4
- tesla_fleet_api/tesla/vehicle/bluetooth.py +245 -63
- tesla_fleet_api/tesla/vehicle/commands.py +140 -62
- tesla_fleet_api/tesla/vehicle/fleet.py +3 -3
- tesla_fleet_api/tesla/vehicle/signed.py +14 -21
- tesla_fleet_api/tesla/vehicle/vehicle.py +1 -1
- tesla_fleet_api/tesla/vehicle/vehicles.py +6 -6
- tesla_fleet_api/teslemetry/__init__.py +1 -1
- tesla_fleet_api/teslemetry/teslemetry.py +6 -6
- tesla_fleet_api/teslemetry/vehicle.py +5 -7
- tesla_fleet_api/tessie/__init__.py +1 -1
- tesla_fleet_api/tessie/tessie.py +6 -6
- tesla_fleet_api/tessie/vehicle.py +3 -9
- {tesla_fleet_api-1.0.1.dist-info → tesla_fleet_api-1.0.3.dist-info}/METADATA +1 -1
- tesla_fleet_api-1.0.3.dist-info/RECORD +51 -0
- tesla_fleet_api-1.0.1.dist-info/RECORD +0 -51
- {tesla_fleet_api-1.0.1.dist-info → tesla_fleet_api-1.0.3.dist-info}/LICENSE +0 -0
- {tesla_fleet_api-1.0.1.dist-info → tesla_fleet_api-1.0.3.dist-info}/WHEEL +0 -0
- {tesla_fleet_api-1.0.1.dist-info → tesla_fleet_api-1.0.3.dist-info}/top_level.txt +0 -0
tesla_fleet_api/__init__.py
CHANGED
@@ -1,15 +1,13 @@
|
|
1
|
-
from .tesla.fleet import TeslaFleetApi
|
2
|
-
from .tesla.bluetooth import TeslaBluetooth
|
3
|
-
from .tesla.oauth import TeslaFleetOAuth
|
4
|
-
from .
|
5
|
-
from .
|
6
|
-
from .tessie.tessie import Tessie
|
1
|
+
from tesla_fleet_api.tesla.fleet import TeslaFleetApi
|
2
|
+
from tesla_fleet_api.tesla.bluetooth import TeslaBluetooth
|
3
|
+
from tesla_fleet_api.tesla.oauth import TeslaFleetOAuth
|
4
|
+
from tesla_fleet_api.teslemetry.teslemetry import Teslemetry
|
5
|
+
from tesla_fleet_api.tessie.tessie import Tessie
|
7
6
|
|
8
7
|
__all__ = [
|
9
8
|
"TeslaFleetApi",
|
10
9
|
"TeslaBluetooth",
|
11
10
|
"TeslaFleetOAuth",
|
12
|
-
"TeslaFleetOpenSource",
|
13
11
|
"Teslemetry",
|
14
12
|
"Tessie",
|
15
13
|
]
|
tesla_fleet_api/const.py
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
from enum import Enum
|
4
4
|
import logging
|
5
5
|
|
6
|
-
VERSION = "1.0.
|
6
|
+
VERSION = "1.0.3"
|
7
7
|
LOGGER = logging.getLogger(__package__)
|
8
8
|
SERVERS = {
|
9
9
|
"na": "https://fleet-api.prd.na.vn.cloud.tesla.com",
|
@@ -159,3 +159,17 @@ class TeslaEnergyPeriod(StrEnum):
|
|
159
159
|
MONTH = "month"
|
160
160
|
YEAR = "year"
|
161
161
|
LIFETIME = "lifetime"
|
162
|
+
|
163
|
+
class BluetoothVehicleData(StrEnum):
|
164
|
+
CHARGE_STATE = "GetChargeState"
|
165
|
+
CLIMATE_STATE = "GetClimateState"
|
166
|
+
DRIVE_STATE = "GetDriveState"
|
167
|
+
LOCATION_STATE = "GetLocationState"
|
168
|
+
CLOSURES_STATE = "GetClosuresState"
|
169
|
+
CHARGE_SCHEDULE_STATE = "GetChargeScheduleState"
|
170
|
+
PRECONDITIONING_SCHEDULE_STATE = "GetPreconditioningScheduleState"
|
171
|
+
TIRE_PRESSURE_STATE = "GetTirePressureState"
|
172
|
+
MEDIA_STATE = "GetMediaState"
|
173
|
+
MEDIA_DETAIL_STATE = "GetMediaDetailState"
|
174
|
+
SOFTWARE_UPDATE_STATE = "GetSoftwareUpdateState"
|
175
|
+
PARENTAL_CONTROLS_STATE = "GetParentalControlsState"
|
tesla_fleet_api/exceptions.py
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
import aiohttp
|
2
|
-
from .const import LOGGER
|
2
|
+
from tesla_fleet_api.const import LOGGER
|
3
3
|
|
4
4
|
|
5
5
|
class TeslaFleetError(BaseException):
|
@@ -656,6 +656,26 @@ class TeslaFleetMessageFaultResponseSizeExceedsMTU(TeslaFleetMessageFault):
|
|
656
656
|
message = "Client's request was received, but response size exceeded MTU"
|
657
657
|
code = 25
|
658
658
|
|
659
|
+
class TeslaFleetMessageFaultRepeatedCounter(TeslaFleetMessageFault):
|
660
|
+
"""The vehicle has seen this counter value before. Reset the counter and try again"""
|
661
|
+
|
662
|
+
message = "The vehicle has seen this counter value before. Reset the counter and try again"
|
663
|
+
code = 26
|
664
|
+
|
665
|
+
|
666
|
+
class TeslaFleetMessageFaultInvalidKeyHandle(TeslaFleetMessageFault):
|
667
|
+
"""The key handle is not valid. The key may have been revoked or expired"""
|
668
|
+
|
669
|
+
message = "The key handle is not valid. The key may have been revoked or expired"
|
670
|
+
code = 27
|
671
|
+
|
672
|
+
|
673
|
+
class TeslaFleetMessageFaultRequiresResponseEncryption(TeslaFleetMessageFault):
|
674
|
+
"""The response requires encryption but encryption was not requested"""
|
675
|
+
|
676
|
+
message = "The response requires encryption but encryption was not requested"
|
677
|
+
code = 28
|
678
|
+
|
659
679
|
|
660
680
|
MESSAGE_FAULTS = [
|
661
681
|
None,
|
@@ -684,9 +704,9 @@ MESSAGE_FAULTS = [
|
|
684
704
|
TeslaFleetMessageFaultCommandRequiresAccountCredentials,
|
685
705
|
TeslaFleetMessageFaultFieldExceedsMTU,
|
686
706
|
TeslaFleetMessageFaultResponseSizeExceedsMTU,
|
687
|
-
|
688
|
-
|
689
|
-
|
707
|
+
TeslaFleetMessageFaultRepeatedCounter,
|
708
|
+
TeslaFleetMessageFaultInvalidKeyHandle,
|
709
|
+
TeslaFleetMessageFaultRequiresResponseEncryption,
|
690
710
|
]
|
691
711
|
|
692
712
|
class SignedMessageInformationFault(TeslaFleetError):
|
@@ -856,6 +876,9 @@ SIGNED_MESSAGE_INFORMATION_FAULTS = [
|
|
856
876
|
class WhitelistOperationStatus(TeslaFleetError):
|
857
877
|
message = "Whitelist operation failed"
|
858
878
|
|
879
|
+
def __init__(self, message):
|
880
|
+
self.message = message
|
881
|
+
|
859
882
|
class WhitelistOperationUndocumentedError(WhitelistOperationStatus):
|
860
883
|
message = "Undocumented whitelist operation error"
|
861
884
|
code = 1
|
@@ -944,6 +967,14 @@ class WhitelistOperationServiceKeyAttemptingToAddServiceTechOutsideServiceMode(W
|
|
944
967
|
message = "Service key attempting to add service tech outside service mode"
|
945
968
|
code = 22
|
946
969
|
|
970
|
+
# No idea what 23 & 24 are
|
971
|
+
|
972
|
+
class WhitelistOperationServiceAuthorizationRequestTimedOut(WhitelistOperationStatus):
|
973
|
+
# This is observed but not documented
|
974
|
+
message = "Authorization request timed out"
|
975
|
+
code = 25
|
976
|
+
|
977
|
+
|
947
978
|
WHITELIST_OPERATION_STATUS = [
|
948
979
|
None,
|
949
980
|
WhitelistOperationUndocumentedError,
|
@@ -967,7 +998,10 @@ WHITELIST_OPERATION_STATUS = [
|
|
967
998
|
WhitelistOperationAttemptingToAddKeyWithoutRole,
|
968
999
|
WhitelistOperationAttemptingToAddKeyWithServiceRole,
|
969
1000
|
WhitelistOperationNonServiceKeyAttemptingToAddServiceTech,
|
970
|
-
WhitelistOperationServiceKeyAttemptingToAddServiceTechOutsideServiceMode
|
1001
|
+
WhitelistOperationServiceKeyAttemptingToAddServiceTechOutsideServiceMode,
|
1002
|
+
WhitelistOperationStatus,
|
1003
|
+
WhitelistOperationStatus,
|
1004
|
+
WhitelistOperationServiceAuthorizationRequestTimedOut
|
971
1005
|
]
|
972
1006
|
|
973
1007
|
|
@@ -1,8 +1,8 @@
|
|
1
1
|
"""Tesla Fleet API classes."""
|
2
2
|
|
3
|
-
from .fleet import TeslaFleetApi
|
4
|
-
from .bluetooth import TeslaBluetooth
|
5
|
-
from .oauth import TeslaFleetOAuth
|
3
|
+
from tesla_fleet_api.tesla.fleet import TeslaFleetApi
|
4
|
+
from tesla_fleet_api.tesla.bluetooth import TeslaBluetooth
|
5
|
+
from tesla_fleet_api.tesla.oauth import TeslaFleetOAuth
|
6
6
|
|
7
7
|
__all__ = [
|
8
8
|
"TeslaFleetApi",
|
@@ -2,8 +2,11 @@
|
|
2
2
|
|
3
3
|
import hashlib
|
4
4
|
import re
|
5
|
-
from .
|
6
|
-
from .
|
5
|
+
from bleak.backends.device import BLEDevice
|
6
|
+
from cryptography.hazmat.primitives.asymmetric import ec
|
7
|
+
|
8
|
+
from tesla_fleet_api.tesla.tesla import Tesla
|
9
|
+
from tesla_fleet_api.tesla.vehicle.bluetooth import VehicleBluetooth
|
7
10
|
|
8
11
|
class TeslaBluetooth(Tesla):
|
9
12
|
"""Class describing a Tesla Bluetooth connection."""
|
@@ -31,8 +34,12 @@ class Vehicles(dict[str, VehicleBluetooth]):
|
|
31
34
|
def __init__(self, parent: TeslaBluetooth):
|
32
35
|
self._parent = parent
|
33
36
|
|
34
|
-
def
|
37
|
+
def create(self, vin: str) -> VehicleBluetooth:
|
38
|
+
"""Creates a specific vehicle."""
|
39
|
+
return self.createBluetooth(vin)
|
40
|
+
|
41
|
+
def createBluetooth(self, vin: str, key: ec.EllipticCurvePrivateKey | None = None, device: None | str | BLEDevice = None) -> VehicleBluetooth:
|
35
42
|
"""Creates a specific vehicle."""
|
36
|
-
vehicle = VehicleBluetooth(self._parent, vin)
|
43
|
+
vehicle = VehicleBluetooth(self._parent, vin, key, device)
|
37
44
|
self[vin] = vehicle
|
38
45
|
return vehicle
|
@@ -1,9 +1,9 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
from typing import Any, TYPE_CHECKING
|
3
|
-
from
|
3
|
+
from tesla_fleet_api.const import Method, EnergyOperationMode, EnergyExportMode, TeslaEnergyPeriod
|
4
4
|
|
5
5
|
if TYPE_CHECKING:
|
6
|
-
from . import TeslaFleetApi
|
6
|
+
from tesla_fleet_api.tesla.fleet import TeslaFleetApi
|
7
7
|
|
8
8
|
class EnergySite:
|
9
9
|
"""Class describing the Tesla Fleet API partner endpoints"""
|
tesla_fleet_api/tesla/fleet.py
CHANGED
@@ -4,14 +4,14 @@ from json import dumps
|
|
4
4
|
from typing import Any, Awaitable
|
5
5
|
import aiohttp
|
6
6
|
|
7
|
-
from .tesla import Tesla
|
8
|
-
from
|
9
|
-
from
|
10
|
-
from .charging import Charging
|
11
|
-
from .energysite import EnergySites
|
12
|
-
from .partner import Partner
|
13
|
-
from .user import User
|
14
|
-
from .vehicle.vehicles import Vehicles
|
7
|
+
from tesla_fleet_api.tesla.tesla import Tesla
|
8
|
+
from tesla_fleet_api.exceptions import raise_for_status, InvalidRegion, LibraryError, ResponseError
|
9
|
+
from tesla_fleet_api.const import SERVERS, Method, LOGGER, VERSION
|
10
|
+
from tesla_fleet_api.tesla.charging import Charging
|
11
|
+
from tesla_fleet_api.tesla.energysite import EnergySites
|
12
|
+
from tesla_fleet_api.tesla.partner import Partner
|
13
|
+
from tesla_fleet_api.tesla.user import User
|
14
|
+
from tesla_fleet_api.tesla.vehicle.vehicles import Vehicles
|
15
15
|
|
16
16
|
|
17
17
|
# Based on https://developer.tesla.com/docs/fleet-api
|
tesla_fleet_api/tesla/oauth.py
CHANGED
@@ -2,8 +2,8 @@ from typing import Any
|
|
2
2
|
import aiohttp
|
3
3
|
import time
|
4
4
|
|
5
|
-
from . import TeslaFleetApi
|
6
|
-
from
|
5
|
+
from tesla_fleet_api.tesla import TeslaFleetApi
|
6
|
+
from tesla_fleet_api.const import Scope, SERVERS, Method
|
7
7
|
|
8
8
|
|
9
9
|
class TeslaFleetOAuth(TeslaFleetApi):
|
tesla_fleet_api/tesla/partner.py
CHANGED
tesla_fleet_api/tesla/user.py
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
"""Tesla Fleet API classes."""
|
2
2
|
|
3
|
-
from .vehicles import Vehicles
|
4
|
-
from .fleet import VehicleFleet
|
5
|
-
from .bluetooth import VehicleBluetooth
|
6
|
-
from .signed import VehicleSigned
|
3
|
+
from tesla_fleet_api.tesla.vehicle.vehicles import Vehicles
|
4
|
+
from tesla_fleet_api.tesla.vehicle.fleet import VehicleFleet
|
5
|
+
from tesla_fleet_api.tesla.vehicle.bluetooth import VehicleBluetooth
|
6
|
+
from tesla_fleet_api.tesla.vehicle.signed import VehicleSigned
|
7
7
|
|
8
8
|
__all__ = [
|
9
9
|
"Vehicles",
|