@@ -80,6 +80,17 @@ def create_energy_sensor(
8080 return _create_virtual_energy_sensor (hass , sensor_config , power_sensor , source_entity )
8181
8282
83+ def resolve_existing_energy_sensor (hass : HomeAssistant , energy_sensor_id : str ) -> RealEnergySensor :
84+ """Look up an existing energy sensor in the entity registry, raising when not found."""
85+ entity_entry = er .async_get (hass ).async_get (energy_sensor_id )
86+ if entity_entry is None :
87+ raise SensorConfigurationError (
88+ f"No energy sensor with id { energy_sensor_id } found in your HA instance. "
89+ "Double check the `energy_sensor_id` setting" ,
90+ )
91+ return RealEnergySensor .from_registry_entry (entity_entry )
92+
93+
8394def _get_existing_energy_sensor (
8495 hass : HomeAssistant ,
8596 sensor_config : ConfigType ,
@@ -88,19 +99,7 @@ def _get_existing_energy_sensor(
8899 if CONF_ENERGY_SENSOR_ID not in sensor_config :
89100 return None
90101
91- ent_reg = er .async_get (hass )
92- energy_sensor_id = sensor_config [CONF_ENERGY_SENSOR_ID ]
93- entity_entry = ent_reg .async_get (energy_sensor_id )
94- if entity_entry is None :
95- raise SensorConfigurationError (
96- f"No energy sensor with id { energy_sensor_id } found in your HA instance. "
97- "Double check `energy_sensor_id` setting" ,
98- )
99- return RealEnergySensor (
100- entity_entry .entity_id ,
101- entity_entry .name or entity_entry .original_name ,
102- entity_entry .unique_id ,
103- )
102+ return resolve_existing_energy_sensor (hass , sensor_config [CONF_ENERGY_SENSOR_ID ])
104103
105104
106105def _get_related_energy_sensor (
@@ -227,12 +226,7 @@ def _find_related_real_energy_sensor(
227226 if not energy_sensors :
228227 return None
229228
230- entity_entry = energy_sensors [0 ]
231- return RealEnergySensor (
232- entity_entry .entity_id ,
233- entity_entry .name or entity_entry .original_name ,
234- entity_entry .unique_id ,
235- )
229+ return RealEnergySensor .from_registry_entry (energy_sensors [0 ])
236230
237231
238232class EnergySensor (BaseEntity ):
@@ -365,6 +359,11 @@ def __init__(
365359 self ._name = name
366360 self ._unique_id = unique_id
367361
362+ @classmethod
363+ def from_registry_entry (cls , entry : er .RegistryEntry ) -> RealEnergySensor :
364+ """Create a reference to an existing energy sensor from its registry entry."""
365+ return cls (entry .entity_id , entry .name or entry .original_name , entry .unique_id )
366+
368367 @property
369368 def name (self ) -> str | None :
370369 """Return the name of the sensor."""
0 commit comments