生活物联网平台为摄像头设备提供一种不依赖App和设备本地通信即可完成绑定的解决方法。摄像头设备连接路由器后,当发生本地局域网不通或路由器设置问题,导致App无法发现并绑定设备时,您可以将该解决办法作为摄像头设备的辅助配网方案。
配网开发流程
该解决方法的配网流程如下。
手机App生成二维码图片。
二维码中包含当前手机连接Wi-Fi的SSID、password、BSSID、random(3个字节的随机数)。
摄像头设备扫描并解析二维码。
设备端调用生活物联网平台SDK提供的
awss_connect
接口(详细介绍参见本文档下方“设备端接口与实现”),获取二维码中传递的SSID、password、BSSID、random,并按一定规则生成token。具体操作,请参见生成token的规则。设备端将生成的token上报云端。
App通过根据token查询设备的证书信息接口向云端发送轮询消息,当收到的返回消息为请求成功后,向设备发起绑定。
设备端接口与实现
设备端开发时,您需要实现通过调用awss_connect
函数(头文件为#include "connect_ap.h"),来解析二维码信息和生成token的能力,并将生成的token上报到云端。
awss_connect
函数的原型如下。
awss_connect(char ssid[HAL_MAX_SSID_LEN], char passwd[HAL_MAX_PASSWD_LEN], uint8_t *bssid, uint8_t bssid_len, uint8_t *token, uint8_t token_len, bind_token_type_t token_type)
函数的参数说明如下。
参数 | 类型 | 描述 |
ssid | char | 路由器的SSID。 |
passwd | char | 路由器的密码。 |
bssid | uint8_t * | 路由器的BSSID,即MAC地址。 |
bssid_len | uint8_t | BSSID的长度。 |
token | uint8_t * | 生活物联网平台SDK按一定规则生成的token。 |
token_len | uint8_t | 生成的token的长度。 |
token_type | bind_token_type_t | 生成的token的类型。 说明 该参数仅在生活物联网平台SDK 1.6.0及以上版本的该函数中存在,SDK 1.6.0以下版本请忽略。 |
以下为您提供awss_connect
函数的使用示例。设定函数配置值如下。
char* ref_ssid = "ssid";
char* ref_passwd = "passwd";
uint8_t ref_bssid[6] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66};
uint8_t ref_token[3] = {0xaa, 0xbb, 0xcc};
uint8_t ref_token_type = TOKEN_TYPE_NOT_CLOUD;
则函数调用示例如下。
awss_connect(ref_ssid, ref_passwd, ref_bssid, 6, ref_token, 3, ref_token_type);
生成token的规则
二维码中通常包含BSSID、password、random三个字段。生成token的规则为拼接二维码中字段,并取前16个字节。
根据二维码规范random字段必有,生成token的规则存在以下几种情形。
场景 | 拼接规则 |
二维码中有BSSID且有password | sha256(bssid(hex)+random(hex)+password(hex)) |
二维码中无BSSID有password | sha256(random(hex)+password(hex)) |
二维码中无BSSID且无password | sha256(random(hex)) |
以下为您提供token生成规则的示例。设定二维码中字段值如下。
BSSID: C8:3A:35:23:08:31
SSID:myname
password:12345678
RandomHex:911182
即该示例的二维码规范为:{"v":"Ali_1","s":"myname","p":"12345678","b":"C83A35230831","t":"911182"}
。
则此时设备端调用信息如下。
char* ref_ssid = "myname";
char* ref_passwd = "12345678";
uint8_t ref_bssid[6] = {0xc8, 0x3a, 0x35, 0x23, 0x08, 0x31};
uint8_t ref_token[3] = {0x91, 0x11, 0x82};
awss_connect(ref_ssid, ref_passwd, ref_bssid, 6, ref_token, 3);
shar origin data = c83a352308319111823132333435363738,
sha = 8f2f5a6476bfabb52de0ea644b469eb5c70c2f4c6c05a51b8e70cdbe54ae8cb7
token = 8F2F5A6476BFABB52DE0EA644B469EB5
跨站点绑定摄像头设备
获取App当前所在的站点。
具体操作,请参见:
Android:获取App当前连接的服务器ID
iOS:获取App当前连接的服务器ID
生成摄像头的配网二维码。
二维码中需携带SSID、password、BSSID、random、regionid等信息。
摄像头设备解析配网二维码。
解析二维码的流程如下:
调用
iotx_guider_set_dynamic_region(info->region_id);
接口,让设备连上对应的站点。调用
awss_connect
接口,解析其他信息。
绑定摄像头设备。