diff --git a/.strict-typing b/.strict-typing
index 8e957faabf08a10dac6a5d6ba08f112728146523..18dc1be41eb868e73cf3da0e39208b33dfe890c4 100644
--- a/.strict-typing
+++ b/.strict-typing
@@ -112,6 +112,7 @@ homeassistant.components.tautulli.*
 homeassistant.components.tcp.*
 homeassistant.components.tile.*
 homeassistant.components.tplink.*
+homeassistant.components.tractive.*
 homeassistant.components.tradfri.*
 homeassistant.components.tts.*
 homeassistant.components.upcloud.*
diff --git a/homeassistant/components/tractive/__init__.py b/homeassistant/components/tractive/__init__.py
index be612ef5cc756e2d27cc719294893aee59c55c62..be9f2b317d2c28dfbf00ac3c63963f69b8dacd06 100644
--- a/homeassistant/components/tractive/__init__.py
+++ b/homeassistant/components/tractive/__init__.py
@@ -4,6 +4,7 @@ from __future__ import annotations
 import asyncio
 from dataclasses import dataclass
 import logging
+from typing import Any, Final, List, cast
 
 import aiotractive
 
@@ -15,7 +16,7 @@ from homeassistant.const import (
     CONF_PASSWORD,
     EVENT_HOMEASSISTANT_STOP,
 )
-from homeassistant.core import HomeAssistant
+from homeassistant.core import Event, HomeAssistant
 from homeassistant.exceptions import ConfigEntryAuthFailed, ConfigEntryNotReady
 from homeassistant.helpers.aiohttp_client import async_get_clientsession
 from homeassistant.helpers.dispatcher import async_dispatcher_send
@@ -36,10 +37,10 @@ from .const import (
     TRACKER_POSITION_UPDATED,
 )
 
-PLATFORMS = ["binary_sensor", "device_tracker", "sensor", "switch"]
+PLATFORMS: Final = ["binary_sensor", "device_tracker", "sensor", "switch"]
 
 
-_LOGGER = logging.getLogger(__name__)
+_LOGGER: Final = logging.getLogger(__name__)
 
 
 @dataclass
@@ -92,7 +93,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
 
     hass.config_entries.async_setup_platforms(entry, PLATFORMS)
 
-    async def cancel_listen_task(_):
+    async def cancel_listen_task(_: Event) -> None:
         await tractive.unsubscribe()
 
     entry.async_on_unload(
@@ -102,13 +103,16 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
     return True
 
 
-async def _generate_trackables(client, trackable):
+async def _generate_trackables(
+    client: aiotractive.Tractive,
+    trackable: aiotractive.trackable_object.TrackableObject,
+) -> Trackables | None:
     """Generate trackables."""
     trackable = await trackable.details()
 
     # Check that the pet has tracker linked.
     if not trackable["device_id"]:
-        return
+        return None
 
     tracker = client.tracker(trackable["device_id"])
 
@@ -132,37 +136,44 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
 class TractiveClient:
     """A Tractive client."""
 
-    def __init__(self, hass, client, user_id):
+    def __init__(
+        self, hass: HomeAssistant, client: aiotractive.Tractive, user_id: str
+    ) -> None:
         """Initialize the client."""
         self._hass = hass
         self._client = client
         self._user_id = user_id
-        self._listen_task = None
+        self._listen_task: asyncio.Task | None = None
 
     @property
-    def user_id(self):
+    def user_id(self) -> str:
         """Return user id."""
         return self._user_id
 
-    async def trackable_objects(self):
+    async def trackable_objects(
+        self,
+    ) -> list[aiotractive.trackable_object.TrackableObject]:
         """Get list of trackable objects."""
-        return await self._client.trackable_objects()
+        return cast(
+            List[aiotractive.trackable_object.TrackableObject],
+            await self._client.trackable_objects(),
+        )
 
-    def tracker(self, tracker_id):
+    def tracker(self, tracker_id: str) -> aiotractive.tracker.Tracker:
         """Get tracker by id."""
         return self._client.tracker(tracker_id)
 
-    def subscribe(self):
+    def subscribe(self) -> None:
         """Start event listener coroutine."""
         self._listen_task = asyncio.create_task(self._listen())
 
-    async def unsubscribe(self):
+    async def unsubscribe(self) -> None:
         """Stop event listener coroutine."""
         if self._listen_task:
             self._listen_task.cancel()
         await self._client.close()
 
-    async def _listen(self):
+    async def _listen(self) -> None:
         server_was_unavailable = False
         while True:
             try:
@@ -191,7 +202,7 @@ class TractiveClient:
                 server_was_unavailable = True
                 continue
 
-    def _send_hardware_update(self, event):
+    def _send_hardware_update(self, event: dict[str, Any]) -> None:
         # Sometimes hardware event doesn't contain complete data.
         payload = {
             ATTR_BATTERY_LEVEL: event["hardware"]["battery_level"],
@@ -204,7 +215,7 @@ class TractiveClient:
             TRACKER_HARDWARE_STATUS_UPDATED, event["tracker_id"], payload
         )
 
-    def _send_activity_update(self, event):
+    def _send_activity_update(self, event: dict[str, Any]) -> None:
         payload = {
             ATTR_MINUTES_ACTIVE: event["progress"]["achieved_minutes"],
             ATTR_DAILY_GOAL: event["progress"]["goal_minutes"],
@@ -213,7 +224,7 @@ class TractiveClient:
             TRACKER_ACTIVITY_STATUS_UPDATED, event["pet_id"], payload
         )
 
-    def _send_position_update(self, event):
+    def _send_position_update(self, event: dict[str, Any]) -> None:
         payload = {
             "latitude": event["position"]["latlong"][0],
             "longitude": event["position"]["latlong"][1],
@@ -223,7 +234,9 @@ class TractiveClient:
             TRACKER_POSITION_UPDATED, event["tracker_id"], payload
         )
 
-    def _dispatch_tracker_event(self, event_name, tracker_id, payload):
+    def _dispatch_tracker_event(
+        self, event_name: str, tracker_id: str, payload: dict[str, Any]
+    ) -> None:
         async_dispatcher_send(
             self._hass,
             f"{event_name}-{tracker_id}",
diff --git a/homeassistant/components/tractive/binary_sensor.py b/homeassistant/components/tractive/binary_sensor.py
index fd3a00c377d65d475e9f97fdd2436b43086f29d2..d9b41c83940c47e7ca73affe97a5a4b6b44e3c02 100644
--- a/homeassistant/components/tractive/binary_sensor.py
+++ b/homeassistant/components/tractive/binary_sensor.py
@@ -1,15 +1,20 @@
 """Support for Tractive binary sensors."""
 from __future__ import annotations
 
+from typing import Any, Final
+
 from homeassistant.components.binary_sensor import (
     DEVICE_CLASS_BATTERY_CHARGING,
     BinarySensorEntity,
     BinarySensorEntityDescription,
 )
+from homeassistant.config_entries import ConfigEntry
 from homeassistant.const import ATTR_BATTERY_CHARGING
-from homeassistant.core import callback
+from homeassistant.core import HomeAssistant, callback
 from homeassistant.helpers.dispatcher import async_dispatcher_connect
+from homeassistant.helpers.entity_platform import AddEntitiesCallback
 
+from . import Trackables
 from .const import (
     CLIENT,
     DOMAIN,
@@ -19,34 +24,36 @@ from .const import (
 )
 from .entity import TractiveEntity
 
-TRACKERS_WITH_BUILTIN_BATTERY = ("TRNJA4", "TRAXL1")
+TRACKERS_WITH_BUILTIN_BATTERY: Final = ("TRNJA4", "TRAXL1")
 
 
 class TractiveBinarySensor(TractiveEntity, BinarySensorEntity):
     """Tractive sensor."""
 
-    def __init__(self, user_id, trackable, tracker_details, unique_id, description):
+    def __init__(
+        self, user_id: str, item: Trackables, description: BinarySensorEntityDescription
+    ) -> None:
         """Initialize sensor entity."""
-        super().__init__(user_id, trackable, tracker_details)
+        super().__init__(user_id, item.trackable, item.tracker_details)
 
-        self._attr_name = f"{trackable['details']['name']} {description.name}"
-        self._attr_unique_id = unique_id
+        self._attr_name = f"{item.trackable['details']['name']} {description.name}"
+        self._attr_unique_id = f"{item.trackable['_id']}_{description.key}"
         self.entity_description = description
 
     @callback
-    def handle_server_unavailable(self):
+    def handle_server_unavailable(self) -> None:
         """Handle server unavailable."""
         self._attr_available = False
         self.async_write_ha_state()
 
     @callback
-    def handle_hardware_status_update(self, event):
+    def handle_hardware_status_update(self, event: dict[str, Any]) -> None:
         """Handle hardware status update."""
         self._attr_is_on = event[self.entity_description.key]
         self._attr_available = True
         self.async_write_ha_state()
 
-    async def async_added_to_hass(self):
+    async def async_added_to_hass(self) -> None:
         """Handle entity which will be added."""
 
         self.async_on_remove(
@@ -66,31 +73,24 @@ class TractiveBinarySensor(TractiveEntity, BinarySensorEntity):
         )
 
 
-SENSOR_TYPE = BinarySensorEntityDescription(
+SENSOR_TYPE: Final = BinarySensorEntityDescription(
     key=ATTR_BATTERY_CHARGING,
     name="Battery Charging",
     device_class=DEVICE_CLASS_BATTERY_CHARGING,
 )
 
 
-async def async_setup_entry(hass, entry, async_add_entities):
+async def async_setup_entry(
+    hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
+) -> None:
     """Set up Tractive device trackers."""
     client = hass.data[DOMAIN][entry.entry_id][CLIENT]
     trackables = hass.data[DOMAIN][entry.entry_id][TRACKABLES]
 
-    entities = []
-
-    for item in trackables:
-        if item.tracker_details["model_number"] not in TRACKERS_WITH_BUILTIN_BATTERY:
-            continue
-        entities.append(
-            TractiveBinarySensor(
-                client.user_id,
-                item.trackable,
-                item.tracker_details,
-                f"{item.trackable['_id']}_{SENSOR_TYPE.key}",
-                SENSOR_TYPE,
-            )
-        )
+    entities = [
+        TractiveBinarySensor(client.user_id, item, SENSOR_TYPE)
+        for item in trackables
+        if item.tracker_details["model_number"] in TRACKERS_WITH_BUILTIN_BATTERY
+    ]
 
     async_add_entities(entities)
diff --git a/homeassistant/components/tractive/config_flow.py b/homeassistant/components/tractive/config_flow.py
index 4b1fc24111043d29782874204aa2ed64b7ad743c..f3b36ae3d03fc1888a0ab77f6559acbe944bf1e8 100644
--- a/homeassistant/components/tractive/config_flow.py
+++ b/homeassistant/components/tractive/config_flow.py
@@ -2,7 +2,7 @@
 from __future__ import annotations
 
 import logging
-from typing import Any
+from typing import Any, Final
 
 import aiotractive
 import voluptuous as vol
@@ -15,9 +15,9 @@ from homeassistant.exceptions import HomeAssistantError
 
 from .const import DOMAIN
 
-_LOGGER = logging.getLogger(__name__)
+_LOGGER: Final = logging.getLogger(__name__)
 
-USER_DATA_SCHEMA = vol.Schema(
+USER_DATA_SCHEMA: Final = vol.Schema(
     {vol.Required(CONF_EMAIL): str, vol.Required(CONF_PASSWORD): str}
 )
 
@@ -74,7 +74,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
         return await self.async_step_reauth_confirm()
 
     async def async_step_reauth_confirm(
-        self, user_input: dict[str, Any] = None
+        self, user_input: dict[str, Any] | None = None
     ) -> FlowResult:
         """Dialog that informs the user that reauth is required."""
 
diff --git a/homeassistant/components/tractive/const.py b/homeassistant/components/tractive/const.py
index 6a61024cd511a2ffd60e794142215c3dd5dc06ae..f0ee6b7813e79b5fbdaf9693598b0080005d1890 100644
--- a/homeassistant/components/tractive/const.py
+++ b/homeassistant/components/tractive/const.py
@@ -1,22 +1,23 @@
 """Constants for the tractive integration."""
 
 from datetime import timedelta
+from typing import Final
 
-DOMAIN = "tractive"
+DOMAIN: Final = "tractive"
 
-RECONNECT_INTERVAL = timedelta(seconds=10)
+RECONNECT_INTERVAL: Final = timedelta(seconds=10)
 
-ATTR_DAILY_GOAL = "daily_goal"
-ATTR_BUZZER = "buzzer"
-ATTR_LED = "led"
-ATTR_LIVE_TRACKING = "live_tracking"
-ATTR_MINUTES_ACTIVE = "minutes_active"
+ATTR_DAILY_GOAL: Final = "daily_goal"
+ATTR_BUZZER: Final = "buzzer"
+ATTR_LED: Final = "led"
+ATTR_LIVE_TRACKING: Final = "live_tracking"
+ATTR_MINUTES_ACTIVE: Final = "minutes_active"
 
-CLIENT = "client"
-TRACKABLES = "trackables"
+CLIENT: Final = "client"
+TRACKABLES: Final = "trackables"
 
-TRACKER_HARDWARE_STATUS_UPDATED = f"{DOMAIN}_tracker_hardware_status_updated"
-TRACKER_POSITION_UPDATED = f"{DOMAIN}_tracker_position_updated"
-TRACKER_ACTIVITY_STATUS_UPDATED = f"{DOMAIN}_tracker_activity_updated"
+TRACKER_HARDWARE_STATUS_UPDATED: Final = f"{DOMAIN}_tracker_hardware_status_updated"
+TRACKER_POSITION_UPDATED: Final = f"{DOMAIN}_tracker_position_updated"
+TRACKER_ACTIVITY_STATUS_UPDATED: Final = f"{DOMAIN}_tracker_activity_updated"
 
-SERVER_UNAVAILABLE = f"{DOMAIN}_server_unavailable"
+SERVER_UNAVAILABLE: Final = f"{DOMAIN}_server_unavailable"
diff --git a/homeassistant/components/tractive/device_tracker.py b/homeassistant/components/tractive/device_tracker.py
index 1e35e41fc8a6d298689ebdeb039487461091af7a..a4109eee71c4a32556365f704d2adbd230e33617 100644
--- a/homeassistant/components/tractive/device_tracker.py
+++ b/homeassistant/components/tractive/device_tracker.py
@@ -1,12 +1,16 @@
 """Support for Tractive device trackers."""
+from __future__ import annotations
 
-import logging
+from typing import Any
 
 from homeassistant.components.device_tracker import SOURCE_TYPE_GPS
 from homeassistant.components.device_tracker.config_entry import TrackerEntity
-from homeassistant.core import callback
+from homeassistant.config_entries import ConfigEntry
+from homeassistant.core import HomeAssistant, callback
 from homeassistant.helpers.dispatcher import async_dispatcher_connect
+from homeassistant.helpers.entity_platform import AddEntitiesCallback
 
+from . import Trackables
 from .const import (
     CLIENT,
     DOMAIN,
@@ -17,26 +21,15 @@ from .const import (
 )
 from .entity import TractiveEntity
 
-_LOGGER = logging.getLogger(__name__)
 
-
-async def async_setup_entry(hass, entry, async_add_entities):
+async def async_setup_entry(
+    hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
+) -> None:
     """Set up Tractive device trackers."""
     client = hass.data[DOMAIN][entry.entry_id][CLIENT]
     trackables = hass.data[DOMAIN][entry.entry_id][TRACKABLES]
 
-    entities = []
-
-    for item in trackables:
-        entities.append(
-            TractiveDeviceTracker(
-                client.user_id,
-                item.trackable,
-                item.tracker_details,
-                item.hw_info,
-                item.pos_report,
-            )
-        )
+    entities = [TractiveDeviceTracker(client.user_id, item) for item in trackables]
 
     async_add_entities(entities)
 
@@ -46,51 +39,51 @@ class TractiveDeviceTracker(TractiveEntity, TrackerEntity):
 
     _attr_icon = "mdi:paw"
 
-    def __init__(self, user_id, trackable, tracker_details, hw_info, pos_report):
+    def __init__(self, user_id: str, item: Trackables) -> None:
         """Initialize tracker entity."""
-        super().__init__(user_id, trackable, tracker_details)
+        super().__init__(user_id, item.trackable, item.tracker_details)
 
-        self._battery_level = hw_info["battery_level"]
-        self._latitude = pos_report["latlong"][0]
-        self._longitude = pos_report["latlong"][1]
-        self._accuracy = pos_report["pos_uncertainty"]
+        self._battery_level: int = item.hw_info["battery_level"]
+        self._latitude: float = item.pos_report["latlong"][0]
+        self._longitude: float = item.pos_report["latlong"][1]
+        self._accuracy: int = item.pos_report["pos_uncertainty"]
 
-        self._attr_name = f"{self._tracker_id} {trackable['details']['name']}"
-        self._attr_unique_id = trackable["_id"]
+        self._attr_name = f"{self._tracker_id} {item.trackable['details']['name']}"
+        self._attr_unique_id = item.trackable["_id"]
 
     @property
-    def source_type(self):
+    def source_type(self) -> str:
         """Return the source type, eg gps or router, of the device."""
         return SOURCE_TYPE_GPS
 
     @property
-    def latitude(self):
+    def latitude(self) -> float:
         """Return latitude value of the device."""
         return self._latitude
 
     @property
-    def longitude(self):
+    def longitude(self) -> float:
         """Return longitude value of the device."""
         return self._longitude
 
     @property
-    def location_accuracy(self):
+    def location_accuracy(self) -> int:
         """Return the gps accuracy of the device."""
         return self._accuracy
 
     @property
-    def battery_level(self):
+    def battery_level(self) -> int:
         """Return the battery level of the device."""
         return self._battery_level
 
     @callback
-    def _handle_hardware_status_update(self, event):
+    def _handle_hardware_status_update(self, event: dict[str, Any]) -> None:
         self._battery_level = event["battery_level"]
         self._attr_available = True
         self.async_write_ha_state()
 
     @callback
-    def _handle_position_update(self, event):
+    def _handle_position_update(self, event: dict[str, Any]) -> None:
         self._latitude = event["latitude"]
         self._longitude = event["longitude"]
         self._accuracy = event["accuracy"]
@@ -98,15 +91,11 @@ class TractiveDeviceTracker(TractiveEntity, TrackerEntity):
         self.async_write_ha_state()
 
     @callback
-    def _handle_server_unavailable(self):
-        self._latitude = None
-        self._longitude = None
-        self._accuracy = None
-        self._battery_level = None
+    def _handle_server_unavailable(self) -> None:
         self._attr_available = False
         self.async_write_ha_state()
 
-    async def async_added_to_hass(self):
+    async def async_added_to_hass(self) -> None:
         """Handle entity which will be added."""
 
         self.async_on_remove(
diff --git a/homeassistant/components/tractive/entity.py b/homeassistant/components/tractive/entity.py
index 4ddc7f7aa35887e2053e0adbf42c31cddc846591..ffc84fc9788e33656ea89f394435c47f8ba4ebd8 100644
--- a/homeassistant/components/tractive/entity.py
+++ b/homeassistant/components/tractive/entity.py
@@ -1,4 +1,7 @@
 """A entity class for Tractive integration."""
+from __future__ import annotations
+
+from typing import Any
 
 from homeassistant.helpers.entity import Entity
 
@@ -8,7 +11,9 @@ from .const import DOMAIN
 class TractiveEntity(Entity):
     """Tractive entity class."""
 
-    def __init__(self, user_id, trackable, tracker_details):
+    def __init__(
+        self, user_id: str, trackable: dict[str, Any], tracker_details: dict[str, Any]
+    ) -> None:
         """Initialize tracker entity."""
         self._attr_device_info = {
             "identifiers": {(DOMAIN, tracker_details["_id"])},
diff --git a/homeassistant/components/tractive/sensor.py b/homeassistant/components/tractive/sensor.py
index 9fd8ee6ac5f8b02af2f340ca8a1059cb8154d818..b7025b3555b9c6abe672c69e18a6bd19451486e0 100644
--- a/homeassistant/components/tractive/sensor.py
+++ b/homeassistant/components/tractive/sensor.py
@@ -2,17 +2,21 @@
 from __future__ import annotations
 
 from dataclasses import dataclass
+from typing import Any, Final
 
 from homeassistant.components.sensor import SensorEntity, SensorEntityDescription
+from homeassistant.config_entries import ConfigEntry
 from homeassistant.const import (
     ATTR_BATTERY_LEVEL,
     DEVICE_CLASS_BATTERY,
     PERCENTAGE,
     TIME_MINUTES,
 )
-from homeassistant.core import callback
+from homeassistant.core import HomeAssistant, callback
 from homeassistant.helpers.dispatcher import async_dispatcher_connect
+from homeassistant.helpers.entity_platform import AddEntitiesCallback
 
+from . import Trackables
 from .const import (
     ATTR_DAILY_GOAL,
     ATTR_MINUTES_ACTIVE,
@@ -27,25 +31,37 @@ from .entity import TractiveEntity
 
 
 @dataclass
-class TractiveSensorEntityDescription(SensorEntityDescription):
-    """Class describing Tractive sensor entities."""
+class TractiveRequiredKeysMixin:
+    """Mixin for required keys."""
+
+    entity_class: type[TractiveSensor]
+
 
-    entity_class: type[TractiveSensor] | None = None
+@dataclass
+class TractiveSensorEntityDescription(
+    SensorEntityDescription, TractiveRequiredKeysMixin
+):
+    """Class describing Tractive sensor entities."""
 
 
 class TractiveSensor(TractiveEntity, SensorEntity):
     """Tractive sensor."""
 
-    def __init__(self, user_id, trackable, tracker_details, unique_id, description):
+    def __init__(
+        self,
+        user_id: str,
+        item: Trackables,
+        description: TractiveSensorEntityDescription,
+    ) -> None:
         """Initialize sensor entity."""
-        super().__init__(user_id, trackable, tracker_details)
+        super().__init__(user_id, item.trackable, item.tracker_details)
 
-        self._attr_name = f"{trackable['details']['name']} {description.name}"
-        self._attr_unique_id = unique_id
+        self._attr_name = f"{item.trackable['details']['name']} {description.name}"
+        self._attr_unique_id = f"{item.trackable['_id']}_{description.key}"
         self.entity_description = description
 
     @callback
-    def handle_server_unavailable(self):
+    def handle_server_unavailable(self) -> None:
         """Handle server unavailable."""
         self._attr_available = False
         self.async_write_ha_state()
@@ -55,13 +71,13 @@ class TractiveHardwareSensor(TractiveSensor):
     """Tractive hardware sensor."""
 
     @callback
-    def handle_hardware_status_update(self, event):
+    def handle_hardware_status_update(self, event: dict[str, Any]) -> None:
         """Handle hardware status update."""
         self._attr_native_value = event[self.entity_description.key]
         self._attr_available = True
         self.async_write_ha_state()
 
-    async def async_added_to_hass(self):
+    async def async_added_to_hass(self) -> None:
         """Handle entity which will be added."""
 
         self.async_on_remove(
@@ -85,13 +101,13 @@ class TractiveActivitySensor(TractiveSensor):
     """Tractive active sensor."""
 
     @callback
-    def handle_activity_status_update(self, event):
+    def handle_activity_status_update(self, event: dict[str, Any]) -> None:
         """Handle activity status update."""
         self._attr_native_value = event[self.entity_description.key]
         self._attr_available = True
         self.async_write_ha_state()
 
-    async def async_added_to_hass(self):
+    async def async_added_to_hass(self) -> None:
         """Handle entity which will be added."""
 
         self.async_on_remove(
@@ -111,7 +127,7 @@ class TractiveActivitySensor(TractiveSensor):
         )
 
 
-SENSOR_TYPES = (
+SENSOR_TYPES: Final[tuple[TractiveSensorEntityDescription, ...]] = (
     TractiveSensorEntityDescription(
         key=ATTR_BATTERY_LEVEL,
         name="Battery Level",
@@ -136,23 +152,17 @@ SENSOR_TYPES = (
 )
 
 
-async def async_setup_entry(hass, entry, async_add_entities):
+async def async_setup_entry(
+    hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
+) -> None:
     """Set up Tractive device trackers."""
     client = hass.data[DOMAIN][entry.entry_id][CLIENT]
     trackables = hass.data[DOMAIN][entry.entry_id][TRACKABLES]
 
-    entities = []
-
-    for item in trackables:
-        for description in SENSOR_TYPES:
-            entities.append(
-                description.entity_class(
-                    client.user_id,
-                    item.trackable,
-                    item.tracker_details,
-                    f"{item.trackable['_id']}_{description.key}",
-                    description,
-                )
-            )
+    entities = [
+        description.entity_class(client.user_id, item, description)
+        for description in SENSOR_TYPES
+        for item in trackables
+    ]
 
     async_add_entities(entities)
diff --git a/homeassistant/components/tractive/switch.py b/homeassistant/components/tractive/switch.py
index d58e38a7cc93dac282ad303f08e007ad40aca900..6bc5ecb7b1beb1d7b1f31d7829670235996ba2c2 100644
--- a/homeassistant/components/tractive/switch.py
+++ b/homeassistant/components/tractive/switch.py
@@ -3,7 +3,7 @@ from __future__ import annotations
 
 from dataclasses import dataclass
 import logging
-from typing import Any, Literal
+from typing import Any, Final, Literal, cast
 
 from aiotractive.exceptions import TractiveError
 
@@ -26,7 +26,7 @@ from .const import (
 )
 from .entity import TractiveEntity
 
-_LOGGER = logging.getLogger(__name__)
+_LOGGER: Final = logging.getLogger(__name__)
 
 
 @dataclass
@@ -43,7 +43,7 @@ class TractiveSwitchEntityDescription(
     """Class describing Tractive switch entities."""
 
 
-SWITCH_TYPES: tuple[TractiveSwitchEntityDescription, ...] = (
+SWITCH_TYPES: Final[tuple[TractiveSwitchEntityDescription, ...]] = (
     TractiveSwitchEntityDescription(
         key=ATTR_BUZZER,
         name="Tracker Buzzer",
@@ -162,12 +162,14 @@ class TractiveSwitch(TractiveEntity, SwitchEntity):
 
     async def async_set_buzzer(self, active: bool) -> dict[str, Any]:
         """Set the buzzer on/off."""
-        return await self._tracker.set_buzzer_active(active)
+        return cast(dict[str, Any], await self._tracker.set_buzzer_active(active))
 
     async def async_set_led(self, active: bool) -> dict[str, Any]:
         """Set the LED on/off."""
-        return await self._tracker.set_led_active(active)
+        return cast(dict[str, Any], await self._tracker.set_led_active(active))
 
     async def async_set_live_tracking(self, active: bool) -> dict[str, Any]:
         """Set the live tracking on/off."""
-        return await self._tracker.set_live_tracking_active(active)
+        return cast(
+            dict[str, Any], await self._tracker.set_live_tracking_active(active)
+        )
diff --git a/mypy.ini b/mypy.ini
index 8f9e49702fc738a373a2fa4359d8eb32efd3c2f4..4e91295b597c02b95e62d89a328de46ea04839ee 100644
--- a/mypy.ini
+++ b/mypy.ini
@@ -1243,6 +1243,17 @@ no_implicit_optional = true
 warn_return_any = true
 warn_unreachable = true
 
+[mypy-homeassistant.components.tractive.*]
+check_untyped_defs = true
+disallow_incomplete_defs = true
+disallow_subclassing_any = true
+disallow_untyped_calls = true
+disallow_untyped_decorators = true
+disallow_untyped_defs = true
+no_implicit_optional = true
+warn_return_any = true
+warn_unreachable = true
+
 [mypy-homeassistant.components.tradfri.*]
 check_untyped_defs = true
 disallow_incomplete_defs = true