Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 2 additions & 33 deletions matter_server/server/device_controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
from chip.discovery import DiscoveryType
from chip.exceptions import ChipStackError
from chip.native import PyChipError
from zeroconf import BadTypeInNameException, IPVersion, ServiceStateChange, Zeroconf
from zeroconf import IPVersion, ServiceStateChange, Zeroconf
from zeroconf.asyncio import AsyncServiceBrowser, AsyncServiceInfo, AsyncZeroconf

from matter_server.common.const import VERBOSE_LOG_LEVEL
Expand Down Expand Up @@ -215,7 +215,7 @@ async def start(self) -> None:
LOGGER.info("Loaded %s nodes from stored configuration", len(self._nodes))
# set-up mdns browser
self._aiozc = AsyncZeroconf(ip_version=IPVersion.All)
services = [MDNS_TYPE_OPERATIONAL_NODE, MDNS_TYPE_COMMISSIONABLE_NODE]
services = [MDNS_TYPE_OPERATIONAL_NODE]
self._aiobrowser = AsyncServiceBrowser(
self._aiozc.zeroconf,
services,
Expand Down Expand Up @@ -1510,13 +1510,6 @@ def _on_mdns_service_state_change(
# We already have a timer to resolve this service, so ignore this callback.
return

if service_type == MDNS_TYPE_COMMISSIONABLE_NODE:
# process the event with a debounce timer
self._mdns_event_timer[name] = self._loop.call_later(
0.5, self._on_mdns_commissionable_node_state, name, state_change
)
return

if service_type == MDNS_TYPE_OPERATIONAL_NODE:
if self._fabric_id_hex is None or self._fabric_id_hex not in name.lower():
# filter out messages that are not for our fabric
Expand Down Expand Up @@ -1566,30 +1559,6 @@ def _on_mdns_operational_node_state(
)
)

def _on_mdns_commissionable_node_state(
self, name: str, state_change: ServiceStateChange
) -> None:
"""Handle a (commissionable) Matter node MDNS state change."""
self._mdns_event_timer.pop(name, None)
logger = LOGGER.getChild("mdns")

try:
info = AsyncServiceInfo(MDNS_TYPE_COMMISSIONABLE_NODE, name)
except BadTypeInNameException as ex:
logger.debug("Ignoring record with bad type in name: %s: %s", name, ex)
return

async def handle_commissionable_node_added() -> None:
if TYPE_CHECKING:
assert self._aiozc is not None
await info.async_request(self._aiozc.zeroconf, 3000)
logger.debug("Discovered commissionable Matter node: %s", info)

if state_change == ServiceStateChange.Added:
asyncio.create_task(handle_commissionable_node_added())
elif state_change == ServiceStateChange.Removed:
logger.debug("Commissionable Matter node disappeared: %s", info)

def _write_node_state(self, node_id: int, force: bool = False) -> None:
"""Schedule the write of the current node state to persistent storage."""
if node_id not in self._nodes:
Expand Down