Skip to content

Commit

Permalink
Preparing for v1
Browse files Browse the repository at this point in the history
  • Loading branch information
Bre77 committed Feb 23, 2025
1 parent f70e382 commit 318f6a8
Show file tree
Hide file tree
Showing 5 changed files with 63 additions and 246 deletions.
226 changes: 1 addition & 225 deletions 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.9.10"
VERSION = "1.0.0"
LOGGER = logging.getLogger(__package__)
SERVERS = {
"na": "https://fleet-api.prd.na.vn.cloud.tesla.com",
Expand Down Expand Up @@ -151,230 +151,6 @@ class EnergyExportMode(StrEnum):
NEVER = "never"


class TelemetryField(StrEnum):
"""Fields available in telemetry streams"""

AC_CHARGING_ENERGY_IN = "ACChargingEnergyIn"
AC_CHARGING_POWER = "ACChargingPower"
AUTO_SEAT_CLIMATE_LEFT = "AutoSeatClimateLeft"
AUTO_SEAT_CLIMATE_RIGHT = "AutoSeatClimateRight"
AUTOMATIC_BLIND_SPOT_CAMERA = "AutomaticBlindSpotCamera"
AUTOMATIC_EMERGENCY_BRAKING_OFF = "AutomaticEmergencyBrakingOff"
BATTERY_HEATER_ON = "BatteryHeaterOn"
BATTERY_LEVEL = "BatteryLevel"
BLIND_SPOT_COLLISION_WARNING_CHIME = "BlindSpotCollisionWarningChime"
BMS_FULL_CHARGE_COMPLETE = "BmsFullchargecomplete"
BMS_STATE = "BMSState"
BRAKE_PEDAL = "BrakePedal"
BRAKE_PEDAL_POS = "BrakePedalPos"
BRICK_VOLTAGE_MAX = "BrickVoltageMax"
BRICK_VOLTAGE_MIN = "BrickVoltageMin"
CABIN_OVERHEAT_PROTECTION_MODE = "CabinOverheatProtectionMode"
CABIN_OVERHEAT_PROTECTION_TEMPERATURE_LIMIT = "CabinOverheatProtectionTemperatureLimit"
CAR_TYPE = "CarType"
CENTER_DISPLAY = "CenterDisplay"
CHARGE_AMPS = "ChargeAmps"
CHARGE_CURRENT_REQUEST = "ChargeCurrentRequest"
CHARGE_CURRENT_REQUEST_MAX = "ChargeCurrentRequestMax"
CHARGE_ENABLE_REQUEST = "ChargeEnableRequest"
CHARGE_LIMIT_SOC = "ChargeLimitSoc"
CHARGE_PORT = "ChargePort"
CHARGE_PORT_COLD_WEATHER_MODE = "ChargePortColdWeatherMode"
CHARGE_PORT_DOOR_OPEN = "ChargePortDoorOpen"
CHARGE_PORT_LATCH = "ChargePortLatch"
CHARGE_STATE = "ChargeState"
CHARGER_PHASES = "ChargerPhases"
CHARGING_CABLE_TYPE = "ChargingCableType"
CLIMATE_KEEPER_MODE = "ClimateKeeperMode"
CRUISE_FOLLOW_DISTANCE = "CruiseFollowDistance"
CRUISE_SET_SPEED = "CruiseSetSpeed"
CRUISE_STATE = "CruiseState"
CURRENT_LIMIT_MPH = "CurrentLimitMph"
DC_CHARGING_ENERGY_IN = "DCChargingEnergyIn"
DC_CHARGING_POWER = "DCChargingPower"
DC_DC_ENABLE = "DCDCEnable"
DEFROST_FOR_PRECONDITIONING = "DefrostForPreconditioning"
DEFROST_MODE = "DefrostMode"
DESTINATION_NAME = "DestinationName"
DESTINATION_LOCATION = "DestinationLocation"
DETAILED_CHARGE_STATE = "DetailedChargeState"
DI_AXLE_SPEED_F = "DiAxleSpeedF"
DI_AXLE_SPEED_R = "DiAxleSpeedR"
DI_AXLE_SPEED_REL = "DiAxleSpeedREL"
DI_AXLE_SPEED_RER = "DiAxleSpeedRER"
DI_HEATSINK_TF = "DiHeatsinkTF"
DI_HEATSINK_TR = "DiHeatsinkTR"
DI_HEATSINK_TREL = "DiHeatsinkTREL"
DI_HEATSINK_TRER = "DiHeatsinkTRER"
DI_MOTOR_CURRENT_F = "DiMotorCurrentF"
DI_MOTOR_CURRENT_R = "DiMotorCurrentR"
DI_MOTOR_CURRENT_REL = "DiMotorCurrentREL"
DI_MOTOR_CURRENT_RER = "DiMotorCurrentRER"
DI_SLAVE_TORQUE_CMD = "DiSlaveTorqueCmd"
DI_STATE_F = "DiStateF"
DI_STATE_R = "DiStateR"
DI_STATE_REL = "DiStateREL"
DI_STATE_RER = "DiStateRER"
DI_STATOR_TEMP_F = "DiStatorTempF"
DI_STATOR_TEMP_R = "DiStatorTempR"
DI_STATOR_TEMP_REL = "DiStatorTempREL"
DI_STATOR_TEMP_RER = "DiStatorTempRER"
DI_TORQUE_ACTUAL_F = "DiTorqueActualF"
DI_TORQUE_ACTUAL_R = "DiTorqueActualR"
DI_TORQUE_ACTUAL_REL = "DiTorqueActualREL"
DI_TORQUE_ACTUAL_RER = "DiTorqueActualRER"
DI_TORQUEMOTOR = "DiTorquemotor"
DI_V_BAT_F = "DiVBatF"
DI_V_BAT_R = "DiVBatR"
DI_V_BAT_REL = "DiVBatREL"
DI_V_BAT_RER = "DiVBatRER"
DOOR_STATE = "DoorState"
DRIVE_RAIL = "DriveRail"
DRIVER_SEAT_BELT = "DriverSeatBelt"
DRIVER_SEAT_OCCUPIED = "DriverSeatOccupied"
EFFICIENCY_PACKAGE = "EfficiencyPackage"
EMERGENCY_LANE_DEPARTURE_AVOIDANCE = "EmergencyLaneDepartureAvoidance"
ENERGY_REMAINING = "EnergyRemaining"
EST_BATTERY_RANGE = "EstBatteryRange"
ESTIMATED_HOURS_TO_CHARGE_TERMINATION = "EstimatedHoursToChargeTermination"
EUROPE_VEHICLE = "EuropeVehicle"
EXPECTED_ENERGY_PERCENT_AT_TRIP_ARRIVAL = "ExpectedEnergyPercentAtTripArrival"
EXPERIMENTAL_1 = "Experimental_1"
EXPERIMENTAL_2 = "Experimental_2"
EXPERIMENTAL_3 = "Experimental_3"
EXPERIMENTAL_4 = "Experimental_4"
EXTERIOR_COLOR = "ExteriorColor"
FAST_CHARGER_PRESENT = "FastChargerPresent"
FAST_CHARGER_TYPE = "FastChargerType"
FD_WINDOW = "FdWindow"
FORWARD_COLLISION_WARNING = "ForwardCollisionWarning"
FP_WINDOW = "FpWindow"
GEAR = "Gear"
GPS_HEADING = "GpsHeading"
GPS_STATE = "GpsState"
GUEST_MODE_ENABLED = "GuestModeEnabled"
GUEST_MODE_MOBILE_ACCESS_STATE = "GuestModeMobileAccessState"
HOMELINK_DEVICE_COUNT = "HomelinkDeviceCount"
HOMELINK_NEARBY = "HomelinkNearby"
HVAC_AC_ENABLED = "HvacACEnabled"
HVAC_AUTO_MODE = "HvacAutoMode"
HVAC_FAN_SPEED = "HvacFanSpeed"
HVAC_FAN_STATUS = "HvacFanStatus"
HVAC_LEFT_TEMPERATURE_REQUEST = "HvacLeftTemperatureRequest"
HVAC_POWER = "HvacPower"
HVAC_RIGHT_TEMPERATURE_REQUEST = "HvacRightTemperatureRequest"
HVAC_STEERING_WHEEL_HEAT_AUTO = "HvacSteeringWheelHeatAuto"
HVAC_STEERING_WHEEL_HEAT_LEVEL = "HvacSteeringWheelHeatLevel"
HVIL = "Hvil"
IDEAL_BATTERY_RANGE = "IdealBatteryRange"
INSIDE_TEMP = "InsideTemp"
ISOLATION_RESISTANCE = "IsolationResistance"
LANE_DEPARTURE_AVOIDANCE = "LaneDepartureAvoidance"
LATERAL_ACCELERATION = "LateralAcceleration"
LIFETIME_ENERGY_GAINED_REGEN = "LifetimeEnergyGainedRegen"
LIFETIME_ENERGY_USED = "LifetimeEnergyUsed"
LIFETIME_ENERGY_USED_DRIVE = "LifetimeEnergyUsedDrive"
LOCATION = "Location"
LOCKED = "Locked"
LONGITUDINAL_ACCELERATION = "LongitudinalAcceleration"
MILES_TO_ARRIVAL = "MilesToArrival"
MINUTES_TO_ARRIVAL = "MinutesToArrival"
MODULE_TEMP_MAX = "ModuleTempMax"
MODULE_TEMP_MIN = "ModuleTempMin"
NOT_ENOUGH_POWER_TO_HEAT = "NotEnoughPowerToHeat"
NUM_BRICK_VOLTAGE_MAX = "NumBrickVoltageMax"
NUM_BRICK_VOLTAGE_MIN = "NumBrickVoltageMin"
NUM_MODULE_TEMP_MAX = "NumModuleTempMax"
NUM_MODULE_TEMP_MIN = "NumModuleTempMin"
ODOMETER = "Odometer"
OFFROAD_LIGHTBAR_PRESENT = "OffroadLightbarPresent"
ORIGIN_LOCATION = "OriginLocation"
OUTSIDE_TEMP = "OutsideTemp"
PACK_CURRENT = "PackCurrent"
PACK_VOLTAGE = "PackVoltage"
PAIRED_PHONE_KEY_AND_KEY_FOB_QTY = "PairedPhoneKeyAndKeyFobQty"
PASSENGER_SEAT_BELT = "PassengerSeatBelt"
PEDAL_POSITION = "PedalPosition"
PIN_TO_DRIVE_ENABLED = "PinToDriveEnabled"
POWERSHARE_HOURS_LEFT = "PowershareHoursLeft"
POWERSHARE_INSTANTANEOUS_POWER_KW = "PowershareInstantaneousPowerKW"
POWERSHARE_STATUS = "PowershareStatus"
POWERSHARE_STOP_REASON = "PowershareStopReason"
POWERSHARE_TYPE = "PowershareType"
PRECONDITIONING_ENABLED = "PreconditioningEnabled"
RATED_RANGE = "RatedRange"
RD_WINDOW = "RdWindow"
REAR_DISPLAY_HVAC_ENABLED = "RearDisplayHvacEnabled"
REAR_SEAT_HEATERS = "RearSeatHeaters"
REMOTE_START_ENABLED = "RemoteStartEnabled"
RIGHT_HAND_DRIVE = "RightHandDrive"
ROOF_COLOR = "RoofColor"
ROUTE_LAST_UPDATED = "RouteLastUpdated"
ROUTE_LINE = "RouteLine"
ROUTE_TRAFFIC_MINUTES_DELAY = "RouteTrafficMinutesDelay"
RP_WINDOW = "RpWindow"
SCHEDULED_CHARGING_MODE = "ScheduledChargingMode"
SCHEDULED_CHARGING_PENDING = "ScheduledChargingPending"
SCHEDULED_CHARGING_START_TIME = "ScheduledChargingStartTime"
SCHEDULED_DEPARTURE_TIME = "ScheduledDepartureTime"
SEAT_HEATER_LEFT = "SeatHeaterLeft"
SEAT_HEATER_REAR_CENTER = "SeatHeaterRearCenter"
SEAT_HEATER_REAR_LEFT = "SeatHeaterRearLeft"
SEAT_HEATER_REAR_RIGHT = "SeatHeaterRearRight"
SEAT_HEATER_RIGHT = "SeatHeaterRight"
SENTRY_MODE = "SentryMode"
SERVICE_MODE = "ServiceMode"
SOC = "Soc"
SOFTWARE_UPDATE_DOWNLOAD_PERCENT_COMPLETE = "SoftwareUpdateDownloadPercentComplete"
SOFTWARE_UPDATE_EXPECTED_DURATION_MINUTES = "SoftwareUpdateExpectedDurationMinutes"
SOFTWARE_UPDATE_INSTALLATION_PERCENT_COMPLETE = "SoftwareUpdateInstallationPercentComplete"
SOFTWARE_UPDATE_SCHEDULED_START_TIME = "SoftwareUpdateScheduledStartTime"
SOFTWARE_UPDATE_VERSION = "SoftwareUpdateVersion"
SPEED_LIMIT_MODE = "SpeedLimitMode"
SPEED_LIMIT_WARNING = "SpeedLimitWarning"
SUPERCHARGER_SESSION_TRIP_PLANNER = "SuperchargerSessionTripPlanner"
TIME_TO_FULL_CHARGE = "TimeToFullCharge"
TONNEAU_OPEN_PERCENT = "TonneauOpenPercent"
TONNEAU_POSITION = "TonneauPosition"
TONNEAU_TENT_MODE = "TonneauTentMode"
TPMS_HARD_WARNINGS = "TpmsHardWarnings"
TPMS_LAST_SEEN_PRESSURE_TIME_FL = "TpmsLastSeenPressureTimeFl"
TPMS_LAST_SEEN_PRESSURE_TIME_FR = "TpmsLastSeenPressureTimeFr"
TPMS_LAST_SEEN_PRESSURE_TIME_RL = "TpmsLastSeenPressureTimeRl"
TPMS_LAST_SEEN_PRESSURE_TIME_RR = "TpmsLastSeenPressureTimeRr"
TPMS_PRESSURE_FL = "TpmsPressureFl"
TPMS_PRESSURE_FR = "TpmsPressureFr"
TPMS_PRESSURE_RL = "TpmsPressureRl"
TPMS_PRESSURE_RR = "TpmsPressureRr"
TPMS_SOFT_WARNINGS = "TpmsSoftWarnings"
TRIM = "Trim"
VALET_MODE_ENABLED = "ValetModeEnabled"
VEHICLE_NAME = "VehicleName"
VEHICLE_SPEED = "VehicleSpeed"
VERSION = "Version"
WHEEL_TYPE = "WheelType"
WIPER_HEAT_ENABLED = "WiperHeatEnabled"
LOCATED_AT_HOME = "LocatedAtHome"
LOCATED_AT_WORK = "LocatedAtWork"
LOCATED_AT_FAVORITE = "LocatedAtFavorite"
SETTING_DISTANCE_UNIT = "SettingDistanceUnit"
SETTING_TEMPERATURE_UNIT = "SettingTemperatureUnit"
SETTING_24_HOUR_TIME = "Setting24HourTime"
SETTING_TIRE_PRESSURE_UNIT = "SettingTirePressureUnit"
SETTING_CHARGE_UNIT = "SettingChargeUnit"
CLIMATE_SEAT_COOLING_FRONT_LEFT = "ClimateSeatCoolingFrontLeft"
CLIMATE_SEAT_COOLING_FRONT_RIGHT = "ClimateSeatCoolingFrontRight"



class TelemetryAlert(StrEnum):
"""Alerts available in telemetry streams"""

CUSTOMER = "Customer"
SERVICE = "Service"
SERVICE_FIX = "ServiceFix"


class TeslaEnergyPeriod(StrEnum):
"""Period for history for energy sites"""

Expand Down
3 changes: 3 additions & 0 deletions tesla_fleet_api/teslemetry/teslemetry.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@
from ..tesla import TeslaFleetApi

class Teslemetry(TeslaFleetApi):

server = "https://api.teslemetry.com"

def __init__(
self,
session: aiohttp.ClientSession,
Expand Down
16 changes: 2 additions & 14 deletions tesla_fleet_api/teslemetry/vehicle.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from ..tesla.vehicle.fleet import VehicleFleet

if TYPE_CHECKING:
from tesla_fleet_api.teslemetry.teslemetry import Teslemetry
from .teslemetry import Teslemetry

class TeslemetryVehicle(Vehicle):
"""Teslemetry specific base vehicle."""
Expand Down Expand Up @@ -50,18 +50,6 @@ async def data_refresh(self) -> dict[str, Any]:
f"api/refresh/{self.vin}",
)

class TeslemetryVehicleBluetooth(VehicleBluetooth):
"""Teslemetry specific Bluetooth vehicle."""

_hmacs: dict[Domain, bytes]
_require_keys = False

def __init__(
self, parent: Teslemetry, vin: str
):
super().__init__(parent, vin)
self._request = parent._request


class TeslemetryVehicles(Vehicles):
"""Class containing and creating vehicles."""
Expand All @@ -80,6 +68,6 @@ def createSigned(self, vin: str):
"""Creates a specific vehicle."""
raise NotImplementedError("Signing is handled by Teslemetry server-side")

def createBluetooth(self, vin: str) -> TeslemetryVehicleBluetooth:
def createBluetooth(self, vin: str):
"""Creates a specific vehicle."""
raise NotImplementedError("Bluetooth is only handled locally")
23 changes: 16 additions & 7 deletions tesla_fleet_api/tessie/tessie.py
Original file line number Diff line number Diff line change
@@ -1,22 +1,31 @@
import aiohttp
from typing import Any

from ..tesla.charging import Charging
from ..tesla.energysite import EnergySites
from ..tesla.user import User
from ..tesla import TeslaFleetApi
from ..const import Method
from .vehicle import TessieVehicles

class Tessie(TeslaFleetApi):

server="https://api.tessie.com"

def __init__(
self,
session: aiohttp.ClientSession,
access_token: str,
):
"""Initialize the Tessie API."""
super().__init__(
session,
access_token,
server="https://api.tessie.com",
partner_scope=False,
user_scope=False,
)

self.session = session
self.access_token = access_token

self.charging = Charging(self)
self.energySites = EnergySites(self)
self.user = User(self)
self.vehicle = TessieVehicles(self)

async def scopes(self) -> list[str]:
"""Get user scopes."""
Expand Down
41 changes: 41 additions & 0 deletions tesla_fleet_api/tessie/vehicle.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
from __future__ import annotations
from typing import TYPE_CHECKING, Any

from ..const import Method
from ..tesla.vehicle.proto.universal_message_pb2 import Domain
from ..tesla.vehicle.vehicle import Vehicle
from ..tesla.vehicle.vehicles import Vehicles
from ..tesla.vehicle.bluetooth import VehicleBluetooth
from ..tesla.vehicle.fleet import VehicleFleet

if TYPE_CHECKING:
from .tessie import Tessie

class TessieVehicle(Vehicle):
"""Tessie specific base vehicle."""
pass

class TessieVehicleFleet(VehicleFleet):
"""Tessie specific API vehicle."""
pass

class TessieVehicles(Vehicles):
"""Class containing and creating vehicles."""

def create(self, vin: str) -> TessieVehicleFleet:
"""Creates a specific vehicle."""
return self.createFleet(vin)

def createFleet(self, vin: str) -> TessieVehicleFleet:
"""Creates a specific vehicle."""
vehicle = TessieVehicleFleet(self._parent, vin)
self[vin] = vehicle
return vehicle

def createSigned(self, vin: str):
"""Creates a specific vehicle."""
raise NotImplementedError("Signing is handled by Tessie server-side")

def createBluetooth(self, vin: str):
"""Creates a specific vehicle."""
raise NotImplementedError("Bluetooth is only handled locally")

0 comments on commit 318f6a8

Please sign in to comment.