生活物聯網平臺為攝像頭設備提供一種不依賴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
接口,解析其他信息。
綁定攝像頭設備。