摄像头设备配网开发实践

生活物联网平台为摄像头设备提供一种不依赖App和设备本地通信即可完成绑定的解决方法。摄像头设备连接路由器后,当发生本地局域网不通或路由器设置问题,导致App无法发现并绑定设备时,您可以将该解决办法作为摄像头设备的辅助配网方案。

配网开发流程

该解决方法的配网流程如下。

  1. 手机App生成二维码图片。

    二维码中包含当前手机连接Wi-Fi的SSID、password、BSSID、random(3个字节的随机数)。

  2. 摄像头设备扫描并解析二维码。

    设备端调用生活物联网平台SDK提供的awss_connect接口(详细介绍参见本文档下方“设备端接口与实现”),获取二维码中传递的SSID、password、BSSID、random,并按一定规则生成token。具体操作,请参见生成token的规则

  3. 设备端将生成的token上报云端。

  4. 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

跨站点绑定摄像头设备

  1. 获取App当前所在的站点。

  2. 生成摄像头的配网二维码。

    二维码中需携带SSID、password、BSSID、random、regionid等信息。

  3. 摄像头设备解析配网二维码。

    解析二维码的流程如下:

    1. 调用iotx_guider_set_dynamic_region(info->region_id);接口,让设备连上对应的站点。

    2. 调用awss_connect接口,解析其他信息。

  4. 绑定摄像头设备。