Add entity translations for August (#98077)

This commit is contained in:
Joost Lekkerkerker 2023-08-14 16:58:57 +02:00 committed by GitHub
parent d4753ebd3b
commit 77b421887b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 69 additions and 60 deletions

View File

@ -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):

View File

@ -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:

View File

@ -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

View File

@ -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."""

View File

@ -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()

View File

@ -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()

View File

@ -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"
}
}
}
}

View File

@ -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

View File

@ -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