APPSDK FAQ
1 SDK认证为什么会失败?
License 有问题。这种情况下会返回 -4023 的错误,请通过 DNAKit 来申请正确的控制 *License*。务必保证您的APP的包名与申请 License 时输入的一致。
网络有限制。这种情况下会返回 -4034 的错误,请确认路由器没有对 .ibroadlink.com 和 .broadlink.com.cn 的域名进行过滤。SDK通过服务器的 *12345*端口进行认证,请确保没有重定向或者封闭该端口。上述问题都排除后,请联系 BroadLink技术支持 并且提供您的 License 供检查。
2 设备无法配置入网?
- 请务必保证设备处于配网模式 (蓝灯快闪为配网模式,慢闪表示联网中,蓝灯熄灭表示配网成功,可以长按REST键将设备复位到快闪模式)
- 请确认手机接入的是2.4G的网络,设备当前不支持5G(包括802.11n的5G和802.11ac),如果是双频路由器,可以将5G的WiFi名称改成和2.4G不一样的
- 若路由器为802.11n或者802.11bgn模式,请尝试将路由器设置为802.11bg模式,待设备配置成功之后,您可以重新改回去。这是为了保证路由器没有工作在802.11n的5G频段上
- 不支持路由器使用wep共享密钥的加密方式,请更换其他加密方式,推荐使用wpa2
- 其他配置不上的解决方案
3 设备已经成功入网了,为什么无法搜索到设备?
- 请确认设备与控制终端处于同一个局域网中,设备发现功能仅限于发现局域网内的设备
请确认您的路由器或者AP没有开启AP隔离(局域网内隔离)模式
若是概率性的搜索不到设备,请您检查您的局域网网络状况,由于设备发现使用的是局域网广播的原理,从协议层就无法保证百分百成功,建议您在局域网中且APP处于前台时,设置设备发现间隔,建议间隔时间为3秒钟
[self.let.controller startProbe:3000]; // Start probe device
self.let.controller.delegate = self;
4 设备搜索到了,设备配对失败了?
- 请确保设备与控制终端处于同一局域网中,设备配对仅限局域网内操作
- id和key是设备远程控制的必要参数,且必须保证值正确,id和key由设备生成,且只会在设备复位重新配置的情况下改变
- 请确保调用addDevice接口时,设备信息的完整性
BLDNADevice *dnaDevice = [[BLDNADevice alloc] init];
dnaDevice.pid = @"00000000000000000000000037270000";
dnaDevice.did = @"0000000000000000000034ea34b3060e";
dnaDevice.mac = @"34:ea:34:b3:06:0e";
dnaDevice.name = @"智能遥控";
dnaDevice.type = 10039;
dnaDevice.password = 215625664;
dnaDevice.controlId = 5;
dnaDevice.controlKey = @"9bf3040cd1667b7b08daf16a3e4d685a";
[[BLLet sharedLet].controller addDevice:dnaDevice];
- 请检查内网网络情况,若内网网络较差,可适当加大ltimeout的值
5 设备控制失败,返回-7错误?
- id和key是设备远程控制的必要参数,且必须保证值正确,id和key由设备生成,且只会在设备复位重新配置的情况下改变,返回-7必定是id和key的值不对
- 请确保设备已经成功进行配对操作,并且调用控制接口时,设备信息中已经包含了配对成功时返回的id和key
- 设备已经被认为复位了,设备复位之后,必需和设备再同一个局域网内再重新配对一次,并及时更新id和key
BLPairResult *result = [[BLLet sharedLet].controller pair:device.did];
NSLog(@"id:%ld,key:%@",(long)result.getId,result.getKey);
6 设备控制失败,返回-4000错误?
- 请检查网络状况,局域网控制可适当加大ltimeout的值,远程控制可适当加大rtimeout的值
objc [BLLet sharedLet].configParam.controllerLocalTimeout = 2000; [BLLet sharedLet].configParam.controllerRemoteTimeout = 4000;
- 若您是使用BroadLink的模块进行产品开发,请保证您的通信数据是否正确,您可以尝试通过透传方式先调通协议,然后再通过标准接口调试您的脚本,直到数据包正确
7 如何判断一个设备是否处于局域网中?
由于设备发现利用了局域网广播的原理,设备发现并不能保证每次都可以搜索到设备,根据我们的经验值来说,APP在前台时,并且处于Wi-Fi连接状态时,SDK会启动一个定时器,每3秒钟进行一次设备发现操作,若连续三次搜索不到设备,则认为设备已经离开局域网,反之可认为设备还处于局域网中。APP在后台时或者控制终端没有连接到Wi-Fi时,都可以认为设备不在局域网中。由于广播的原理,在设备离开局域网后,并不能立即知道,必然会存在一个超时时间,在这个超时时间内,会无法控制该设备。
typedef NS_ENUM(NSInteger, BLDeviceStatusEnum) {
/** 初始化状态(未知) */
BL_DEVICE_STATE_UNKNOWN = 0,
/** 局域网状态 */
BL_DEVICE_STATE_LAN = 1,
/** 远程状态 */
BL_DEVICE_STATE_REMOTE = 2,
/** 离线状态 */
BL_DEVICE_STATE_OFFLINE = 3
};
8 设备局域网控制成功,远程控制失败?
- 远程控制需要先登录,登录后查看SDK日志 auth result是否成功, 如果返回错误码-4037或sdk not register, please call SDKAuth first,则 auth失败 <appsdk_v2_faq.html#sdk> 认证成功的日志如下:
[BLLet DEBUG]Controller auth param: {"license":"CceFpDt7d+r4pZ8KP74tbpNSf9Ug9pP+ytpIXApsCYpvvDEid0s8SdJtKgQMc5QmUsWWVwAAAACvEX37zpG5Wgi\/Mlnda1pd2B9J96AQz9N0vO6WstfgR9yEgbkpFXFyJbsnfyHXt8pOdkTVo81rQrPhkOnhmpQBsEkbxXTfoUSQjDzWcfVjcAAAAAA=","account_id":"53356bc73e636b2dc50f3e5ca8b76b0c","account_session":"0d80378bc4cdaac90430d2fb86e7b7b9"}
[Debug]:networkapi_network.c,622 https server: 09c785a43b7b77eaf8a59f0a3fbe2d6eauth.ibroadlink.com:1998
[BLLet DEBUG]Controller auth result: {"lid":"09c785a43b7b77eaf8a59f0a3fbe2d6e","status":0,"msg":"sdk register success"}
- 远程控制返回-7,查看, 设备控制失败,返回-7错误
- 检查和设备接入服务是否畅通,手机网络 ping devicetype+access.ibroadlink.com
9 设备实际控制成功,但SDK返回控制失败?
设备实际控制成功,但SDK返回-4000,控制超时。
这个是有可能出现的,因为SDK需要等待设备返回控制成功的包,如果超时时间到了,还没有收到包,SDK就会返回超时,可以通过 延长设备控制的超时时间 解决
10 设备状态一直是未初始化状态 0
- 设备发现后需要调用addDevice接口加入到SDK管理,SDK才会去查询它的状态
BLDNADevice *dnaDevice = [[BLDNADevice alloc] init];
dnaDevice.pid = @"00000000000000000000000037270000";
dnaDevice.did = @"0000000000000000000034ea34b3060e";
dnaDevice.mac = @"34:ea:34:b3:06:0e";
dnaDevice.name = @"智能遥控";
dnaDevice.type = 10039;
dnaDevice.password = 215625664;
dnaDevice.controlId = 5;
dnaDevice.controlKey = @"9bf3040cd1667b7b08daf16a3e4d685a";
[[BLLet sharedLet].controller addDevice:dnaDevice];
- 刚加入SDK管理的设备,SDK还没有查询到状态,状态为 0,即未初始化状态,视网络状态,一般1-2秒就可以返回正确的状态
BLDeviceStatusEnum state = [[BLLet sharedLet].controller queryDeviceState:device.did];
typedef NS_ENUM(NSInteger, BLDeviceStatusEnum) {
/** 初始化状态(未知) */
BL_DEVICE_STATE_UNKNOWN = 0,
/** 局域网状态 */
BL_DEVICE_STATE_LAN = 1,
/** 远程状态 */
BL_DEVICE_STATE_REMOTE = 2,
/** 离线状态 */
BL_DEVICE_STATE_OFFLINE = 3
};
##11 设备绑定失败
设备绑定失败,返回:{"status":-2016,"msg":"bind fail”}
- 如果出现以上错误日志,无法远程控制,是该设备未添加到你的license中,需要在DNAkit平台添加该设备到license管理
- 登录DNAkit平台,平台接入——SDK接入——我的license里添加您需要控制的产品 DNAkit平台地址
12 设备控制返回-4020
- 设备控制依赖脚本解析命令,所以需要先下载对应设备的脚本才能进行控制
- 查看手机本地路径下,脚本文件是否存在,下载的脚本文件是否正确, iOS 默认脚本路径: xcappdata -> AppData -> Documents -> Let -> script 目录下 Android 默认路径: cache -> let -> script 目录下 文件格式: 设备pid.script 例:000000000000000000000000b54f0000.script
13 如何打印日志
- 日志可以有效帮助开发者分析SDK使用过程中遇到的问题, 日志等级分为BL_LEVEL_NONE,BL_LEVEL_ERROR,BL_LEVEL_WARN,BL_LEVEL_DEBUG,BL_LEVEL_ALL四个等级
- 如果遇到无法解决的问题,可以将日志等级设置成BL_LEVEL_ALL,并将完整日志提供给对接的技术支持分析
typedef NS_ENUM(NSUInteger, BLDebugLevelEnum) {
/** 不打印 */
BL_LEVEL_NONE = 0,
/** 打印错误信息 */
BL_LEVEL_ERROR = 1,
/** 打印错误信息与警告信息 */
BL_LEVEL_WARN = 2,
/** 打印错误信息、警告信息以及调试信息 */
BL_LEVEL_DEBUG = 3,
/** 打印所有信息 */
BL_LEVEL_ALL = 4
};
BLLet *let = [BLLet sharedLetWithLicense:@"Your License"]; // Init APPSDK
[let setDebugLog:BL_LEVEL_ALL]; // Set APPSDK debug log level
[let.controller setSDKRawDebugLevel:BL_LEVEL_ALL]; // Set DNASDK debug log level