197 files

This commit is contained in:
Home Assistant Version Control
2026-08-21 18:53:37 +00:00
parent 89d9f5e49b
commit 383e9ed04e
197 changed files with 4386 additions and 1837 deletions
@@ -389,9 +389,9 @@ def create_grouped_energy_sensor(
) -> EnergySensor:
name = generate_energy_sensor_name(sensor_config, group_name)
unique_id = sensor_config.get(CONF_UNIQUE_ID)
energy_unique_id = None
if unique_id:
energy_unique_id = f"{unique_id}_energy"
if not unique_id:
unique_id = generate_unique_id(sensor_config)
energy_unique_id = f"{unique_id}_energy"
entity_id = generate_energy_sensor_entity_id(
hass,
sensor_config,
@@ -43,6 +43,11 @@ class SensorType(StrEnum):
TRACKED = "tracked"
UNTRACKED = "untracked"
@property
def label(self) -> str:
"""Capitalized variant, used in the friendly names of the created sensors."""
return self.value.capitalize()
async def find_auto_tracked_power_entities(hass: HomeAssistant, exclude_entities: set[str] | None = None) -> set[str]:
"""Find tracked power entities."""
@@ -124,7 +129,7 @@ class TrackedPowerSensorFactory:
self.config,
energy_sensor,
utility_meter_config={CONF_UTILITY_METER_NET_CONSUMPTION: True, **self.config},
cost_name=str(sensor_type),
cost_name=sensor_type.label,
),
)
@@ -186,7 +191,7 @@ class TrackedPowerSensorFactory:
_LOGGER.debug("Creating tracked grouped power sensor, entities: %s", tracked_entities)
unique_id = f"{unique_id}_{sensor_type}_power"
entity_id = generate_power_sensor_entity_id(self.hass, self.config, name=sensor_type, unique_id=unique_id)
name = generate_power_sensor_name(self.config, name=sensor_type)
name = generate_power_sensor_name(self.config, name=sensor_type.label)
return GroupedPowerSensor(
self.hass,
sensor_config=self.config,
@@ -207,7 +212,7 @@ class TrackedPowerSensorFactory:
_LOGGER.debug("Creating untracked grouped power sensor")
unique_id = f"{unique_id}_{sensor_type}_power"
entity_id = generate_power_sensor_entity_id(self.hass, self.config, name=sensor_type, unique_id=unique_id)
name = generate_power_sensor_name(self.config, name=sensor_type)
name = generate_power_sensor_name(self.config, name=sensor_type.label)
return SubtractGroupSensor(
self.hass,
entity_id=entity_id,
@@ -226,7 +231,7 @@ class TrackedPowerSensorFactory:
"""Create an energy sensor for a power sensor."""
_LOGGER.debug("Creating %s grouped energy sensor", sensor_type)
unique_id = f"{power_sensor.unique_id}_{sensor_type}_energy"
name = generate_energy_sensor_name(self.config, sensor_type)
name = generate_energy_sensor_name(self.config, sensor_type.label)
entity_id = generate_energy_sensor_entity_id(self.hass, self.config, name=sensor_type, unique_id=unique_id)
return VirtualEnergySensor(
hass=self.hass,
+4 -7
View File
@@ -242,7 +242,7 @@ async def _get_power_profile(
power_profile = None
try:
model_info = await discovery_manager.extract_model_info_from_device_info(source_entity.entity_entry)
model_info = discovery_manager.extract_model_info(source_entity)
power_profile = await get_power_profile(
hass,
sensor_config,
@@ -482,7 +482,7 @@ class VirtualPowerSensor(PowerSensor, SensorEntity):
await self._strategy_instance.on_start(hass)
entities = self._track_entities
if (not entities and self._source_entity.entity_id == DUMMY_ENTITY_ID) or not entities:
if (not entities and self._source_entity.is_dummy) or not entities:
entities.add(DUMMY_ENTITY_ID)
for entity_id in entities:
new_state = (
@@ -558,7 +558,7 @@ class VirtualPowerSensor(PowerSensor, SensorEntity):
)
entities_to_track.extend(self._sub_profile_selector.get_tracking_entities())
if self._source_entity.entity_id != DUMMY_ENTITY_ID:
if not self._source_entity.is_dummy:
entities_to_track.append(self._source_entity.entity_id)
if self._availability_entity and self._availability_entity not in entities_to_track:
@@ -681,10 +681,7 @@ class VirtualPowerSensor(PowerSensor, SensorEntity):
return self._apply_power_adjustments(power, standby_power)
def _resolve_calculation_state(self, state: State) -> State | None:
if (
self._source_entity.entity_id == DUMMY_ENTITY_ID
and self._calculation_strategy != CalculationStrategy.MULTI_SWITCH
):
if self._source_entity.is_dummy and self._calculation_strategy != CalculationStrategy.MULTI_SWITCH:
if self._availability_entity and state.entity_id == self._availability_entity:
return State(DUMMY_ENTITY_ID, STATE_ON)
return state