Skip to content

Commit fcdaf12

Browse files
committed
rework entity handling to match device
1 parent 20e011c commit fcdaf12

File tree

1 file changed

+19
-8
lines changed

1 file changed

+19
-8
lines changed

zha/zigbee/group.py

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)