FastCon配网命令
1 概述
本文档描述的是支持FastCon功能的模块,通过APP进行配网的时候,和APP报文交互的流程的描述。
FastCon底层支持两种配网:
- 零配配网(模块最终是和AP进行连接)
- 子设备添加(模块最终是和Master进行连接)
因为业务的需要,在上述两种主要的配网方式的基础上,应用层和APP对于不同场景下进行的配网交互,重新定义了好几套不同的交互格式。
- 推送零配:APP推送消息,用户选择零配,点击开始配网
- 推送子设备添加:APP推送消息,用户选择子设备添加,点击开始添加子设备
- 主动零配:用户主动进入APP,选择设备,点击零配
- 主动子设备添加:用户主动进入APP,选择设备,点击添加子设备
框架图如下:
2 推送零配/子设备添加格式
推送零配和推送子设备添加这两种方式是共用一套交互格式的。通过协议格式中字段数据配置字内容的不同,执行不同的流程。
2.1 推送零配流程
此流程中,state=5表示下发ssid和password成功,后续device是否连接上AP,以及是否连接上云端,master是无法获取到这些状态的。
可能存在state=5了,但是由于device在后续连接AP或者连接云端出现异常,导致device又重新退回到配网状态的情况。
2.1 推送子设备添加流程
2.2 相关接口
APP下发走的是106透传的接口,使用标准的DNA串口头进行下发。
APP 通过 APPSDK 如下接口下发命令到 master:
/**
* Control device with data string composed by yourself.
*
* @param did Control wifi device did
* @param sDid Control sub device did. If sdid = nil, just control wifi device.
* @param dataStr Control data string composed by yourself
* @param cmd Control command composed by yourself
* @param configParam Config param
* @return Control result
*/
public static String dnaControl(String did, String sDid, String dataStr, String cmd, BLConfigParam configParam);
/**
Control device with data string composed by yourself.
@param did Control wifi device did
@param sDid Control sub device did. If sdid = nil, just control wifi device.
@param dataStr Control data string composed by yourself
@param command Control command composed by yourself
@param scriptPath Control device script. If scriptPath = nil, find device script in default store path.
@return Control result
*/
- (NSString *_Nonnull)dnaControl:(NSString *_Nonnull)did subDevDid:(NSString *_Nullable)sDid dataStr:(NSString *_Nonnull)dataStr command:(NSString *_Nonnull)command scriptPath:(NSString *_Nullable)scriptPath;
2.2.1 配网确认
APP下发
cmd : “fastcon_device_add”
dataStr :
{
"config":1, //1:配网 2:子设备添加
"timeout":100, //单位为秒,配网超时时间
"did":"00000000000000000000112233445566" //一共32个字节的字符串,后面12个字节为mac地址,前面0补齐
}
master返回
{
"state":1
"fastcon_enable":1 //0:未开启fastcon功能,1:开启fastcon功能
}
state | |
---|---|
-1 | master正在配网中或者master不支持,无法处理配网确认命令 |
0 | master为空闲 |
1 | master确认配网/确认子设备添加 |
2 | master双向认证 |
3 | master获取token |
4 | master等待绑定 |
5 | 配网/子设备添加成功(推送零配到这边结束,后续待配设备自行连接AP路由器) |
6 | 子设备登陆成功(推送子设备添加到这边才算成功) |
2.2.2 查询配网状态
APP下发
cmd : “fastcon_device_add_status_query”
dataStr :
{
"did":"00000000000000000000112233445566" //一共32个字节的字符串,后面12个字节为mac地址,前面0补齐
}
master返回
{
"state":1,
"fastcon_enable":1,
["token":"xxxxxxxx"]
}
备注:只有当state大于3的时候,token才会有
2.2.3 配网结束
APP下发
cmd : “fastcon_cancel”
dataStr :
{
"did":"00000000000000000000112233445566" //一共32个字节的字符串,后面12个字节为mac地址,前面0补齐
}
master返回
{
"state":0
"fastcon_enable":1 //0:未开启fastcon功能,1:开启fastcon功能
}
2.2.4 子设备控制
APP下发
cmd : “fastcon_client_control”
dataStr :
{
"did" : "00000000000000000000112233445566", //控制子设备的did
"cmd" : "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" //子设备控制命令,透传指令,可以通过 sdk 接口 dev_data 命令获取
}
master返回
{
"status":0, //控制返回状态
"did" : "00000000000000000000112233445566", //控制子设备的did
"cmd" : "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" //子设备控制命令返回数据,同样可以通过 sdk 接口转换成 key-value 格式
}
3 主动零配格式
3.1 主要流程
此流程主要描述APP和master之间的交互,中间双向认证等其他流程有所省略。
3.2 相关接口
APP 通过 APPSDK 如下接口下发命令到 master:
/**
* Control device with data string composed by yourself.
*
* @param did Control wifi device did
* @param sDid Control sub device did. If sdid = nil, just control wifi device.
* @param dataStr Control data string composed by yourself
* @param cmd Control command composed by yourself
* @param configParam Config param
* @return Control result
*/
public static String dnaControl(String did, String sDid, String dataStr, String cmd, BLConfigParam configParam);
/**
Control device with data string composed by yourself.
@param did Control wifi device did
@param sDid Control sub device did. If sdid = nil, just control wifi device.
@param dataStr Control data string composed by yourself
@param command Control command composed by yourself
@param scriptPath Control device script. If scriptPath = nil, find device script in default store path.
@return Control result
*/
- (NSString *_Nonnull)dnaControl:(NSString *_Nonnull)did subDevDid:(NSString *_Nullable)sDid dataStr:(NSString *_Nonnull)dataStr command:(NSString *_Nonnull)command scriptPath:(NSString *_Nullable)scriptPath;
command : “fastcon_no_config”
dataStr 为 JSON String. 其中 act 参数代表零配的几个步骤,具体如下:
act | |
---|---|
0 | 获取待配网设备列表 |
1 | 批量配网 |
2 | 获取配网状态 |
3.2.1 获取待配网设备列表
APP下发
{
"did":"xx", //普通模块did
"act" : 0,
"count": xx, //查询数量
"index": xx, //查询开始索引
}
master返回
{
"did":"xx", //普通模块did
"status": 0, //非0表示失败
"total": xx, //设备总数
"index": xx, //查询开始索引
"devlist" : [
{"pid": "xx", "did":"xx"},
{"pid": "xx", "did":"xx"},
{"pid": "xx", "did":"xx"},
]
}
3.2.2 批量配网
APP下发
{
"did":"xx", //普通模块did
"act" : 1,
"devlist" : [
"did0","did1","did2" //待配网设备的did列表
]
}
master返回
{
"did":"xx", //普通模块did
"status": 0, //非0表示失败
}
说明:最多支持8个设备同时配网
3.2.3 获取配网状态
APP下发
{
"did":"xx", //普通模块did
"act" : 2,
"devlist" : [
"did0","did1","did2" //待配网设备的did列表
]
}
master返回
{
"did":"xx", //普通模块did
"status": 0, //非0表示失败
"devlist":[
{"did":"xx", "status":xx},
{"did":"xx", "status":xx},
{"did":"xx", "status":xx},
]
}
配网状态定义:
status | |
---|---|
0 | 等待配网 |
1 | 正在配网 |
2 | 配网成功 |
3 | 配网超时 |
4 | 设备离线(设备不存在) |
4 主动添加子设备
主动添加子设备是兼容了原先433添加子设备的流程。
详细定义在 网关及子设备功能