@@ -433,6 +433,8 @@ def __init__(
433433 super ().__init__ (gateway )
434434 self ._group_info = group_info
435435 self ._entities : dict [str , WebSocketClientEntity ] = {}
436+ if self ._group_info .entities :
437+ self ._build_or_update_entities ()
436438
437439 @property
438440 def name (self ) -> str :
@@ -478,20 +480,29 @@ def info_object(self) -> GroupInfo:
478480 def info_object (self , group_info : GroupInfo ) -> None :
479481 """Set ZHA group info."""
480482 self ._group_info = group_info
481- self ._entities = {
482- entity_info .unique_id : discovery .ENTITY_INFO_CLASS_TO_WEBSOCKET_CLIENT_ENTITY_CLASS [
483- entity_info .__class__
484- ](entity_info , self )
485- for entity_info in self .info_object .entities .values ()
486- }
483+ self ._build_or_update_entities ()
484+
485+ def _build_or_update_entities (self ):
486+ """Build the entities for this device or rebuild them from extended device info."""
487+ current_entity_ids = set (self ._entities .keys ())
488+ for unique_id , entity_info in self ._group_info .entities .items ():
489+ if unique_id in self ._entities :
490+ self ._entities [unique_id ].entity_info = entity_info
491+ current_entity_ids .remove (unique_id )
492+ else :
493+ self ._entities [unique_id ] = (
494+ discovery .ENTITY_INFO_CLASS_TO_WEBSOCKET_CLIENT_ENTITY_CLASS [
495+ entity_info .__class__
496+ ](entity_info , self )
497+ )
498+ for entity_id in current_entity_ids :
499+ self ._entities .pop (entity_id , None )
487500
488501 def emit_platform_entity_event (self , event : EntityStateChangedEvent ) -> None :
489502 """Proxy the firing of an entity event."""
490503 entity = self .group_entities .get (event .unique_id )
491504 if entity is not None :
492505 entity .state = event .state
493- entity .maybe_emit_state_changed_event ()
494- self .emit (f"{ event .unique_id } _{ event .event } " , event )
495506
496507 async def async_add_members (self , members : list [GroupMemberReference ]) -> None :
497508 """Add members to this group."""
0 commit comments