Set friendly name of utility meter select entity when configured through YAML (#128267)

* set select friendly name in YAML

* backward compatibility added

* clean

* cleaner backward compatibility approach

* don't introduce default unique_id

* split test according to review
This commit is contained in:
Diogo Gomes 2024-11-05 18:59:43 +00:00 committed by GitHub
parent 1e42a38473
commit 83a1b06b56
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 77 additions and 9 deletions

View File

@ -6,7 +6,7 @@ import logging
from homeassistant.components.select import SelectEntity
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_UNIQUE_ID
from homeassistant.const import CONF_NAME, CONF_UNIQUE_ID
from homeassistant.core import HomeAssistant
from homeassistant.helpers.device import async_device_info_to_link_from_entity
from homeassistant.helpers.device_registry import DeviceInfo
@ -36,9 +36,9 @@ async def async_setup_entry(
)
tariff_select = TariffSelect(
name,
tariffs,
unique_id,
name=name,
tariffs=tariffs,
unique_id=unique_id,
device_info=device_info,
)
async_add_entities([tariff_select])
@ -62,13 +62,15 @@ async def async_setup_platform(
conf_meter_unique_id: str | None = hass.data[DATA_UTILITY][meter].get(
CONF_UNIQUE_ID
)
conf_meter_name = hass.data[DATA_UTILITY][meter].get(CONF_NAME, meter)
async_add_entities(
[
TariffSelect(
meter,
discovery_info[CONF_TARIFFS],
conf_meter_unique_id,
name=conf_meter_name,
tariffs=discovery_info[CONF_TARIFFS],
yaml_slug=meter,
unique_id=conf_meter_unique_id,
)
]
)
@ -82,12 +84,16 @@ class TariffSelect(SelectEntity, RestoreEntity):
def __init__(
self,
name,
tariffs,
unique_id,
tariffs: list[str],
*,
yaml_slug: str | None = None,
unique_id: str | None = None,
device_info: DeviceInfo | None = None,
) -> None:
"""Initialize a tariff selector."""
self._attr_name = name
if yaml_slug: # Backwards compatibility with YAML configuration entries
self.entity_id = f"select.{yaml_slug}"
self._attr_unique_id = unique_id
self._attr_device_info = device_info
self._current_tariff: str | None = None

View File

@ -3,10 +3,72 @@
from homeassistant.components.utility_meter.const import DOMAIN
from homeassistant.core import HomeAssistant
from homeassistant.helpers import device_registry as dr, entity_registry as er
from homeassistant.setup import async_setup_component
from tests.common import MockConfigEntry
async def test_select_entity_name_config_entry(
hass: HomeAssistant,
) -> None:
"""Test for Utility Meter select platform."""
config_entry_config = {
"cycle": "none",
"delta_values": False,
"name": "Energy bill",
"net_consumption": False,
"offset": 0,
"periodically_resetting": True,
"source": "sensor.energy",
"tariffs": ["peak", "offpeak"],
}
source_config_entry = MockConfigEntry()
source_config_entry.add_to_hass(hass)
utility_meter_config_entry = MockConfigEntry(
data={},
domain=DOMAIN,
options=config_entry_config,
title=config_entry_config["name"],
)
utility_meter_config_entry.add_to_hass(hass)
assert await hass.config_entries.async_setup(utility_meter_config_entry.entry_id)
await hass.async_block_till_done()
state = hass.states.get("select.energy_bill")
assert state is not None
assert state.attributes.get("friendly_name") == "Energy bill"
async def test_select_entity_name_yaml(
hass: HomeAssistant,
) -> None:
"""Test for Utility Meter select platform."""
yaml_config = {
"utility_meter": {
"energy_bill": {
"name": "Energy bill",
"source": "sensor.energy",
"tariffs": ["peak", "offpeak"],
"unique_id": "1234abcd",
}
}
}
assert await async_setup_component(hass, DOMAIN, yaml_config)
await hass.async_block_till_done()
state = hass.states.get("select.energy_bill")
assert state is not None
assert state.attributes.get("friendly_name") == "Energy bill"
async def test_device_id(
hass: HomeAssistant,
device_registry: dr.DeviceRegistry,