mirror of
https://github.com/home-assistant/core.git
synced 2025-07-14 08:47:10 +00:00
Add matter node added subscription (#84377)
This commit is contained in:
parent
c832982d94
commit
06b4c82a37
@ -4,6 +4,7 @@ from __future__ import annotations
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from chip.clusters import Objects as all_clusters
|
||||
from matter_server.common.models.events import EventType
|
||||
from matter_server.common.models.node_device import AbstractMatterNodeDevice
|
||||
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
@ -42,10 +43,18 @@ class MatterAdapter:
|
||||
self.platform_handlers[platform] = add_entities
|
||||
|
||||
async def setup_nodes(self) -> None:
|
||||
"""Set up all existing nodes."""
|
||||
"""Set up all existing nodes and subscribe to new nodes."""
|
||||
for node in await self.matter_client.get_nodes():
|
||||
self._setup_node(node)
|
||||
|
||||
def node_added_callback(event: EventType, node: MatterNode) -> None:
|
||||
"""Handle node added event."""
|
||||
self._setup_node(node)
|
||||
|
||||
self.config_entry.async_on_unload(
|
||||
self.matter_client.subscribe(EventType.NODE_ADDED, node_added_callback)
|
||||
)
|
||||
|
||||
def _setup_node(self, node: MatterNode) -> None:
|
||||
"""Set up an node."""
|
||||
LOGGER.debug("Setting up entities for node %s", node.node_id)
|
||||
|
@ -3,13 +3,16 @@ from __future__ import annotations
|
||||
|
||||
from unittest.mock import MagicMock
|
||||
|
||||
from matter_server.common.helpers.util import dataclass_from_dict
|
||||
from matter_server.common.models.events import EventType
|
||||
from matter_server.common.models.node import MatterNode
|
||||
import pytest
|
||||
|
||||
from homeassistant.components.matter.const import DOMAIN
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers import device_registry as dr
|
||||
|
||||
from .common import setup_integration_with_node_fixture
|
||||
from .common import load_and_parse_node_fixture, setup_integration_with_node_fixture
|
||||
|
||||
|
||||
async def test_device_registry_single_node_device(
|
||||
@ -80,3 +83,29 @@ async def test_device_registry_bridge(
|
||||
assert device2_entry.model == "Mock Light"
|
||||
assert device2_entry.hw_version is None
|
||||
assert device2_entry.sw_version == "1.49.1"
|
||||
|
||||
|
||||
async def test_node_added_subscription(
|
||||
hass: HomeAssistant,
|
||||
matter_client: MagicMock,
|
||||
integration: MagicMock,
|
||||
) -> None:
|
||||
"""Test subscription to new devices work."""
|
||||
assert matter_client.subscribe.call_count == 1
|
||||
assert matter_client.subscribe.call_args[0][0] == EventType.NODE_ADDED
|
||||
|
||||
node_added_callback = matter_client.subscribe.call_args[0][1]
|
||||
node_data = load_and_parse_node_fixture("onoff-light")
|
||||
node = dataclass_from_dict(
|
||||
MatterNode,
|
||||
node_data,
|
||||
)
|
||||
|
||||
entity_state = hass.states.get("light.mock_onoff_light")
|
||||
assert not entity_state
|
||||
|
||||
node_added_callback(EventType.NODE_ADDED, node)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
entity_state = hass.states.get("light.mock_onoff_light")
|
||||
assert entity_state
|
||||
|
Loading…
x
Reference in New Issue
Block a user