217 files

This commit is contained in:
Home Assistant Version Control
2026-07-30 23:59:38 +00:00
parent d43a63ad29
commit 7b5e46e702
217 changed files with 15978 additions and 3912 deletions
@@ -1,5 +1,6 @@
import inspect
import logging
from typing import Any
from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry, ConfigFlow
from homeassistant.const import CONF_NAME
@@ -84,7 +85,7 @@ async def add_to_associated_group(
if not group_entry and len(group_entry_id) != 32:
group_entry = hass.config_entries.async_entry_for_domain_unique_id(DOMAIN, group_entry_id)
if not group_entry:
additional_args: dict = {}
additional_args: dict[str, Any] = {}
signature = inspect.signature(ConfigEntry.__init__)
if "discovery_keys" in signature.parameters:
additional_args["discovery_keys"] = {}
@@ -48,6 +48,7 @@ from homeassistant.helpers.event import (
from homeassistant.helpers.json import JSONEncoder
from homeassistant.helpers.singleton import singleton
from homeassistant.helpers.storage import Store
from homeassistant.helpers.typing import ConfigType
from custom_components.powercalc.analytics.analytics import collect_analytics
from custom_components.powercalc.const import (
@@ -124,6 +125,11 @@ from custom_components.powercalc.unit import (
ENTITY_ID_FORMAT = SENSOR_DOMAIN + ".{}"
_LOGGER = logging.getLogger(__name__)
# Predicate used to narrow a list of entities down to the group members.
EntityPredicate = Callable[[Entity], bool]
# Shape persisted by PreviousStateStoreStore: group id -> entity id -> serialized State.
StoredStates = dict[str, dict[str, Any]]
STORAGE_KEY = "powercalc_group"
STORAGE_VERSION = 2
# How long between periodically saving the current states to disk
@@ -134,7 +140,7 @@ def create_group_sensors_yaml(
hass: HomeAssistant,
sensor_config: dict[str, Any],
entities: list[Entity],
filters: list[Callable] | None = None,
filters: list[EntityPredicate] | None = None,
) -> list[Entity]:
"""Create grouped power and energy sensors."""
power_sensor_ids = filter_entity_list_by_class(entities, SensorDeviceClass.POWER, filters)
@@ -155,7 +161,7 @@ def create_group_sensors_yaml(
async def create_group_sensors_gui(
hass: HomeAssistant,
entry: ConfigEntry,
sensor_config: dict,
sensor_config: ConfigType,
) -> list[Entity]:
"""Create group sensors based on a config_entry."""
group_name = str(entry.data.get(CONF_NAME))
@@ -220,9 +226,9 @@ def create_group_sensors_custom(
def filter_entity_list_by_class(
all_entities: list,
all_entities: list[Entity],
device_class: SensorDeviceClass,
default_filters: list[Callable] | None = None,
default_filters: list[EntityPredicate] | None = None,
) -> set[str]:
"""Filter entity list to only include entities of the given class."""
class_name = PowerSensor if device_class == SensorDeviceClass.POWER else EnergySensor
@@ -346,7 +352,7 @@ def create_grouped_power_sensor(
hass: HomeAssistant,
group_name: str,
group_type: GroupType,
sensor_config: dict,
sensor_config: ConfigType,
power_sensor_ids: set[str],
) -> GroupedPowerSensor:
name = generate_power_sensor_name(sensor_config, group_name)
@@ -378,7 +384,7 @@ def create_grouped_energy_sensor(
hass: HomeAssistant,
group_name: str,
group_type: GroupType,
sensor_config: dict,
sensor_config: ConfigType,
energy_sensor_ids: set[str],
power_sensor: GroupedPowerSensor | None,
) -> EnergySensor:
@@ -941,7 +947,7 @@ class PreviousStateStore:
return instance
def __init__(self, hass: HomeAssistant) -> None:
self.store: Store = PreviousStateStoreStore(
self.store: Store[StoredStates] = PreviousStateStoreStore(
hass,
STORAGE_VERSION,
STORAGE_KEY,
@@ -1007,7 +1013,7 @@ class PreviousStateStore:
)
class PreviousStateStoreStore(Store):
class PreviousStateStoreStore(Store[StoredStates]):
"""Store area registry data."""
async def _async_migrate_func( # type: ignore
@@ -33,7 +33,7 @@ def create_subtract_group_sensors(
validate_config(config)
group_name = str(config.get(CONF_NAME))
base_entity_id = str(config.get(CONF_ENTITY_ID))
subtract_entities = cast(list, config.get(CONF_SUBTRACT_ENTITIES))
subtract_entities = cast(list[str], config.get(CONF_SUBTRACT_ENTITIES))
name = generate_power_sensor_name(config, group_name)
unique_id = config.get(CONF_UNIQUE_ID, generate_unique_id(config))