更新时间:2024-05-17 10:24:11下载pdf
Matter 协议是 CSA 联盟 与 Google、Amazon、Apple 共同推进的物联网标准连接方案,旨在实现所有 IoT 设备的兼容性,实现一套协议控制所有设备。本文介绍 Matter 设备接入后的相关管理和控制功能。
在使用 Matter 设备前,您需要完成 开发项目工程配置 以及 实现 Matter 设备配网,详情请参考 Matter 设备配网 系列文档。
完成上述流程后,即可添加 Matter 设备到 App 中进行使用。
接口说明
DeviceBean.java
boolean isMatter();
代码示例
Java:
DeviceBean deviceBean = ThingHomeSdk.getDataInstance().getDeviceBean(devId);
if(deviceBean != null) {
boolean isMatter = deviceBean.isMatter();
}
与普通设备一样,调用 publishDps
进行下发即可。
IThingDevice iThingDevice = ThingHomeSdk.newDeviceInstance(devId);
iThingDevice.publishDps(dps, new IResultCallback() {
@Override
public void onError(String code, String error) {
}
@Override
public void onSuccess() {
}
});
Matter 设备目前支持的通道情况如下:
设备类型 | 支持通道 | 备注 |
---|---|---|
涂鸦 Matter 基于 Wi-Fi |
|
涂鸦局域网通道待后续硬件固件支持 |
涂鸦 Matter 网关 |
|
- |
涂鸦 Matter Thread 设备 |
|
- |
三方 Matter 设备 | Matter 局域网通道 | - |
与其他设备一样,可以使用 DeviceBean
的 isOnline
字段综合判断设备的在离线状态。
接口说明
DeviceBean.java
boolean getIsOnline();
代码示例
Java:
DeviceBean deviceBean = ThingHomeSdk.getDataInstance().getDeviceBean(devId);
if(deviceBean != null) {
boolean isMatter = deviceBean.getIsOnline();
}
跨 Fabric(Multiple Fabrics) 是 Matter 设备的特色功能,让设备基于 Matter 支持跨不同厂商生态使用的特性,可以同时在多个支持 Matter 生态的 App 上激活使用。您的 Matter 设备不仅可以在涂鸦相关的 App(例如 智能生活)中使用,同时也可以在苹果 Home、谷歌 Home、亚马逊 Alexa 等等中使用。
Fabric 是 Matter 定义的同一安全域下节点(即设备)的集合,在该安全域下节点能够彼此认证,建立安全通信。一个 Fabric 共享同一证书机构(Certificate Authority,CA)的根证书(Root of Trust),同时约定一个唯一 64 位标识符的 Fabric ID。
跨 Fabric 包含 Fabrics 分享 和 Fabrics 管理 两个模块。
在使用 Fabrics 分享 和 Fabrics 管理 API 之前,可以使用本方法来判断 App 是否可以和设备进行通讯。
接口说明
boolean checkPipelineAvailable();
代码示例
Java:
IThingMatterMultipleFabricDevice mThingMatterFabricDevice;
...
private void preCheck(String devId){
mThingMatterFabricDevice = ThingHomeSdk.newMatterMultipleFabricDeviceInstance(devId);
boolean pipelineAvailable = mThingMatterFabricDevice.checkPipelineAvailable();
}
从 SDK 2.1.0-cube 开始,大幅简化了生成 Multiple Fabric 分享配网码的 API 使用方式,并且支持了多种通道通讯方式以提高成功率。
在使用 API 前,建议配合 SDK 2.1.0-cube 及以上版本的通道可用性检查 使用。
内部包含了 读取最大支持 Fabric 数量、读取当前已使用 Fabric 数量、获取设备连接 SSID 名称、关闭配网窗口 和 打开分享配网窗口 这一系列流程阶段,仅需一个接口即可完成上述流程。
接口说明
void sendEnhancedCommissioningCommand(boolean forceRefresh, IThingMultipleFabricCallback callback);
代码示例
Java:
private void openECM() {
mThingMatterMultipleFabricDevice.sendEnhancedCommissioningCommand(true, new IThingMultipleFabricCallback() {
@Override
public void onNetworkInfo(String ssid) {
Log.d(TAG,"device ssId: "+ssid);
}
@Override
public void onSuccess(IThingMatterMultipleFabricDevice.SetupCodePayload setupCodePayload) {
Log.d(TAG,"open ecm success: "+setupCodePayload.toString());
}
@Override
public void onError(String errorCode, String errorMessage) {
Log.d(TAG,"open ecm fail: "+errorCode);
}
});
Matter 支持跨 App 分享使用,可以使用以下 API 来获取当前使用者列表以及移除分享权限。
从 SDK 2.1.0-cube 开始,支持多种通道通讯方式以提高成功率,Fabric 管理对外 API 使用方式无变化。
接口说明
void readFabrics(IThingDataCallback<List<OperationalFabricInfo>> callback);
数据模型
OperationalFabricInfo
模型字段含义说明:
属性 | 类型 | 说明 |
---|---|---|
vendorId | Integer | 厂商 ID |
nodeId | Long | 配网时,此 Fabric 提供的 nodeId |
fabricId | Long | 配网时,此 Fabric 提供的 fabricId |
fabricIndex | String | 配网时,此 Fabric 的 index |
label | NSString | 配网时,此 Fabric 提供的 label |
isCurrent | boolean | 是否是当前 App |
代码示例
Java:
public void readFabrics() {
if (mThingMatterFabricDevice == null) {
return;
}
mThingMatterFabricDevice.readFabrics(new IThingDataCallback<List<OperationalFabricInfo>>() {
@Override
public void onSuccess(List<OperationalFabricInfo> result) {
if (result != null) {
Log.d("readFabrics", "ReadFabrics success: Result = " + Arrays.toString(result.toArray()));
}
}
@Override
public void onError(String errorCode, String errorMessage) {
Log.e("readFabrics", "ReadFabrics error: ErrorCode = " + errorCode + "; ErrorMessage = " + errorMessage);
}
});
}
移除的 fabricIndex
不能是当前 App 使用的,可以通过 OperationalFabricInfo
的 isCurrent
字段判断是否是当前 App。
接口说明
void removeFabric(Integer fabricIndex, IThingDataCallback<Integer> callback);
代码示例
Java:
mThingMatterFabricDevice.removeFabric(Integer.parseInt(fabricIndex), new IThingDataCallback<Integer>() {
@Override
public void onSuccess(Integer result) {
if (result ==0){
Log.i("removeFabric","RemoveFabric success");
}
}
@Override
public void onError(String errorCode, String errorMessage) {
Log.e("removeFabric", "RemoveFabric error: ErrorCode = " + errorCode + "; ErrorMessage = " + errorMessage);
}
});
错误码 | 含义 |
---|---|
3027 | 设备所有通道均不在线 |
3051 | 打开分享配网窗口失败 |
3037 | 读取设备属性失败,例如:
|
3055 | 移除设备 fabricIndex 失败 |
3057 | 请求云端 API 接口失败,例如:获取云端 fabric passcode 接口失败 |
3058 | 关闭设备配网窗口失败 |
3059 | 计算可用 fabric 次数=0 |
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈