From 26152adb234f502fabff9a043b66c8d85ad1c932 Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Sun, 23 Jul 2023 14:32:25 +0200 Subject: [PATCH] Add entity translations to Tado (#96226) --- .../components/tado/binary_sensor.py | 14 ++----- homeassistant/components/tado/climate.py | 2 +- homeassistant/components/tado/entity.py | 3 ++ homeassistant/components/tado/sensor.py | 23 +++++------- homeassistant/components/tado/strings.json | 37 +++++++++++++++++++ homeassistant/components/tado/water_heater.py | 7 +--- tests/components/tado/test_binary_sensor.py | 10 ++--- 7 files changed, 60 insertions(+), 36 deletions(-) diff --git a/homeassistant/components/tado/binary_sensor.py b/homeassistant/components/tado/binary_sensor.py index 24d62d76026..c5222112c02 100644 --- a/homeassistant/components/tado/binary_sensor.py +++ b/homeassistant/components/tado/binary_sensor.py @@ -50,31 +50,28 @@ class TadoBinarySensorEntityDescription( BATTERY_STATE_ENTITY_DESCRIPTION = TadoBinarySensorEntityDescription( key="battery state", - name="Battery state", state_fn=lambda data: data["batteryState"] == "LOW", device_class=BinarySensorDeviceClass.BATTERY, ) CONNECTION_STATE_ENTITY_DESCRIPTION = TadoBinarySensorEntityDescription( key="connection state", - name="Connection state", + translation_key="connection_state", state_fn=lambda data: data.get("connectionState", {}).get("value", False), device_class=BinarySensorDeviceClass.CONNECTIVITY, ) POWER_ENTITY_DESCRIPTION = TadoBinarySensorEntityDescription( key="power", - name="Power", state_fn=lambda data: data.power == "ON", device_class=BinarySensorDeviceClass.POWER, ) LINK_ENTITY_DESCRIPTION = TadoBinarySensorEntityDescription( key="link", - name="Link", state_fn=lambda data: data.link == "ONLINE", device_class=BinarySensorDeviceClass.CONNECTIVITY, ) OVERLAY_ENTITY_DESCRIPTION = TadoBinarySensorEntityDescription( key="overlay", - name="Overlay", + translation_key="overlay", state_fn=lambda data: data.overlay_active, attributes_fn=lambda data: {"termination": data.overlay_termination_type} if data.overlay_active @@ -83,14 +80,13 @@ OVERLAY_ENTITY_DESCRIPTION = TadoBinarySensorEntityDescription( ) OPEN_WINDOW_ENTITY_DESCRIPTION = TadoBinarySensorEntityDescription( key="open window", - name="Open window", state_fn=lambda data: bool(data.open_window or data.open_window_detected), attributes_fn=lambda data: data.open_window_attr, device_class=BinarySensorDeviceClass.WINDOW, ) EARLY_START_ENTITY_DESCRIPTION = TadoBinarySensorEntityDescription( key="early start", - name="Early start", + translation_key="early_start", state_fn=lambda data: data.preparation, device_class=BinarySensorDeviceClass.POWER, ) @@ -173,8 +169,6 @@ class TadoDeviceBinarySensor(TadoDeviceEntity, BinarySensorEntity): entity_description: TadoBinarySensorEntityDescription - _attr_has_entity_name = True - def __init__( self, tado, device_info, entity_description: TadoBinarySensorEntityDescription ) -> None: @@ -227,8 +221,6 @@ class TadoZoneBinarySensor(TadoZoneEntity, BinarySensorEntity): entity_description: TadoBinarySensorEntityDescription - _attr_has_entity_name = True - def __init__( self, tado, diff --git a/homeassistant/components/tado/climate.py b/homeassistant/components/tado/climate.py index 2b8bc4060d6..36a2ab671c9 100644 --- a/homeassistant/components/tado/climate.py +++ b/homeassistant/components/tado/climate.py @@ -218,6 +218,7 @@ class TadoClimate(TadoZoneEntity, ClimateEntity): """Representation of a Tado climate entity.""" _attr_temperature_unit = UnitOfTemperature.CELSIUS + _attr_name = None def __init__( self, @@ -244,7 +245,6 @@ class TadoClimate(TadoZoneEntity, ClimateEntity): self.zone_type = zone_type self._attr_unique_id = f"{zone_type} {zone_id} {tado.home_id}" - self._attr_name = zone_name self._attr_temperature_unit = UnitOfTemperature.CELSIUS self._attr_translation_key = DOMAIN diff --git a/homeassistant/components/tado/entity.py b/homeassistant/components/tado/entity.py index c825bafc4b9..5e3065bfb53 100644 --- a/homeassistant/components/tado/entity.py +++ b/homeassistant/components/tado/entity.py @@ -8,6 +8,7 @@ class TadoDeviceEntity(Entity): """Base implementation for Tado device.""" _attr_should_poll = False + _attr_has_entity_name = True def __init__(self, device_info): """Initialize a Tado device.""" @@ -34,6 +35,7 @@ class TadoHomeEntity(Entity): """Base implementation for Tado home.""" _attr_should_poll = False + _attr_has_entity_name = True def __init__(self, tado): """Initialize a Tado home.""" @@ -56,6 +58,7 @@ class TadoHomeEntity(Entity): class TadoZoneEntity(Entity): """Base implementation for Tado zone.""" + _attr_has_entity_name = True _attr_should_poll = False def __init__(self, zone_name, home_id, zone_id): diff --git a/homeassistant/components/tado/sensor.py b/homeassistant/components/tado/sensor.py index 7742f6b0dca..f7ba1682e18 100644 --- a/homeassistant/components/tado/sensor.py +++ b/homeassistant/components/tado/sensor.py @@ -55,7 +55,7 @@ class TadoSensorEntityDescription( HOME_SENSORS = [ TadoSensorEntityDescription( key="outdoor temperature", - name="Outdoor temperature", + translation_key="outdoor_temperature", state_fn=lambda data: data["outsideTemperature"]["celsius"], attributes_fn=lambda data: { "time": data["outsideTemperature"]["timestamp"], @@ -67,7 +67,7 @@ HOME_SENSORS = [ ), TadoSensorEntityDescription( key="solar percentage", - name="Solar percentage", + translation_key="solar_percentage", state_fn=lambda data: data["solarIntensity"]["percentage"], attributes_fn=lambda data: { "time": data["solarIntensity"]["timestamp"], @@ -78,28 +78,28 @@ HOME_SENSORS = [ ), TadoSensorEntityDescription( key="weather condition", - name="Weather condition", + translation_key="weather_condition", state_fn=lambda data: format_condition(data["weatherState"]["value"]), attributes_fn=lambda data: {"time": data["weatherState"]["timestamp"]}, data_category=SENSOR_DATA_CATEGORY_WEATHER, ), TadoSensorEntityDescription( key="tado mode", - name="Tado mode", + translation_key="tado_mode", # pylint: disable=unnecessary-lambda state_fn=lambda data: get_tado_mode(data), data_category=SENSOR_DATA_CATEGORY_GEOFENCE, ), TadoSensorEntityDescription( key="geofencing mode", - name="Geofencing mode", + translation_key="geofencing_mode", # pylint: disable=unnecessary-lambda state_fn=lambda data: get_geofencing_mode(data), data_category=SENSOR_DATA_CATEGORY_GEOFENCE, ), TadoSensorEntityDescription( key="automatic geofencing", - name="Automatic geofencing", + translation_key="automatic_geofencing", # pylint: disable=unnecessary-lambda state_fn=lambda data: get_automatic_geofencing(data), data_category=SENSOR_DATA_CATEGORY_GEOFENCE, @@ -108,7 +108,6 @@ HOME_SENSORS = [ TEMPERATURE_ENTITY_DESCRIPTION = TadoSensorEntityDescription( key="temperature", - name="Temperature", state_fn=lambda data: data.current_temp, attributes_fn=lambda data: { "time": data.current_temp_timestamp, @@ -120,7 +119,6 @@ TEMPERATURE_ENTITY_DESCRIPTION = TadoSensorEntityDescription( ) HUMIDITY_ENTITY_DESCRIPTION = TadoSensorEntityDescription( key="humidity", - name="Humidity", state_fn=lambda data: data.current_humidity, attributes_fn=lambda data: {"time": data.current_humidity_timestamp}, native_unit_of_measurement=PERCENTAGE, @@ -129,12 +127,12 @@ HUMIDITY_ENTITY_DESCRIPTION = TadoSensorEntityDescription( ) TADO_MODE_ENTITY_DESCRIPTION = TadoSensorEntityDescription( key="tado mode", - name="Tado mode", + translation_key="tado_mode", state_fn=lambda data: data.tado_mode, ) HEATING_ENTITY_DESCRIPTION = TadoSensorEntityDescription( key="heating", - name="Heating", + translation_key="heating", state_fn=lambda data: data.heating_power_percentage, attributes_fn=lambda data: {"time": data.heating_power_timestamp}, native_unit_of_measurement=PERCENTAGE, @@ -142,6 +140,7 @@ HEATING_ENTITY_DESCRIPTION = TadoSensorEntityDescription( ) AC_ENTITY_DESCRIPTION = TadoSensorEntityDescription( key="ac", + translation_key="ac", name="AC", state_fn=lambda data: data.ac_power, attributes_fn=lambda data: {"time": data.ac_power_timestamp}, @@ -244,8 +243,6 @@ class TadoHomeSensor(TadoHomeEntity, SensorEntity): entity_description: TadoSensorEntityDescription - _attr_has_entity_name = True - def __init__(self, tado, entity_description: TadoSensorEntityDescription) -> None: """Initialize of the Tado Sensor.""" self.entity_description = entity_description @@ -298,8 +295,6 @@ class TadoZoneSensor(TadoZoneEntity, SensorEntity): entity_description: TadoSensorEntityDescription - _attr_has_entity_name = True - def __init__( self, tado, diff --git a/homeassistant/components/tado/strings.json b/homeassistant/components/tado/strings.json index 70ff38b10be..9858b7aa51b 100644 --- a/homeassistant/components/tado/strings.json +++ b/homeassistant/components/tado/strings.json @@ -31,6 +31,17 @@ } }, "entity": { + "binary_sensor": { + "connection_state": { + "name": "Connection state" + }, + "overlay": { + "name": "Overlay" + }, + "early_start": { + "name": "Early start" + } + }, "climate": { "tado": { "state_attributes": { @@ -41,6 +52,32 @@ } } } + }, + "sensor": { + "outdoor_temperature": { + "name": "Outdoor temperature" + }, + "solar_percentage": { + "name": "Solar percentage" + }, + "weather_condition": { + "name": "Weather condition" + }, + "tado_mode": { + "name": "Tado mode" + }, + "geofencing_mode": { + "name": "Geofencing mode" + }, + "automatic_geofencing": { + "name": "Automatic geofencing" + }, + "heating": { + "name": "Heating" + }, + "ac": { + "name": "AC" + } } }, "services": { diff --git a/homeassistant/components/tado/water_heater.py b/homeassistant/components/tado/water_heater.py index f7a1dcd0966..6d17c85c981 100644 --- a/homeassistant/components/tado/water_heater.py +++ b/homeassistant/components/tado/water_heater.py @@ -119,6 +119,8 @@ def create_water_heater_entity(tado, name: str, zone_id: int, zone: str): class TadoWaterHeater(TadoZoneEntity, WaterHeaterEntity): """Representation of a Tado water heater.""" + _attr_name = None + def __init__( self, tado, @@ -166,11 +168,6 @@ class TadoWaterHeater(TadoZoneEntity, WaterHeaterEntity): ) self._async_update_data() - @property - def name(self): - """Return the name of the entity.""" - return self.zone_name - @property def unique_id(self): """Return the unique id.""" diff --git a/tests/components/tado/test_binary_sensor.py b/tests/components/tado/test_binary_sensor.py index 9226543abef..1e2f53efeb5 100644 --- a/tests/components/tado/test_binary_sensor.py +++ b/tests/components/tado/test_binary_sensor.py @@ -13,13 +13,13 @@ async def test_air_con_create_binary_sensors(hass: HomeAssistant) -> None: state = hass.states.get("binary_sensor.air_conditioning_power") assert state.state == STATE_ON - state = hass.states.get("binary_sensor.air_conditioning_link") + state = hass.states.get("binary_sensor.air_conditioning_connectivity") assert state.state == STATE_ON state = hass.states.get("binary_sensor.air_conditioning_overlay") assert state.state == STATE_ON - state = hass.states.get("binary_sensor.air_conditioning_open_window") + state = hass.states.get("binary_sensor.air_conditioning_window") assert state.state == STATE_OFF @@ -31,7 +31,7 @@ async def test_heater_create_binary_sensors(hass: HomeAssistant) -> None: state = hass.states.get("binary_sensor.baseboard_heater_power") assert state.state == STATE_ON - state = hass.states.get("binary_sensor.baseboard_heater_link") + state = hass.states.get("binary_sensor.baseboard_heater_connectivity") assert state.state == STATE_ON state = hass.states.get("binary_sensor.baseboard_heater_early_start") @@ -40,7 +40,7 @@ async def test_heater_create_binary_sensors(hass: HomeAssistant) -> None: state = hass.states.get("binary_sensor.baseboard_heater_overlay") assert state.state == STATE_ON - state = hass.states.get("binary_sensor.baseboard_heater_open_window") + state = hass.states.get("binary_sensor.baseboard_heater_window") assert state.state == STATE_OFF @@ -49,7 +49,7 @@ async def test_water_heater_create_binary_sensors(hass: HomeAssistant) -> None: await async_init_integration(hass) - state = hass.states.get("binary_sensor.water_heater_link") + state = hass.states.get("binary_sensor.water_heater_connectivity") assert state.state == STATE_ON state = hass.states.get("binary_sensor.water_heater_overlay")