Mesh 管理

更新时间:2024-03-20 03:10:02LLM 副本以 Markdown 格式查看下载 PDF

本文介绍如何进行 Mesh 管理。

概念介绍

Mesh

商用照明 SDK 接入文档中所涉及到的 Mesh 均为蓝牙 Mesh,目前 SDK 不支持除标准蓝牙 Mesh 以外的其他私有 Mesh 类型。
一个 Mesh 下的蓝牙 Mesh 协议的设备数建议控制在 300 以内,非蓝牙 Mesh 协议的设备不受数量限制。

Mesh 网络模式

  • 单 Mesh 网络模式

    • 创建项目时会自动创建一个关联的 Mesh,当前项目以及项目下的所有区域层级均关联在自动生成的 Mesh 下。
    • 在该网络模式的项目下,请勿进行 Mesh 创建和删除等操作
  • 多 Mesh 网络模式

    • 创建项目时不会自动创建关联的 Mesh,用户必须手动创建 Mesh 并与区域进行关联绑定,否则蓝牙 Mesh 设备将无法在未绑定 Mesh 的区域节点下进行配网。
    • 一个区域最多绑定一个 Mesh,但一个 Mesh 可以同时被多个区域节点绑定。
    • 不同 Mesh 下的设备无法进行跨区域转移。如果您需要在多个区域节点下进行设备的跨区域转移等操作,需将目标区域关联在同一个 Mesh 下。

设备配网

不支持在项目根节点下进行设备配网操作,请在目标区域节点下进行配网。配网过程中传入 API 的 homeId 参数需为当前区域的 gid

商用照明 SDK 2.8.1 版本后支持创建单 Mesh 和多 Mesh 两种网络模式的项目,设备配网、群组和场景等操作需在区域节点下进行

管理

获取当前区域 Mesh 信息

获取区域已绑定的 Mesh 信息。

  • 在单 Mesh 网络模式的项目下,所有区域层级默认绑定 Mesh,原则上不存在 Mesh 未绑定的情况。
  • 在多 Mesh 网络模式的项目下,已绑定的 Mesh 可能为空,此时需要手动进行 Mesh 绑定。

示例代码

ThingLightingArea *area = [ThingLightingArea areaWithAreaId:areaId projectId:projectId];
long long meshId = area.areaModel.meshId;

单 Mesh 网络模式

一个项目下存在且仅存在一个自动创建的 Mesh,所有区域节点均绑定在当前 Mesh 下。

初始化

初始化蓝牙 Mesh 网络,并注册来自云端状态变化的监听。在切换、初始化蓝牙 Mesh 网络时,调用该接口。

接口说明

+ (ThingSmartSIGMeshManager * _Nullable)initSIGMeshManager:(ThingSmartBleMeshModel *)meshModel
                                                      ttl:(NSInteger)ttl
                                                  nodeIds:(NSArray<NSData *> * _Nullable)nodeIds;

示例代码

    ThingSmartBleMeshModel *meshModel = [[ThingLightingCacheService sharedInstance] getMeshModelWithId:meshId];
    ThingSmartSIGMeshManager *manager = [ThingSmartBleMesh initSIGMeshManager:meshModel ttl:0 nodeIds:@[]];

连接或断开蓝牙 Mesh 子设备

ThingSmartSIGMeshManager 提供开始连接、断开连接、开启扫描和停止扫描能力。

示例代码

开启扫描并连接。

ThingSmartBleMeshModel *meshModel = [[ThingLightingCacheService sharedInstance] getMeshModelWithId:meshId];
ThingSmartSIGMeshManager *manager = [ThingSmartBleMesh initSIGMeshManager:meshModel ttl:0 nodeIds:@[]];
[manager startSearch];

断开连接,停止扫描。

ThingSmartBleMeshModel *meshModel = [[ThingLightingCacheService sharedInstance] getMeshModelWithId:meshId];
ThingSmartSIGMeshManager *manager = [ThingSmartBleMesh initSIGMeshManager:meshModel ttl:0 nodeIds:@[]];
[manager offlineSIGMeshNetwork];
[manager stopSerachDevice];

后台一直扫描会消耗资源,可以通过开启扫描和停止扫描来控制后台的扫描。

  • startSearch 开启连接后,会在后台不断地扫描周围可连接设备,并且自动连接。
  • 当已经连接到蓝牙 Mesh 网时,调用 startSearchstopSerachDevice 是没有效果的。

多 Mesh 网络模式

一个项目下可能存在不定数量的 Mesh,一个 Mesh 可能同时被不定数量的区域绑定。

Mesh 创建

创建一个 Mesh,可以指定 Mesh 的名称。

接口说明

- (void)createMeshWithName:(NSString *)name
                   success:(nullable ThingSuccessID)success
                   failure:(nullable void(^)(NSError *error))failure;

示例代码

    ThingLightingProject *project = [ThingLightingProject projectWithProjectId:projectId];
    [project createMeshWithName:self.meshNameTextField.text success:^(id result) {

    } failure:^(NSError * _Nonnull error) {

    }];

Mesh 删除

确保在 Mesh 下没有蓝牙 Mesh 设备,且当前 Mesh 没有被任何区域绑定,才能执行该删除操作。

接口说明

- (void)deleteMeshWithMeshId:(NSString *)meshId
                     success:(nullable ThingSuccessID)success
                     failure:(nullable void(^)(NSError *error))failure;

示例代码

[currentProject deleteMeshWithMeshId:self.meshModel.meshId success:^(id result) {

} failure:^(NSError * _Nonnull error) {

}];

区域绑定 Mesh

将未绑定过 Mesh 的区域绑定到一个 Mesh 下,支持同时绑定多个区域 ID。

接口说明

- (void)bindMeshAndAreaWithMeshId:(NSString *)meshId
                           areaId:(long long)areaId
                          success:(nullable ThingSuccessID)success
                          failure:(nullable void(^)(NSError *error))failure

示例代码

[currentProject bindMeshAndAreaWithMeshId:self.meshModel.meshId
                                            areaId:areaModel.areaId
                                            success:^(id result) {

} failure:^(NSError * _Nonnull error) {

}];

区域解绑 Mesh

将区域与 Mesh 进行解绑,支持同时解绑多个区域。

接口说明

- (void)unbindMeshAndAreaWithMeshId:(NSString *)meshId
                             areaId:(long long)areaId
                            success:(nullable ThingSuccessID)success
                            failure:(nullable void(^)(NSError *error))failure;

示例代码

[currentProject unbindMeshAndAreaWithMeshId:self.meshModel.meshId
                                                areaId:areaModel.areaId
                                            success:^(id result) {

} failure:^(NSError * _Nonnull error) {

}];

Mesh 初始化

初始化指定 Mesh。

接口说明

+ (ThingSmartSIGMeshManager * _Nullable)initSIGMeshManager:(ThingSmartBleMeshModel *)meshModel
                                                      ttl:(NSInteger)ttl
                                                  nodeIds:(NSArray<NSData *> * _Nullable)nodeIds;

示例代码

ThingSmartBleMeshModel *meshModel = [[ThingLightingCacheService sharedInstance] getMeshModelWithId:meshId];
ThingSmartSIGMeshManager *manager = [ThingSmartBleMesh initSIGMeshManager:meshModel ttl:0 nodeIds:@[]];

Mesh 连接

支持同时连接不多于 3 个 Mesh。

接口说明

- (void)startSearch;

示例代码

ThingSmartBleMeshModel *meshModel = [[ThingLightingCacheService sharedInstance] getMeshModelWithId:meshId];
ThingSmartSIGMeshManager *manager = [ThingSmartBleMesh initSIGMeshManager:meshModel ttl:0 nodeIds:@[]];
[manager startSearch];

Mesh 断连

将 Mesh 断开连接。

接口说明

- (void)offlineSIGMeshNetwork;

示例代码

ThingSmartSIGMeshManager *manager = [[impl getCurrentProject] currentSigMeshManager];
[manager offlineSIGMeshNetwork];

获取 Mesh 绑定的区域列表

根据 meshId,获取已关联此 Mesh 的所有区域的列表。

接口说明

- (void)fetchMeshBindAreasWithMeshId:(NSString *)meshId
                       includeStatic:(BOOL)includeStatic
                             success:(nullable void(^)(NSArray<ThingLightingAreaModel *> *areaList))success
                             failure:(nullable void(^)(NSError *error))failure

示例代码

[currentProject fetchMeshBindAreasWithMeshId:self.meshModel.meshId
                                    includeStatic:NO
                                          success:^(NSArray<ThingLightingAreaModel *> * _Nonnull areaList) {

} failure:^(NSError * _Nonnull error) {

}];

获取已连接的 Mesh

鉴于手机蓝牙性能等原因,目前一台手机支持同时连入 Mesh 的数量为 3 个,可以通过该方法判断一个 Mesh 是否已经连接。

接口说明

@property (nonatomic, assign, readonly) BOOL isLogin;

示例代码

ThingSmartBleMeshModel *meshModel = [[ThingLightingCacheService sharedInstance] getMeshModelWithId:meshId];
    ThingSmartSIGMeshManager *manager = [ThingSmartBleMesh initSIGMeshManager:meshModel ttl:0 nodeIds:@[]];
BOOL isLogin = [manager isLogin];