get device type
diff --git a/local_agent/translation_layer/gdm_manager.py b/local_agent/translation_layer/gdm_manager.py
index 4e33b4f..950f20e 100644
--- a/local_agent/translation_layer/gdm_manager.py
+++ b/local_agent/translation_layer/gdm_manager.py
@@ -14,10 +14,13 @@
"""Module for GDM manager."""
import threading
-from typing import Any, Callable, Dict, List, Optional
+from typing import Any, Collection, List, Mapping, Optional, Set, Tuple, Type,Callable,Dict
import gazoo_device
from gazoo_device import errors as gdm_errors
+from gazoo_device.auxiliary_devices import chip_tool
+from gazoo_device.capabilities.matter_endpoints.interfaces import endpoint_base
+from gazoo_device.capabilities.matter_clusters.interfaces import cluster_base
from local_agent import errors as agent_errors
from local_agent import logger as logger_module
@@ -57,67 +60,81 @@
self._mgr.detect(force_overwrite=self._first_detection,
log_directory=_DEVICE_DETECTION_LOG_DIR)
- device_id = 'chip_tool-0000'
- device_type = 'chip_tool'
- serial_number = '00000000'
+ chip_tool_id = 'chip_tool-0000'
+ # device_type = 'chip_tool'
+ # serial_number = '00000000'
connected_devices = self._mgr.get_devices('all')
- if not device_id in connected_devices:
- return
+ if not chip_tool_id in connected_devices:
+ return []
- if not self._mgr.is_device_connected(device_id):
- return
+ if not self._mgr.is_device_connected(chip_tool_id):
+ return []
- with self._mgr.create_and_close_device(device_id) as device:
+ with self._mgr.create_and_close_device(chip_tool_id) as device:
+ if not isinstance(device, chip_tool.ChipTool):
+ return []
+
device.set_property("matter_node_id", 6666)
- # devices has to be commissioned to chip tool first
- matter_endpoints = device.matter_endpoints.get_supported_endpoints()
- endpoint_clusters_mapping = device.matter_endpoints.get_supported_endpoints_and_clusters()
- cluster_capabilities = list(set().union(*endpoint_clusters_mapping.values()))
+ # devices has to be commissioned to chip tool first
- # connected_devices = self._mgr.get_devices('all')
- # for device_id, info in connected_devices.items():
+ endpoint_instances_and_cluster_mapping = device.matter_endpoints.get_supported_endpoint_instances_and_cluster_flavors()
+
+ for endpoint_instances_and_cluster_pair in endpoint_instances_and_cluster_mapping.items():
+ endpoint_instance = endpoint_instances_and_cluster_pair[0]
+ device_type = endpoint_instance.name
+
+ # Skip root node
+ if(device_type == "root_node"):
+ continue
- # # The device has been removed.
- # if not self._mgr.is_device_connected(device_id):
- # continue
+ device_id = endpoint_instance.id
+ cluster_capabilities = sorted(cluster.get_capability_name() for cluster in endpoint_instances_and_cluster_pair[1])
- # # The first time this device is detected.
- # if device_id not in self._connected_devices:
- # serial_number = info['persistent']['serial_number']
- # device_type = info['persistent']['device_type']
+
+ # connected_devices = self._mgr.get_devices('all')
+ # for device_id, info in connected_devices.items():
- # # Retrieve the Matter endpoints and clusters in the first detection.
- # with self._mgr.create_and_close_device(device_id) as device:
- # # If the device is not Matter device
- # if not device.has_capabilities(["matter_endpoints"]):
- # matter_endpoints = []
- # cluster_capabilities = []
- # else:
- # # devices has to be commissioned to chip tool first
- # matter_endpoints = device.matter_endpoints.get_supported_endpoints()
- # endpoint_clusters_mapping = device.matter_endpoints.get_supported_endpoints_and_clusters()
- # cluster_capabilities = list(set(capabilities).union(*endpoint_clusters_mapping.values()))
+ # # The device has been removed.
+ # if not self._mgr.is_device_connected(device_id):
+ # continue
- # # (deprecate) Additional non-Matter capabilities.
- # if device.has_capabilities([common.PWRPC_COMMON_CAPABILITY]):
- # matter_endpoints.append(common.PWRPC_COMMON_CAPABILITY)
- # cluster_capabilities.append(common.PWRPC_COMMON_CAPABILITY)
+ # # The first time this device is detected.
+ # if device_id not in self._connected_devices:
+ # serial_number = info['persistent']['serial_number']
+ # device_type = info['persistent']['device_type']
- # Therefore, we only need to update the command handlers once.
- self._update_handlers_cls_map(device_type, matter_endpoints)
+ # # Retrieve the Matter endpoints and clusters in the first detection.
+ # with self._mgr.create_and_close_device(device_id) as device:
+ # # If the device is not Matter device
+ # if not device.has_capabilities(["matter_endpoints"]):
+ # matter_endpoints = []
+ # cluster_capabilities = []
+ # else:
+ # matter_endpoints = device.matter_endpoints.get_supported_endpoints()
+ # endpoint_clusters_mapping = device.matter_endpoints.get_supported_endpoints_and_clusters()
+ # cluster_capabilities = list(set(capabilities).union(*endpoint_clusters_mapping.values()))
- # Store the device information in cache.
- device_info = {
- 'deviceId': device_id,
- 'serialNumber': serial_number,
- 'deviceType': device_type,
- 'capabilities': cluster_capabilities,
- }
- self._connected_devices[device_id] = device_info
+ # # (deprecate) Additional non-Matter capabilities.
+ # if device.has_capabilities([common.PWRPC_COMMON_CAPABILITY]):
+ # matter_endpoints.append(common.PWRPC_COMMON_CAPABILITY)
+ # cluster_capabilities.append(common.PWRPC_COMMON_CAPABILITY)
- devices.append(self._connected_devices[device_id])
+ # Therefore, we only need to update the command handlers once.
+ self._update_handlers_cls_map(device_type, device_type)
+
+ # We could not get the serial number
+ # Store the device information in cache.
+ device_info = {
+ 'deviceId': device_id,
+ 'serialNumber': 'unknown',
+ 'deviceType': device_type,
+ 'capabilities': cluster_capabilities,
+ }
+ self._connected_devices[device_id] = device_info
+
+ devices.append(self._connected_devices[device_id])
self._first_detection = False