oauth相关流程图
1 正常流程
1.1 oauth流程
Created with Raphaël 2.1.2
oauth流程
IoT设备
接入平台app
博联h5
网关
博联云
第三方云平台
第三方云
博联云
发现设备,
开始接收probe request报文
处于配网模式
发送probe request广播报文
(dst全为0xFF),150ms发送一包,
每个信道停留300ms
后续所用交互报文,
都是采用单播的形式
返回应答probe单播报文(dst为IoT设备mac),
包含channel信息
锁定信道
发送probe request单播报文,
通知网关锁定信道成功
上报设备信息
(mac/vendorId/productId/
deviceId/deviceInfo)
透传网关上报的数据
返回设备详细信息
TTS语音播报,
发现设备
等待用户确认开始配网,
假设用户确认开始配网
发送probe单播报文,
开始配网
发送probe request单播报文,
包含challenge数据
透传devChallenge数据
透传devChallenge数据
返回cloudChallenge和
cloudSignature数据
透传cloudChallenge和
cloudSignature数据
发送probe单播报文,
包含cloudChallenge和cloudSignature数据
校验cloudSignature,并根据
cloudChallenge计算devSignature
数据,计算sharedkey
发送probe request单播报文,
包含devSignature数据
透传devSignature数据
透传devSignature数据
校验devSignature数据
发送sharedkey数据
透传sharedkey数据
使用sharedkey对ssid和password
进行对称加密(aes 128bit cbc pkcs7 padding)
发送probe单播报文,
包含加密数据
使用sharedkey解密数据,保存ssid和
password,同时生成token数据,
使用sharedkey进行加密
发送probe request单播报文,
包含加密的token数据
token是后续用来控制
IoT设备密钥,每次
复位都会改变(20Bytes)
使用sharedkey进行解密获取token数据
发送token数据
发送设备注册请求,
包含token数据
返回设备列表数据
需要缓存返回的数据,超时时间为60s左右
token bind成功
发送probe单播报文,
token bind成功
开始连接AP
成功连接AP
设备上线
设备上线通知
将缓存的数据保存到数据库中
1.1 控制流程
Created with Raphaël 2.1.2
正常控制流程
IoT设备
IoT设备
第三方云平台
第三方云平台
博联云
博联云
控制参数,带上token信息
转成二进制透传数据
执行控制命令
返回控制结果
返回控制结果
2 异常流程
2.1 IoT设备配网超时异常流程
Created with Raphaël 2.1.2
IoT设备配网超时异常流程
IoT设备
IoT设备
外界环境
外界环境
处于配网模式
发送probe request广播报文(dst全为0xFF),
150ms发送一包,每个信道停留300ms
从配网模式开始超过10min没有开始
配网流程,退出配网模式,
停止发送probe request广播报文
2.2 配网过程中IoT设备出现丢包异常流程
Created with Raphaël 2.1.2
配网过程中IoT设备出现丢包异常流程1
IoT设备
IoT设备
网关
网关
第三方云平台
第三方云平台
博联云
博联云
发现设备,
开始接收probe request报文
处于配网模式
省略
省略
发送probe request单播报文,
包含challenge数据
透传devChallenge数据
透传devChallenge数据
返回cloudChallenge和
cloudSignature数据
透传cloudChallenge和
cloudSignature数据
网关没有发送probe单播报文,
或者网关发送的probe单播报文没有被IoT设备接收到
距离上一次收到网关
发送的报文时间超过2s,IoT设备开始执行重试流程
重新发送包含challenge数据
的probe request单播报文,并将重试次数加一
最大重试次数为5次,
超过次数后判定为配网失败
发送probe request单播报文,
包含重试失败的错误码
重新回到切换信道发包状态
配网流程结束,
此次配网失败
Created with Raphaël 2.1.2
配网过程中IoT设备出现丢包异常流程2
IoT设备
IoT设备
网关
网关
第三方云平台
第三方云平台
博联云
博联云
发现设备,
开始接收probe request报文
处于配网模式
省略
省略
发送probe request单播报文,
包含devSignature数据
透传devSignature数据
透传devSignature数据
校验devSignature数据
发送sharedkey数据
透传sharedkey数据
使用sharedkey对ssid和password
进行对称加密(aes 128bit cbc pkcs7 padding)
网关没有发送probe单播报文,
或者网关发送的probe单播报文没有被IoT设备接收到
距离上一次收到网关
发送的报文时间超过2s,IoT设备开始执行重试流程
重新发送包含challenge数据
的probe request单播报文,并将重试次数加一
最大重试次数为5次,
超过次数后判定为配网失败
发送probe request单播报文,
包含重试失败的错误码
重新回到切换信道发包状态
配网流程结束,
此次配网失败
Created with Raphaël 2.1.2
配网过程中IoT设备出现丢包异常流程3
IoT设备
IoT设备
网关
网关
第三方云平台
第三方云平台
博联云
博联云
发现设备,
开始接收probe request报文
处于配网模式
省略
省略
发送probe request单播报文,
包含加密的token数据
使用sharedkey进行解密获取token数据
发送token数据
发送设备注册请求,
包含token数据
返回设备列表数据
需要缓存返回的数据,超时时间为60s左右
token bind成功
网关没有发送probe单播报文,
或者网关发送的probe单播报文没有被IoT设备接收到
距离上一次收到网关
发送的报文时间超过2s,IoT设备开始执行重试流程
重新发送包含challenge数据
的probe request单播报文,并将重试次数加一
最大重试次数为5次,
超过次数后判定为配网失败
发送probe request单播报文,
包含重试失败的错误码
重新回到切换信道发包状态
配网流程结束,
此次配网失败
缓存数据超时,丢弃
2.3 博联云校验devSignature失败异常流程
Created with Raphaël 2.1.2
博联云校验devSignature失败异常流程
IoT设备
IoT设备
网关
网关
第三方云平台
第三方云平台
博联云
博联云
发现设备,
开始接收probe request报文
处于配网模式
省略
省略
发送probe request单播报文,
包含devSignature数据
透传devSignature数据
透传devSignature数据
校验devSignature数据
校验devSignature数据失败
校验devSignature数据失败
配网流程结束,
此次配网失败
超过10min后退出配网模式
2.4 IoT设备校验cloudSignature失败异常流程
Created with Raphaël 2.1.2
IoT设备校验cloudSignature失败异常流程
IoT设备
IoT设备
网关
网关
第三方云平台
第三方云平台
博联云
博联云
发现设备,
开始接收probe request报文
处于配网模式
省略
省略
返回cloudChallenge和
cloudSignature数据
透传cloudChallenge和
cloudSignature数据
发送probe单播报文,
包含cloudChallenge和cloudSignature数据
校验cloudSignature失败
发送probe request单播报文,
包含检验cloudSignature失败错误码
重新回到切换信道发包状态
配网流程结束,
此次配网失败
2.4 IoT设备连接AP失败异常流程
Created with Raphaël 2.1.2
IoT设备连接AP失败异常流程
IoT设备
IoT设备
网关
网关
第三方云平台
第三方云平台
博联云
博联云
发现设备,
开始接收probe request报文
处于配网模式
省略
省略
发送probe单播报文,
token bind成功
开始连接AP
没有连上AP超过30s,
判定为连AP失败
发送probe request单播报文,
包含连接AP失败错误码
配网流程结束,
此次配网失败
重新回到切换信道发包状态
3 网关SDK调用流程
Created with Raphaël 2.1.2
网关SDK调用接口
IoT设备
IoT设备
SDK
SDK
网关
网关
第三方云平台
第三方云平台
博联云
博联云
发现设备,
开始接收probe request报文
sdk_init
(channel/gateway_mac/...)
处于配网模式
发送probe request广播报文(dst全为0xFF),
150ms发送一包,每个信道停留300ms
sdk_pkt_process()
sdk_raw_pkt_send_t()
返回应答probe单播报文(dst为IoT
设备mac),包含channel信息
锁定信道
发送probe request单播报文,
通知网关锁定信道成功
sdk_pkt_process()
sdk_found_device_t(product_info)
上报设备信息(mac/vendorId/
productId/deviceId/deviceInfo)
透传网关上报的数据
返回设备详细信息
TTS语音播报,
发现设备
等待用户确认开始配网,
假设用户确认开始配网
sdk_user_auth_to_start_config()
sdk_raw_pkt_send_t()
发送probe单播报文,
开始配网
发送probe request单播报文,
包含challenge数据
sdk_pkt_process()
sdk_challenge_post_t
(devChallenge)
透传devChallenge数据
透传devChallenge数据
返回cloudChallenge和
cloudSignature数据
透传cloudChallenge和
cloudSignature数据
sdk_challenge_and_signature_set
(cloudChallenge/cloudSignature)
sdk_raw_pkt_send_t()
发送probe单播报文,
包含cloudChallenge和cloudSignature数据
校验cloudSignature,
并根据cloudChallenge计算devSignature数据,
计算sharedkey
发送probe request单播报文,
包含devSignature数据
sdk_pkt_process()
sdk_signature_post_t
(devSignature)
透传devSignature数据
透传devSignature数据
校验devSignature数据
发送sharedkey数据
透传sharedkey数据
使用sharedkey对ssid和password
进行对称加密(aes 128bit cbc pkcs7 padding)
sdk_wlan_params_set
(ssid/password/sharedkey)
sdk_raw_pkt_send_t()
发送probe单播报文,
包含加密数据
使用sharedkey解密数据,保存ssid和password,
同时生成token数据,使用sharedkey进行加密
发送probe request单播报文,
包含加密的token数据
sdk_pkt_process()
sdk_device_token_post_t
(token)
发送token数据
发送设备注册请求,
包含token数据
返回设备列表数据
需要缓存返回的数据,超时时间为60s左右
token bind成功
发送probe单播报文,
token bind成功
开始连接AP
成功连接AP
设备上线
将缓存的数据保存到数据库中
当IoT设备出现
10min超时/重试超时/
校验cloudSignature失败/
连接AP失败等异常时,
流程如下
发送probe request单播报文,
包含错误码数据
sdk_pkt_process()
sdk_config_result_post_t
(errno)
配网流程结束,
此次配网失败,
并根据不同的errno进行相应处理