From 77b421887befe1478fe40798e301d25721cd30c4 Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Mon, 14 Aug 2023 16:58:57 +0200 Subject: [PATCH] Add entity translations for August (#98077) --- .../components/august/binary_sensor.py | 31 ++++-------- homeassistant/components/august/button.py | 3 +- homeassistant/components/august/camera.py | 7 +-- homeassistant/components/august/entity.py | 1 + homeassistant/components/august/lock.py | 3 +- homeassistant/components/august/sensor.py | 10 +--- homeassistant/components/august/strings.json | 22 +++++++++ tests/components/august/test_binary_sensor.py | 48 ++++++++++--------- tests/components/august/test_init.py | 4 +- 9 files changed, 69 insertions(+), 60 deletions(-) diff --git a/homeassistant/components/august/binary_sensor.py b/homeassistant/components/august/binary_sensor.py index 2cbeeeee5aa..b19a9833a47 100644 --- a/homeassistant/components/august/binary_sensor.py +++ b/homeassistant/components/august/binary_sensor.py @@ -109,10 +109,6 @@ def _native_datetime() -> datetime: class AugustBinarySensorEntityDescription(BinarySensorEntityDescription): """Describes August binary_sensor entity.""" - # AugustBinarySensor does not support UNDEFINED or None, - # restrict the type to str. - name: str = "" - @dataclass class AugustDoorbellRequiredKeysMixin: @@ -128,34 +124,28 @@ class AugustDoorbellBinarySensorEntityDescription( ): """Describes August binary_sensor entity.""" - # AugustDoorbellBinarySensor does not support UNDEFINED or None, - # restrict the type to str. - name: str = "" - SENSOR_TYPE_DOOR = AugustBinarySensorEntityDescription( - key="door_open", - name="Open", + key="open", + device_class=BinarySensorDeviceClass.DOOR, ) SENSOR_TYPES_VIDEO_DOORBELL = ( AugustDoorbellBinarySensorEntityDescription( - key="doorbell_motion", - name="Motion", + key="motion", device_class=BinarySensorDeviceClass.MOTION, value_fn=_retrieve_motion_state, is_time_based=True, ), AugustDoorbellBinarySensorEntityDescription( - key="doorbell_image_capture", - name="Image Capture", + key="image capture", + translation_key="image_capture", icon="mdi:file-image", value_fn=_retrieve_image_capture_state, is_time_based=True, ), AugustDoorbellBinarySensorEntityDescription( - key="doorbell_online", - name="Online", + key="online", device_class=BinarySensorDeviceClass.CONNECTIVITY, entity_category=EntityCategory.DIAGNOSTIC, value_fn=_retrieve_online_state, @@ -166,8 +156,7 @@ SENSOR_TYPES_VIDEO_DOORBELL = ( SENSOR_TYPES_DOORBELL: tuple[AugustDoorbellBinarySensorEntityDescription, ...] = ( AugustDoorbellBinarySensorEntityDescription( - key="doorbell_ding", - name="Ding", + key="ding", device_class=BinarySensorDeviceClass.OCCUPANCY, value_fn=_retrieve_ding_state, is_time_based=True, @@ -236,8 +225,7 @@ class AugustDoorBinarySensor(AugustEntityMixin, BinarySensorEntity): self.entity_description = description self._data = data self._device = device - self._attr_name = f"{device.device_name} {description.name}" - self._attr_unique_id = f"{self._device_id}_{description.name.lower()}" + self._attr_unique_id = f"{self._device_id}_{description.key}" @callback def _update_from_data(self): @@ -284,8 +272,7 @@ class AugustDoorbellBinarySensor(AugustEntityMixin, BinarySensorEntity): self.entity_description = description self._check_for_off_update_listener = None self._data = data - self._attr_name = f"{device.device_name} {description.name}" - self._attr_unique_id = f"{self._device_id}_{description.name.lower()}" + self._attr_unique_id = f"{self._device_id}_{description.key}" @callback def _update_from_data(self): diff --git a/homeassistant/components/august/button.py b/homeassistant/components/august/button.py index c96db61ca1a..b8f66aea02b 100644 --- a/homeassistant/components/august/button.py +++ b/homeassistant/components/august/button.py @@ -24,10 +24,11 @@ async def async_setup_entry( class AugustWakeLockButton(AugustEntityMixin, ButtonEntity): """Representation of an August lock wake button.""" + _attr_translation_key = "wake" + def __init__(self, data: AugustData, device: Lock) -> None: """Initialize the lock wake button.""" super().__init__(data, device) - self._attr_name = f"{device.device_name} Wake" self._attr_unique_id = f"{self._device_id}_wake" async def async_press(self) -> None: diff --git a/homeassistant/components/august/camera.py b/homeassistant/components/august/camera.py index a3cc18ab9c0..4c3c124953a 100644 --- a/homeassistant/components/august/camera.py +++ b/homeassistant/components/august/camera.py @@ -33,16 +33,17 @@ async def async_setup_entry( class AugustCamera(AugustEntityMixin, Camera): - """An implementation of a August security camera.""" + """An implementation of an August security camera.""" + + _attr_translation_key = "camera" def __init__(self, data, device, session, timeout): - """Initialize a August security camera.""" + """Initialize an August security camera.""" super().__init__(data, device) self._timeout = timeout self._session = session self._image_url = None self._image_content = None - self._attr_name = f"{device.device_name} Camera" self._attr_unique_id = f"{self._device_id:s}_camera" @property diff --git a/homeassistant/components/august/entity.py b/homeassistant/components/august/entity.py index bd81dc0c96f..47f3b8be74f 100644 --- a/homeassistant/components/august/entity.py +++ b/homeassistant/components/august/entity.py @@ -19,6 +19,7 @@ class AugustEntityMixin(Entity): """Base implementation for August device.""" _attr_should_poll = False + _attr_has_entity_name = True def __init__(self, data: AugustData, device: Doorbell | Lock) -> None: """Initialize an August device.""" diff --git a/homeassistant/components/august/lock.py b/homeassistant/components/august/lock.py index 9e8b2470b4e..e082cd1cfab 100644 --- a/homeassistant/components/august/lock.py +++ b/homeassistant/components/august/lock.py @@ -37,11 +37,12 @@ async def async_setup_entry( class AugustLock(AugustEntityMixin, RestoreEntity, LockEntity): """Representation of an August lock.""" + _attr_name = None + def __init__(self, data, device): """Initialize the lock.""" super().__init__(data, device) self._lock_status = None - self._attr_name = device.device_name self._attr_unique_id = f"{self._device_id:s}_lock" self._update_from_data() diff --git a/homeassistant/components/august/sensor.py b/homeassistant/components/august/sensor.py index 169a344e2bd..2c688ae7615 100644 --- a/homeassistant/components/august/sensor.py +++ b/homeassistant/components/august/sensor.py @@ -75,7 +75,6 @@ class AugustSensorEntityDescription( SENSOR_TYPE_DEVICE_BATTERY = AugustSensorEntityDescription[LockDetail]( key="device_battery", - name="Battery", entity_category=EntityCategory.DIAGNOSTIC, state_class=SensorStateClass.MEASUREMENT, value_fn=_retrieve_device_battery_state, @@ -83,7 +82,6 @@ SENSOR_TYPE_DEVICE_BATTERY = AugustSensorEntityDescription[LockDetail]( SENSOR_TYPE_KEYPAD_BATTERY = AugustSensorEntityDescription[KeypadDetail]( key="linked_keypad_battery", - name="Battery", entity_category=EntityCategory.DIAGNOSTIC, state_class=SensorStateClass.MEASUREMENT, value_fn=_retrieve_linked_keypad_battery_state, @@ -176,6 +174,8 @@ async def _async_migrate_old_unique_ids(hass, devices): class AugustOperatorSensor(AugustEntityMixin, RestoreEntity, SensorEntity): """Representation of an August lock operation sensor.""" + _attr_translation_key = "operator" + def __init__(self, data, device): """Initialize the sensor.""" super().__init__(data, device) @@ -188,11 +188,6 @@ class AugustOperatorSensor(AugustEntityMixin, RestoreEntity, SensorEntity): self._entity_picture = None self._update_from_data() - @property - def name(self): - """Return the name of the sensor.""" - return f"{self._device.device_name} Operator" - @callback def _update_from_data(self): """Get the latest state of the sensor and update activity.""" @@ -278,7 +273,6 @@ class AugustBatterySensor(AugustEntityMixin, SensorEntity, Generic[_T]): super().__init__(data, device) self.entity_description = description self._old_device = old_device - self._attr_name = f"{device.device_name} {description.name}" self._attr_unique_id = f"{self._device_id}_{description.key}" self._update_from_data() diff --git a/homeassistant/components/august/strings.json b/homeassistant/components/august/strings.json index 88362c9fd66..7e33ec30881 100644 --- a/homeassistant/components/august/strings.json +++ b/homeassistant/components/august/strings.json @@ -37,5 +37,27 @@ "title": "Reauthenticate an August account" } } + }, + "entity": { + "binary_sensor": { + "image_capture": { + "name": "Image capture" + } + }, + "button": { + "wake": { + "name": "Wake" + } + }, + "camera": { + "camera": { + "name": "[%key:component::camera::title%]" + } + }, + "sensor": { + "operator": { + "name": "Operator" + } + } } } diff --git a/tests/components/august/test_binary_sensor.py b/tests/components/august/test_binary_sensor.py index 2787cdbe23d..50cac4445ab 100644 --- a/tests/components/august/test_binary_sensor.py +++ b/tests/components/august/test_binary_sensor.py @@ -41,7 +41,7 @@ async def test_doorsense(hass: HomeAssistant) -> None: await _create_august_with_devices(hass, [lock_one]) binary_sensor_online_with_doorsense_name = hass.states.get( - "binary_sensor.online_with_doorsense_name_open" + "binary_sensor.online_with_doorsense_name_door" ) assert binary_sensor_online_with_doorsense_name.state == STATE_ON @@ -50,7 +50,7 @@ async def test_doorsense(hass: HomeAssistant) -> None: await hass.async_block_till_done() binary_sensor_online_with_doorsense_name = hass.states.get( - "binary_sensor.online_with_doorsense_name_open" + "binary_sensor.online_with_doorsense_name_door" ) assert binary_sensor_online_with_doorsense_name.state == STATE_ON @@ -58,7 +58,7 @@ async def test_doorsense(hass: HomeAssistant) -> None: await hass.async_block_till_done() binary_sensor_online_with_doorsense_name = hass.states.get( - "binary_sensor.online_with_doorsense_name_open" + "binary_sensor.online_with_doorsense_name_door" ) assert binary_sensor_online_with_doorsense_name.state == STATE_OFF @@ -74,7 +74,7 @@ async def test_lock_bridge_offline(hass: HomeAssistant) -> None: await _create_august_with_devices(hass, [lock_one], activities=activities) binary_sensor_online_with_doorsense_name = hass.states.get( - "binary_sensor.online_with_doorsense_name_open" + "binary_sensor.online_with_doorsense_name_door" ) assert binary_sensor_online_with_doorsense_name.state == STATE_UNAVAILABLE @@ -93,11 +93,11 @@ async def test_create_doorbell(hass: HomeAssistant) -> None: ) assert binary_sensor_k98gidt45gul_name_image_capture.state == STATE_OFF binary_sensor_k98gidt45gul_name_online = hass.states.get( - "binary_sensor.k98gidt45gul_name_online" + "binary_sensor.k98gidt45gul_name_connectivity" ) assert binary_sensor_k98gidt45gul_name_online.state == STATE_ON binary_sensor_k98gidt45gul_name_ding = hass.states.get( - "binary_sensor.k98gidt45gul_name_ding" + "binary_sensor.k98gidt45gul_name_occupancy" ) assert binary_sensor_k98gidt45gul_name_ding.state == STATE_OFF binary_sensor_k98gidt45gul_name_motion = hass.states.get( @@ -120,10 +120,12 @@ async def test_create_doorbell_offline(hass: HomeAssistant) -> None: ) assert binary_sensor_tmt100_name_motion.state == STATE_UNAVAILABLE binary_sensor_tmt100_name_online = hass.states.get( - "binary_sensor.tmt100_name_online" + "binary_sensor.tmt100_name_connectivity" ) assert binary_sensor_tmt100_name_online.state == STATE_OFF - binary_sensor_tmt100_name_ding = hass.states.get("binary_sensor.tmt100_name_ding") + binary_sensor_tmt100_name_ding = hass.states.get( + "binary_sensor.tmt100_name_occupancy" + ) assert binary_sensor_tmt100_name_ding.state == STATE_UNAVAILABLE @@ -140,11 +142,11 @@ async def test_create_doorbell_with_motion(hass: HomeAssistant) -> None: ) assert binary_sensor_k98gidt45gul_name_motion.state == STATE_ON binary_sensor_k98gidt45gul_name_online = hass.states.get( - "binary_sensor.k98gidt45gul_name_online" + "binary_sensor.k98gidt45gul_name_connectivity" ) assert binary_sensor_k98gidt45gul_name_online.state == STATE_ON binary_sensor_k98gidt45gul_name_ding = hass.states.get( - "binary_sensor.k98gidt45gul_name_ding" + "binary_sensor.k98gidt45gul_name_occupancy" ) assert binary_sensor_k98gidt45gul_name_ding.state == STATE_OFF new_time = dt_util.utcnow() + datetime.timedelta(seconds=40) @@ -174,7 +176,7 @@ async def test_doorbell_update_via_pubnub(hass: HomeAssistant) -> None: ) assert binary_sensor_k98gidt45gul_name_motion.state == STATE_OFF binary_sensor_k98gidt45gul_name_ding = hass.states.get( - "binary_sensor.k98gidt45gul_name_ding" + "binary_sensor.k98gidt45gul_name_occupancy" ) assert binary_sensor_k98gidt45gul_name_ding.state == STATE_OFF @@ -242,7 +244,7 @@ async def test_doorbell_update_via_pubnub(hass: HomeAssistant) -> None: assert binary_sensor_k98gidt45gul_name_motion.state == STATE_ON binary_sensor_k98gidt45gul_name_ding = hass.states.get( - "binary_sensor.k98gidt45gul_name_ding" + "binary_sensor.k98gidt45gul_name_occupancy" ) assert binary_sensor_k98gidt45gul_name_ding.state == STATE_OFF @@ -273,7 +275,7 @@ async def test_doorbell_update_via_pubnub(hass: HomeAssistant) -> None: await hass.async_block_till_done() binary_sensor_k98gidt45gul_name_ding = hass.states.get( - "binary_sensor.k98gidt45gul_name_ding" + "binary_sensor.k98gidt45gul_name_occupancy" ) assert binary_sensor_k98gidt45gul_name_ding.state == STATE_ON new_time = dt_util.utcnow() + datetime.timedelta(seconds=40) @@ -286,7 +288,7 @@ async def test_doorbell_update_via_pubnub(hass: HomeAssistant) -> None: await hass.async_block_till_done() binary_sensor_k98gidt45gul_name_ding = hass.states.get( - "binary_sensor.k98gidt45gul_name_ding" + "binary_sensor.k98gidt45gul_name_occupancy" ) assert binary_sensor_k98gidt45gul_name_ding.state == STATE_OFF @@ -317,7 +319,7 @@ async def test_door_sense_update_via_pubnub(hass: HomeAssistant) -> None: ) binary_sensor_online_with_doorsense_name = hass.states.get( - "binary_sensor.online_with_doorsense_name_open" + "binary_sensor.online_with_doorsense_name_door" ) assert binary_sensor_online_with_doorsense_name.state == STATE_ON @@ -332,7 +334,7 @@ async def test_door_sense_update_via_pubnub(hass: HomeAssistant) -> None: await hass.async_block_till_done() binary_sensor_online_with_doorsense_name = hass.states.get( - "binary_sensor.online_with_doorsense_name_open" + "binary_sensor.online_with_doorsense_name_door" ) assert binary_sensor_online_with_doorsense_name.state == STATE_OFF @@ -346,14 +348,14 @@ async def test_door_sense_update_via_pubnub(hass: HomeAssistant) -> None: ) await hass.async_block_till_done() binary_sensor_online_with_doorsense_name = hass.states.get( - "binary_sensor.online_with_doorsense_name_open" + "binary_sensor.online_with_doorsense_name_door" ) assert binary_sensor_online_with_doorsense_name.state == STATE_ON async_fire_time_changed(hass, dt_util.utcnow() + datetime.timedelta(seconds=30)) await hass.async_block_till_done() binary_sensor_online_with_doorsense_name = hass.states.get( - "binary_sensor.online_with_doorsense_name_open" + "binary_sensor.online_with_doorsense_name_door" ) assert binary_sensor_online_with_doorsense_name.state == STATE_ON @@ -361,7 +363,7 @@ async def test_door_sense_update_via_pubnub(hass: HomeAssistant) -> None: async_fire_time_changed(hass, dt_util.utcnow() + datetime.timedelta(seconds=30)) await hass.async_block_till_done() binary_sensor_online_with_doorsense_name = hass.states.get( - "binary_sensor.online_with_doorsense_name_open" + "binary_sensor.online_with_doorsense_name_door" ) assert binary_sensor_online_with_doorsense_name.state == STATE_ON @@ -369,7 +371,7 @@ async def test_door_sense_update_via_pubnub(hass: HomeAssistant) -> None: async_fire_time_changed(hass, dt_util.utcnow() + datetime.timedelta(hours=2)) await hass.async_block_till_done() binary_sensor_online_with_doorsense_name = hass.states.get( - "binary_sensor.online_with_doorsense_name_open" + "binary_sensor.online_with_doorsense_name_door" ) assert binary_sensor_online_with_doorsense_name.state == STATE_ON @@ -383,14 +385,14 @@ async def test_door_sense_update_via_pubnub(hass: HomeAssistant) -> None: ) await hass.async_block_till_done() binary_sensor_online_with_doorsense_name = hass.states.get( - "binary_sensor.online_with_doorsense_name_open" + "binary_sensor.online_with_doorsense_name_door" ) assert binary_sensor_online_with_doorsense_name.state == STATE_ON async_fire_time_changed(hass, dt_util.utcnow() + datetime.timedelta(hours=4)) await hass.async_block_till_done() binary_sensor_online_with_doorsense_name = hass.states.get( - "binary_sensor.online_with_doorsense_name_open" + "binary_sensor.online_with_doorsense_name_door" ) assert binary_sensor_online_with_doorsense_name.state == STATE_ON @@ -404,6 +406,6 @@ async def test_create_lock_with_doorbell(hass: HomeAssistant) -> None: await _create_august_with_devices(hass, [lock_one]) ding_sensor = hass.states.get( - "binary_sensor.a6697750d607098bae8d6baa11ef8063_name_ding" + "binary_sensor.a6697750d607098bae8d6baa11ef8063_name_occupancy" ) assert ding_sensor.state == STATE_OFF diff --git a/tests/components/august/test_init.py b/tests/components/august/test_init.py index fe297c97a57..36a7f73f8a8 100644 --- a/tests/components/august/test_init.py +++ b/tests/components/august/test_init.py @@ -186,11 +186,11 @@ async def test_lock_has_doorsense(hass: HomeAssistant) -> None: await _create_august_with_devices(hass, [doorsenselock, nodoorsenselock]) binary_sensor_online_with_doorsense_name_open = hass.states.get( - "binary_sensor.online_with_doorsense_name_open" + "binary_sensor.online_with_doorsense_name_door" ) assert binary_sensor_online_with_doorsense_name_open.state == STATE_ON binary_sensor_missing_doorsense_id_name_open = hass.states.get( - "binary_sensor.missing_doorsense_id_name_open" + "binary_sensor.missing_with_doorsense_name_door" ) assert binary_sensor_missing_doorsense_id_name_open is None