diff --git a/.coveragerc b/.coveragerc index 95748dbecbe..cad9ca4fe74 100644 --- a/.coveragerc +++ b/.coveragerc @@ -870,6 +870,7 @@ omit = homeassistant/components/nuki/binary_sensor.py homeassistant/components/nuki/const.py homeassistant/components/nuki/lock.py + homeassistant/components/nuki/sensor.py homeassistant/components/nut/diagnostics.py homeassistant/components/nx584/alarm_control_panel.py homeassistant/components/nzbget/coordinator.py diff --git a/homeassistant/components/nuki/__init__.py b/homeassistant/components/nuki/__init__.py index 99cb033031c..4598d43b4dc 100644 --- a/homeassistant/components/nuki/__init__.py +++ b/homeassistant/components/nuki/__init__.py @@ -33,7 +33,7 @@ from .helpers import parse_id _LOGGER = logging.getLogger(__name__) -PLATFORMS = [Platform.BINARY_SENSOR, Platform.LOCK] +PLATFORMS = [Platform.BINARY_SENSOR, Platform.LOCK, Platform.SENSOR] UPDATE_INTERVAL = timedelta(seconds=30) diff --git a/homeassistant/components/nuki/sensor.py b/homeassistant/components/nuki/sensor.py new file mode 100644 index 00000000000..f4a9103eecb --- /dev/null +++ b/homeassistant/components/nuki/sensor.py @@ -0,0 +1,48 @@ +"""Battery sensor for the Nuki Lock.""" + +from homeassistant.components.sensor import SensorDeviceClass, SensorEntity +from homeassistant.config_entries import ConfigEntry +from homeassistant.const import PERCENTAGE +from homeassistant.core import HomeAssistant +from homeassistant.helpers.entity import EntityCategory +from homeassistant.helpers.entity_platform import AddEntitiesCallback + +from . import NukiEntity +from .const import ATTR_NUKI_ID, DATA_COORDINATOR, DATA_LOCKS, DOMAIN as NUKI_DOMAIN + + +async def async_setup_entry( + hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback +) -> None: + """Set up the Nuki lock sensor.""" + data = hass.data[NUKI_DOMAIN][entry.entry_id] + coordinator = data[DATA_COORDINATOR] + + async_add_entities( + NukiBatterySensor(coordinator, lock) for lock in data[DATA_LOCKS] + ) + + +class NukiBatterySensor(NukiEntity, SensorEntity): + """Representation of a Nuki Lock Battery sensor.""" + + _attr_has_entity_name = True + _attr_name = "Battery" + _attr_native_unit_of_measurement = PERCENTAGE + _attr_device_class = SensorDeviceClass.BATTERY + _attr_entity_category = EntityCategory.DIAGNOSTIC + + @property + def unique_id(self) -> str: + """Return a unique ID.""" + return f"{self._nuki_device.nuki_id}_battery_level" + + @property + def extra_state_attributes(self): + """Return the device specific state attributes.""" + return {ATTR_NUKI_ID: self._nuki_device.nuki_id} + + @property + def native_value(self) -> float: + """Return the state of the sensor.""" + return self._nuki_device.battery_charge