基于Google Home Sample App(GHA)获取Matter设备品牌、型号的方法
如何在Google Home Sample App中获取Matter设备的品牌(Make)、型号(Model)信息?
我是Matter应用开发的新手,目前需要获取Matter设备的品牌(Make)、型号(Model)及设备类型等信息。在研究Google Home Sample App(GHA)时,仅能获取到deviceType、vendorId和productId字段,请问是否存在可行方法获取所需的额外信息?
相关代码如下:
override fun onCommissioningRequested(metadata: CommissioningRequestMetadata) { Timber.d( "*** onCommissioningRequested ***:\n" + "\tdeviceDescriptor: " + "deviceType [${metadata.deviceDescriptor.deviceType}] " + "vendorId [${metadata.deviceDescriptor.vendorId}] " + "productId [${metadata.deviceDescriptor.productId}]\n" + "\tnetworkLocation: " + "IP address toString() [${metadata.networkLocation.ipAddress}] " + "IP address hostAddress [${metadata.networkLocation.ipAddress.hostAddress}] " + "port [${metadata.networkLocation.port}]\n" + "\tpassCode [${metadata.passcode}]") }
可行解决方案
1. 配网完成后读取Matter标准集群属性
Matter协议的**Basic Information Cluster(基本信息集群)**定义了VendorName(品牌)、ProductName(型号)等核心字段。设备完成配网后,可通过Google Home的设备对象直接读取这些属性:
// 假设已获取配网成功后的Device实例 val basicInfoCluster = device.getCluster(BasicInformationCluster::class.java) // 读取品牌名称 basicInfoCluster.readVendorName() .addOnSuccessListener { vendorName -> Timber.d("设备品牌:$vendorName") } // 读取型号名称 basicInfoCluster.readProductName() .addOnSuccessListener { productName -> Timber.d("设备型号:$productName") } // 可选:读取硬件/软件版本信息 basicInfoCluster.readHardwareVersionString() .addOnSuccessListener { hwVersion -> Timber.d("硬件版本:$hwVersion") }
2. 在配网完成回调中获取完整设备元数据
配网流程结束后,onCommissioningComplete回调会返回包含完整信息的设备对象,可从中提取名称、自定义属性等内容:
override fun onCommissioningComplete(result: CommissioningResult) { if (result.isSuccess) { val device = result.device // 获取设备名称(通常包含品牌+型号) Timber.d("设备名称:${device.name}") // 遍历设备所有属性,查找额外信息 device.attributes.forEach { key, value -> Timber.d("设备属性 $key: $value") } } }
3. 解析配网请求中的设备认证信息
配网请求的CommissioningRequestMetadata包含设备认证数据,部分设备会在其中附带厂商相关信息,可进一步解析:
override fun onCommissioningRequested(metadata: CommissioningRequestMetadata) { metadata.deviceAttestationInfo?.let { attestationInfo -> Timber.d("认证厂商ID:${attestationInfo.vendorId}") Timber.d("认证产品ID:${attestationInfo.productId}") // 可选:解析设备证书中的厂商字段(需处理X.509证书格式) attestationInfo.deviceCertificate?.let { cert -> // 此处可通过证书解析工具提取厂商名称等信息 } } }
注意事项
- 配网前的
CommissioningRequestMetadata仅提供基础标识字段,完整的品牌、型号信息必须在配网完成后读取。 - 确保目标设备已正确实现Matter Basic Information Cluster,否则无法读取对应字段。
- 部分厂商会在自定义集群中提供额外设备信息,可根据设备型号针对性扩展读取逻辑。
内容的提问来源于stack exchange,提问作者Jitendra Prajapati
相关产品推荐
相关产品推荐

