diff --git a/.coveragerc b/.coveragerc
index 5ba8575979d8cc04544117dfd32be5bae4449b92..e69683288a2a0d79a815e004e25b558e1125dc02 100644
--- a/.coveragerc
+++ b/.coveragerc
@@ -650,6 +650,7 @@ omit =
     homeassistant/components/lookin/light.py
     homeassistant/components/lookin/media_player.py
     homeassistant/components/lookin/sensor.py
+    homeassistant/components/loqed/sensor.py
     homeassistant/components/luci/device_tracker.py
     homeassistant/components/luftdaten/sensor.py
     homeassistant/components/lupusec/*
diff --git a/homeassistant/components/loqed/__init__.py b/homeassistant/components/loqed/__init__.py
index 1248c75612fb53127347fbb2b9a89009cdd3cc71..e6c69e0751e62919130e488b66f3c07e167d37fc 100644
--- a/homeassistant/components/loqed/__init__.py
+++ b/homeassistant/components/loqed/__init__.py
@@ -14,7 +14,7 @@ from homeassistant.helpers.aiohttp_client import async_get_clientsession
 from .const import DOMAIN
 from .coordinator import LoqedDataCoordinator
 
-PLATFORMS: list[str] = [Platform.LOCK]
+PLATFORMS: list[str] = [Platform.LOCK, Platform.SENSOR]
 
 
 _LOGGER = logging.getLogger(__name__)
diff --git a/homeassistant/components/loqed/sensor.py b/homeassistant/components/loqed/sensor.py
new file mode 100644
index 0000000000000000000000000000000000000000..ee4fa7ecd74b00fe185d1308832c08db9f29eb96
--- /dev/null
+++ b/homeassistant/components/loqed/sensor.py
@@ -0,0 +1,71 @@
+"""Creates LOQED sensors."""
+from typing import Final
+
+from homeassistant.components.sensor import (
+    SensorDeviceClass,
+    SensorEntity,
+    SensorEntityDescription,
+    SensorStateClass,
+)
+from homeassistant.config_entries import ConfigEntry
+from homeassistant.const import (
+    PERCENTAGE,
+    SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
+    EntityCategory,
+)
+from homeassistant.core import HomeAssistant
+from homeassistant.helpers.entity_platform import AddEntitiesCallback
+
+from .const import DOMAIN
+from .coordinator import LoqedDataCoordinator, StatusMessage
+from .entity import LoqedEntity
+
+SENSORS: Final[tuple[SensorEntityDescription, ...]] = (
+    SensorEntityDescription(
+        key="ble_strength",
+        translation_key="ble_strength",
+        device_class=SensorDeviceClass.SIGNAL_STRENGTH,
+        native_unit_of_measurement=SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
+        state_class=SensorStateClass.MEASUREMENT,
+        entity_category=EntityCategory.DIAGNOSTIC,
+        entity_registry_enabled_default=False,
+    ),
+    SensorEntityDescription(
+        key="battery_percentage",
+        device_class=SensorDeviceClass.BATTERY,
+        state_class=SensorStateClass.MEASUREMENT,
+        entity_category=EntityCategory.DIAGNOSTIC,
+        native_unit_of_measurement=PERCENTAGE,
+    ),
+)
+
+
+async def async_setup_entry(
+    hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
+) -> None:
+    """Set up the Loqed lock platform."""
+    coordinator = hass.data[DOMAIN][entry.entry_id]
+
+    async_add_entities(LoqedSensor(coordinator, sensor) for sensor in SENSORS)
+
+
+class LoqedSensor(LoqedEntity, SensorEntity):
+    """Representation of Sensor state."""
+
+    def __init__(
+        self, coordinator: LoqedDataCoordinator, description: SensorEntityDescription
+    ) -> None:
+        """Initialize the sensor."""
+        super().__init__(coordinator)
+        self.entity_description = description
+        self._attr_unique_id = f"{self.coordinator.lock.id}_{description.key}"
+
+    @property
+    def data(self) -> StatusMessage:
+        """Return data object from DataUpdateCoordinator."""
+        return self.coordinator.lock
+
+    @property
+    def native_value(self) -> int:
+        """Return state of sensor."""
+        return getattr(self.data, self.entity_description.key)
diff --git a/homeassistant/components/loqed/strings.json b/homeassistant/components/loqed/strings.json
index 6f3316b283f11f9609e99c3f6ac424f15ce0a83b..3d31194f5a6ed46900801c7ab13ca0f0886cd5b5 100644
--- a/homeassistant/components/loqed/strings.json
+++ b/homeassistant/components/loqed/strings.json
@@ -17,5 +17,12 @@
     "abort": {
       "already_configured": "[%key:common::config_flow::abort::already_configured_device%]"
     }
+  },
+  "entity": {
+    "sensor": {
+      "ble_strength": {
+        "name": "Bluetooth signal"
+      }
+    }
   }
 }
diff --git a/tests/components/loqed/conftest.py b/tests/components/loqed/conftest.py
index da7009a5744b346c799aa73e276dc7864ac0a4ee..be57237afdc784a4cf199f488b52d2e01fb476cd 100644
--- a/tests/components/loqed/conftest.py
+++ b/tests/components/loqed/conftest.py
@@ -48,6 +48,7 @@ def lock_fixture() -> loqed.Lock:
     mock_lock.name = "LOQED smart lock"
     mock_lock.getWebhooks = AsyncMock(return_value=webhooks_fixture)
     mock_lock.bolt_state = "locked"
+    mock_lock.battery_percentage = 90
     return mock_lock