Use CONF_NAME consistently in utility meter sensors with and without tariffs (#69152)

* apply name to tariff based sensors too

* change name without breaking entity_id

* address comments
This commit is contained in:
Diogo Gomes 2022-04-19 08:00:36 +01:00 committed by GitHub
parent c29a5dc3fd
commit 9dfd37c60b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 72 additions and 4 deletions

View File

@ -138,13 +138,12 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
if not conf[CONF_TARIFFS]:
# only one entity is required
name = conf.get(CONF_NAME, meter)
hass.async_create_task(
discovery.async_load_platform(
hass,
SENSOR_DOMAIN,
DOMAIN,
{name: {CONF_METER: meter, CONF_NAME: name}},
{meter: {CONF_METER: meter}},
config,
)
)
@ -170,7 +169,6 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
name = f"{meter} {tariff}"
tariff_confs[name] = {
CONF_METER: meter,
CONF_NAME: name,
CONF_TARIFF: tariff,
}

View File

@ -36,6 +36,7 @@ from homeassistant.helpers.restore_state import RestoreEntity
from homeassistant.helpers.start import async_at_start
from homeassistant.helpers.template import is_number
from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
from homeassistant.util import slugify
import homeassistant.util.dt as dt_util
from .const import (
@ -194,6 +195,17 @@ async def async_setup_platform(
if conf_meter_unique_id
else None
)
conf_meter_name = hass.data[DATA_UTILITY][meter].get(CONF_NAME, meter)
conf_sensor_tariff = conf.get(CONF_TARIFF)
suggested_entity_id = None
if conf_sensor_tariff:
conf_sensor_name = f"{conf_meter_name} {conf_sensor_tariff}"
slug = slugify(f"{meter} {conf_sensor_tariff}")
suggested_entity_id = f"sensor.{slug}"
else:
conf_sensor_name = conf_meter_name
conf_meter_type = hass.data[DATA_UTILITY][meter].get(CONF_METER_TYPE)
conf_meter_offset = hass.data[DATA_UTILITY][meter][CONF_METER_OFFSET]
conf_meter_delta_values = hass.data[DATA_UTILITY][meter][
@ -211,13 +223,14 @@ async def async_setup_platform(
delta_values=conf_meter_delta_values,
meter_offset=conf_meter_offset,
meter_type=conf_meter_type,
name=conf.get(CONF_NAME),
name=conf_sensor_name,
net_consumption=conf_meter_net_consumption,
parent_meter=meter,
source_entity=conf_meter_source,
tariff_entity=conf_meter_tariff_entity,
tariff=conf_sensor_tariff,
unique_id=conf_sensor_unique_id,
suggested_entity_id=suggested_entity_id,
)
meters.append(meter_sensor)
@ -251,9 +264,11 @@ class UtilityMeterSensor(RestoreEntity, SensorEntity):
tariff_entity,
tariff,
unique_id,
suggested_entity_id=None,
):
"""Initialize the Utility Meter sensor."""
self._attr_unique_id = unique_id
self.entity_id = suggested_entity_id
self._parent_meter = parent_meter
self._sensor_source_id = source_entity
self._state = None

View File

@ -342,6 +342,61 @@ async def test_unique_id(hass):
assert ent_reg.entities["sensor.energy_bill_onpeak"].unique_id == "1_onpeak"
@pytest.mark.parametrize(
"yaml_config,entity_id, name",
(
(
{
"utility_meter": {
"energy_bill": {
"name": "dog",
"source": "sensor.energy",
"tariffs": ["onpeak", "midpeak", "offpeak"],
}
}
},
"sensor.energy_bill_onpeak",
"dog onpeak",
),
(
{
"utility_meter": {
"energy_bill": {
"name": "dog",
"source": "sensor.energy",
}
}
},
"sensor.dog",
"dog",
),
(
{
"utility_meter": {
"energy_bill": {
"source": "sensor.energy",
}
}
},
"sensor.energy_bill",
"energy_bill",
),
),
)
async def test_entity_name(hass, yaml_config, entity_id, name):
"""Test utility sensor state initializtion."""
assert await async_setup_component(hass, DOMAIN, yaml_config)
await hass.async_block_till_done()
hass.bus.async_fire(EVENT_HOMEASSISTANT_START)
await hass.async_block_till_done()
state = hass.states.get(entity_id)
assert state is not None
assert state.state == STATE_UNKNOWN
assert state.name == name
@pytest.mark.parametrize(
"yaml_config,config_entry_configs",
(