mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 05:07:41 +00:00
Set api type more specifically in Teslemetry (#144178)
* Set api type more specifically * remove extra spacing * Fix class after rebase --------- Co-authored-by: Allen Porter <allen@thebends.org>
This commit is contained in:
parent
e3b3c32751
commit
41ecb24135
@ -7,6 +7,7 @@ from dataclasses import dataclass
|
||||
from typing import Any
|
||||
|
||||
from tesla_fleet_api.const import Scope
|
||||
from tesla_fleet_api.teslemetry import Vehicle
|
||||
|
||||
from homeassistant.components.button import ButtonEntity, ButtonEntityDescription
|
||||
from homeassistant.core import HomeAssistant
|
||||
@ -76,6 +77,7 @@ async def async_setup_entry(
|
||||
class TeslemetryButtonEntity(TeslemetryVehiclePollingEntity, ButtonEntity):
|
||||
"""Base class for Teslemetry buttons."""
|
||||
|
||||
api: Vehicle
|
||||
entity_description: TeslemetryButtonEntityDescription
|
||||
|
||||
def __init__(
|
||||
|
@ -91,7 +91,6 @@ class TeslemetryClimateEntity(TeslemetryRootEntity, ClimateEntity):
|
||||
"""Vehicle Climate Control."""
|
||||
|
||||
api: Vehicle
|
||||
|
||||
_attr_precision = PRECISION_HALVES
|
||||
_attr_temperature_unit = UnitOfTemperature.CELSIUS
|
||||
_attr_hvac_modes = [HVACMode.HEAT_COOL, HVACMode.OFF]
|
||||
@ -372,7 +371,6 @@ class TeslemetryCabinOverheatProtectionEntity(TeslemetryRootEntity, ClimateEntit
|
||||
"""Vehicle Cabin Overheat Protection."""
|
||||
|
||||
api: Vehicle
|
||||
|
||||
_attr_precision = PRECISION_WHOLE
|
||||
_attr_target_temperature_step = 5
|
||||
_attr_min_temp = 30
|
||||
|
@ -6,6 +6,7 @@ from itertools import chain
|
||||
from typing import Any
|
||||
|
||||
from tesla_fleet_api.const import Scope, SunRoofCommand, Trunk, WindowCommand
|
||||
from tesla_fleet_api.teslemetry import Vehicle
|
||||
from teslemetry_stream import Signal
|
||||
from teslemetry_stream.const import WindowState
|
||||
|
||||
@ -103,6 +104,7 @@ class CoverRestoreEntity(RestoreEntity, CoverEntity):
|
||||
class TeslemetryWindowEntity(TeslemetryRootEntity, CoverEntity):
|
||||
"""Base class for window cover entities."""
|
||||
|
||||
api: Vehicle
|
||||
_attr_device_class = CoverDeviceClass.WINDOW
|
||||
_attr_supported_features = CoverEntityFeature.OPEN | CoverEntityFeature.CLOSE
|
||||
|
||||
@ -224,6 +226,7 @@ class TeslemetryChargePortEntity(
|
||||
):
|
||||
"""Base class for for charge port cover entities."""
|
||||
|
||||
api: Vehicle
|
||||
_attr_device_class = CoverDeviceClass.DOOR
|
||||
_attr_supported_features = CoverEntityFeature.OPEN | CoverEntityFeature.CLOSE
|
||||
|
||||
@ -304,6 +307,7 @@ class TeslemetryStreamingChargePortEntity(
|
||||
class TeslemetryFrontTrunkEntity(TeslemetryRootEntity, CoverEntity):
|
||||
"""Base class for the front trunk cover entities."""
|
||||
|
||||
api: Vehicle
|
||||
_attr_device_class = CoverDeviceClass.DOOR
|
||||
_attr_supported_features = CoverEntityFeature.OPEN
|
||||
|
||||
@ -365,6 +369,7 @@ class TeslemetryStreamingFrontTrunkEntity(
|
||||
class TeslemetryRearTrunkEntity(TeslemetryRootEntity, CoverEntity):
|
||||
"""Cover entity for the rear trunk."""
|
||||
|
||||
api: Vehicle
|
||||
_attr_device_class = CoverDeviceClass.DOOR
|
||||
_attr_supported_features = CoverEntityFeature.OPEN | CoverEntityFeature.CLOSE
|
||||
|
||||
@ -433,6 +438,7 @@ class TeslemetryStreamingRearTrunkEntity(
|
||||
class TeslemetrySunroofEntity(TeslemetryVehiclePollingEntity, CoverEntity):
|
||||
"""Cover entity for the sunroof."""
|
||||
|
||||
api: Vehicle
|
||||
_attr_device_class = CoverDeviceClass.WINDOW
|
||||
_attr_supported_features = (
|
||||
CoverEntityFeature.OPEN | CoverEntityFeature.CLOSE | CoverEntityFeature.STOP
|
||||
|
@ -26,7 +26,6 @@ class TeslemetryRootEntity(Entity):
|
||||
|
||||
_attr_has_entity_name = True
|
||||
scoped: bool
|
||||
api: Vehicle | EnergySite
|
||||
|
||||
def raise_for_scope(self, scope: Scope):
|
||||
"""Raise an error if a scope is not available."""
|
||||
@ -248,6 +247,8 @@ class TeslemetryWallConnectorEntity(TeslemetryPollingEntity):
|
||||
class TeslemetryVehicleStreamEntity(TeslemetryRootEntity):
|
||||
"""Parent class for Teslemetry Vehicle Stream entities."""
|
||||
|
||||
api: Vehicle
|
||||
|
||||
def __init__(self, data: TeslemetryVehicleData, key: str) -> None:
|
||||
"""Initialize common aspects of a Teslemetry entity."""
|
||||
self.vehicle = data
|
||||
|
@ -6,6 +6,7 @@ from itertools import chain
|
||||
from typing import Any
|
||||
|
||||
from tesla_fleet_api.const import Scope
|
||||
from tesla_fleet_api.teslemetry import Vehicle
|
||||
|
||||
from homeassistant.components.lock import LockEntity
|
||||
from homeassistant.core import HomeAssistant
|
||||
@ -64,6 +65,8 @@ async def async_setup_entry(
|
||||
class TeslemetryVehicleLockEntity(TeslemetryRootEntity, LockEntity):
|
||||
"""Base vehicle lock entity for Teslemetry."""
|
||||
|
||||
api: Vehicle
|
||||
|
||||
async def async_lock(self, **kwargs: Any) -> None:
|
||||
"""Lock the doors."""
|
||||
self.raise_for_scope(Scope.VEHICLE_CMDS)
|
||||
@ -135,6 +138,8 @@ class TeslemetryStreamingVehicleLockEntity(
|
||||
class TeslemetryCableLockEntity(TeslemetryRootEntity, LockEntity):
|
||||
"""Base cable Lock entity for Teslemetry."""
|
||||
|
||||
api: Vehicle
|
||||
|
||||
async def async_lock(self, **kwargs: Any) -> None:
|
||||
"""Charge cable Lock cannot be manually locked."""
|
||||
raise ServiceValidationError(
|
||||
|
@ -63,7 +63,6 @@ class TeslemetryMediaEntity(TeslemetryRootEntity, MediaPlayerEntity):
|
||||
"""Base vehicle media player class."""
|
||||
|
||||
api: Vehicle
|
||||
|
||||
_attr_device_class = MediaPlayerDeviceClass.SPEAKER
|
||||
_attr_volume_step = VOLUME_STEP
|
||||
|
||||
|
@ -172,6 +172,7 @@ async def async_setup_entry(
|
||||
class TeslemetryVehicleNumberEntity(TeslemetryRootEntity, NumberEntity):
|
||||
"""Vehicle number entity base class."""
|
||||
|
||||
api: Vehicle
|
||||
entity_description: TeslemetryNumberVehicleEntityDescription
|
||||
|
||||
async def async_set_native_value(self, value: float) -> None:
|
||||
|
@ -208,6 +208,7 @@ async def async_setup_entry(
|
||||
class TeslemetrySelectEntity(TeslemetryRootEntity, SelectEntity):
|
||||
"""Parent vehicle select entity class."""
|
||||
|
||||
api: Vehicle
|
||||
entity_description: TeslemetrySelectEntityDescription
|
||||
_climate: bool = False
|
||||
|
||||
|
@ -8,7 +8,7 @@ from itertools import chain
|
||||
from typing import Any
|
||||
|
||||
from tesla_fleet_api.const import AutoSeat, Scope
|
||||
from tesla_fleet_api.teslemetry.vehicles import TeslemetryVehicle
|
||||
from tesla_fleet_api.teslemetry import Vehicle
|
||||
from teslemetry_stream import TeslemetryStreamVehicle
|
||||
|
||||
from homeassistant.components.switch import (
|
||||
@ -38,8 +38,8 @@ PARALLEL_UPDATES = 0
|
||||
class TeslemetrySwitchEntityDescription(SwitchEntityDescription):
|
||||
"""Describes Teslemetry Switch entity."""
|
||||
|
||||
on_func: Callable[[TeslemetryVehicle], Awaitable[dict[str, Any]]]
|
||||
off_func: Callable[[TeslemetryVehicle], Awaitable[dict[str, Any]]]
|
||||
on_func: Callable[[Vehicle], Awaitable[dict[str, Any]]]
|
||||
off_func: Callable[[Vehicle], Awaitable[dict[str, Any]]]
|
||||
scopes: list[Scope]
|
||||
value_func: Callable[[StateType], bool] = bool
|
||||
streaming_listener: Callable[
|
||||
@ -176,6 +176,7 @@ async def async_setup_entry(
|
||||
class TeslemetryVehicleSwitchEntity(TeslemetryRootEntity, SwitchEntity):
|
||||
"""Base class for all Teslemetry switch entities."""
|
||||
|
||||
api: Vehicle
|
||||
_attr_device_class = SwitchDeviceClass.SWITCH
|
||||
entity_description: TeslemetrySwitchEntityDescription
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user