|
11 | 11 | import random
|
12 | 12 | from typing import TYPE_CHECKING, Any, Awaitable, Callable, Iterable, TypeVar, cast
|
13 | 13 |
|
14 |
| -from chip.ChipDeviceCtrl import CommissionableNode, DeviceProxyWrapper |
| 14 | +from chip.ChipDeviceCtrl import DeviceProxyWrapper |
15 | 15 | from chip.clusters import Attribute, Objects as Clusters
|
16 | 16 | from chip.clusters.Attribute import ValueDecodeFailure
|
17 | 17 | from chip.clusters.ClusterObjects import ALL_ATTRIBUTES, ALL_CLUSTERS, Cluster
|
18 |
| -from chip.discovery import CommissionableNode as CommissionableNodeData |
19 | 18 | from chip.exceptions import ChipStackError
|
20 | 19 |
|
21 | 20 | from matter_server.common.helpers.util import convert_ip_address
|
22 |
| -from matter_server.common.models import CommissioningParameters |
| 21 | +from matter_server.common.models import CommissionableNodeData, CommissioningParameters |
23 | 22 | from matter_server.server.helpers.attributes import parse_attributes_from_read_result
|
24 | 23 | from matter_server.server.helpers.utils import ping_ip
|
25 | 24 |
|
@@ -391,37 +390,57 @@ async def open_commissioning_window(
|
391 | 390 | if discriminator is None:
|
392 | 391 | discriminator = 3840 # TODO generate random one
|
393 | 392 |
|
394 |
| - return await self._call_sdk( |
| 393 | + sdk_result = await self._call_sdk( |
395 | 394 | self.chip_controller.OpenCommissioningWindow,
|
396 | 395 | nodeid=node_id,
|
397 | 396 | timeout=timeout,
|
398 | 397 | iteration=iteration,
|
399 | 398 | discriminator=discriminator,
|
400 | 399 | option=option,
|
401 | 400 | )
|
| 401 | + return CommissioningParameters( |
| 402 | + setup_pin_code=sdk_result.setupPinCode, |
| 403 | + setup_manual_code=sdk_result.setupManualCode, |
| 404 | + setup_qr_code=sdk_result.setupQRCode, |
| 405 | + ) |
402 | 406 |
|
403 | 407 | @api_command(APICommand.DISCOVER)
|
404 | 408 | async def discover_commissionable_nodes(
|
405 | 409 | self,
|
406 |
| - ) -> CommissionableNodeData | list[CommissionableNodeData] | None: |
| 410 | + ) -> list[CommissionableNodeData]: |
407 | 411 | """Discover Commissionable Nodes (discovered on BLE or mDNS)."""
|
408 | 412 | if self.chip_controller is None:
|
409 | 413 | raise RuntimeError("Device Controller not initialized.")
|
410 | 414 |
|
411 |
| - result = await self._call_sdk( |
| 415 | + sdk_result = await self._call_sdk( |
412 | 416 | self.chip_controller.DiscoverCommissionableNodes,
|
413 | 417 | )
|
414 |
| - |
415 |
| - def convert(cn: CommissionableNode) -> CommissionableNodeData: |
416 |
| - cnd = CommissionableNodeData() |
417 |
| - # pylint: disable=no-member |
418 |
| - for field in CommissionableNodeData.__dataclass_fields__: |
419 |
| - setattr(cnd, field, getattr(cn, field)) |
420 |
| - return cnd |
421 |
| - |
422 |
| - if isinstance(result, list): |
423 |
| - return [convert(c) for c in result] |
424 |
| - return convert(result) |
| 418 | + if sdk_result is None: |
| 419 | + return [] |
| 420 | + # ensure list |
| 421 | + if not isinstance(sdk_result, list): |
| 422 | + sdk_result = [sdk_result] |
| 423 | + return [ |
| 424 | + CommissionableNodeData( |
| 425 | + instance_name=x.instanceName, |
| 426 | + host_name=x.hostName, |
| 427 | + port=x.port, |
| 428 | + long_discriminator=x.longDiscriminator, |
| 429 | + vendor_id=x.vendorId, |
| 430 | + product_id=x.productId, |
| 431 | + commissioning_mode=x.commissioningMode, |
| 432 | + device_type=x.deviceType, |
| 433 | + device_name=x.deviceName, |
| 434 | + pairing_instruction=x.pairingInstruction, |
| 435 | + pairing_hint=x.pairingHint, |
| 436 | + mrp_retry_interval_idle=x.mrpRetryIntervalIdle, |
| 437 | + mrp_retry_interval_active=x.mrpRetryIntervalActive, |
| 438 | + supports_tcp=x.supportsTcp, |
| 439 | + addresses=x.addresses, |
| 440 | + rotating_id=x.rotatingId, |
| 441 | + ) |
| 442 | + for x in sdk_result |
| 443 | + ] |
425 | 444 |
|
426 | 445 | @api_command(APICommand.INTERVIEW_NODE)
|
427 | 446 | async def interview_node(self, node_id: int) -> None:
|
|
0 commit comments