1111 STATE_UNKNOWN ,
1212)
1313from homeassistant .core import Event , EventStateChangedData , HomeAssistant , callback
14+ from homeassistant .helpers import device_registry as dr
1415from homeassistant .helpers import entity_registry as er
1516from homeassistant .helpers .entity_platform import (
1617 AddConfigEntryEntitiesCallback ,
2223
2324from .const import (
2425 ATTR_ENTITIES ,
26+ ATTR_FRIENDLY_NAMES ,
2527 CONF_LABEL ,
2628 CONF_STATE_LOWER_LIMIT ,
2729 CONF_STATE_NOT ,
@@ -264,6 +266,7 @@ def _calc_state(self) -> None:
264266
265267 state_is_on : bool | None = False
266268 entities_on : list [str ] = []
269+ friendly_names : list [str ] = []
267270
268271 entity_registry = er .async_get (self .hass )
269272
@@ -281,6 +284,8 @@ def _calc_state(self) -> None:
281284 ):
282285 state_is_on = True
283286 entities_on .append (entity_id )
287+ name = self ._get_device_or_entity_name (entity_id )
288+ friendly_names .append (name )
284289
285290 if self ._state_type == StateTypes .NOT_STATE :
286291 for entity_id in self ._state_dict .keys ():
@@ -296,6 +301,8 @@ def _calc_state(self) -> None:
296301 ):
297302 state_is_on = True
298303 entities_on .append (entity_id )
304+ name = self ._get_device_or_entity_name (entity_id )
305+ friendly_names .append (name )
299306
300307 if self ._state_type == StateTypes .NUMERIC_STATE :
301308 for entity_id in self ._state_dict .keys ():
@@ -320,6 +327,9 @@ def _calc_state(self) -> None:
320327 ):
321328 state_is_on = True
322329 entities_on .append (entity_id )
330+ name = self ._get_device_or_entity_name (entity_id )
331+ friendly_names .append (name )
332+
323333 LOGGER .debug (
324334 "State %s is below lower limit %s and above upper limit %s for %s" ,
325335 entity_state ,
@@ -334,6 +344,9 @@ def _calc_state(self) -> None:
334344 ):
335345 state_is_on = True
336346 entities_on .append (entity_id )
347+ name = self ._get_device_or_entity_name (entity_id )
348+ friendly_names .append (name )
349+
337350 LOGGER .debug (
338351 "State %s is below lower limit %s for %s" ,
339352 entity_state ,
@@ -347,6 +360,9 @@ def _calc_state(self) -> None:
347360 ):
348361 state_is_on = True
349362 entities_on .append (entity_id )
363+ name = self ._get_device_or_entity_name (entity_id )
364+ friendly_names .append (name )
365+
350366 LOGGER .debug (
351367 "State %s is above upper limit %s for %s" ,
352368 entity_state ,
@@ -368,3 +384,20 @@ def _calc_state(self) -> None:
368384
369385 self ._attr_is_on = state_is_on
370386 self ._attr_extra_state_attributes [ATTR_ENTITIES ] = entities_on
387+ self ._attr_extra_state_attributes [ATTR_FRIENDLY_NAMES ] = friendly_names
388+
389+ def _get_device_or_entity_name (
390+ self ,
391+ entity_id : str ,
392+ ) -> str :
393+ """Get the device or entity name."""
394+ entity_registry = er .async_get (self .hass )
395+ entity_entry = entity_registry .async_get (entity_id )
396+ if not entity_entry :
397+ return entity_id
398+ if entity_entry .device_id :
399+ device_registry = dr .async_get (self .hass )
400+ device_entry = device_registry .async_get (device_id = entity_entry .device_id )
401+ if device_entry is not None :
402+ return f"{ device_entry .name_by_user or device_entry .name } ({ entity_entry .name or entity_entry .original_name or entity_id } )"
403+ return entity_entry .name or entity_entry .original_name or entity_id
0 commit comments