From ad88fd3b9209b8c613a96b19299a8e33ceb0e1a2 Mon Sep 17 00:00:00 2001 From: Brett Date: Thu, 29 Aug 2024 10:09:23 +1000 Subject: [PATCH] Add auto mode support --- setup.py | 2 +- tesla_fleet_api/const.py | 2 +- tesla_fleet_api/teslafleetapi.py | 2 +- tesla_fleet_api/teslemetry.py | 41 ++++++++++++++++++++++++++++---- 4 files changed, 39 insertions(+), 8 deletions(-) diff --git a/setup.py b/setup.py index 2bac7fb..5255479 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setuptools.setup( name="tesla_fleet_api", - version="0.7.3", + version="0.7.4", author="Brett Adams", author_email="hello@teslemetry.com", description="Tesla Fleet API library for Python", diff --git a/tesla_fleet_api/const.py b/tesla_fleet_api/const.py index 42db142..e1356fa 100644 --- a/tesla_fleet_api/const.py +++ b/tesla_fleet_api/const.py @@ -3,7 +3,7 @@ from enum import Enum import logging -VERSION = "0.7.3" +VERSION = "0.7.4" LOGGER = logging.getLogger(__package__) SERVERS = { "na": "https://fleet-api.prd.na.vn.cloud.tesla.com", diff --git a/tesla_fleet_api/teslafleetapi.py b/tesla_fleet_api/teslafleetapi.py index b0a691a..f09e697 100644 --- a/tesla_fleet_api/teslafleetapi.py +++ b/tesla_fleet_api/teslafleetapi.py @@ -22,7 +22,7 @@ class TeslaFleetApi: server: str | None = None session: aiohttp.ClientSession headers: dict[str, str] - refresh_hook: Awaitable | None + refresh_hook: Awaitable | None = None def __init__( self, diff --git a/tesla_fleet_api/teslemetry.py b/tesla_fleet_api/teslemetry.py index 9a577d7..6ac0259 100644 --- a/tesla_fleet_api/teslemetry.py +++ b/tesla_fleet_api/teslemetry.py @@ -2,12 +2,18 @@ from aiolimiter import AsyncLimiter from typing import Any from .teslafleetapi import TeslaFleetApi +from .charging import Charging +from .energy import Energy +from .partner import Partner +from .user import User +from .vehicle import Vehicle +from .vehiclespecific import VehicleSpecific + from .const import Method, LOGGER, Scope # Rate limit should be global, even if multiple instances are created rate_limit = AsyncLimiter(5, 10) - class Teslemetry(TeslaFleetApi): def __init__( self, @@ -16,11 +22,11 @@ def __init__( ): """Initialize the Teslemetry API.""" super().__init__( - session, - access_token, + session=session, + access_token=access_token, server="https://api.teslemetry.com", - partner_scope=False, user_scope=False, + partner_scope=False ) self.rate_limit = rate_limit @@ -38,6 +44,14 @@ async def test(self) -> dict[str, bool]: "api/test", ) + async def userdata(self) -> dict[str, Any]: + """Get userdata.""" + resp = await self._request( + Method.GET, + "api/userdata", + ) + return resp + async def metadata(self, update_region=True) -> dict[str, Any]: """Get user metadata including scopes.""" resp = await self._request( @@ -49,7 +63,7 @@ async def metadata(self, update_region=True) -> dict[str, Any]: self.server = f"https://{self.region}.teslemetry.com" LOGGER.debug("Using server %s", self.server) return resp - + async def scopes(self) -> list[str]: """Get user scopes.""" resp = await self.metadata(False) @@ -61,6 +75,23 @@ async def find_server(self) -> str: assert self.region return self.region + async def server_side_polling(self, vin: str, value: bool | None = None) -> bool | None: + """Get or set Auto mode.""" + if value is True: + return (await self._request( + Method.POST, + f"api/auto/{vin}", + )).get("response") + if value is False: + return (await self._request( + Method.DELETE, + f"api/auto/{vin}", + )).get("response") + return (await self._request( + Method.GET, + f"api/auto/{vin}", + )).get("response") + async def _request( self, method: Method,