Move list to dict in utility-meter discovery (#63808)

* Move list to dict in utility-meter discovery

* Reuse name variable

Co-authored-by: epenet <epenet@users.noreply.github.com>
This commit is contained in:
epenet 2022-01-17 14:23:12 +01:00 committed by GitHub
parent c109d59862
commit 58a53046f2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 14 deletions

View File

@ -7,11 +7,13 @@ import voluptuous as vol
from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN
from homeassistant.const import CONF_NAME from homeassistant.const import CONF_NAME
from homeassistant.core import HomeAssistant
from homeassistant.helpers import discovery from homeassistant.helpers import discovery
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.dispatcher import async_dispatcher_send from homeassistant.helpers.dispatcher import async_dispatcher_send
from homeassistant.helpers.entity_component import EntityComponent from homeassistant.helpers.entity_component import EntityComponent
from homeassistant.helpers.restore_state import RestoreEntity from homeassistant.helpers.restore_state import RestoreEntity
from homeassistant.helpers.typing import ConfigType
from .const import ( from .const import (
ATTR_TARIFF, ATTR_TARIFF,
@ -101,13 +103,13 @@ CONFIG_SCHEMA = vol.Schema(
) )
async def async_setup(hass, config): async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
"""Set up an Utility Meter.""" """Set up an Utility Meter."""
component = EntityComponent(_LOGGER, DOMAIN, hass) component = EntityComponent(_LOGGER, DOMAIN, hass)
hass.data[DATA_UTILITY] = {} hass.data[DATA_UTILITY] = {}
register_services = False register_services = False
for meter, conf in config.get(DOMAIN).items(): for meter, conf in config[DOMAIN].items():
_LOGGER.debug("Setup %s.%s", DOMAIN, meter) _LOGGER.debug("Setup %s.%s", DOMAIN, meter)
hass.data[DATA_UTILITY][meter] = conf hass.data[DATA_UTILITY][meter] = conf
@ -115,12 +117,13 @@ async def async_setup(hass, config):
if not conf[CONF_TARIFFS]: if not conf[CONF_TARIFFS]:
# only one entity is required # only one entity is required
name = conf.get(CONF_NAME, meter)
hass.async_create_task( hass.async_create_task(
discovery.async_load_platform( discovery.async_load_platform(
hass, hass,
SENSOR_DOMAIN, SENSOR_DOMAIN,
DOMAIN, DOMAIN,
[{CONF_METER: meter, CONF_NAME: conf.get(CONF_NAME, meter)}], {name: {CONF_METER: meter, CONF_NAME: name}},
config, config,
) )
) )
@ -134,15 +137,15 @@ async def async_setup(hass, config):
) )
# add one meter for each tariff # add one meter for each tariff
tariff_confs = [] tariff_confs = {}
for tariff in conf[CONF_TARIFFS]: for tariff in conf[CONF_TARIFFS]:
tariff_confs.append( name = f"{meter} {tariff}"
{ tariff_confs[name] = {
CONF_METER: meter, CONF_METER: meter,
CONF_NAME: f"{meter} {tariff}", CONF_NAME: name,
CONF_TARIFF: tariff, CONF_TARIFF: tariff,
} }
)
hass.async_create_task( hass.async_create_task(
discovery.async_load_platform( discovery.async_load_platform(
hass, SENSOR_DOMAIN, DOMAIN, tariff_confs, config hass, SENSOR_DOMAIN, DOMAIN, tariff_confs, config

View File

@ -1,4 +1,6 @@
"""Utility meter from sensors providing raw data.""" """Utility meter from sensors providing raw data."""
from __future__ import annotations
from datetime import datetime from datetime import datetime
from decimal import Decimal, DecimalException, InvalidOperation from decimal import Decimal, DecimalException, InvalidOperation
import logging import logging
@ -21,14 +23,16 @@ from homeassistant.const import (
STATE_UNAVAILABLE, STATE_UNAVAILABLE,
STATE_UNKNOWN, STATE_UNKNOWN,
) )
from homeassistant.core import callback from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers import entity_platform from homeassistant.helpers import entity_platform
from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.dispatcher import async_dispatcher_connect
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.event import ( from homeassistant.helpers.event import (
async_track_point_in_time, async_track_point_in_time,
async_track_state_change_event, async_track_state_change_event,
) )
from homeassistant.helpers.restore_state import RestoreEntity from homeassistant.helpers.restore_state import RestoreEntity
from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
import homeassistant.util.dt as dt_util import homeassistant.util.dt as dt_util
from .const import ( from .const import (
@ -88,14 +92,19 @@ PAUSED = "paused"
COLLECTING = "collecting" COLLECTING = "collecting"
async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): async def async_setup_platform(
hass: HomeAssistant,
config: ConfigType,
async_add_entities: AddEntitiesCallback,
discovery_info: DiscoveryInfoType | None = None,
) -> None:
"""Set up the utility meter sensor.""" """Set up the utility meter sensor."""
if discovery_info is None: if discovery_info is None:
_LOGGER.error("This platform is only available through discovery") _LOGGER.error("This platform is only available through discovery")
return return
meters = [] meters = []
for conf in discovery_info: for conf in discovery_info.values():
meter = conf[CONF_METER] meter = conf[CONF_METER]
conf_meter_source = hass.data[DATA_UTILITY][meter][CONF_SOURCE_SENSOR] conf_meter_source = hass.data[DATA_UTILITY][meter][CONF_SOURCE_SENSOR]
conf_meter_type = hass.data[DATA_UTILITY][meter].get(CONF_METER_TYPE) conf_meter_type = hass.data[DATA_UTILITY][meter].get(CONF_METER_TYPE)