Mesh 管理

更新时间:2024-03-20 03:10:02下载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];