天天看點

smartconfig技術研究總結

一 背景:

smartconfig技術研究總結

智能家居/家電現階段還處于普及階段,由于家庭wifi網絡的普及,目前普遍采用wifi與路由器完成連接配接,與手機/雲端進行資料互動.

智能硬體,如智能插座,智能空調,智能空氣淨化器,智能燈泡,智能門鎖由于不具備人機互動界面,不能像電腦一樣的搜尋/選擇指定路由器,輸入連接配接SSID和密碼的界面,是以必須先解決正确連接配接路由問題;

二 解決方法

目前流行的wifi配置模式一般有以下2種:

方案一 softAP方案:

smartconfig技術研究總結

硬體處于AP模式,手機用于station模式,手機連接配接智能硬體的AP後組成區域網路,手機發送需要連接配接路由的SSID和密碼至智能硬體,智能硬體主動去連接配接指定路由後,完成連接配接。

AP模式需要手動切換手機wifi連接配接的網絡,先連接配接智能硬體的AP網絡,配置完成後再恢複連接配接正常wifi網絡.有一定的複雜性;

方案二、smartconfig(一鍵配置)方案:

    1.簡介:

       是一步式Wi-Fi設定過程,允許多個家用裝置快速高效地連接配接到Wi-Fi網絡。考慮到應用通常沒有用于輸入Wi-Fi網絡名稱和密碼的顯示屏或鍵盤,SmartConfig技術為最終使用者提供了将其裝置輕松連接配接到接入點的能力。通過簡單的SmartConfig技術為最終使用者提供了将其裝置輕松連接配接到接入點的能力。通過簡單的SmartConfig技術接口,消費者隻需要利用簡單的應用便可以使用iOS或者Andriod智能手機/平闆電腦或家庭PC連接配接到網絡。

   2.使用者如何識别裝置:

   2.1 小米的Yeelight智能彩燈使用掃描ssid的方法

smartconfig技術研究總結

      米家app是通過掃描wifi熱點的方法擷取到的,我将華為路由器A1的2.4Gssid修改為了yeelink-light-color1_miapbe58結果手機顯示如下:

smartconfig技術研究總結

   2.2京東微聯的智能插座使用掃描二維碼的方式識别裝置

smartconfig技術研究總結

①解析二維碼生成的url為http://smartcloud.jd.com/download?d=RldBU1VC

   将d= RldBU1VC去掉,然後在手機浏覽器中輸入http://smartcloud.jd.com/download

   直接就可以打開小京魚app的下載下傳界面了

smartconfig技術研究總結

②将http://smartcloud.jd.com/download通過草料二維碼生成器https://cli.im/生成一個二維碼

smartconfig技術研究總結

通過浏覽器掃描照樣可以下載下傳小京魚app但是通過小京魚app掃描這個二維碼顯示如下圖所示

smartconfig技術研究總結

③将http://smartcloud.jd.com/download?d=RldBU1VC通過草料二維碼生成器生成一個二維碼

smartconfig技術研究總結

通過浏覽器掃描可以下載下傳小京魚app并且通過小京魚app掃描這個二維碼同樣會顯示如下

3.技術原理:

smartconfig技術研究總結

  ①手機向區域網路廣播特殊的資料包,其中包含路由器的ssid,bssid,password等加密資料

  ②智能硬體開啟混雜模式,從空中抓取這種特殊的資料包。解析其中的資料。擷取到ssid和密碼後,連接配接這個熱點。

  ③ 連接配接成功後。這個時候手機與智能硬體就處于同一個區域網路中,智能硬體會向指定端口廣播一組特殊的資料包,

     手機監聽該端口的資料,收到之後表示配置成功。

Smartconfig廠家支援

官方并沒有公開smartconfig 智能硬體端底層源碼,不過已經公開手機端源碼。我們可以擷取相關協定,打造自己的apk。

smartconfig技術研究總結

抓包分析驗證結果

 抓包擷取到的資料

    ①米家智能彩燈使用的是多點傳播技術   多點傳播ip為

smartconfig技術研究總結
smartconfig技術研究總結

   ②京東智能插座使用的是廣播技術  廣播ip為

smartconfig技術研究總結
smartconfig技術研究總結

   ③米家智能彩燈 需要特别說明一下

          首先會使用upnp發現裝置

smartconfig技術研究總結
smartconfig技術研究總結

         可能某些智能家居是通過這種方式發現的,但是智能彩燈是通過掃描AP的ssid擷取的

Smartconfig以esp8266為例sdk分析

smartconfig技術研究總結
smartconfig技術研究總結
smartconfig技術研究總結

實際調用過程

#include "ets_sys.h"

#include "osapi.h"

#include "user_interface.h"

#include "smartconfig.h"

void ICACHE_FLASH_ATTR

smartconfig_done(sc_status status, void *pdata)

{

    switch(status) {

        case SC_STATUS_WAIT:

            os_printf("SC_STATUS_WAIT\n");

            break;

        case SC_STATUS_FIND_CHANNEL:

            os_printf("SC_STATUS_FIND_CHANNEL\n");

            break;

        case SC_STATUS_GETTING_SSID_PSWD:

            os_printf("SC_STATUS_GETTING_SSID_PSWD\n");

                            sc_type *type = pdata;

            if (*type == SC_TYPE_ESPTOUCH) {

                os_printf("SC_TYPE:SC_TYPE_ESPTOUCH\n");

            } else {

                os_printf("SC_TYPE:SC_TYPE_AIRKISS\n");

            }

            break;

        case SC_STATUS_LINK:

            os_printf("SC_STATUS_LINK\n");

            struct station_config *sta_conf = pdata;

                 wifi_station_set_config(sta_conf);

                 wifi_station_disconnect();

                 wifi_station_connect();

            break;

        case SC_STATUS_LINK_OVER:

            os_printf("SC_STATUS_LINK_OVER\n");

            if (pdata != NULL) {

                uint8 phone_ip[4] = {0};

                os_memcpy(phone_ip, (uint8*)pdata, 4);

                os_printf("Phone ip: %d.%d.%d.%d\n",phone_ip[0],phone_ip[1],phone_ip[2],phone_ip[3]);

            }

            smartconfig_stop();

            break;

    }

}

void user_rf_pre_init(void)

{

}

void user_init(void)

{

    os_printf("SDK version:%s\n", system_get_sdk_version());

         smartconfig_set_type(SC_TYPE_ESPTOUCH); //SC_TYPE_ESPTOUCH,SC_TYPE_AIRKISS,SC_TYPE_ESPTOUCH_AIRKISS

    wifi_set_opmode(STATION_MODE);

    smartconfig_start(smartconfig_done);

}

各廠家sdk下載下傳位址:

https://download.csdn.net/download/caofengtao1314/10963169

繼續閱讀