Skip to content

Commit

Permalink
Add auto mode support
Browse files Browse the repository at this point in the history
  • Loading branch information
Bre77 committed Aug 29, 2024
1 parent 16a6564 commit ad88fd3
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 8 deletions.
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

setuptools.setup(
name="tesla_fleet_api",
version="0.7.3",
version="0.7.4",
author="Brett Adams",
author_email="[email protected]",
description="Tesla Fleet API library for Python",
Expand Down
2 changes: 1 addition & 1 deletion tesla_fleet_api/const.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
2 changes: 1 addition & 1 deletion tesla_fleet_api/teslafleetapi.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
41 changes: 36 additions & 5 deletions tesla_fleet_api/teslemetry.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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

Expand All @@ -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(
Expand All @@ -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)
Expand All @@ -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,
Expand Down

0 comments on commit ad88fd3

Please sign in to comment.