diff --git a/.coveragerc b/.coveragerc
index 1d291610bc18ed4c9bd55cafe83c4ca9280b14aa..511f30c507e8c467ce31f99b4e5c3a73c68d6e3c 100644
--- a/.coveragerc
+++ b/.coveragerc
@@ -709,6 +709,7 @@ omit =
     homeassistant/components/lupusec/__init__.py
     homeassistant/components/lupusec/alarm_control_panel.py
     homeassistant/components/lupusec/binary_sensor.py
+    homeassistant/components/lupusec/entity.py
     homeassistant/components/lupusec/switch.py
     homeassistant/components/lutron/__init__.py
     homeassistant/components/lutron/binary_sensor.py
diff --git a/homeassistant/components/lupusec/__init__.py b/homeassistant/components/lupusec/__init__.py
index b55c203b0e7c9c074aecd80f37b0b531327c6fd7..7493059e9e9effb1790e1abe50d97bf9d4c90130 100644
--- a/homeassistant/components/lupusec/__init__.py
+++ b/homeassistant/components/lupusec/__init__.py
@@ -17,7 +17,6 @@ from homeassistant.const import (
 from homeassistant.core import DOMAIN as HOMEASSISTANT_DOMAIN, HomeAssistant
 from homeassistant.data_entry_flow import FlowResultType
 from homeassistant.helpers import config_validation as cv
-from homeassistant.helpers.entity import Entity
 from homeassistant.helpers.issue_registry import IssueSeverity, async_create_issue
 from homeassistant.helpers.typing import ConfigType
 
@@ -139,21 +138,3 @@ class LupusecSystem:
     def __init__(self, username, password, ip_address) -> None:
         """Initialize the system."""
         self.lupusec = lupupy.Lupusec(username, password, ip_address)
-
-
-class LupusecDevice(Entity):
-    """Representation of a Lupusec device."""
-
-    def __init__(self, data, device) -> None:
-        """Initialize a sensor for Lupusec device."""
-        self._data = data
-        self._device = device
-
-    def update(self):
-        """Update automation state."""
-        self._device.refresh()
-
-    @property
-    def name(self):
-        """Return the name of the sensor."""
-        return self._device.name
diff --git a/homeassistant/components/lupusec/alarm_control_panel.py b/homeassistant/components/lupusec/alarm_control_panel.py
index 8dd2ecb8b9c03b79e7a3a3cdffbead1ef7bacacc..2a904c34410d600e660df747c86cf7f6af34f01d 100644
--- a/homeassistant/components/lupusec/alarm_control_panel.py
+++ b/homeassistant/components/lupusec/alarm_control_panel.py
@@ -15,9 +15,11 @@ from homeassistant.const import (
     STATE_ALARM_TRIGGERED,
 )
 from homeassistant.core import HomeAssistant
+from homeassistant.helpers.device_registry import DeviceInfo
 from homeassistant.helpers.entity_platform import AddEntitiesCallback
 
-from . import DOMAIN as LUPUSEC_DOMAIN, LupusecDevice
+from . import DOMAIN
+from .entity import LupusecDevice
 
 SCAN_INTERVAL = timedelta(seconds=2)
 
@@ -28,9 +30,11 @@ async def async_setup_entry(
     async_add_devices: AddEntitiesCallback,
 ) -> None:
     """Set up an alarm control panel for a Lupusec device."""
-    data = hass.data[LUPUSEC_DOMAIN][config_entry.entry_id]
+    data = hass.data[DOMAIN][config_entry.entry_id]
 
-    alarm_devices = [LupusecAlarm(data, data.lupusec.get_alarm())]
+    alarm_devices = [
+        LupusecAlarm(data, data.lupusec.get_alarm(), config_entry.entry_id)
+    ]
 
     async_add_devices(alarm_devices)
 
@@ -38,12 +42,24 @@ async def async_setup_entry(
 class LupusecAlarm(LupusecDevice, AlarmControlPanelEntity):
     """An alarm_control_panel implementation for Lupusec."""
 
+    _attr_name = None
     _attr_icon = "mdi:security"
     _attr_supported_features = (
         AlarmControlPanelEntityFeature.ARM_HOME
         | AlarmControlPanelEntityFeature.ARM_AWAY
     )
 
+    def __init__(self, data, device, entry_id) -> None:
+        """Initialize the LupusecAlarm class."""
+        super().__init__(data, device, entry_id)
+        self._attr_unique_id = entry_id
+        self._attr_device_info = DeviceInfo(
+            identifiers={(DOMAIN, entry_id)},
+            name=device.name,
+            manufacturer="Lupus Electronics",
+            model=f"Lupusec-XT{data.lupusec.model}",
+        )
+
     @property
     def state(self) -> str | None:
         """Return the state of the device."""
diff --git a/homeassistant/components/lupusec/binary_sensor.py b/homeassistant/components/lupusec/binary_sensor.py
index 0819d30e1fcd3c1472ff1abeedc8d7e9c6c9e7aa..06a07c070c6b953b8b332fa7724bbe6298042aec 100644
--- a/homeassistant/components/lupusec/binary_sensor.py
+++ b/homeassistant/components/lupusec/binary_sensor.py
@@ -14,7 +14,8 @@ from homeassistant.config_entries import ConfigEntry
 from homeassistant.core import HomeAssistant
 from homeassistant.helpers.entity_platform import AddEntitiesCallback
 
-from . import DOMAIN, LupusecDevice
+from . import DOMAIN
+from .entity import LupusecBaseSensor
 
 SCAN_INTERVAL = timedelta(seconds=2)
 
@@ -34,14 +35,16 @@ async def async_setup_entry(
 
     sensors = []
     for device in data.lupusec.get_devices(generic_type=device_types):
-        sensors.append(LupusecBinarySensor(data, device))
+        sensors.append(LupusecBinarySensor(data, device, config_entry.entry_id))
 
     async_add_devices(sensors)
 
 
-class LupusecBinarySensor(LupusecDevice, BinarySensorEntity):
+class LupusecBinarySensor(LupusecBaseSensor, BinarySensorEntity):
     """A binary sensor implementation for Lupusec device."""
 
+    _attr_name = None
+
     @property
     def is_on(self):
         """Return True if the binary sensor is on."""
diff --git a/homeassistant/components/lupusec/const.py b/homeassistant/components/lupusec/const.py
index 08aee7184409ab1517665849c664b27cb8469b3d..489d878306d43ed1768a192ad5647fa73c08e286 100644
--- a/homeassistant/components/lupusec/const.py
+++ b/homeassistant/components/lupusec/const.py
@@ -1,6 +1,39 @@
 """Constants for the Lupusec component."""
 
+from lupupy.constants import (
+    TYPE_CONTACT_XT,
+    TYPE_DOOR,
+    TYPE_INDOOR_SIREN_XT,
+    TYPE_KEYPAD_V2,
+    TYPE_OUTDOOR_SIREN_XT,
+    TYPE_POWER_SWITCH,
+    TYPE_POWER_SWITCH_1_XT,
+    TYPE_POWER_SWITCH_2_XT,
+    TYPE_SMOKE,
+    TYPE_SMOKE_XT,
+    TYPE_WATER,
+    TYPE_WATER_XT,
+    TYPE_WINDOW,
+)
+
 DOMAIN = "lupusec"
 
 INTEGRATION_TITLE = "Lupus Electronics LUPUSEC"
 ISSUE_PLACEHOLDER = {"url": "/config/integrations/dashboard/add?domain=lupusec"}
+
+
+TYPE_TRANSLATION = {
+    TYPE_WINDOW: "Fensterkontakt",
+    TYPE_DOOR: "Türkontakt",
+    TYPE_SMOKE: "Rauchmelder",
+    TYPE_WATER: "Wassermelder",
+    TYPE_POWER_SWITCH: "Steckdose",
+    TYPE_CONTACT_XT: "Fenster- / Türkontakt V2",
+    TYPE_WATER_XT: "Wassermelder V2",
+    TYPE_SMOKE_XT: "Rauchmelder V2",
+    TYPE_POWER_SWITCH_1_XT: "Funksteckdose",
+    TYPE_POWER_SWITCH_2_XT: "Funksteckdose V2",
+    TYPE_KEYPAD_V2: "Keypad V2",
+    TYPE_INDOOR_SIREN_XT: "Innensirene",
+    TYPE_OUTDOOR_SIREN_XT: "Außensirene V2",
+}
diff --git a/homeassistant/components/lupusec/entity.py b/homeassistant/components/lupusec/entity.py
new file mode 100644
index 0000000000000000000000000000000000000000..208a0edafaac005f83eae40a4c16816115120902
--- /dev/null
+++ b/homeassistant/components/lupusec/entity.py
@@ -0,0 +1,42 @@
+"""Provides the Lupusec entity for Home Assistant."""
+from homeassistant.helpers.device_registry import DeviceInfo
+from homeassistant.helpers.entity import Entity
+
+from .const import DOMAIN, TYPE_TRANSLATION
+
+
+class LupusecDevice(Entity):
+    """Representation of a Lupusec device."""
+
+    _attr_has_entity_name = True
+
+    def __init__(self, data, device, entry_id) -> None:
+        """Initialize a sensor for Lupusec device."""
+        self._data = data
+        self._device = device
+        self._attr_unique_id = device.device_id
+
+    def update(self):
+        """Update automation state."""
+        self._device.refresh()
+
+
+class LupusecBaseSensor(LupusecDevice):
+    """Lupusec Sensor base entity."""
+
+    def __init__(self, data, device, entry_id) -> None:
+        """Initialize the LupusecBaseSensor."""
+        super().__init__(data, device, entry_id)
+
+        self._attr_device_info = DeviceInfo(
+            identifiers={(DOMAIN, device.device_id)},
+            name=device.name,
+            manufacturer="Lupus Electronics",
+            serial_number=device.device_id,
+            model=TYPE_TRANSLATION.get(device.type, device.type),
+            via_device=(DOMAIN, entry_id),
+        )
+
+    def get_type_name(self):
+        """Return the type of the sensor."""
+        return TYPE_TRANSLATION.get(self._device.type, self._device.type)
diff --git a/homeassistant/components/lupusec/switch.py b/homeassistant/components/lupusec/switch.py
index 582d72b7cfec62b41c0eb74923e886a78680f039..7b87b2cac55a8e1bec09fc33667f6fd3d65683f3 100644
--- a/homeassistant/components/lupusec/switch.py
+++ b/homeassistant/components/lupusec/switch.py
@@ -11,7 +11,8 @@ from homeassistant.config_entries import ConfigEntry
 from homeassistant.core import HomeAssistant
 from homeassistant.helpers.entity_platform import AddEntitiesCallback
 
-from . import DOMAIN, LupusecDevice
+from . import DOMAIN
+from .entity import LupusecBaseSensor
 
 SCAN_INTERVAL = timedelta(seconds=2)
 
@@ -29,14 +30,16 @@ async def async_setup_entry(
 
     switches = []
     for device in data.lupusec.get_devices(generic_type=device_types):
-        switches.append(LupusecSwitch(data, device))
+        switches.append(LupusecSwitch(data, device, config_entry.entry_id))
 
     async_add_devices(switches)
 
 
-class LupusecSwitch(LupusecDevice, SwitchEntity):
+class LupusecSwitch(LupusecBaseSensor, SwitchEntity):
     """Representation of a Lupusec switch."""
 
+    _attr_name = None
+
     def turn_on(self, **kwargs: Any) -> None:
         """Turn on the device."""
         self._device.switch_on()