smartconfig技术研究总结

一 背景:

    

智能家居/家电现阶段还处于普及阶段,由于家庭wifi网络的普及,目前普遍采用wifi与路由器完成连接,与手机/云端进行数据交互.

智能硬件,如智能插座,智能空调,智能空气净化器,智能灯泡,智能门锁由于不具备人机交互界面,不能像电脑一样的搜索/选择指定路由器,输入连接SSID和密码的界面,所以必须先解决正确连接路由问题;

二 解决方法

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

 

方案一 softAP方案

硬件处于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的方法

     

 

          

      米家app是通过扫描wifi热点的方法获取到的,我将华为路由器A1的2.4Gssid修改为了yeelink-light-color1_miapbe58结果手机显示如下:

  

  

   

 

 

   2.2京东微联的智能插座使用扫描二维码的方式识别设备

      

      

解析二维码生成的urlhttp://smartcloud.jd.com/download?d=RldBU1VC

   将d= RldBU1VC去掉,然后在手机浏览器中输入http://smartcloud.jd.com/download

   直接就可以打开小京鱼app的下载界面了

②将http://smartcloud.jd.com/download通过草料二维码生成器https://cli.im/生成一个二维码

通过浏览器扫描照样可以下载小京鱼app但是通过小京鱼app扫描这个二维码显示如下图所示

③将http://smartcloud.jd.com/download?d=RldBU1VC通过草料二维码生成器生成一个二维码

通过浏览器扫描可以下载小京鱼app并且通过小京鱼app扫描这个二维码同样会显示如下

     

 

3.技术原理:

  

  ①手机向局域网广播特殊的数据包,其中包含路由器的ssid,bssid,password等加密数据

  ②智能硬件开启混杂模式,从空中抓取这种特殊的数据包。解析其中的数据。获取到ssid和密码后,连接这个热点。

  ③ 连接成功后。这个时候手机与智能硬件就处于同一个局域网中,智能硬件会向指定端口广播一组特殊的数据包,

     手机监听该端口的数据,收到之后表示配置成功。

 

 

Smartconfig厂家支持

官方并没有公开smartconfig 智能硬件端底层源码,不过已经公开手机端源码。我们可以获取相关协议,打造自己的apk。

抓包分析验证结果

 抓包获取到的数据

    ①米家智能彩灯使用的是组播技术   组播ip为

    

           

   ②京东智能插座使用的是广播技术  广播ip为

      

          

   ③米家智能彩灯 需要特别说明一下

          首先会使用upnp发现设备

          

          

         可能某些智能家居是通过这种方式发现的,但是智能彩灯是通过扫描AP的ssid获取的

Smartconfig以esp8266为例sdk分析

    

 

实际调用过程

 

   /******************************************************************************

 * Copyright 2013-2014 Espressif Systems (Wuxi)

 *

 * FileName: user_main.c

 *

 * Description: entry file of user application

 *

 * Modification history:

 *     2014/1/1, v1.0 create this file.

*******************************************************************************/

#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

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值