更新时间:2024-03-15 09:11:10下载pdf
本文介绍如何进行 Mesh 管理。
商用照明 SDK 接入文档中所涉及到的 Mesh 均为蓝牙 Mesh,目前 SDK 不支持除标准蓝牙 Mesh 以外的其他私有 Mesh 类型。
一个 Mesh 下的蓝牙 Mesh 协议的设备数建议控制在 300 以内,非蓝牙 Mesh 协议的设备不受数量限制。
单 Mesh 网络模式
多 Mesh 网络模式
不支持在项目根节点下进行设备配网操作,请在目标区域节点下进行配网。配网过程中传入 API 的 homeId
参数需为当前区域的 gid
。
商用照明 SDK 2.8.1 版本后支持创建单 Mesh 和多 Mesh 两种网络模式的项目,设备配网、群组和场景等操作需在区域节点下进行。
获取区域已绑定的 Mesh 信息。
示例代码
//根据 areaId 从缓存中获取对应的 SimpleAreaBean 对象信息
SimpleAreaBean areaBean = ThingCommercialLightingArea.newAreaInstance(
projectId,//项目 ID
areaId //当前区域 ID
).getCurrentAreaCache();
//获取当前区域绑定的 meshId
String meshId = areaBean.getMeshId();
//若 meshId 不为空,获取 SigMeshBean 对象
if (!TextUtils.isEmpty(meshId)) {
ILightingMultiMeshPlugin service = PluginManager.service(ILightingMultiMeshPlugin.class);
SigMeshExtBean sigMeshBean = service.getInstance().getSigMeshBean(projectId, meshId);
}
单 Mesh 网络模式的项目下存在且仅存在一个 Mesh,多 Mesh 网络模式下可能存在不定数量的 Mesh。
接口说明
ILightingMultiMeshPlugin # getInstance() # getSigMeshBeans(projectId)
示例代码
ILightingMultiMeshPlugin service = PluginManager.service(ILightingMultiMeshPlugin.class);
List<SigMeshExtBean> sigMeshBeans = service.getInstance().getSigMeshBeans(projectId);
一个项目下存在且仅存在一个自动创建的 Mesh,所有区域节点均绑定在当前 Mesh 下。
初始化蓝牙 Mesh 网络,并注册来自云端状态变化的监听。在切换和初始化蓝牙 Mesh 网络时,调用该接口。
接口说明
void initMesh(String meshId);
示例代码
ThingOSMesh.getThingSigMeshClient().initMesh("meshIdxxxxx");
IThingBlueMeshClient
提供开始连接、断开连接、开启扫描和停止扫描能力。
示例代码
// 开启连接
ThingOSMesh.getThingSigMeshClient().startClient(mSigMeshBean);
// 开启连接,指定扫描的时间
ThingOSMesh.getThingSigMeshClient().startClient(mSigMeshBean,searchTime);
// 断开连接
ThingOSMesh.getThingSigMeshClient().stopClient();
// 开启扫描
ThingOSMesh.getThingSigMeshClient().startSearch()
// 停止扫描
ThingOSMesh.getThingSigMeshClient().stopSearch();
后台一直扫描会消耗资源,可以通过开启扫描和停止扫描来控制后台的扫描。
startClient(mSigMeshBean)
开启连接后,会在后台不断地扫描周围可连接设备,直到连接成功为止。startClient(mSigMeshBean,searchTime)
开启连接后,searchTime
时间内没有扫描到设备,就停止扫描。startClient()
时,调用 startSearch()
和 stopSearch()
是没有效果的。startSearch
和 stopSearch
是没有效果的。一个项目下可能存在不定数量的 Mesh,一个 Mesh 可能同时被不定数量的区域绑定。
创建一个 Mesh,可以指定 Mesh 的名称。
接口说明
ILightingMultiMeshPlugin # getMultiMeshManager() # createSigMesh(projectId,meshName,callback)
示例代码
ILightingMultiMeshPlugin service = PluginManager.service(ILightingMultiMeshPlugin.class);
service.getMultiMeshManager().createSigMesh(
projectId, //项目 ID
meshName, //mesh 名称
new IThingResultCallback<SigMeshExtBean>() {
@Override
public void onSuccess(SigMeshExtBean sigMeshExtBean) {
}
@Override
public void onError(String errorCode, String errorMessage) {
}
});
确保在 Mesh 下没有蓝牙 Mesh 设备,且当前 Mesh 没有被任何区域绑定,才能执行该删除操作。
接口说明
ILightingMultiMeshPlugin # getMultiMeshManager() # deleteSigMesh(projectId,meshId,callback)
示例代码
ILightingMultiMeshPlugin service = PluginManager.service(ILightingMultiMeshPlugin.class);
service.getMultiMeshManager().deleteSigMesh(
projectId,//项目 ID
meshId, //mesh id
new IThingResultCallback<Boolean>() {
@Override
public void onSuccess(Boolean aBoolean) {
}
@Override
public void onError(String errorCode, String errorMessage) {
}
});
将未绑定过 Mesh 的区域绑定到一个 Mesh 下,支持同时绑定多个区域 ID。
接口说明
ILightingMultiMeshPlugin # getMultiMeshManager() # bindSigMeshAreas(projectId,meshId,areaIds,callback)
示例代码
List<String> areaIds = new ArrayList<>();
areaIds.add("areaId1");
areaIds.add("areaId2");
areaIds.add("areaId3");
ILightingMultiMeshPlugin service = PluginManager.service(ILightingMultiMeshPlugin.class);
service.getMultiMeshManager().bindSigMeshAreas(
projectId,
meshId,
areaIds,
new IThingResultCallback<Boolean>() {
@Override
public void onSuccess(Boolean aBoolean) {
}
@Override
public void onError(String errorCode, String errorMessage) {
}
});
将区域与 Mesh 进行解绑,支持同时解绑多个区域。
接口说明
ILightingMultiMeshPlugin # getMultiMeshManager() # unbindSigMeshAreas(projectId,meshId,areaIds,callback)
示例代码
List<String> areaIds = new ArrayList<>();
areaIds.add("areaId1");
areaIds.add("areaId2");
areaIds.add("areaId3");
ILightingMultiMeshPlugin service = PluginManager.service(ILightingMultiMeshPlugin.class);
service.getMultiMeshManager().unbindSigMeshAreas(
projectId,
meshId,
areaIds,
new IThingResultCallback<Boolean>() {
@Override
public void onSuccess(Boolean aBoolean) {
}
@Override
public void onError(String errorCode, String errorMessage) {
}
});
初始化指定 Mesh。
接口说明
ThingOSMesh.getMeshManager().initSigMesh(meshId)
示例代码
ThingOSMesh.getMeshManager().initSigMesh("meshIdxxxxx");
支持同时连接不多于 3 个 Mesh。
接口说明
ThingOSMesh.getMeshManager().connectMesh(builderList);
示例代码
List<MeshConnectBuilder> builderList = new ArrayList<>();
builderList.add(new MeshConnectBuilder.Builder()
.setSigMeshBean(sigmeshBean1)
.setScanTimeout(30*1000)
.setConnectStatusListener(listener1)
.build());
ThingOSMesh.getMeshManager().connectMesh(builderList);
将 Mesh 断开连接。
接口说明
ThingOSMesh.getMeshManager().disconnectMesh(meshId);
示例代码
ThingOSMesh.getMeshManager().disconnectMesh("meshIdxxxxx");
根据 meshId
,获取已关联此 Mesh 的所有区域的列表。
示例代码
ILightingMultiMeshPlugin service = PluginManager.service(ILightingMultiMeshPlugin.class);
service.getMultiMeshManager().getSigMeshAreas(projectId, meshId, true,
new IThingResultCallback<List<AreaBean>>() {
@Override
public void onSuccess(List<AreaBean> simpleAreaBeans) {
}
@Override
public void onError(String errorCode, String errorMessage) {
}
});
鉴于手机蓝牙性能等原因,目前一台手机支持同时连入 Mesh 的数量为 3 个,可以通过该方法获取目前正在连接的 meshId
列表。
接口说明
List<String> connectedMeshIds = ThingOSMesh.getMeshManager().getConnectedMeshIds();
示例代码
List<String> connectedMeshIds = ThingOSMesh.getMeshManager().getConnectedMeshIds();
List<SigMeshExtBean> sigMeshExtBeans = new ArrayList<>();
ILightingMultiMeshPlugin service = PluginManager.service(ILightingMultiMeshPlugin.class);
for (String meshId : connectedMeshIds) {
SigMeshExtBean sigMeshBean = service.getInstance().getSigMeshBean(projectId, meshId);
if (sigMeshBean != null) {
sigMeshExtBeans.add(sigMeshBean);
}
}
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈