Allow older vehicles to sleep in Teslemetry (#117229)

* Allow older vehicles to sleep

* Remove updated_once

* move pre2021 to lib

* bump

* Bump again

* Bump to 0.5.11

* Fix VIN so it matches the check

* Fix snapshot

* Snapshots

* Fix self.updated_once

* Remove old pre2021 attribute

* fix snapshots

---------

Co-authored-by: G Johansson <goran.johansson@shiftit.se>
This commit is contained in:
Brett Adams 2024-05-27 20:37:33 +10:00 committed by GitHub
parent 2a8fc7f310
commit 46158f5c14
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
21 changed files with 203 additions and 119 deletions

View File

@ -1,11 +1,12 @@
"""Teslemetry Data Coordinator.""" """Teslemetry Data Coordinator."""
from datetime import timedelta from datetime import datetime, timedelta
from typing import Any from typing import Any
from tesla_fleet_api import EnergySpecific, VehicleSpecific from tesla_fleet_api import EnergySpecific, VehicleSpecific
from tesla_fleet_api.const import VehicleDataEndpoint from tesla_fleet_api.const import VehicleDataEndpoint
from tesla_fleet_api.exceptions import ( from tesla_fleet_api.exceptions import (
Forbidden,
InvalidToken, InvalidToken,
SubscriptionRequired, SubscriptionRequired,
TeslaFleetError, TeslaFleetError,
@ -19,6 +20,7 @@ from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, Upda
from .const import LOGGER, TeslemetryState from .const import LOGGER, TeslemetryState
VEHICLE_INTERVAL = timedelta(seconds=30) VEHICLE_INTERVAL = timedelta(seconds=30)
VEHICLE_WAIT = timedelta(minutes=15)
ENERGY_LIVE_INTERVAL = timedelta(seconds=30) ENERGY_LIVE_INTERVAL = timedelta(seconds=30)
ENERGY_INFO_INTERVAL = timedelta(seconds=30) ENERGY_INFO_INTERVAL = timedelta(seconds=30)
@ -49,6 +51,8 @@ class TeslemetryVehicleDataCoordinator(DataUpdateCoordinator[dict[str, Any]]):
"""Class to manage fetching data from the Teslemetry API.""" """Class to manage fetching data from the Teslemetry API."""
updated_once: bool updated_once: bool
pre2021: bool
last_active: datetime
def __init__( def __init__(
self, hass: HomeAssistant, api: VehicleSpecific, product: dict self, hass: HomeAssistant, api: VehicleSpecific, product: dict
@ -63,9 +67,13 @@ class TeslemetryVehicleDataCoordinator(DataUpdateCoordinator[dict[str, Any]]):
self.api = api self.api = api
self.data = flatten(product) self.data = flatten(product)
self.updated_once = False self.updated_once = False
self.last_active = datetime.now()
async def _async_update_data(self) -> dict[str, Any]: async def _async_update_data(self) -> dict[str, Any]:
"""Update vehicle data using Teslemetry API.""" """Update vehicle data using Teslemetry API."""
self.update_interval = VEHICLE_INTERVAL
try: try:
data = (await self.api.vehicle_data(endpoints=ENDPOINTS))["response"] data = (await self.api.vehicle_data(endpoints=ENDPOINTS))["response"]
except VehicleOffline: except VehicleOffline:
@ -79,6 +87,25 @@ class TeslemetryVehicleDataCoordinator(DataUpdateCoordinator[dict[str, Any]]):
raise UpdateFailed(e.message) from e raise UpdateFailed(e.message) from e
self.updated_once = True self.updated_once = True
if self.api.pre2021 and data["state"] == TeslemetryState.ONLINE:
# Handle pre-2021 vehicles which cannot sleep by themselves
if (
data["charge_state"].get("charging_state") == "Charging"
or data["vehicle_state"].get("is_user_present")
or data["vehicle_state"].get("sentry_mode")
):
# Vehicle is active, reset timer
self.last_active = datetime.now()
else:
elapsed = datetime.now() - self.last_active
if elapsed > timedelta(minutes=20):
# Vehicle didn't sleep, try again in 15 minutes
self.last_active = datetime.now()
elif elapsed > timedelta(minutes=15):
# Let vehicle go to sleep now
self.update_interval = VEHICLE_WAIT
return flatten(data) return flatten(data)
@ -102,9 +129,7 @@ class TeslemetryEnergySiteLiveCoordinator(DataUpdateCoordinator[dict[str, Any]])
try: try:
data = (await self.api.live_status())["response"] data = (await self.api.live_status())["response"]
except InvalidToken as e: except (InvalidToken, Forbidden, SubscriptionRequired) as e:
raise ConfigEntryAuthFailed from e
except SubscriptionRequired as e:
raise ConfigEntryAuthFailed from e raise ConfigEntryAuthFailed from e
except TeslaFleetError as e: except TeslaFleetError as e:
raise UpdateFailed(e.message) from e raise UpdateFailed(e.message) from e
@ -138,9 +163,7 @@ class TeslemetryEnergySiteInfoCoordinator(DataUpdateCoordinator[dict[str, Any]])
try: try:
data = (await self.api.site_info())["response"] data = (await self.api.site_info())["response"]
except InvalidToken as e: except (InvalidToken, Forbidden, SubscriptionRequired) as e:
raise ConfigEntryAuthFailed from e
except SubscriptionRequired as e:
raise ConfigEntryAuthFailed from e raise ConfigEntryAuthFailed from e
except TeslaFleetError as e: except TeslaFleetError as e:
raise UpdateFailed(e.message) from e raise UpdateFailed(e.message) from e

View File

@ -6,5 +6,5 @@
"documentation": "https://www.home-assistant.io/integrations/teslemetry", "documentation": "https://www.home-assistant.io/integrations/teslemetry",
"iot_class": "cloud_polling", "iot_class": "cloud_polling",
"loggers": ["tesla-fleet-api"], "loggers": ["tesla-fleet-api"],
"requirements": ["tesla-fleet-api==0.4.9"] "requirements": ["tesla-fleet-api==0.5.12"]
} }

View File

@ -2704,7 +2704,7 @@ temperusb==1.6.1
# tensorflow==2.5.0 # tensorflow==2.5.0
# homeassistant.components.teslemetry # homeassistant.components.teslemetry
tesla-fleet-api==0.4.9 tesla-fleet-api==0.5.12
# homeassistant.components.powerwall # homeassistant.components.powerwall
tesla-powerwall==0.5.2 tesla-powerwall==0.5.2

View File

@ -2096,7 +2096,7 @@ temescal==0.5
temperusb==1.6.1 temperusb==1.6.1
# homeassistant.components.teslemetry # homeassistant.components.teslemetry
tesla-fleet-api==0.4.9 tesla-fleet-api==0.5.12
# homeassistant.components.powerwall # homeassistant.components.powerwall
tesla-powerwall==0.5.2 tesla-powerwall==0.5.2

View File

@ -4,7 +4,7 @@
"id": 1234, "id": 1234,
"user_id": 1234, "user_id": 1234,
"vehicle_id": 1234, "vehicle_id": 1234,
"vin": "VINVINVIN", "vin": "LRWXF7EK4KC700000",
"color": null, "color": null,
"access_type": "OWNER", "access_type": "OWNER",
"display_name": "Test", "display_name": "Test",

View File

@ -3,7 +3,7 @@
"id": 1234, "id": 1234,
"user_id": 1234, "user_id": 1234,
"vehicle_id": 1234, "vehicle_id": 1234,
"vin": "VINVINVIN", "vin": "LRWXF7EK4KC700000",
"color": null, "color": null,
"access_type": "OWNER", "access_type": "OWNER",
"granular_access": { "granular_access": {

View File

@ -3,7 +3,7 @@
"id": 1234, "id": 1234,
"user_id": 1234, "user_id": 1234,
"vehicle_id": 1234, "vehicle_id": 1234,
"vin": "VINVINVIN", "vin": "LRWXF7EK4KC700000",
"color": null, "color": null,
"access_type": "OWNER", "access_type": "OWNER",
"granular_access": { "granular_access": {
@ -201,7 +201,7 @@
"feature_bitmask": "fbdffbff,187f", "feature_bitmask": "fbdffbff,187f",
"fp_window": 1, "fp_window": 1,
"ft": 1, "ft": 1,
"is_user_present": false, "is_user_present": true,
"locked": false, "locked": false,
"media_info": { "media_info": {
"audio_volume": 2.6667, "audio_volume": 2.6667,

View File

@ -166,7 +166,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'charge_state_battery_heater_on', 'translation_key': 'charge_state_battery_heater_on',
'unique_id': 'VINVINVIN-charge_state_battery_heater_on', 'unique_id': 'LRWXF7EK4KC700000-charge_state_battery_heater_on',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -213,7 +213,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'climate_state_cabin_overheat_protection_actively_cooling', 'translation_key': 'climate_state_cabin_overheat_protection_actively_cooling',
'unique_id': 'VINVINVIN-climate_state_cabin_overheat_protection_actively_cooling', 'unique_id': 'LRWXF7EK4KC700000-climate_state_cabin_overheat_protection_actively_cooling',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -260,7 +260,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'charge_state_conn_charge_cable', 'translation_key': 'charge_state_conn_charge_cable',
'unique_id': 'VINVINVIN-charge_state_conn_charge_cable', 'unique_id': 'LRWXF7EK4KC700000-charge_state_conn_charge_cable',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -307,7 +307,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'charge_state_charger_phases', 'translation_key': 'charge_state_charger_phases',
'unique_id': 'VINVINVIN-charge_state_charger_phases', 'unique_id': 'LRWXF7EK4KC700000-charge_state_charger_phases',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -353,7 +353,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'vehicle_state_dashcam_state', 'translation_key': 'vehicle_state_dashcam_state',
'unique_id': 'VINVINVIN-vehicle_state_dashcam_state', 'unique_id': 'LRWXF7EK4KC700000-vehicle_state_dashcam_state',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -400,7 +400,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'vehicle_state_df', 'translation_key': 'vehicle_state_df',
'unique_id': 'VINVINVIN-vehicle_state_df', 'unique_id': 'LRWXF7EK4KC700000-vehicle_state_df',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -447,7 +447,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'vehicle_state_fd_window', 'translation_key': 'vehicle_state_fd_window',
'unique_id': 'VINVINVIN-vehicle_state_fd_window', 'unique_id': 'LRWXF7EK4KC700000-vehicle_state_fd_window',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -494,7 +494,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'vehicle_state_pf', 'translation_key': 'vehicle_state_pf',
'unique_id': 'VINVINVIN-vehicle_state_pf', 'unique_id': 'LRWXF7EK4KC700000-vehicle_state_pf',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -541,7 +541,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'vehicle_state_fp_window', 'translation_key': 'vehicle_state_fp_window',
'unique_id': 'VINVINVIN-vehicle_state_fp_window', 'unique_id': 'LRWXF7EK4KC700000-vehicle_state_fp_window',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -588,7 +588,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'climate_state_is_preconditioning', 'translation_key': 'climate_state_is_preconditioning',
'unique_id': 'VINVINVIN-climate_state_is_preconditioning', 'unique_id': 'LRWXF7EK4KC700000-climate_state_is_preconditioning',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -634,7 +634,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'charge_state_preconditioning_enabled', 'translation_key': 'charge_state_preconditioning_enabled',
'unique_id': 'VINVINVIN-charge_state_preconditioning_enabled', 'unique_id': 'LRWXF7EK4KC700000-charge_state_preconditioning_enabled',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -680,7 +680,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'vehicle_state_dr', 'translation_key': 'vehicle_state_dr',
'unique_id': 'VINVINVIN-vehicle_state_dr', 'unique_id': 'LRWXF7EK4KC700000-vehicle_state_dr',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -727,7 +727,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'vehicle_state_rd_window', 'translation_key': 'vehicle_state_rd_window',
'unique_id': 'VINVINVIN-vehicle_state_rd_window', 'unique_id': 'LRWXF7EK4KC700000-vehicle_state_rd_window',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -774,7 +774,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'vehicle_state_pr', 'translation_key': 'vehicle_state_pr',
'unique_id': 'VINVINVIN-vehicle_state_pr', 'unique_id': 'LRWXF7EK4KC700000-vehicle_state_pr',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -821,7 +821,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'vehicle_state_rp_window', 'translation_key': 'vehicle_state_rp_window',
'unique_id': 'VINVINVIN-vehicle_state_rp_window', 'unique_id': 'LRWXF7EK4KC700000-vehicle_state_rp_window',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -868,7 +868,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'charge_state_scheduled_charging_pending', 'translation_key': 'charge_state_scheduled_charging_pending',
'unique_id': 'VINVINVIN-charge_state_scheduled_charging_pending', 'unique_id': 'LRWXF7EK4KC700000-charge_state_scheduled_charging_pending',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -914,7 +914,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'state', 'translation_key': 'state',
'unique_id': 'VINVINVIN-state', 'unique_id': 'LRWXF7EK4KC700000-state',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -961,7 +961,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'vehicle_state_tpms_soft_warning_fl', 'translation_key': 'vehicle_state_tpms_soft_warning_fl',
'unique_id': 'VINVINVIN-vehicle_state_tpms_soft_warning_fl', 'unique_id': 'LRWXF7EK4KC700000-vehicle_state_tpms_soft_warning_fl',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -1008,7 +1008,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'vehicle_state_tpms_soft_warning_fr', 'translation_key': 'vehicle_state_tpms_soft_warning_fr',
'unique_id': 'VINVINVIN-vehicle_state_tpms_soft_warning_fr', 'unique_id': 'LRWXF7EK4KC700000-vehicle_state_tpms_soft_warning_fr',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -1055,7 +1055,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'vehicle_state_tpms_soft_warning_rl', 'translation_key': 'vehicle_state_tpms_soft_warning_rl',
'unique_id': 'VINVINVIN-vehicle_state_tpms_soft_warning_rl', 'unique_id': 'LRWXF7EK4KC700000-vehicle_state_tpms_soft_warning_rl',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -1102,7 +1102,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'vehicle_state_tpms_soft_warning_rr', 'translation_key': 'vehicle_state_tpms_soft_warning_rr',
'unique_id': 'VINVINVIN-vehicle_state_tpms_soft_warning_rr', 'unique_id': 'LRWXF7EK4KC700000-vehicle_state_tpms_soft_warning_rr',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -1149,7 +1149,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'charge_state_trip_charging', 'translation_key': 'charge_state_trip_charging',
'unique_id': 'VINVINVIN-charge_state_trip_charging', 'unique_id': 'LRWXF7EK4KC700000-charge_state_trip_charging',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -1195,7 +1195,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'vehicle_state_is_user_present', 'translation_key': 'vehicle_state_is_user_present',
'unique_id': 'VINVINVIN-vehicle_state_is_user_present', 'unique_id': 'LRWXF7EK4KC700000-vehicle_state_is_user_present',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -1566,6 +1566,6 @@
'last_changed': <ANY>, 'last_changed': <ANY>,
'last_reported': <ANY>, 'last_reported': <ANY>,
'last_updated': <ANY>, 'last_updated': <ANY>,
'state': 'off', 'state': 'on',
}) })
# --- # ---

View File

@ -28,7 +28,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'flash_lights', 'translation_key': 'flash_lights',
'unique_id': 'VINVINVIN-flash_lights', 'unique_id': 'LRWXF7EK4KC700000-flash_lights',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -74,7 +74,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'homelink', 'translation_key': 'homelink',
'unique_id': 'VINVINVIN-homelink', 'unique_id': 'LRWXF7EK4KC700000-homelink',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -120,7 +120,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'honk', 'translation_key': 'honk',
'unique_id': 'VINVINVIN-honk', 'unique_id': 'LRWXF7EK4KC700000-honk',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -166,7 +166,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'enable_keyless_driving', 'translation_key': 'enable_keyless_driving',
'unique_id': 'VINVINVIN-enable_keyless_driving', 'unique_id': 'LRWXF7EK4KC700000-enable_keyless_driving',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -212,7 +212,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'boombox', 'translation_key': 'boombox',
'unique_id': 'VINVINVIN-boombox', 'unique_id': 'LRWXF7EK4KC700000-boombox',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -258,7 +258,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'wake', 'translation_key': 'wake',
'unique_id': 'VINVINVIN-wake', 'unique_id': 'LRWXF7EK4KC700000-wake',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---

View File

@ -41,7 +41,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': <ClimateEntityFeature: 401>, 'supported_features': <ClimateEntityFeature: 401>,
'translation_key': <TeslemetryClimateSide.DRIVER: 'driver_temp'>, 'translation_key': <TeslemetryClimateSide.DRIVER: 'driver_temp'>,
'unique_id': 'VINVINVIN-driver_temp', 'unique_id': 'LRWXF7EK4KC700000-driver_temp',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -116,7 +116,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': <ClimateEntityFeature: 401>, 'supported_features': <ClimateEntityFeature: 401>,
'translation_key': <TeslemetryClimateSide.DRIVER: 'driver_temp'>, 'translation_key': <TeslemetryClimateSide.DRIVER: 'driver_temp'>,
'unique_id': 'VINVINVIN-driver_temp', 'unique_id': 'LRWXF7EK4KC700000-driver_temp',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -191,7 +191,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': <ClimateEntityFeature: 401>, 'supported_features': <ClimateEntityFeature: 401>,
'translation_key': <TeslemetryClimateSide.DRIVER: 'driver_temp'>, 'translation_key': <TeslemetryClimateSide.DRIVER: 'driver_temp'>,
'unique_id': 'VINVINVIN-driver_temp', 'unique_id': 'LRWXF7EK4KC700000-driver_temp',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---

View File

@ -28,7 +28,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': <CoverEntityFeature: 3>, 'supported_features': <CoverEntityFeature: 3>,
'translation_key': 'charge_state_charge_port_door_open', 'translation_key': 'charge_state_charge_port_door_open',
'unique_id': 'VINVINVIN-charge_state_charge_port_door_open', 'unique_id': 'LRWXF7EK4KC700000-charge_state_charge_port_door_open',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -76,7 +76,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': <CoverEntityFeature: 1>, 'supported_features': <CoverEntityFeature: 1>,
'translation_key': 'vehicle_state_ft', 'translation_key': 'vehicle_state_ft',
'unique_id': 'VINVINVIN-vehicle_state_ft', 'unique_id': 'LRWXF7EK4KC700000-vehicle_state_ft',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -124,7 +124,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': <CoverEntityFeature: 3>, 'supported_features': <CoverEntityFeature: 3>,
'translation_key': 'vehicle_state_rt', 'translation_key': 'vehicle_state_rt',
'unique_id': 'VINVINVIN-vehicle_state_rt', 'unique_id': 'LRWXF7EK4KC700000-vehicle_state_rt',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -172,7 +172,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': <CoverEntityFeature: 3>, 'supported_features': <CoverEntityFeature: 3>,
'translation_key': 'windows', 'translation_key': 'windows',
'unique_id': 'VINVINVIN-windows', 'unique_id': 'LRWXF7EK4KC700000-windows',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -220,7 +220,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': <CoverEntityFeature: 3>, 'supported_features': <CoverEntityFeature: 3>,
'translation_key': 'charge_state_charge_port_door_open', 'translation_key': 'charge_state_charge_port_door_open',
'unique_id': 'VINVINVIN-charge_state_charge_port_door_open', 'unique_id': 'LRWXF7EK4KC700000-charge_state_charge_port_door_open',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -268,7 +268,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': <CoverEntityFeature: 1>, 'supported_features': <CoverEntityFeature: 1>,
'translation_key': 'vehicle_state_ft', 'translation_key': 'vehicle_state_ft',
'unique_id': 'VINVINVIN-vehicle_state_ft', 'unique_id': 'LRWXF7EK4KC700000-vehicle_state_ft',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -316,7 +316,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': <CoverEntityFeature: 3>, 'supported_features': <CoverEntityFeature: 3>,
'translation_key': 'vehicle_state_rt', 'translation_key': 'vehicle_state_rt',
'unique_id': 'VINVINVIN-vehicle_state_rt', 'unique_id': 'LRWXF7EK4KC700000-vehicle_state_rt',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -364,7 +364,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': <CoverEntityFeature: 3>, 'supported_features': <CoverEntityFeature: 3>,
'translation_key': 'windows', 'translation_key': 'windows',
'unique_id': 'VINVINVIN-windows', 'unique_id': 'LRWXF7EK4KC700000-windows',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -412,7 +412,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'charge_state_charge_port_door_open', 'translation_key': 'charge_state_charge_port_door_open',
'unique_id': 'VINVINVIN-charge_state_charge_port_door_open', 'unique_id': 'LRWXF7EK4KC700000-charge_state_charge_port_door_open',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -460,7 +460,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'vehicle_state_ft', 'translation_key': 'vehicle_state_ft',
'unique_id': 'VINVINVIN-vehicle_state_ft', 'unique_id': 'LRWXF7EK4KC700000-vehicle_state_ft',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -508,7 +508,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'vehicle_state_rt', 'translation_key': 'vehicle_state_rt',
'unique_id': 'VINVINVIN-vehicle_state_rt', 'unique_id': 'LRWXF7EK4KC700000-vehicle_state_rt',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -556,7 +556,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'windows', 'translation_key': 'windows',
'unique_id': 'VINVINVIN-windows', 'unique_id': 'LRWXF7EK4KC700000-windows',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---

View File

@ -28,7 +28,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'location', 'translation_key': 'location',
'unique_id': 'VINVINVIN-location', 'unique_id': 'LRWXF7EK4KC700000-location',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -78,7 +78,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'route', 'translation_key': 'route',
'unique_id': 'VINVINVIN-route', 'unique_id': 'LRWXF7EK4KC700000-route',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---

View File

@ -29,7 +29,7 @@
'via_device_id': None, 'via_device_id': None,
}) })
# --- # ---
# name: test_devices[{('teslemetry', 'VINVINVIN')}] # name: test_devices[{('teslemetry', 'LRWXF7EK4KC700000')}]
DeviceRegistryEntrySnapshot({ DeviceRegistryEntrySnapshot({
'area_id': None, 'area_id': None,
'config_entries': <ANY>, 'config_entries': <ANY>,
@ -43,17 +43,17 @@
'identifiers': set({ 'identifiers': set({
tuple( tuple(
'teslemetry', 'teslemetry',
'VINVINVIN', 'LRWXF7EK4KC700000',
), ),
}), }),
'is_new': False, 'is_new': False,
'labels': set({ 'labels': set({
}), }),
'manufacturer': 'Tesla', 'manufacturer': 'Tesla',
'model': None, 'model': 'Model X',
'name': 'Test', 'name': 'Test',
'name_by_user': None, 'name_by_user': None,
'serial_number': 'VINVINVIN', 'serial_number': 'LRWXF7EK4KC700000',
'suggested_area': None, 'suggested_area': None,
'sw_version': None, 'sw_version': None,
'via_device_id': None, 'via_device_id': None,

View File

@ -28,7 +28,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'charge_state_charge_port_latch', 'translation_key': 'charge_state_charge_port_latch',
'unique_id': 'VINVINVIN-charge_state_charge_port_latch', 'unique_id': 'LRWXF7EK4KC700000-charge_state_charge_port_latch',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -75,7 +75,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'vehicle_state_locked', 'translation_key': 'vehicle_state_locked',
'unique_id': 'VINVINVIN-vehicle_state_locked', 'unique_id': 'LRWXF7EK4KC700000-vehicle_state_locked',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---

View File

@ -29,7 +29,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': <MediaPlayerEntityFeature: 16437>, 'supported_features': <MediaPlayerEntityFeature: 16437>,
'translation_key': 'media', 'translation_key': 'media',
'unique_id': 'VINVINVIN-media', 'unique_id': 'LRWXF7EK4KC700000-media',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -107,7 +107,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'media', 'translation_key': 'media',
'unique_id': 'VINVINVIN-media', 'unique_id': 'LRWXF7EK4KC700000-media',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---

View File

@ -149,7 +149,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'charge_state_charge_current_request', 'translation_key': 'charge_state_charge_current_request',
'unique_id': 'VINVINVIN-charge_state_charge_current_request', 'unique_id': 'LRWXF7EK4KC700000-charge_state_charge_current_request',
'unit_of_measurement': <UnitOfElectricCurrent.AMPERE: 'A'>, 'unit_of_measurement': <UnitOfElectricCurrent.AMPERE: 'A'>,
}) })
# --- # ---
@ -206,7 +206,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'charge_state_charge_limit_soc', 'translation_key': 'charge_state_charge_limit_soc',
'unique_id': 'VINVINVIN-charge_state_charge_limit_soc', 'unique_id': 'LRWXF7EK4KC700000-charge_state_charge_limit_soc',
'unit_of_measurement': '%', 'unit_of_measurement': '%',
}) })
# --- # ---

View File

@ -149,7 +149,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'climate_state_seat_heater_left', 'translation_key': 'climate_state_seat_heater_left',
'unique_id': 'VINVINVIN-climate_state_seat_heater_left', 'unique_id': 'LRWXF7EK4KC700000-climate_state_seat_heater_left',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -208,7 +208,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'climate_state_seat_heater_right', 'translation_key': 'climate_state_seat_heater_right',
'unique_id': 'VINVINVIN-climate_state_seat_heater_right', 'unique_id': 'LRWXF7EK4KC700000-climate_state_seat_heater_right',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -267,7 +267,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'climate_state_seat_heater_rear_center', 'translation_key': 'climate_state_seat_heater_rear_center',
'unique_id': 'VINVINVIN-climate_state_seat_heater_rear_center', 'unique_id': 'LRWXF7EK4KC700000-climate_state_seat_heater_rear_center',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -326,7 +326,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'climate_state_seat_heater_rear_left', 'translation_key': 'climate_state_seat_heater_rear_left',
'unique_id': 'VINVINVIN-climate_state_seat_heater_rear_left', 'unique_id': 'LRWXF7EK4KC700000-climate_state_seat_heater_rear_left',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -385,7 +385,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'climate_state_seat_heater_rear_right', 'translation_key': 'climate_state_seat_heater_rear_right',
'unique_id': 'VINVINVIN-climate_state_seat_heater_rear_right', 'unique_id': 'LRWXF7EK4KC700000-climate_state_seat_heater_rear_right',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -444,7 +444,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'climate_state_seat_heater_third_row_left', 'translation_key': 'climate_state_seat_heater_third_row_left',
'unique_id': 'VINVINVIN-climate_state_seat_heater_third_row_left', 'unique_id': 'LRWXF7EK4KC700000-climate_state_seat_heater_third_row_left',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -503,7 +503,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'climate_state_seat_heater_third_row_right', 'translation_key': 'climate_state_seat_heater_third_row_right',
'unique_id': 'VINVINVIN-climate_state_seat_heater_third_row_right', 'unique_id': 'LRWXF7EK4KC700000-climate_state_seat_heater_third_row_right',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -561,7 +561,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'climate_state_steering_wheel_heat_level', 'translation_key': 'climate_state_steering_wheel_heat_level',
'unique_id': 'VINVINVIN-climate_state_steering_wheel_heat_level', 'unique_id': 'LRWXF7EK4KC700000-climate_state_steering_wheel_heat_level',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---

View File

@ -867,7 +867,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'charge_state_battery_level', 'translation_key': 'charge_state_battery_level',
'unique_id': 'VINVINVIN-charge_state_battery_level', 'unique_id': 'LRWXF7EK4KC700000-charge_state_battery_level',
'unit_of_measurement': '%', 'unit_of_measurement': '%',
}) })
# --- # ---
@ -940,7 +940,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'charge_state_battery_range', 'translation_key': 'charge_state_battery_range',
'unique_id': 'VINVINVIN-charge_state_battery_range', 'unique_id': 'LRWXF7EK4KC700000-charge_state_battery_range',
'unit_of_measurement': <UnitOfLength.KILOMETERS: 'km'>, 'unit_of_measurement': <UnitOfLength.KILOMETERS: 'km'>,
}) })
# --- # ---
@ -1005,7 +1005,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'charge_state_conn_charge_cable', 'translation_key': 'charge_state_conn_charge_cable',
'unique_id': 'VINVINVIN-charge_state_conn_charge_cable', 'unique_id': 'LRWXF7EK4KC700000-charge_state_conn_charge_cable',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -1069,7 +1069,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'charge_state_charge_energy_added', 'translation_key': 'charge_state_charge_energy_added',
'unique_id': 'VINVINVIN-charge_state_charge_energy_added', 'unique_id': 'LRWXF7EK4KC700000-charge_state_charge_energy_added',
'unit_of_measurement': <UnitOfEnergy.KILO_WATT_HOUR: 'kWh'>, 'unit_of_measurement': <UnitOfEnergy.KILO_WATT_HOUR: 'kWh'>,
}) })
# --- # ---
@ -1139,7 +1139,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'charge_state_charge_rate', 'translation_key': 'charge_state_charge_rate',
'unique_id': 'VINVINVIN-charge_state_charge_rate', 'unique_id': 'LRWXF7EK4KC700000-charge_state_charge_rate',
'unit_of_measurement': <UnitOfSpeed.KILOMETERS_PER_HOUR: 'km/h'>, 'unit_of_measurement': <UnitOfSpeed.KILOMETERS_PER_HOUR: 'km/h'>,
}) })
# --- # ---
@ -1206,7 +1206,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'charge_state_charger_actual_current', 'translation_key': 'charge_state_charger_actual_current',
'unique_id': 'VINVINVIN-charge_state_charger_actual_current', 'unique_id': 'LRWXF7EK4KC700000-charge_state_charger_actual_current',
'unit_of_measurement': <UnitOfElectricCurrent.AMPERE: 'A'>, 'unit_of_measurement': <UnitOfElectricCurrent.AMPERE: 'A'>,
}) })
# --- # ---
@ -1273,7 +1273,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'charge_state_charger_power', 'translation_key': 'charge_state_charger_power',
'unique_id': 'VINVINVIN-charge_state_charger_power', 'unique_id': 'LRWXF7EK4KC700000-charge_state_charger_power',
'unit_of_measurement': <UnitOfPower.KILO_WATT: 'kW'>, 'unit_of_measurement': <UnitOfPower.KILO_WATT: 'kW'>,
}) })
# --- # ---
@ -1340,7 +1340,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'charge_state_charger_voltage', 'translation_key': 'charge_state_charger_voltage',
'unique_id': 'VINVINVIN-charge_state_charger_voltage', 'unique_id': 'LRWXF7EK4KC700000-charge_state_charger_voltage',
'unit_of_measurement': <UnitOfElectricPotential.VOLT: 'V'>, 'unit_of_measurement': <UnitOfElectricPotential.VOLT: 'V'>,
}) })
# --- # ---
@ -1414,7 +1414,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'charge_state_charging_state', 'translation_key': 'charge_state_charging_state',
'unique_id': 'VINVINVIN-charge_state_charging_state', 'unique_id': 'LRWXF7EK4KC700000-charge_state_charging_state',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -1496,7 +1496,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'drive_state_active_route_miles_to_arrival', 'translation_key': 'drive_state_active_route_miles_to_arrival',
'unique_id': 'VINVINVIN-drive_state_active_route_miles_to_arrival', 'unique_id': 'LRWXF7EK4KC700000-drive_state_active_route_miles_to_arrival',
'unit_of_measurement': <UnitOfLength.KILOMETERS: 'km'>, 'unit_of_measurement': <UnitOfLength.KILOMETERS: 'km'>,
}) })
# --- # ---
@ -1566,7 +1566,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'climate_state_driver_temp_setting', 'translation_key': 'climate_state_driver_temp_setting',
'unique_id': 'VINVINVIN-climate_state_driver_temp_setting', 'unique_id': 'LRWXF7EK4KC700000-climate_state_driver_temp_setting',
'unit_of_measurement': <UnitOfTemperature.CELSIUS: '°C'>, 'unit_of_measurement': <UnitOfTemperature.CELSIUS: '°C'>,
}) })
# --- # ---
@ -1639,7 +1639,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'charge_state_est_battery_range', 'translation_key': 'charge_state_est_battery_range',
'unique_id': 'VINVINVIN-charge_state_est_battery_range', 'unique_id': 'LRWXF7EK4KC700000-charge_state_est_battery_range',
'unit_of_measurement': <UnitOfLength.KILOMETERS: 'km'>, 'unit_of_measurement': <UnitOfLength.KILOMETERS: 'km'>,
}) })
# --- # ---
@ -1704,7 +1704,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'charge_state_fast_charger_type', 'translation_key': 'charge_state_fast_charger_type',
'unique_id': 'VINVINVIN-charge_state_fast_charger_type', 'unique_id': 'LRWXF7EK4KC700000-charge_state_fast_charger_type',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -1771,7 +1771,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'charge_state_ideal_battery_range', 'translation_key': 'charge_state_ideal_battery_range',
'unique_id': 'VINVINVIN-charge_state_ideal_battery_range', 'unique_id': 'LRWXF7EK4KC700000-charge_state_ideal_battery_range',
'unit_of_measurement': <UnitOfLength.KILOMETERS: 'km'>, 'unit_of_measurement': <UnitOfLength.KILOMETERS: 'km'>,
}) })
# --- # ---
@ -1841,7 +1841,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'climate_state_inside_temp', 'translation_key': 'climate_state_inside_temp',
'unique_id': 'VINVINVIN-climate_state_inside_temp', 'unique_id': 'LRWXF7EK4KC700000-climate_state_inside_temp',
'unit_of_measurement': <UnitOfTemperature.CELSIUS: '°C'>, 'unit_of_measurement': <UnitOfTemperature.CELSIUS: '°C'>,
}) })
# --- # ---
@ -1914,7 +1914,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'vehicle_state_odometer', 'translation_key': 'vehicle_state_odometer',
'unique_id': 'VINVINVIN-vehicle_state_odometer', 'unique_id': 'LRWXF7EK4KC700000-vehicle_state_odometer',
'unit_of_measurement': <UnitOfLength.KILOMETERS: 'km'>, 'unit_of_measurement': <UnitOfLength.KILOMETERS: 'km'>,
}) })
# --- # ---
@ -1984,7 +1984,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'climate_state_outside_temp', 'translation_key': 'climate_state_outside_temp',
'unique_id': 'VINVINVIN-climate_state_outside_temp', 'unique_id': 'LRWXF7EK4KC700000-climate_state_outside_temp',
'unit_of_measurement': <UnitOfTemperature.CELSIUS: '°C'>, 'unit_of_measurement': <UnitOfTemperature.CELSIUS: '°C'>,
}) })
# --- # ---
@ -2054,7 +2054,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'climate_state_passenger_temp_setting', 'translation_key': 'climate_state_passenger_temp_setting',
'unique_id': 'VINVINVIN-climate_state_passenger_temp_setting', 'unique_id': 'LRWXF7EK4KC700000-climate_state_passenger_temp_setting',
'unit_of_measurement': <UnitOfTemperature.CELSIUS: '°C'>, 'unit_of_measurement': <UnitOfTemperature.CELSIUS: '°C'>,
}) })
# --- # ---
@ -2121,7 +2121,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'drive_state_power', 'translation_key': 'drive_state_power',
'unique_id': 'VINVINVIN-drive_state_power', 'unique_id': 'LRWXF7EK4KC700000-drive_state_power',
'unit_of_measurement': <UnitOfPower.KILO_WATT: 'kW'>, 'unit_of_measurement': <UnitOfPower.KILO_WATT: 'kW'>,
}) })
# --- # ---
@ -2193,7 +2193,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'drive_state_shift_state', 'translation_key': 'drive_state_shift_state',
'unique_id': 'VINVINVIN-drive_state_shift_state', 'unique_id': 'LRWXF7EK4KC700000-drive_state_shift_state',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -2271,7 +2271,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'drive_state_speed', 'translation_key': 'drive_state_speed',
'unique_id': 'VINVINVIN-drive_state_speed', 'unique_id': 'LRWXF7EK4KC700000-drive_state_speed',
'unit_of_measurement': <UnitOfSpeed.KILOMETERS_PER_HOUR: 'km/h'>, 'unit_of_measurement': <UnitOfSpeed.KILOMETERS_PER_HOUR: 'km/h'>,
}) })
# --- # ---
@ -2338,7 +2338,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'drive_state_active_route_energy_at_arrival', 'translation_key': 'drive_state_active_route_energy_at_arrival',
'unique_id': 'VINVINVIN-drive_state_active_route_energy_at_arrival', 'unique_id': 'LRWXF7EK4KC700000-drive_state_active_route_energy_at_arrival',
'unit_of_measurement': '%', 'unit_of_measurement': '%',
}) })
# --- # ---
@ -2403,7 +2403,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'drive_state_active_route_minutes_to_arrival', 'translation_key': 'drive_state_active_route_minutes_to_arrival',
'unique_id': 'VINVINVIN-drive_state_active_route_minutes_to_arrival', 'unique_id': 'LRWXF7EK4KC700000-drive_state_active_route_minutes_to_arrival',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -2464,7 +2464,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'charge_state_minutes_to_full_charge', 'translation_key': 'charge_state_minutes_to_full_charge',
'unique_id': 'VINVINVIN-charge_state_minutes_to_full_charge', 'unique_id': 'LRWXF7EK4KC700000-charge_state_minutes_to_full_charge',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -2533,7 +2533,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'vehicle_state_tpms_pressure_fl', 'translation_key': 'vehicle_state_tpms_pressure_fl',
'unique_id': 'VINVINVIN-vehicle_state_tpms_pressure_fl', 'unique_id': 'LRWXF7EK4KC700000-vehicle_state_tpms_pressure_fl',
'unit_of_measurement': <UnitOfPressure.PSI: 'psi'>, 'unit_of_measurement': <UnitOfPressure.PSI: 'psi'>,
}) })
# --- # ---
@ -2606,7 +2606,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'vehicle_state_tpms_pressure_fr', 'translation_key': 'vehicle_state_tpms_pressure_fr',
'unique_id': 'VINVINVIN-vehicle_state_tpms_pressure_fr', 'unique_id': 'LRWXF7EK4KC700000-vehicle_state_tpms_pressure_fr',
'unit_of_measurement': <UnitOfPressure.PSI: 'psi'>, 'unit_of_measurement': <UnitOfPressure.PSI: 'psi'>,
}) })
# --- # ---
@ -2679,7 +2679,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'vehicle_state_tpms_pressure_rl', 'translation_key': 'vehicle_state_tpms_pressure_rl',
'unique_id': 'VINVINVIN-vehicle_state_tpms_pressure_rl', 'unique_id': 'LRWXF7EK4KC700000-vehicle_state_tpms_pressure_rl',
'unit_of_measurement': <UnitOfPressure.PSI: 'psi'>, 'unit_of_measurement': <UnitOfPressure.PSI: 'psi'>,
}) })
# --- # ---
@ -2752,7 +2752,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'vehicle_state_tpms_pressure_rr', 'translation_key': 'vehicle_state_tpms_pressure_rr',
'unique_id': 'VINVINVIN-vehicle_state_tpms_pressure_rr', 'unique_id': 'LRWXF7EK4KC700000-vehicle_state_tpms_pressure_rr',
'unit_of_measurement': <UnitOfPressure.PSI: 'psi'>, 'unit_of_measurement': <UnitOfPressure.PSI: 'psi'>,
}) })
# --- # ---
@ -2819,7 +2819,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'drive_state_active_route_traffic_minutes_delay', 'translation_key': 'drive_state_active_route_traffic_minutes_delay',
'unique_id': 'VINVINVIN-drive_state_active_route_traffic_minutes_delay', 'unique_id': 'LRWXF7EK4KC700000-drive_state_active_route_traffic_minutes_delay',
'unit_of_measurement': <UnitOfTime.MINUTES: 'min'>, 'unit_of_measurement': <UnitOfTime.MINUTES: 'min'>,
}) })
# --- # ---
@ -2886,7 +2886,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'charge_state_usable_battery_level', 'translation_key': 'charge_state_usable_battery_level',
'unique_id': 'VINVINVIN-charge_state_usable_battery_level', 'unique_id': 'LRWXF7EK4KC700000-charge_state_usable_battery_level',
'unit_of_measurement': '%', 'unit_of_measurement': '%',
}) })
# --- # ---

View File

@ -122,7 +122,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'climate_state_auto_seat_climate_left', 'translation_key': 'climate_state_auto_seat_climate_left',
'unique_id': 'VINVINVIN-climate_state_auto_seat_climate_left', 'unique_id': 'LRWXF7EK4KC700000-climate_state_auto_seat_climate_left',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -169,7 +169,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'climate_state_auto_seat_climate_right', 'translation_key': 'climate_state_auto_seat_climate_right',
'unique_id': 'VINVINVIN-climate_state_auto_seat_climate_right', 'unique_id': 'LRWXF7EK4KC700000-climate_state_auto_seat_climate_right',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -216,7 +216,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'climate_state_auto_steering_wheel_heat', 'translation_key': 'climate_state_auto_steering_wheel_heat',
'unique_id': 'VINVINVIN-climate_state_auto_steering_wheel_heat', 'unique_id': 'LRWXF7EK4KC700000-climate_state_auto_steering_wheel_heat',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -263,7 +263,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'charge_state_user_charge_enable_request', 'translation_key': 'charge_state_user_charge_enable_request',
'unique_id': 'VINVINVIN-charge_state_user_charge_enable_request', 'unique_id': 'LRWXF7EK4KC700000-charge_state_user_charge_enable_request',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -310,7 +310,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'climate_state_defrost_mode', 'translation_key': 'climate_state_defrost_mode',
'unique_id': 'VINVINVIN-climate_state_defrost_mode', 'unique_id': 'LRWXF7EK4KC700000-climate_state_defrost_mode',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -357,7 +357,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': 'vehicle_state_sentry_mode', 'translation_key': 'vehicle_state_sentry_mode',
'unique_id': 'VINVINVIN-vehicle_state_sentry_mode', 'unique_id': 'LRWXF7EK4KC700000-vehicle_state_sentry_mode',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---

View File

@ -28,7 +28,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': <UpdateEntityFeature: 5>, 'supported_features': <UpdateEntityFeature: 5>,
'translation_key': 'vehicle_state_software_update_status', 'translation_key': 'vehicle_state_software_update_status',
'unique_id': 'VINVINVIN-vehicle_state_software_update_status', 'unique_id': 'LRWXF7EK4KC700000-vehicle_state_software_update_status',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
@ -84,7 +84,7 @@
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': <UpdateEntityFeature: 4>, 'supported_features': <UpdateEntityFeature: 4>,
'translation_key': 'vehicle_state_software_update_status', 'translation_key': 'vehicle_state_software_update_status',
'unique_id': 'VINVINVIN-vehicle_state_software_update_status', 'unique_id': 'LRWXF7EK4KC700000-vehicle_state_software_update_status',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---

View File

@ -1,4 +1,4 @@
"""Test the Tessie init.""" """Test the Teslemetry init."""
from freezegun.api import FrozenDateTimeFactory from freezegun.api import FrozenDateTimeFactory
import pytest import pytest
@ -10,7 +10,10 @@ from tesla_fleet_api.exceptions import (
VehicleOffline, VehicleOffline,
) )
from homeassistant.components.teslemetry.coordinator import VEHICLE_INTERVAL from homeassistant.components.teslemetry.coordinator import (
VEHICLE_INTERVAL,
VEHICLE_WAIT,
)
from homeassistant.components.teslemetry.models import TeslemetryData from homeassistant.components.teslemetry.models import TeslemetryData
from homeassistant.config_entries import ConfigEntryState from homeassistant.config_entries import ConfigEntryState
from homeassistant.const import Platform from homeassistant.const import Platform
@ -18,6 +21,7 @@ from homeassistant.core import HomeAssistant
from homeassistant.helpers import device_registry as dr from homeassistant.helpers import device_registry as dr
from . import setup_platform from . import setup_platform
from .const import VEHICLE_DATA_ALT
from tests.common import async_fire_time_changed from tests.common import async_fire_time_changed
@ -90,6 +94,63 @@ async def test_vehicle_refresh_error(
assert entry.state is state assert entry.state is state
async def test_vehicle_sleep(
hass: HomeAssistant, mock_vehicle_data, freezer: FrozenDateTimeFactory
) -> None:
"""Test coordinator refresh with an error."""
await setup_platform(hass, [Platform.CLIMATE])
assert mock_vehicle_data.call_count == 1
freezer.tick(VEHICLE_WAIT + VEHICLE_INTERVAL)
async_fire_time_changed(hass)
# Let vehicle sleep, no updates for 15 minutes
await hass.async_block_till_done()
assert mock_vehicle_data.call_count == 2
freezer.tick(VEHICLE_INTERVAL)
async_fire_time_changed(hass)
# No polling, call_count should not increase
await hass.async_block_till_done()
assert mock_vehicle_data.call_count == 2
freezer.tick(VEHICLE_INTERVAL)
async_fire_time_changed(hass)
# No polling, call_count should not increase
await hass.async_block_till_done()
assert mock_vehicle_data.call_count == 2
freezer.tick(VEHICLE_WAIT)
async_fire_time_changed(hass)
# Vehicle didn't sleep, go back to normal
await hass.async_block_till_done()
assert mock_vehicle_data.call_count == 3
freezer.tick(VEHICLE_INTERVAL)
async_fire_time_changed(hass)
# Regular polling
await hass.async_block_till_done()
assert mock_vehicle_data.call_count == 4
mock_vehicle_data.return_value = VEHICLE_DATA_ALT
freezer.tick(VEHICLE_INTERVAL)
async_fire_time_changed(hass)
# Vehicle active
await hass.async_block_till_done()
assert mock_vehicle_data.call_count == 5
freezer.tick(VEHICLE_WAIT)
async_fire_time_changed(hass)
# Dont let sleep when active
await hass.async_block_till_done()
assert mock_vehicle_data.call_count == 6
freezer.tick(VEHICLE_WAIT)
async_fire_time_changed(hass)
# Dont let sleep when active
await hass.async_block_till_done()
assert mock_vehicle_data.call_count == 7
# Test Energy Live Coordinator # Test Energy Live Coordinator
@pytest.mark.parametrize(("side_effect", "state"), ERRORS) @pytest.mark.parametrize(("side_effect", "state"), ERRORS)
async def test_energy_live_refresh_error( async def test_energy_live_refresh_error(