From 58a53046f20eec58707679c077d96345c68744d8 Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Mon, 17 Jan 2022 14:23:12 +0100 Subject: [PATCH] Move list to dict in utility-meter discovery (#63808) * Move list to dict in utility-meter discovery * Reuse name variable Co-authored-by: epenet --- .../components/utility_meter/__init__.py | 25 +++++++++++-------- .../components/utility_meter/sensor.py | 15 ++++++++--- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/homeassistant/components/utility_meter/__init__.py b/homeassistant/components/utility_meter/__init__.py index bdb88d05240..bf9beae060c 100644 --- a/homeassistant/components/utility_meter/__init__.py +++ b/homeassistant/components/utility_meter/__init__.py @@ -7,11 +7,13 @@ import voluptuous as vol from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN from homeassistant.const import CONF_NAME +from homeassistant.core import HomeAssistant from homeassistant.helpers import discovery import homeassistant.helpers.config_validation as cv from homeassistant.helpers.dispatcher import async_dispatcher_send from homeassistant.helpers.entity_component import EntityComponent from homeassistant.helpers.restore_state import RestoreEntity +from homeassistant.helpers.typing import ConfigType from .const import ( 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.""" component = EntityComponent(_LOGGER, DOMAIN, hass) hass.data[DATA_UTILITY] = {} 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) hass.data[DATA_UTILITY][meter] = conf @@ -115,12 +117,13 @@ async def async_setup(hass, config): 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, - [{CONF_METER: meter, CONF_NAME: conf.get(CONF_NAME, meter)}], + {name: {CONF_METER: meter, CONF_NAME: name}}, config, ) ) @@ -134,15 +137,15 @@ async def async_setup(hass, config): ) # add one meter for each tariff - tariff_confs = [] + tariff_confs = {} for tariff in conf[CONF_TARIFFS]: - tariff_confs.append( - { - CONF_METER: meter, - CONF_NAME: f"{meter} {tariff}", - CONF_TARIFF: tariff, - } - ) + name = f"{meter} {tariff}" + tariff_confs[name] = { + CONF_METER: meter, + CONF_NAME: name, + CONF_TARIFF: tariff, + } + hass.async_create_task( discovery.async_load_platform( hass, SENSOR_DOMAIN, DOMAIN, tariff_confs, config diff --git a/homeassistant/components/utility_meter/sensor.py b/homeassistant/components/utility_meter/sensor.py index b8bc452028f..b65628d5f0b 100644 --- a/homeassistant/components/utility_meter/sensor.py +++ b/homeassistant/components/utility_meter/sensor.py @@ -1,4 +1,6 @@ """Utility meter from sensors providing raw data.""" +from __future__ import annotations + from datetime import datetime from decimal import Decimal, DecimalException, InvalidOperation import logging @@ -21,14 +23,16 @@ from homeassistant.const import ( STATE_UNAVAILABLE, STATE_UNKNOWN, ) -from homeassistant.core import callback +from homeassistant.core import HomeAssistant, callback from homeassistant.helpers import entity_platform from homeassistant.helpers.dispatcher import async_dispatcher_connect +from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.event import ( async_track_point_in_time, async_track_state_change_event, ) from homeassistant.helpers.restore_state import RestoreEntity +from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType import homeassistant.util.dt as dt_util from .const import ( @@ -88,14 +92,19 @@ PAUSED = "paused" 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.""" if discovery_info is None: _LOGGER.error("This platform is only available through discovery") return meters = [] - for conf in discovery_info: + for conf in discovery_info.values(): meter = conf[CONF_METER] conf_meter_source = hass.data[DATA_UTILITY][meter][CONF_SOURCE_SENSOR] conf_meter_type = hass.data[DATA_UTILITY][meter].get(CONF_METER_TYPE)