热点模式

更新时间:2023-05-22 06:38:24下载pdf

热点配网又称 热点模式 或 AP (Access Point) 配网,是一种通过 Wi-Fi 进行配网的连接能力。将手机连接到配网设备 Wi-Fi 热点后,App 与手机直接通过 Wi-Fi 进行通信配对。成功率高、可靠性好,可适配 2.4G/5G 混频路由器配网,但用户需要手动切换手机的 Wi-Fi 设置。

配网流程

热点模式

获取 Token

开始配网之前,SDK 需要在联网状态下从涂鸦查询配网 Token,然后才可以开始热点模式配网。Token 的有效期为 10 分钟,且配置成功后就会失效。再次配网时,需要重新查询 Token。

接口说明

- (void)getTokenWithHomeId:(long long)homeId
                   success:(TYSuccessString)success
                   failure:(TYFailureError)failure;

参数说明

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

示例代码

Objc:

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

Swift:

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

配网代理回调

- (void)activator:(TuyaSmartActivator *)activator didReceiveDevice:(TuyaSmartDeviceModel *)deviceModel error:(NSError *)error;

参数说明

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

开始配网

接口说明

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

参数说明

参数 说明
mode 配网模式
ssid Wi-Fi 名称
password Wi-Fi 密码
token 配网 Token
timeout 超时时间

示例代码

Objc:

- (void)startConfigWiFi:(NSString *)ssid password:(NSString *)password token:(NSString *)token {
	// 设置 TuyaSmartActivator 的 delegate,并实现 delegate 方法
	[TuyaSmartActivator sharedInstance].delegate = self;

	// 开始配网,热点模式对应 mode 为 TYActivatorModeAP
	[[TuyaSmartActivator sharedInstance] startConfigWiFi:TYActivatorModeAP ssid:ssid password:password token:token timeout:100];
}

#pragma mark - TuyaSmartActivatorDelegate
- (void)activator:(TuyaSmartActivator *)activator didReceiveDevice:(TuyaSmartDeviceModel *)deviceModel error:(NSError *)error {

	if (!error && deviceModel) {
		//配网成功
    }

    if (error) {
        //配网失败
    }
}

// v4.0.0 新增:特殊安全设备在配网过程会回调中间过程
- (void)activator:(TuyaSmartActivator *)activator didPassWIFIToSecurityLevelDeviceWithUUID:(NSString *)uuid {
		// 这时,引导用户连接到用户输入的 Wi-Fi 上
    // 即手机连接到与 `- startConfigWiFi:password:token:` 入参的 ssid 相同的 Wi-Fi 上
  	
  	// 开发者可以通过获取 SSID 名称,比对一致后调用 `- continueConfigSecurityLevelDevice` 来继续第二阶段的配网
  
//    UIAlertController *vc = [UIAlertController alertControllerWithTitle:@"SecurityLevelDevice" message:@"continue pair? (Please check you phone connected the same Wi-Fi as you Inputed)" preferredStyle:UIAlertControllerStyleAlert];
//    [vc addAction:[UIAlertAction actionWithTitle:@"cancel" style:UIAlertActionStyleCancel handler:nil]];
//    [vc addAction:[UIAlertAction actionWithTitle:@"continue" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
//        
//        NSString *wifi = [self getCurrentWiFi];
//        if ([wifi isEqualToString:self.inputSSID]) {
//            [[TuyaSmartActivator sharedInstance] continueConfigSecurityLevelDevice];
//        }
//    }]];
//    [self presentViewController:vc animated:YES completion:nil];
}

Swift:

func startConfigWiFi(withSsid ssid: String, password: String, token: String) {
    // 设置 TuyaSmartActivator 的 delegate,并实现 delegate 方法
    TuyaSmartActivator.sharedInstance()?.delegate = self

    // 开始配网
    TuyaSmartActivator.sharedInstance()?.startConfigWiFi(TYActivatorModeAP, ssid: ssid, password: password, token: token, timeout: 100)
}

#pragma mark - TuyaSmartActivatorDelegate
func activator(_ activator: TuyaSmartActivator!, didReceiveDevice deviceModel: TuyaSmartDeviceModel!, error: Error!) {
    if deviceModel != nil && error == nil {
        //配网成功
    }

    if let e = error {
        //配网失败
        print("\(e)")
    }
}

// v4.0.0 新增:特殊安全设备在配网过程会回调中间过程
func activator(_ activator: TuyaSmartActivator!, didPassWIFIToSecurityLevelDeviceWithUUID uuid: String!) {
		// 这时,引导用户连接到用户输入的 Wi-Fi 上
    // 即手机连接到与 `- startConfigWiFi:password:token:` 入参的 ssid 相同的 Wi-Fi 上
  	
  	// 开发者可以通过获取ssid名称比对一致后调用 `- continueConfigSecurityLevelDevice` 来继续第二阶段的配网
  
//        let alert = UIAlertController(title: "SecurityLevelDevice", message: "continue pair? (Please check you phone connected the same Wi-Fi as you Inputed)", preferredStyle: .alert);
//        alert.addAction(UIAlertAction(title: "cancel", style: .cancel))
//        alert.addAction(UIAlertAction(title: "continue", style: .destructive, handler: { _ in
//            let wifi = getCurrentWiFi()
//            if wifi == inputSSID {
//                TuyaSmartActivator.sharedInstance().continueConfigSecurityLevelDevice()
//            }
//        }))
//        present(alert, animated: true)
}

热点模式配网与 快连模式 类似,把 [TuyaSmartActivator startConfigWiFi:ssid:password:token:timeout:] 的第一个参数改为 TYActivatorModeAP 即可。

ssidpassword 是需要填写的路由器的热点名称和密码,而不是设备的热点名称和密码。

停止配网

开始配网操作后,App 会持续广播配网信息,直到配网成功,或者超时。如果需要中途取消操作或配网完成,请调用 [TuyaSmartActivator stopConfigWiFi] 方法。

接口说明

- (void)stopConfigWiFi;

示例代码

Objc:

- (void)stopConfigWifi {
	[TuyaSmartActivator sharedInstance].delegate = nil;
	[[TuyaSmartActivator sharedInstance] stopConfigWiFi];
}

Swift:

func stopConfigWifi() {
    TuyaSmartActivator.sharedInstance()?.delegate = nil
    TuyaSmartActivator.sharedInstance()?.stopConfigWiFi()
}