diff --git a/homeassistant/components/deconz/alarm_control_panel.py b/homeassistant/components/deconz/alarm_control_panel.py
index 4401d66c07b..e1fb0757b12 100644
--- a/homeassistant/components/deconz/alarm_control_panel.py
+++ b/homeassistant/components/deconz/alarm_control_panel.py
@@ -80,9 +80,7 @@ async def async_setup_entry(
     )
 
 
-class DeconzAlarmControlPanel(
-    DeconzDevice[AncillaryControl], AlarmControlPanelEntity  # type: ignore[type-var]
-):
+class DeconzAlarmControlPanel(DeconzDevice[AncillaryControl], AlarmControlPanelEntity):
     """Representation of a deCONZ alarm control panel."""
 
     TYPE = DOMAIN
diff --git a/homeassistant/components/deconz/binary_sensor.py b/homeassistant/components/deconz/binary_sensor.py
index 22fa29510bc..a7dbc2eacff 100644
--- a/homeassistant/components/deconz/binary_sensor.py
+++ b/homeassistant/components/deconz/binary_sensor.py
@@ -233,9 +233,7 @@ async def async_setup_entry(
     )
 
 
-class DeconzBinarySensor(
-    DeconzDevice[SensorResources], BinarySensorEntity  # type: ignore[type-var]
-):
+class DeconzBinarySensor(DeconzDevice[SensorResources], BinarySensorEntity):
     """Representation of a deCONZ binary sensor."""
 
     TYPE = DOMAIN
diff --git a/homeassistant/components/deconz/climate.py b/homeassistant/components/deconz/climate.py
index e3d1dcd4518..e49918e14f2 100644
--- a/homeassistant/components/deconz/climate.py
+++ b/homeassistant/components/deconz/climate.py
@@ -92,9 +92,7 @@ async def async_setup_entry(
     )
 
 
-class DeconzThermostat(
-    DeconzDevice[Thermostat], ClimateEntity  # type: ignore[type-var]
-):
+class DeconzThermostat(DeconzDevice[Thermostat], ClimateEntity):
     """Representation of a deCONZ thermostat."""
 
     TYPE = DOMAIN
diff --git a/homeassistant/components/deconz/cover.py b/homeassistant/components/deconz/cover.py
index 50a94b55eb3..8df974cf146 100644
--- a/homeassistant/components/deconz/cover.py
+++ b/homeassistant/components/deconz/cover.py
@@ -49,7 +49,7 @@ async def async_setup_entry(
     )
 
 
-class DeconzCover(DeconzDevice[Cover], CoverEntity):  # type: ignore[type-var]
+class DeconzCover(DeconzDevice[Cover], CoverEntity):
     """Representation of a deCONZ cover."""
 
     TYPE = DOMAIN
diff --git a/homeassistant/components/deconz/deconz_device.py b/homeassistant/components/deconz/deconz_device.py
index 7baf88267ff..eca2e63b55d 100644
--- a/homeassistant/components/deconz/deconz_device.py
+++ b/homeassistant/components/deconz/deconz_device.py
@@ -2,7 +2,7 @@
 
 from __future__ import annotations
 
-from typing import Generic, TypeVar
+from typing import TYPE_CHECKING, Generic, TypeVar, Union
 
 from pydeconz.models.group import Group as PydeconzGroup
 from pydeconz.models.light import LightBase as PydeconzLightBase
@@ -18,7 +18,13 @@ from .const import DOMAIN as DECONZ_DOMAIN
 from .gateway import DeconzGateway
 
 _DeviceTypeT = TypeVar(
-    "_DeviceTypeT", PydeconzGroup, PydeconzLightBase, PydeconzScene, PydeconzSensorBase
+    "_DeviceTypeT",
+    bound=Union[
+        PydeconzGroup,
+        PydeconzLightBase,
+        PydeconzSensorBase,
+        PydeconzScene,
+    ],
 )
 
 
@@ -37,13 +43,19 @@ class DeconzBase(Generic[_DeviceTypeT]):
     @property
     def unique_id(self) -> str:
         """Return a unique identifier for this device."""
-        assert not isinstance(self._device, PydeconzScene)
+        if TYPE_CHECKING:
+            assert isinstance(
+                self._device, (PydeconzGroup, PydeconzLightBase, PydeconzSensorBase)
+            )
         return self._device.unique_id
 
     @property
     def serial(self) -> str | None:
         """Return a serial number for this device."""
-        assert not isinstance(self._device, PydeconzScene)
+        if TYPE_CHECKING:
+            assert isinstance(
+                self._device, (PydeconzGroup, PydeconzLightBase, PydeconzSensorBase)
+            )
         if not self._device.unique_id or self._device.unique_id.count(":") != 7:
             return None
         return self._device.unique_id.split("-", 1)[0]
@@ -51,7 +63,10 @@ class DeconzBase(Generic[_DeviceTypeT]):
     @property
     def device_info(self) -> DeviceInfo | None:
         """Return a device description for device registry."""
-        assert not isinstance(self._device, PydeconzScene)
+        if TYPE_CHECKING:
+            assert isinstance(
+                self._device, (PydeconzGroup, PydeconzLightBase, PydeconzSensorBase)
+            )
         if self.serial is None:
             return None
 
@@ -79,7 +94,7 @@ class DeconzDevice(DeconzBase[_DeviceTypeT], Entity):
         gateway: DeconzGateway,
     ) -> None:
         """Set up device and add update callback to get data from websocket."""
-        super().__init__(device, gateway)  # type: ignore[arg-type]
+        super().__init__(device, gateway)
         self.gateway.entities[self.TYPE].add(self.unique_id)
 
         self._attr_name = self._device.name
@@ -120,6 +135,10 @@ class DeconzDevice(DeconzBase[_DeviceTypeT], Entity):
         """Return True if device is available."""
         if isinstance(self._device, PydeconzScene):
             return self.gateway.available
+        if TYPE_CHECKING:
+            assert isinstance(
+                self._device, (PydeconzGroup, PydeconzLightBase, PydeconzSensorBase)
+            )
         return self.gateway.available and self._device.reachable
 
 
diff --git a/homeassistant/components/deconz/fan.py b/homeassistant/components/deconz/fan.py
index 36b16241809..a0d62126b92 100644
--- a/homeassistant/components/deconz/fan.py
+++ b/homeassistant/components/deconz/fan.py
@@ -49,7 +49,7 @@ async def async_setup_entry(
     )
 
 
-class DeconzFan(DeconzDevice[Light], FanEntity):  # type: ignore[type-var]
+class DeconzFan(DeconzDevice[Light], FanEntity):
     """Representation of a deCONZ fan."""
 
     TYPE = DOMAIN
diff --git a/homeassistant/components/deconz/light.py b/homeassistant/components/deconz/light.py
index f8d4012e273..031ec2f4762 100644
--- a/homeassistant/components/deconz/light.py
+++ b/homeassistant/components/deconz/light.py
@@ -1,7 +1,7 @@
 """Support for deCONZ lights."""
 from __future__ import annotations
 
-from typing import Any, TypedDict, TypeVar
+from typing import Any, TypedDict, TypeVar, Union
 
 from pydeconz.interfaces.groups import GroupHandler
 from pydeconz.interfaces.lights import LightHandler
@@ -47,7 +47,7 @@ DECONZ_TO_COLOR_MODE = {
     LightColorMode.XY: ColorMode.XY,
 }
 
-_LightDeviceTypeT = TypeVar("_LightDeviceTypeT", Group, Light)
+_LightDeviceTypeT = TypeVar("_LightDeviceTypeT", bound=Union[Group, Light])
 
 
 class SetStateAttributes(TypedDict, total=False):
@@ -121,16 +121,14 @@ async def async_setup_entry(
     )
 
 
-class DeconzBaseLight(
-    DeconzDevice[_LightDeviceTypeT], LightEntity  # type: ignore[type-var]
-):
+class DeconzBaseLight(DeconzDevice[_LightDeviceTypeT], LightEntity):
     """Representation of a deCONZ light."""
 
     TYPE = DOMAIN
 
     def __init__(self, device: _LightDeviceTypeT, gateway: DeconzGateway) -> None:
         """Set up light."""
-        super().__init__(device, gateway)  # type: ignore[arg-type]
+        super().__init__(device, gateway)
 
         self.api: GroupHandler | LightHandler
         if isinstance(self._device, Light):
diff --git a/homeassistant/components/deconz/lock.py b/homeassistant/components/deconz/lock.py
index 4e33c1b5112..f87593cc5d1 100644
--- a/homeassistant/components/deconz/lock.py
+++ b/homeassistant/components/deconz/lock.py
@@ -2,7 +2,7 @@
 
 from __future__ import annotations
 
-from typing import Any, TypeVar
+from typing import Any, TypeVar, Union
 
 from pydeconz.models.event import EventType
 from pydeconz.models.light.lock import Lock
@@ -16,7 +16,7 @@ from homeassistant.helpers.entity_platform import AddEntitiesCallback
 from .deconz_device import DeconzDevice
 from .gateway import get_gateway_from_config_entry
 
-_LockDeviceTypeT = TypeVar("_LockDeviceTypeT", DoorLock, Lock)
+_LockDeviceTypeT = TypeVar("_LockDeviceTypeT", bound=Union[DoorLock, Lock])
 
 
 async def async_setup_entry(
@@ -52,7 +52,7 @@ async def async_setup_entry(
     )
 
 
-class DeconzLock(DeconzDevice[_LockDeviceTypeT], LockEntity):  # type: ignore[type-var]
+class DeconzLock(DeconzDevice[_LockDeviceTypeT], LockEntity):
     """Representation of a deCONZ lock."""
 
     TYPE = DOMAIN
diff --git a/homeassistant/components/deconz/number.py b/homeassistant/components/deconz/number.py
index d2958046318..636711d609d 100644
--- a/homeassistant/components/deconz/number.py
+++ b/homeassistant/components/deconz/number.py
@@ -81,7 +81,7 @@ async def async_setup_entry(
     )
 
 
-class DeconzNumber(DeconzDevice[Presence], NumberEntity):  # type: ignore[type-var]
+class DeconzNumber(DeconzDevice[Presence], NumberEntity):
     """Representation of a deCONZ number entity."""
 
     TYPE = DOMAIN
diff --git a/homeassistant/components/deconz/sensor.py b/homeassistant/components/deconz/sensor.py
index 81d1e01a375..941729ac8c2 100644
--- a/homeassistant/components/deconz/sensor.py
+++ b/homeassistant/components/deconz/sensor.py
@@ -273,9 +273,7 @@ async def async_setup_entry(
     )
 
 
-class DeconzSensor(
-    DeconzDevice[SensorResources], SensorEntity  # type: ignore[type-var]
-):
+class DeconzSensor(DeconzDevice[SensorResources], SensorEntity):
     """Representation of a deCONZ sensor."""
 
     TYPE = DOMAIN
diff --git a/homeassistant/components/deconz/siren.py b/homeassistant/components/deconz/siren.py
index e2de8a1d3e5..45c81c9e31c 100644
--- a/homeassistant/components/deconz/siren.py
+++ b/homeassistant/components/deconz/siren.py
@@ -41,7 +41,7 @@ async def async_setup_entry(
     )
 
 
-class DeconzSiren(DeconzDevice[Siren], SirenEntity):  # type: ignore[type-var]
+class DeconzSiren(DeconzDevice[Siren], SirenEntity):
     """Representation of a deCONZ siren."""
 
     TYPE = DOMAIN
diff --git a/homeassistant/components/deconz/switch.py b/homeassistant/components/deconz/switch.py
index b90509fd911..990de24dffc 100644
--- a/homeassistant/components/deconz/switch.py
+++ b/homeassistant/components/deconz/switch.py
@@ -43,7 +43,7 @@ async def async_setup_entry(
     )
 
 
-class DeconzPowerPlug(DeconzDevice[Light], SwitchEntity):  # type: ignore[type-var]
+class DeconzPowerPlug(DeconzDevice[Light], SwitchEntity):
     """Representation of a deCONZ power plug."""
 
     TYPE = DOMAIN