更新时间:2024-08-22 06:09:50下载pdf
子设备配网是指智能设备依赖于网关连接到云端,例如 Zigbee 网关、蓝牙网关等。因此,子设备配网的过程必须具体到某个网关,由网关完成设备激活和消息通知。
App 发送子设备配网指令到云端,云端进而通知网关开始配网子设备。子设备收到配网命令后,通过网关向云端注册激活,成功后云端通知 App 添加设备成功。
ThingSmartBusinessExtensionKit
组件提供了比 ThingSmartActivator
更多的功能。如果您仍直接在使用 ThingSmartActivator
,请参考 此链接。
基座初始化时,需要注册一下配网的类型,模式对应为 ThingSmartActivatorTypeSubDeviceModel
。
接口说明
/// Initialize network configuration types
/// @param typeList Network configuration types
- (void)registerWithActivatorList:(NSArray<ThingSmartActivatorTypeModel *>*)typeList;
参数说明
参数 | 说明 |
---|---|
typeList | 配网类型列表 |
开始搜索时,需要传入已注册的 typeList
。
接口说明
/// Start searching
/// @param typeList Network configuration types
- (void)startSearch:(NSArray <ThingSmartActivatorTypeModel *>*)typeList;
参数说明
参数 | 说明 |
---|---|
typeList | 配网类型列表 |
接口说明
/// Stop searching
/// @param typeList Network configuration types
/// @param clearCache Whether to clear the cache
- (void)stopSearch:(NSArray <ThingSmartActivatorTypeModel *>*)typeList clearCache:(BOOL)clearCache;
参数说明
参数 | 说明 |
---|---|
typeList | 配网类型列表 |
clearCache | 是否清空当前搜索设备缓存 |
设备配网成功之后,会通过搜索回调返回设备信息。如果失败,则会返回对应的失败信息。
接口说明
/// Device search callback
/// @param service Search instance
/// @param type Network configuration type
/// @param device Discovered device
/// @param errorModel Error callback
- (void)activatorService:(id<ThingSmartActivatorSearchProtocol>)service
activatorType:(ThingSmartActivatorTypeModel *)type
didFindDevice:(nullable ThingSmartActivatorDeviceModel *)device
error:(nullable ThingSmartActivatorErrorModel *)errorModel;
参数说明
参数 | 说明 |
---|---|
service | 配网服务 |
type | 配网类型 |
device | 发现设备,返回此次配网的设备模型,失败时返回 nil |
errorModel | 如果配网失败或者超时,返回此模型,成功时返回 nil |
配网失败或者配网超时的情况下,会返回 ThingSmartActivatorErrorModel
。
@interface ThingSmartActivatorErrorModel : NSObject
@property (nonatomic, strong) ThingSmartActivatorDeviceModel *deviceModel;
@property (nonatomic) NSError *error;
@end
其中 error 对应的错误码,定义在 ThingSmartActivatorDiscoveryError
中。下表展示了常见错误与说明。
错误码 | 配网错误 |
---|---|
ThingSmartActivatorDiscoveryErrorTimeout | 配网超时。 |
ThingSmartActivatorDiscoveryErrorDeviceAlreadyBound | 设备强绑定错误。该设备已经被用户绑定,无法被第二个用户绑定,需要第一个用户解绑才能完成配网操作。 |
ThingSmartActivatorDiscoveryErrorAPPUnsupportProduct | 配网账号的 App 和产品没有绑定关系。 |
ThingSmartActivatorDiscoveryErrorSubDeviceOverLimit | 网关下绑定的子设备超过限制数量。 |
ThingSmartActivatorDiscoveryErrorGuestNotSupportStrongBind | 游客模式无法对强绑定设备进行配网。 |
ThingSmartActivatorDiscoveryErrorRemoteApiParamIllegal | 接口参数不合法。 |
Swift
class zigbeeSubmodeConfigurationVC: UITableViewController {
var gateway: ThingSmartDeviceModel?
var deviceList:[ThingSmartActivatorDeviceModel] = []
private var typeModel: ThingSmartActivatorTypeSubDeviceModel = {
let type = ThingSmartActivatorTypeSubDeviceModel()
type.type = ThingSmartActivatorType.subDevice
type.typeName = NSStringFromThingSmartActivatorType(ThingSmartActivatorType.subDevice)
type.timeout = 120
return type
}()
lazy var discovery: ThingSmartActivatorDiscovery = {
let discovery = ThingSmartActivatorDiscovery()
discovery.register(withActivatorList: [self.typeModel])
discovery.setupDelegate(self)
discovery.loadConfig()
return discovery
}()
@IBAction func searchTapped(_ sender: UIBarButtonItem) {
guard let gateway = gateway else {
Alert.showBasicAlert(on: self, with: NSLocalizedString("Select Zigbee Gateway", comment: ""), message: NSLocalizedString("You must have one Zigbee gateway selected.", comment: ""))
return
}
SVProgressHUD.show(withStatus: NSLocalizedString("Configuring", comment: ""))
typeModel.gwDevId = gateway.devId
discovery.startSearch([typeModel])
}
}
extension zigbeeSubmodeConfigurationVC: ThingSmartActivatorSearchDelegate {
func activatorService(_ service: ThingSmartActivatorSearchProtocol, activatorType type: ThingSmartActivatorTypeModel, didFindDevice device: ThingSmartActivatorDeviceModel?, error errorModel: ThingSmartActivatorErrorModel?) {
if device != nil && errorModel == nil {
// Success
let name = device?.name ?? NSLocalizedString("Unknown Name", comment: "Unknown name device.")
SVProgressHUD.showSuccess(withStatus: NSLocalizedString("Successfully Added \(name)", comment: "Successfully added one device."))
SVProgressHUD.dismiss()
}
if let error = errorModel?.error {
// Error
SVProgressHUD.showError(withStatus: error.localizedDescription)
}
}
}
Objective-C
- (void)startConfig {
ThingSmartActivatorTypeSubDeviceModel *subModel = [[ThingSmartActivatorTypeSubDeviceModel alloc] init];
subModel.type = ThingSmartActivatorTypeSubDevice;
subModel.typeName = NSStringFromThingSmartActivatorType(ThingSmartActivatorTypeSubDevice);
subModel.timeout = 120;
subModel.gwDevId = gwDevId;
[self.discovery registerWithActivatorList:@[subModel]];
[self.discovery setupDelegate:self];
[self.discovery startSearch:@[subModel]];
}
- (void)activatorService:(id<ThingSmartActivatorSearchProtocol>)service activatorType:(ThingSmartActivatorTypeModel *)type didFindDevice:(ThingSmartActivatorDeviceModel *)device error:(ThingSmartActivatorErrorModel *)errorModel {
if (errorModel) {
[self _connectWifiError:errorModel];
return;
}
if (device) {
[self _handleDevice:device];
}
}
- (ThingSmartActivatorDiscovery *)discovery {
if (!_discovery) {
_discovery = [[ThingSmartActivatorDiscovery alloc] init];
}
return _discovery;
}
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈