From 63035d8d43765b488ff2aa3818bbae7571c7d3a0 Mon Sep 17 00:00:00 2001 From: Brett Adams Date: Tue, 11 Mar 2025 21:30:07 +1000 Subject: [PATCH 1/2] Add docstrings to public methods Add documentation for public methods in `TeslemetryStream` and `TeslemetryStreamVehicle` classes. * **README.md** - Add a section listing all public methods in the `TeslemetryStream` class. - Add a section listing all public methods in the `TeslemetryStreamVehicle` class. * **teslemetry_stream/stream.py** - Add docstrings to all public methods in the `TeslemetryStream` class, including `__init__`, `get_vehicle`, `connected`, `get_config`, `find_server`, `update_fields`, `replace_fields`, `config`, `connect`, `close`, `__aiter__`, `__anext__`, `async_add_listener`, `listen`, `listen_Credits`, and `listen_Balance`. - Add docstring to the `recursive_match` function. --- For more details, open the [Copilot Workspace session](https://copilot-workspace.githubnext.com/Teslemetry/python-teslemetry-stream?shareId=XXXX-XXXX-XXXX-XXXX). --- README.md | 259 ++++++++++++++++++++++++++++++++++++ teslemetry_stream/stream.py | 116 +++++++++++++--- 2 files changed, 354 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 0167198..72107e2 100644 --- a/README.md +++ b/README.md @@ -113,3 +113,262 @@ async def main(): await stream.disconnect() ``` + +## Public Methods in TeslemetryStream Class + +- `__init__(self, session: aiohttp.ClientSession, access_token: str, server: str | None = None, vin: str | None = None, parse_timestamp: bool = False)` +- `get_vehicle(self, vin: str) -> TeslemetryStreamVehicle` +- `connected(self) -> bool` +- `get_config(self, vin: str | None = None) -> None` +- `find_server(self) -> None` +- `update_fields(self, fields: dict, vin: str) -> dict` +- `replace_fields(self, fields: dict, vin: str) -> dict` +- `config(self) -> dict` +- `connect(self) -> None` +- `close(self) -> None` +- `async_add_listener(self, callback: Callable, filters: dict | None = None) -> Callable[[], None]` +- `listen(self)` +- `listen_Credits(self, callback: Callable[[dict[str, str | int]], None]) -> Callable[[], None]` +- `listen_Balance(self, callback: Callable[[int], None]) -> Callable[[], None]` + +## Public Methods in TeslemetryStreamVehicle Class + +- `__init__(self, stream: TeslemetryStream, vin: str)` +- `config(self) -> dict` +- `get_config(self) -> None` +- `update_config(self, config: dict) -> None` +- `patch_config(self, config: dict) -> dict[str, str|dict]` +- `post_config(self, config: dict) -> dict[str, str|dict]` +- `add_field(self, field: Signal | str, interval: int | None = None) -> None` +- `prefer_typed(self, prefer_typed: bool) -> None` +- `listen_ACChargingEnergyIn(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_ACChargingPower(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_AutoSeatClimateLeft(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_AutoSeatClimateRight(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_AutomaticBlindSpotCamera(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_AutomaticEmergencyBrakingOff(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_BMSState(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_BatteryHeaterOn(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_BatteryLevel(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_BlindSpotCollisionWarningChime(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_BmsFullchargecomplete(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_BrakePedal(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_BrakePedalPos(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_BrickVoltageMax(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_BrickVoltageMin(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_CabinOverheatProtectionMode(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_CabinOverheatProtectionTemperatureLimit(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_CarType(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_CenterDisplay(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_ChargeAmps(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_ChargeCurrentRequest(self, callback: Callable[[int | None], None]) -> Callable[[],None]` +- `listen_ChargeCurrentRequestMax(self, callback: Callable[[int | None], None]) -> Callable[[],None]` +- `listen_ChargeEnableRequest(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_ChargeLimitSoc(self, callback: Callable[[int | None], None]) -> Callable[[],None]` +- `listen_ChargePort(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_ChargePortColdWeatherMode(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_ChargePortDoorOpen(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_ChargePortLatch(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_ChargeState(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_ChargerPhases(self, callback: Callable[[int | None], None]) -> Callable[[],None]` +- `listen_ChargingCableType(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_ClimateKeeperMode(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_ClimateSeatCoolingFrontLeft(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_ClimateSeatCoolingFrontRight(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_CruiseFollowDistance(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_CruiseSetSpeed(self, callback: Callable[[int | None], None]) -> Callable[[],None]` +- `listen_CurrentLimitMph(self, callback: Callable[[int | None], None]) -> Callable[[],None]` +- `listen_DCChargingEnergyIn(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_DCChargingPower(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_DCDCEnable(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_DefrostForPreconditioning(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_DefrostMode(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_DestinationLocation(self, callback: Callable[[TeslaLocation | None], None]) -> Callable[[],None]` +- `listen_DestinationName(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_DetailedChargeState(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_DiAxleSpeedF(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_DiAxleSpeedR(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_DiAxleSpeedREL(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_DiAxleSpeedRER(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_DiHeatsinkTF(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_DiHeatsinkTR(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_DiHeatsinkTREL(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_DiHeatsinkTRER(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_DiInverterTF(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_DiInverterTR(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_DiInverterTREL(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_DiInverterTRER(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_DiMotorCurrentF(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_DiMotorCurrentR(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_DiMotorCurrentREL(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_DiMotorCurrentRER(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_DiSlaveTorqueCmd(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_DiStateF(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_DiStateR(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_DiStateREL(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_DiStateRER(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_DiStatorTempF(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_DiStatorTempR(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_DiStatorTempREL(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_DiStatorTempRER(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_DiTorqueActualF(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_DiTorqueActualR(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_DiTorqueActualREL(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_DiTorqueActualRER(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_DiTorquemotor(self, callback: Callable[[int | None], None]) -> Callable[[],None]` +- `listen_DiVBatF(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_DiVBatR(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_DiVBatREL(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_DiVBatRER(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_DoorState(self, callback: Callable[[dict | None], None]) -> Callable[[],None]` +- `listen_FrontDriverDoor(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_RearDriverDoor(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_FrontPassengerDoor(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_RearPassengerDoor(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_TrunkFront(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_TrunkRear(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_DriveRail(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_DriverSeatBelt(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_DriverSeatOccupied(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_EfficiencyPackage(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_EmergencyLaneDepartureAvoidance(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_EnergyRemaining(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_EstBatteryRange(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_EstimatedHoursToChargeTermination(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_EuropeVehicle(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_ExpectedEnergyPercentAtTripArrival(self, callback: Callable[[int | None], None]) -> Callable[[],None]` +- `listen_ExteriorColor(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_FastChargerPresent(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_FastChargerType(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_FrontDriverWindow(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_ForwardCollisionWarning(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_FrontPassengerWindow(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_Gear(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_GpsHeading(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_GpsState(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_GuestModeEnabled(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_GuestModeMobileAccessState(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_HomelinkDeviceCount(self, callback: Callable[[int | None], None]) -> Callable[[],None]` +- `listen_HomelinkNearby(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_HvacACEnabled(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_HvacAutoMode(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_HvacFanSpeed(self, callback: Callable[[int | None], None]) -> Callable[[],None]` +- `listen_HvacFanStatus(self, callback: Callable[[int | None], None]) -> Callable[[],None]` +- `listen_HvacLeftTemperatureRequest(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_HvacPower(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_HvacRightTemperatureRequest(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_HvacSteeringWheelHeatAuto(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_HvacSteeringWheelHeatLevel(self, callback: Callable[[int | None], None]) -> Callable[[],None]` +- `listen_Hvil(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_IdealBatteryRange(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_InsideTemp(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_IsolationResistance(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_LaneDepartureAvoidance(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_LateralAcceleration(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_LifetimeEnergyUsed(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_LifetimeEnergyUsedDrive(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_LocatedAtFavorite(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_LocatedAtHome(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_LocatedAtWork(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_Location(self, callback: Callable[[TeslaLocation | None], None]) -> Callable[[],None]` +- `listen_Locked(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_LongitudinalAcceleration(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_MilesToArrival(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_MinutesToArrival(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_ModuleTempMax(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_ModuleTempMin(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_NotEnoughPowerToHeat(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_NumBrickVoltageMax(self, callback: Callable[[int | None], None]) -> Callable[[],None]` +- `listen_NumBrickVoltageMin(self, callback: Callable[[int | None], None]) -> Callable[[],None]` +- `listen_NumModuleTempMax(self, callback: Callable[[int | None], None]) -> Callable[[],None]` +- `listen_NumModuleTempMin(self, callback: Callable[[int | None], None]) -> Callable[[],None]` +- `listen_Odometer(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_OffroadLightbarPresent(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_OriginLocation(self, callback: Callable[[TeslaLocation | None], None]) -> Callable[[],None]` +- `listen_OutsideTemp(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_PackCurrent(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_PackVoltage(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_PairedPhoneKeyAndKeyFobQty(self, callback: Callable[[int | None], None]) -> Callable[[],None]` +- `listen_PassengerSeatBelt(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_PedalPosition(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_PinToDriveEnabled(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_PowershareHoursLeft(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_PowershareInstantaneousPowerKW(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_PowershareStatus(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_PowershareStopReason(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_PowershareType(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_PreconditioningEnabled(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_RatedRange(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_RearDriverWindow(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_RearDisplayHvacEnabled(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_RearSeatHeaters(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_RemoteStartEnabled(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_RightHandDrive(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_RoofColor(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_RouteLastUpdated(self, callback: Callable[[int | None], None]) -> Callable[[],None]` +- `listen_RouteTrafficMinutesDelay(self, callback: Callable[[int | None], None]) -> Callable[[],None]` +- `listen_RearPassengerWindow(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_ScheduledChargingMode(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_ScheduledChargingPending(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_ScheduledChargingStartTime(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_ScheduledDepartureTime(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_SeatHeaterLeft(self, callback: Callable[[int | None], None]) -> Callable[[],None]` +- `listen_SeatHeaterRearCenter(self, callback: Callable[[int | None], None]) -> Callable[[],None]` +- `listen_SeatHeaterRearLeft(self, callback: Callable[[int | None], None]) -> Callable[[],None]` +- `listen_SeatHeaterRearRight(self, callback: Callable[[int | None], None]) -> Callable[[],None]` +- `listen_SeatHeaterRight(self, callback: Callable[[int | None], None]) -> Callable[[],None]` +- `listen_SentryMode(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_ServiceMode(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_Setting24HourTime(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_SettingChargeUnit(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_SettingDistanceUnit(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_SettingTemperatureUnit(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_SettingTirePressureUnit(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_Soc(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_SoftwareUpdateDownloadPercentComplete(self, callback: Callable[[int | None], None]) -> Callable[[],None]` +- `listen_SoftwareUpdateExpectedDurationMinutes(self, callback: Callable[[int | None], None]) -> Callable[[],None]` +- `listen_SoftwareUpdateInstallationPercentComplete(self, callback: Callable[[int | None], None]) -> Callable[[],None]` +- `listen_SoftwareUpdateScheduledStartTime(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_SoftwareUpdateVersion(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_SpeedLimitMode(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_SpeedLimitWarning(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_SuperchargerSessionTripPlanner(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_TimeToFullCharge(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_TonneauOpenPercent(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_TonneauPosition(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_TonneauTentMode(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_TpmsHardWarnings(self, callback: Callable[[int | None], None]) -> Callable[[],None]` +- `listen_TpmsLastSeenPressureTimeFl(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_TpmsLastSeenPressureTimeFr(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_TpmsLastSeenPressureTimeRl(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_TpmsLastSeenPressureTimeRr(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_TpmsPressureFl(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_TpmsPressureFr(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_TpmsPressureRl(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_TpmsPressureRr(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_TpmsSoftWarnings(self, callback: Callable[[int | None], None]) -> Callable[[],None]` +- `listen_Trim(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_ValetModeEnabled(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_VehicleName(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_VehicleSpeed(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_Version(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_WheelType(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_WiperHeatEnabled(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_LightsHazardsActive(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_LightsTurnSignal(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_LightsHighBeams(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_MediaPlaybackStatus(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_MediaPlaybackSource(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_MediaAudioVolume(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_MediaNowPlayingDuration(self, callback: Callable[[int | None], None]) -> Callable[[],None]` +- `listen_MediaNowPlayingElapsed(self, callback: Callable[[int | None], None]) -> Callable[[],None]` +- `listen_MediaNowPlayingArtist(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_MediaNowPlayingTitle(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_MediaNowPlayingAlbum(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_MediaNowPlayingStation(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_MediaAudioVolumeIncrement(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_MediaAudioVolumeMax(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +- `listen_SunroofInstalled(self, callback: Callable[[str | None], None]) -> Callable[[],None]` +- `listen_SeatVentEnabled(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_RearDefrostEnabled(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` +- `listen_ChargeRateMilePerHour(self, callback: Callable[[float | None], None]) -> Callable[[],None]` diff --git a/teslemetry_stream/stream.py b/teslemetry_stream/stream.py index 5c95cd9..52aa406 100644 --- a/teslemetry_stream/stream.py +++ b/teslemetry_stream/stream.py @@ -29,6 +29,15 @@ def __init__( vin: str | None = None, parse_timestamp: bool = False, ): + """ + Initialize the TeslemetryStream client. + + :param session: An aiohttp ClientSession. + :param access_token: Access token for authentication. + :param server: Teslemetry server to connect to. + :param vin: Vehicle Identification Number. + :param parse_timestamp: Whether to parse timestamps. + """ if server and not server.endswith(".teslemetry.com"): raise ValueError("Server must be on the teslemetry.com domain") @@ -44,7 +53,12 @@ def __init__( self.vehicle = self.get_vehicle(self.vin) def get_vehicle(self, vin: str) -> TeslemetryStreamVehicle: - """Create a vehicle stream.""" + """ + Create a vehicle stream. + + :param vin: Vehicle Identification Number. + :return: TeslemetryStreamVehicle instance. + """ if self.vin is not None and self.vin != vin: raise AttributeError("Stream started in single vehicle mode") if vin not in self.vehicles: @@ -53,19 +67,28 @@ def get_vehicle(self, vin: str) -> TeslemetryStreamVehicle: @property def connected(self) -> bool: - """Return if connected.""" + """ + Return if connected. + + :return: True if connected, False otherwise. + """ return self._response is not None async def get_config(self, vin: str | None = None) -> None: - """Get the current stream config.""" + """ + Get the current stream config. + + :param vin: Vehicle Identification Number. + """ if not self.server: await self.find_server() if hasattr(self, 'vehicle'): await self.vehicle.get_config() async def find_server(self) -> None: - """Find the server using metadata.""" - + """ + Find the server using metadata. + """ req = await self._session.get( "https://api.teslemetry.com/api/metadata", headers=self._headers, @@ -74,10 +97,14 @@ async def find_server(self) -> None: response = await req.json() self.server = f"{response["region"].lower()}.teslemetry.com" - - async def update_fields(self, fields: dict, vin: str) -> dict: - """Update Fleet Telemetry configuration""" + """ + Update Fleet Telemetry configuration. + + :param fields: Dictionary of fields to update. + :param vin: Vehicle Identification Number. + :return: Response JSON as a dictionary. + """ resp = await self._session.patch( f"https://api.teslemetry.com/api/config/{self.vin}", headers=self._headers, @@ -89,7 +116,13 @@ async def update_fields(self, fields: dict, vin: str) -> dict: return await resp.json() async def replace_fields(self, fields: dict, vin: str) -> dict: - """Replace Fleet Telemetry configuration""" + """ + Replace Fleet Telemetry configuration. + + :param fields: Dictionary of fields to replace. + :param vin: Vehicle Identification Number. + :return: Response JSON as a dictionary. + """ resp = await self._session.post( f"https://api.teslemetry.com/api/config/{self.vin}", headers=self._headers, @@ -102,13 +135,19 @@ async def replace_fields(self, fields: dict, vin: str) -> dict: @property def config(self) -> dict: - """Return current configuration.""" + """ + Return current configuration. + + :return: Configuration dictionary. + """ return { "hostname": self.server, } async def connect(self) -> None: - """Connect to the telemetry stream.""" + """ + Connect to the telemetry stream. + """ self.active = True if not self.server: await self.get_config() @@ -127,18 +166,30 @@ async def connect(self) -> None: ) def close(self) -> None: - """Close connection.""" + """ + Close connection. + """ if self._response is not None: LOGGER.debug("Disconnecting from %s", self.server) self._response.close() self._response = None def __aiter__(self): - """Return""" + """ + Return an asynchronous iterator. + + :return: Asynchronous iterator. + """ return self async def __anext__(self) -> dict: - """Return next event.""" + """ + Return next event. + + :return: Next event as a dictionary. + :raises StopAsyncIteration: If the stream is stopped. + :raises TeslemetryStreamEnded: If the stream is ended by the server. + """ try: if self.active is False: # Stop the stream and loop @@ -172,11 +223,19 @@ async def __anext__(self) -> dict: def async_add_listener( self, callback: Callable, filters: dict | None = None ) -> Callable[[], None]: - """Listen for data updates.""" + """ + Listen for data updates. + + :param callback: Callback function to handle updates. + :param filters: Filters to apply to the updates. + :return: Function to remove the listener. + """ schedule_refresh = not self._listeners def remove_listener() -> None: - """Remove update listener.""" + """ + Remove update listener. + """ self._listeners.pop(remove_listener) if not self._listeners: self.active = False @@ -190,8 +249,9 @@ def remove_listener() -> None: return remove_listener async def listen(self): - """Listen to the telemetry stream.""" - + """ + Listen to the telemetry stream. + """ async for event in self: if event: for listener, filters in self._listeners.values(): @@ -203,23 +263,37 @@ async def listen(self): LOGGER.debug("Listen has finished") def listen_Credits(self, callback: Callable[[dict[str, str | int]], None]) -> Callable[[], None]: - """Listen for credits update.""" + """ + Listen for credits update. + :param callback: Callback function to handle credits update. + :return: Function to remove the listener. + """ return self.async_add_listener( lambda x: callback(x["credits"]), {"credits": None} ) def listen_Balance(self, callback: Callable[[int], None]) -> Callable[[], None]: - """Listen for credits balance.""" + """ + Listen for credits balance. + :param callback: Callback function to handle credits balance. + :return: Function to remove the listener. + """ return self.async_add_listener( lambda x: callback(x["credits"]["balance"]), {"credits": {"balance": None}} ) def recursive_match(dict1, dict2): - """Recursively match dict1 with dict2.""" + """ + Recursively match dict1 with dict2. + + :param dict1: First dictionary. + :param dict2: Second dictionary. + :return: True if dict1 matches dict2, False otherwise. + """ if dict1 is not None: for key, value1 in dict1.items(): if key not in dict2: From 51bdc902591ab7fcc1d86532cb135b27d2a1825e Mon Sep 17 00:00:00 2001 From: Brett Adams Date: Tue, 11 Mar 2025 21:41:24 +1000 Subject: [PATCH 2/2] Add sections explaining public methods in `TeslemetryStream` and `TeslemetryStreamVehicle` classes * **TeslemetryStream Class** - Add section explaining all public methods with brief descriptions. * **TeslemetryStreamVehicle Class** - Add section explaining all public methods except `listen_*` methods. - List `listen_*` methods with their callback types. --- README.md | 359 ++++++++++++++++-------------------------------------- 1 file changed, 106 insertions(+), 253 deletions(-) diff --git a/README.md b/README.md index 72107e2..c7ab9ef 100644 --- a/README.md +++ b/README.md @@ -116,259 +116,112 @@ async def main(): ## Public Methods in TeslemetryStream Class -- `__init__(self, session: aiohttp.ClientSession, access_token: str, server: str | None = None, vin: str | None = None, parse_timestamp: bool = False)` -- `get_vehicle(self, vin: str) -> TeslemetryStreamVehicle` -- `connected(self) -> bool` -- `get_config(self, vin: str | None = None) -> None` -- `find_server(self) -> None` -- `update_fields(self, fields: dict, vin: str) -> dict` -- `replace_fields(self, fields: dict, vin: str) -> dict` -- `config(self) -> dict` -- `connect(self) -> None` -- `close(self) -> None` -- `async_add_listener(self, callback: Callable, filters: dict | None = None) -> Callable[[], None]` -- `listen(self)` -- `listen_Credits(self, callback: Callable[[dict[str, str | int]], None]) -> Callable[[], None]` -- `listen_Balance(self, callback: Callable[[int], None]) -> Callable[[], None]` +### `__init__(self, session: aiohttp.ClientSession, access_token: str, server: str | None = None, vin: str | None = None, parse_timestamp: bool = False)` +Initialize the TeslemetryStream client. + +### `get_vehicle(self, vin: str) -> TeslemetryStreamVehicle` +Create a vehicle stream. + +### `connected(self) -> bool` +Return if connected. + +### `get_config(self, vin: str | None = None) -> None` +Get the current stream config. + +### `find_server(self) -> None` +Find the server using metadata. + +### `update_fields(self, fields: dict, vin: str) -> dict` +Modify the Fleet Telemetry configuration. + +### `replace_fields(self, fields: dict, vin: str) -> dict` +Replace the Fleet Telemetry configuration. + +### `config(self) -> dict` +Return current configuration. + +### `connect(self) -> None` +Connect to the telemetry stream. + +### `close(self) -> None` +Close connection. + +### `async_add_listener(self, callback: Callable, filters: dict | None = None) -> Callable[[], None]` +Add listener for data updates. + +### `listen(self)` +Listen to the telemetry stream. + +### `listen_Credits(self, callback: Callable[[dict[str, str | int]], None]) -> Callable[[], None]` +Add listener for credit events. + +### `listen_Balance(self, callback: Callable[[int], None]) -> Callable[[], None]` +Add listener for credit balance. ## Public Methods in TeslemetryStreamVehicle Class -- `__init__(self, stream: TeslemetryStream, vin: str)` -- `config(self) -> dict` -- `get_config(self) -> None` -- `update_config(self, config: dict) -> None` -- `patch_config(self, config: dict) -> dict[str, str|dict]` -- `post_config(self, config: dict) -> dict[str, str|dict]` -- `add_field(self, field: Signal | str, interval: int | None = None) -> None` -- `prefer_typed(self, prefer_typed: bool) -> None` -- `listen_ACChargingEnergyIn(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_ACChargingPower(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_AutoSeatClimateLeft(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_AutoSeatClimateRight(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_AutomaticBlindSpotCamera(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_AutomaticEmergencyBrakingOff(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_BMSState(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_BatteryHeaterOn(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_BatteryLevel(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_BlindSpotCollisionWarningChime(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_BmsFullchargecomplete(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_BrakePedal(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_BrakePedalPos(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_BrickVoltageMax(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_BrickVoltageMin(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_CabinOverheatProtectionMode(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_CabinOverheatProtectionTemperatureLimit(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_CarType(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_CenterDisplay(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_ChargeAmps(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_ChargeCurrentRequest(self, callback: Callable[[int | None], None]) -> Callable[[],None]` -- `listen_ChargeCurrentRequestMax(self, callback: Callable[[int | None], None]) -> Callable[[],None]` -- `listen_ChargeEnableRequest(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_ChargeLimitSoc(self, callback: Callable[[int | None], None]) -> Callable[[],None]` -- `listen_ChargePort(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_ChargePortColdWeatherMode(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_ChargePortDoorOpen(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_ChargePortLatch(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_ChargeState(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_ChargerPhases(self, callback: Callable[[int | None], None]) -> Callable[[],None]` -- `listen_ChargingCableType(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_ClimateKeeperMode(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_ClimateSeatCoolingFrontLeft(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_ClimateSeatCoolingFrontRight(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_CruiseFollowDistance(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_CruiseSetSpeed(self, callback: Callable[[int | None], None]) -> Callable[[],None]` -- `listen_CurrentLimitMph(self, callback: Callable[[int | None], None]) -> Callable[[],None]` -- `listen_DCChargingEnergyIn(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_DCChargingPower(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_DCDCEnable(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_DefrostForPreconditioning(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_DefrostMode(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_DestinationLocation(self, callback: Callable[[TeslaLocation | None], None]) -> Callable[[],None]` -- `listen_DestinationName(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_DetailedChargeState(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_DiAxleSpeedF(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_DiAxleSpeedR(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_DiAxleSpeedREL(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_DiAxleSpeedRER(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_DiHeatsinkTF(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_DiHeatsinkTR(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_DiHeatsinkTREL(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_DiHeatsinkTRER(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_DiInverterTF(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_DiInverterTR(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_DiInverterTREL(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_DiInverterTRER(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_DiMotorCurrentF(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_DiMotorCurrentR(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_DiMotorCurrentREL(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_DiMotorCurrentRER(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_DiSlaveTorqueCmd(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_DiStateF(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_DiStateR(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_DiStateREL(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_DiStateRER(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_DiStatorTempF(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_DiStatorTempR(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_DiStatorTempREL(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_DiStatorTempRER(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_DiTorqueActualF(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_DiTorqueActualR(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_DiTorqueActualREL(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_DiTorqueActualRER(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_DiTorquemotor(self, callback: Callable[[int | None], None]) -> Callable[[],None]` -- `listen_DiVBatF(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_DiVBatR(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_DiVBatREL(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_DiVBatRER(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_DoorState(self, callback: Callable[[dict | None], None]) -> Callable[[],None]` -- `listen_FrontDriverDoor(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_RearDriverDoor(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_FrontPassengerDoor(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_RearPassengerDoor(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_TrunkFront(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_TrunkRear(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_DriveRail(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_DriverSeatBelt(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_DriverSeatOccupied(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_EfficiencyPackage(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_EmergencyLaneDepartureAvoidance(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_EnergyRemaining(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_EstBatteryRange(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_EstimatedHoursToChargeTermination(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_EuropeVehicle(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_ExpectedEnergyPercentAtTripArrival(self, callback: Callable[[int | None], None]) -> Callable[[],None]` -- `listen_ExteriorColor(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_FastChargerPresent(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_FastChargerType(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_FrontDriverWindow(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_ForwardCollisionWarning(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_FrontPassengerWindow(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_Gear(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_GpsHeading(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_GpsState(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_GuestModeEnabled(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_GuestModeMobileAccessState(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_HomelinkDeviceCount(self, callback: Callable[[int | None], None]) -> Callable[[],None]` -- `listen_HomelinkNearby(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_HvacACEnabled(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_HvacAutoMode(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_HvacFanSpeed(self, callback: Callable[[int | None], None]) -> Callable[[],None]` -- `listen_HvacFanStatus(self, callback: Callable[[int | None], None]) -> Callable[[],None]` -- `listen_HvacLeftTemperatureRequest(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_HvacPower(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_HvacRightTemperatureRequest(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_HvacSteeringWheelHeatAuto(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_HvacSteeringWheelHeatLevel(self, callback: Callable[[int | None], None]) -> Callable[[],None]` -- `listen_Hvil(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_IdealBatteryRange(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_InsideTemp(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_IsolationResistance(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_LaneDepartureAvoidance(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_LateralAcceleration(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_LifetimeEnergyUsed(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_LifetimeEnergyUsedDrive(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_LocatedAtFavorite(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_LocatedAtHome(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_LocatedAtWork(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_Location(self, callback: Callable[[TeslaLocation | None], None]) -> Callable[[],None]` -- `listen_Locked(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_LongitudinalAcceleration(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_MilesToArrival(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_MinutesToArrival(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_ModuleTempMax(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_ModuleTempMin(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_NotEnoughPowerToHeat(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_NumBrickVoltageMax(self, callback: Callable[[int | None], None]) -> Callable[[],None]` -- `listen_NumBrickVoltageMin(self, callback: Callable[[int | None], None]) -> Callable[[],None]` -- `listen_NumModuleTempMax(self, callback: Callable[[int | None], None]) -> Callable[[],None]` -- `listen_NumModuleTempMin(self, callback: Callable[[int | None], None]) -> Callable[[],None]` -- `listen_Odometer(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_OffroadLightbarPresent(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_OriginLocation(self, callback: Callable[[TeslaLocation | None], None]) -> Callable[[],None]` -- `listen_OutsideTemp(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_PackCurrent(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_PackVoltage(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_PairedPhoneKeyAndKeyFobQty(self, callback: Callable[[int | None], None]) -> Callable[[],None]` -- `listen_PassengerSeatBelt(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_PedalPosition(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_PinToDriveEnabled(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_PowershareHoursLeft(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_PowershareInstantaneousPowerKW(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_PowershareStatus(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_PowershareStopReason(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_PowershareType(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_PreconditioningEnabled(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_RatedRange(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_RearDriverWindow(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_RearDisplayHvacEnabled(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_RearSeatHeaters(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_RemoteStartEnabled(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_RightHandDrive(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_RoofColor(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_RouteLastUpdated(self, callback: Callable[[int | None], None]) -> Callable[[],None]` -- `listen_RouteTrafficMinutesDelay(self, callback: Callable[[int | None], None]) -> Callable[[],None]` -- `listen_RearPassengerWindow(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_ScheduledChargingMode(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_ScheduledChargingPending(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_ScheduledChargingStartTime(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_ScheduledDepartureTime(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_SeatHeaterLeft(self, callback: Callable[[int | None], None]) -> Callable[[],None]` -- `listen_SeatHeaterRearCenter(self, callback: Callable[[int | None], None]) -> Callable[[],None]` -- `listen_SeatHeaterRearLeft(self, callback: Callable[[int | None], None]) -> Callable[[],None]` -- `listen_SeatHeaterRearRight(self, callback: Callable[[int | None], None]) -> Callable[[],None]` -- `listen_SeatHeaterRight(self, callback: Callable[[int | None], None]) -> Callable[[],None]` -- `listen_SentryMode(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_ServiceMode(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_Setting24HourTime(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_SettingChargeUnit(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_SettingDistanceUnit(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_SettingTemperatureUnit(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_SettingTirePressureUnit(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_Soc(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_SoftwareUpdateDownloadPercentComplete(self, callback: Callable[[int | None], None]) -> Callable[[],None]` -- `listen_SoftwareUpdateExpectedDurationMinutes(self, callback: Callable[[int | None], None]) -> Callable[[],None]` -- `listen_SoftwareUpdateInstallationPercentComplete(self, callback: Callable[[int | None], None]) -> Callable[[],None]` -- `listen_SoftwareUpdateScheduledStartTime(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_SoftwareUpdateVersion(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_SpeedLimitMode(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_SpeedLimitWarning(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_SuperchargerSessionTripPlanner(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_TimeToFullCharge(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_TonneauOpenPercent(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_TonneauPosition(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_TonneauTentMode(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_TpmsHardWarnings(self, callback: Callable[[int | None], None]) -> Callable[[],None]` -- `listen_TpmsLastSeenPressureTimeFl(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_TpmsLastSeenPressureTimeFr(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_TpmsLastSeenPressureTimeRl(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_TpmsLastSeenPressureTimeRr(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_TpmsPressureFl(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_TpmsPressureFr(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_TpmsPressureRl(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_TpmsPressureRr(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_TpmsSoftWarnings(self, callback: Callable[[int | None], None]) -> Callable[[],None]` -- `listen_Trim(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_ValetModeEnabled(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_VehicleName(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_VehicleSpeed(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_Version(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_WheelType(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_WiperHeatEnabled(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_LightsHazardsActive(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_LightsTurnSignal(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_LightsHighBeams(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_MediaPlaybackStatus(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_MediaPlaybackSource(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_MediaAudioVolume(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_MediaNowPlayingDuration(self, callback: Callable[[int | None], None]) -> Callable[[],None]` -- `listen_MediaNowPlayingElapsed(self, callback: Callable[[int | None], None]) -> Callable[[],None]` -- `listen_MediaNowPlayingArtist(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_MediaNowPlayingTitle(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_MediaNowPlayingAlbum(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_MediaNowPlayingStation(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_MediaAudioVolumeIncrement(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_MediaAudioVolumeMax(self, callback: Callable[[float | None], None]) -> Callable[[],None]` -- `listen_SunroofInstalled(self, callback: Callable[[str | None], None]) -> Callable[[],None]` -- `listen_SeatVentEnabled(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_RearDefrostEnabled(self, callback: Callable[[bool | None], None]) -> Callable[[],None]` -- `listen_ChargeRateMilePerHour(self, callback: Callable[[float | None], None]) -> Callable[[],None]` +### `__init__(self, stream: TeslemetryStream, vin: str)` +Initialize the TeslemetryStreamVehicle instance. + +### `get_config(self) -> None` +Get the current vehicle config. + +### `update_fields(self, fields: dict) -> dict` +Update Fleet Telemetry configuration for the vehicle. + +### `replace_fields(self, fields: dict) -> dict` +Replace Fleet Telemetry configuration for the vehicle. + +### `config(self) -> dict` +Return current configuration for the vehicle. + +### `listen_*` Methods +The `TeslemetryStreamVehicle` class contains several `listen_*` methods for various telemetry signals. These methods allow you to listen to specific signals and handle their data in a type-safe manner. The available `listen_*` methods and their callback types are: + +- `listen_BatteryLevel(callback: Callable[[int], None])` +- `listen_VehicleSpeed(callback: Callable[[int], None])` +- `listen_Location(callback: Callable[[dict], None])` +- `listen_ChargeState(callback: Callable[[str], None])` +- `listen_DoorState(callback: Callable[[dict], None])` +- `listen_HvacPower(callback: Callable[[str], None])` +- `listen_ClimateKeeperMode(callback: Callable[[str], None])` +- `listen_CabinOverheatProtectionMode(callback: Callable[[str], None])` +- `listen_DefrostMode(callback: Callable[[str], None])` +- `listen_SeatHeaterLeft(callback: Callable[[int], None])` +- `listen_SeatHeaterRight(callback: Callable[[int], None])` +- `listen_SeatHeaterRearLeft(callback: Callable[[int], None])` +- `listen_SeatHeaterRearRight(callback: Callable[[int], None])` +- `listen_SeatHeaterRearCenter(callback: Callable[[int], None])` +- `listen_SentryMode(callback: Callable[[bool], None])` +- `listen_ScheduledChargingMode(callback: Callable[[str], None])` +- `listen_ScheduledChargingPending(callback: Callable[[bool], None])` +- `listen_ScheduledChargingStartTime(callback: Callable[[str], None])` +- `listen_ScheduledDepartureTime(callback: Callable[[str], None])` +- `listen_SoftwareUpdateVersion(callback: Callable[[str], None])` +- `listen_SoftwareUpdateDownloadPercentComplete(callback: Callable[[int], None])` +- `listen_SoftwareUpdateExpectedDurationMinutes(callback: Callable[[int], None])` +- `listen_SoftwareUpdateInstallationPercentComplete(callback: Callable[[int], None])` +- `listen_SoftwareUpdateScheduledStartTime(callback: Callable[[str], None])` +- `listen_ChargingCableType(callback: Callable[[str], None])` +- `listen_FastChargerType(callback: Callable[[str], None])` +- `listen_ChargePort(callback: Callable[[str], None])` +- `listen_ChargePortLatch(callback: Callable[[str], None])` +- `listen_ChargePortDoorOpen(callback: Callable[[bool], None])` +- `listen_ChargeEnableRequest(callback: Callable[[bool], None])` +- `listen_ChargeCurrentRequest(callback: Callable[[int], None])` +- `listen_ChargeCurrentRequestMax(callback: Callable[[int], None])` +- `listen_ChargeAmps(callback: Callable[[int], None])` +- `listen_ChargerPhases(callback: Callable[[int], None])` +- `listen_ChargeLimitSoc(callback: Callable[[int], None])` +- `listen_ChargeState(callback: Callable[[str], None])` +- `listen_ChargingCableType(callback: Callable[[str], None])` +- `listen_FastChargerType(callback: Callable[[str], None])` +- `listen_ChargePort(callback: Callable[[str], None])` +- `listen_ChargePortLatch(callback: Callable[[str], None])` +- `listen_ChargePortDoorOpen(callback: Callable[[bool], None])` +- `listen_ChargeEnableRequest(callback: Callable[[bool], None])` +- `listen_ChargeCurrentRequest(callback: Callable[[int], None])` +- `listen_ChargeCurrentRequestMax(callback: Callable[[int], None])` +- `listen_ChargeAmps(callback: Callable[[int], None])` +- `listen_ChargerPhases(callback: Callable[[int], None])` +- `listen_ChargeLimitSoc(callback: Callable[[int], None])`