摄像头二维码配网

更新时间:2024-06-05 02:04:52下载pdf

通过摄像头设备扫描 App 二维码来传递配网信息的方式来实现配网设备。

二维码配网

类和协议

类名(协议名) 说明
ThingSmartActivator 设备配网相关功能封装
ThingSmartActivatorDelegate 设备配网结果回调代理

接口说明

配网 Token 获取接口

- (void)getTokenWithHomeId:(long long)homeId
                   success:(ThingSuccessString)success
                   failure:(ThingFailureError)failure;

参数说明

参数 说明
homeId 设备将要绑定的家庭的 ID
success 成功回调,返回此次配网用的 Token
failure 失败回调,error 表示失败原因

接口说明

开始配网接口

- (void)startConfigWiFi:(ThingActivatorMode)mode
                   ssid:(NSString *)ssid
               password:(NSString *)password
                  token:(NSString *)token
                timeout:(NSTimeInterval)timeout;

参数说明

参数 说明
mode 配网模式
ssid 期望设备连接的 Wi-Fi 的 SSID
password 期望设备连接的 Wi-Fi 的密码
token 配网 Token
timeout 超时时间

接口说明

停止配网接口

- (void)stopConfigWiFi;

接口说明

配网结果代理回调

- (void)activator:(ThingSmartActivator *)activator didReceiveDevice:(ThingSmartDeviceModel *)deviceModel error:(NSError *)error;

参数说明

参数 说明
activator 此次配网使用的 ThingSmartActivator 对象
deviceModel 配网成功时,返回此次配网的设备模型,失败时返回 nil
error 配网失败时,标示错误信息,成功时为 nil

获取 Token

开始配网之前,SDK 需要在联网状态下从云端获取配网 Token,然后将 Wi-Fi 的 SSID 与密码一起生成二维码。Token 的有效期为 10 分钟,且配置成功后就会失效(再次配网需要重新获取)。

设备配网需要依赖于家庭,设备必须绑定在某个家庭下,所以获取配网 Token 时,需要传入一个家庭的 ID 作为参数,设备使用该 Token 激活成功后,就会绑定在该家庭的设备列表中。

Objective-C

- (void)getToken {
    [[ThingSmartActivator sharedInstance] getTokenWithHomeId:homeId success:^(NSString *token) {
        NSLog(@"getToken success: %@", token);
        // TODO: startConfigWiFi
    } failure:^(NSError *error) {
        NSLog(@"getToken failure: %@", error.localizedDescription);
    }];
}

Swift

func getToken() {
                       ThingSmartActivator.sharedInstance()?.getTokenWithHomeId(homeId, success: { (token) in
        print("getToken success: \(token)")
        // TODO: startConfigWiFi
    }, failure: { (error) in
        if let e = error {
            print("getToken failure: \(e)")
        }
    })
}

二维码字符串

获取到配网 Token 后,还需要有期望设备连接的 Wi-Fi 的 SSID 和密码,通过下面的方式拼接成字符串,然后根据该字符串生成一个二维码图片。

Objective-C

NSDictionary *dictionary = @{
@"s": self.ssid,
@"p": self.pwd,
@"t": self.token
};
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionary options:0 error:nil];
self.wifiJsonStr = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

Swift

let dictionary = [
    "s": self.ssid,
    "p": self.pwd,
    "t": self.token
]
let jsonData = JSONSerialization.data(withJSONObject: dictionary, options: JSONSerialization.WritingOptions.Element)
self.wifiJsonStr = String(data: jsonData, encoding: String.Encoding.utf8)

开始配网

使用上面生成的 wifiJsonStr 生成二维码,确定设备处于配网状态,将二维码对准摄像头,设备捕捉到二维码信息后会发出提示音。此时,通过以下接口开始监听配网结果。

Objective-C

[[ThingSmartActivator sharedInstance] startConfigWiFi:ThingActivatorModeQRCode ssid:self.ssid password:self.pwd token:self.token timeout:100];

Swift

                   ThingSmartActivator.sharedInstance()?.startConfigWiFi(ThingActivatorModeQRCode, ssid: self.ssid, password: self.pwd, token: self.token, timeout: 100)

停止配网

配网过程中,可使用下面的方法停止配网。

Objective-C

[[ThingSmartActivator sharedInstance] stopConfigWiFi];

Swift

                   ThingSmartActivator.sharedInstance()?.stopConfigWiFi()

设备激活回调

配网结果通过代理 ThingSmartActivatorDelegate 回调,代理方法如下:

Objective-C

// deviceModel 则为配网成功的设备的信息
- (void)activator:(ThingSmartActivator *)activator didReceiveDevice:(ThingSmartDeviceModel *)deviceModel error:(NSError *)error;

Swift

func activator(_ activator: ThingSmartActivator!, didReceiveDevice deviceModel: ThingSmartDeviceModel!, error: Error!)

绑定模式

涂鸦智能设备支持强、中、弱三种绑定模式,设备成功激活到对应账号的家庭中后,不同的绑定模式,解除绑定需要不同的校验方式。

  • 强绑定:需要前一个用户在 App 中移除设备,才可以重新配网绑定到另一个账号中。
  • 中绑定:无需前一个用户在 App 中移除设备,即可重新配网绑定到另一个账号中,但是会向前一个账号的家庭组/默认组管理员发送 Push 通知消息。
  • 弱绑定:无需前一个用户在 App 中移除设备,即可重新配网绑定到另一个账号中。

由于 IPC 有音视频传输,涉及到较多隐私,默认是强绑定模式,且不可以切换成其他模式。如果接入方有强烈需求,且评估过修改成其他模式的影响,可向涂鸦开发者平台提交工单处理。