From d0e9e54f26c6c53a8b5c186e9d4fe8a54f796a2b Mon Sep 17 00:00:00 2001 From: steffenrapp <88974099+steffenrapp@users.noreply.github.com> Date: Fri, 12 Jan 2024 18:45:02 +0100 Subject: [PATCH] Extend Nuki integration to expose ringer through Nuki Opener (#107745) * Expose ring_action_state and ring_action_timestamp of Nuki Opener * add translation key * address comments --- .../components/nuki/binary_sensor.py | 40 +++++++++++++++++-- homeassistant/components/nuki/strings.json | 5 +++ 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/nuki/binary_sensor.py b/homeassistant/components/nuki/binary_sensor.py index 240bb2dc525..e3b2d129017 100644 --- a/homeassistant/components/nuki/binary_sensor.py +++ b/homeassistant/components/nuki/binary_sensor.py @@ -19,16 +19,22 @@ from .const import ATTR_NUKI_ID, DOMAIN as NUKI_DOMAIN async def async_setup_entry( hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback ) -> None: - """Set up the Nuki lock binary sensor.""" + """Set up the Nuki binary sensors.""" entry_data: NukiEntryData = hass.data[NUKI_DOMAIN][entry.entry_id] - entities = [] + lock_entities = [] + opener_entities = [] for lock in entry_data.locks: if lock.is_door_sensor_activated: - entities.extend([NukiDoorsensorEntity(entry_data.coordinator, lock)]) + lock_entities.extend([NukiDoorsensorEntity(entry_data.coordinator, lock)]) - async_add_entities(entities) + async_add_entities(lock_entities) + + for opener in entry_data.openers: + opener_entities.extend([NukiRingactionEntity(entry_data.coordinator, opener)]) + + async_add_entities(opener_entities) class NukiDoorsensorEntity(NukiEntity[NukiDevice], BinarySensorEntity): @@ -70,3 +76,29 @@ class NukiDoorsensorEntity(NukiEntity[NukiDevice], BinarySensorEntity): def is_on(self): """Return true if the door is open.""" return self.door_sensor_state == STATE_DOORSENSOR_OPENED + + +class NukiRingactionEntity(NukiEntity[NukiDevice], BinarySensorEntity): + """Representation of a Nuki Opener Ringaction.""" + + _attr_has_entity_name = True + _attr_translation_key = "ring_action" + _attr_icon = "mdi:bell-ring" + + @property + def unique_id(self) -> str: + """Return a unique ID.""" + return f"{self._nuki_device.nuki_id}_ringaction" + + @property + def extra_state_attributes(self): + """Return the device specific state attributes.""" + data = { + ATTR_NUKI_ID: self._nuki_device.nuki_id, + } + return data + + @property + def is_on(self) -> bool: + """Return the value of the ring action state.""" + return self._nuki_device.ring_action_state diff --git a/homeassistant/components/nuki/strings.json b/homeassistant/components/nuki/strings.json index 216b891ac31..beac3cb7f74 100644 --- a/homeassistant/components/nuki/strings.json +++ b/homeassistant/components/nuki/strings.json @@ -38,6 +38,11 @@ } }, "entity": { + "binary_sensor": { + "ring_action": { + "name": "Ring Action" + } + }, "lock": { "nuki_lock": { "state_attributes": {