IoT Connect组件关键交互流程
关键交互流程
IoT Connect组件采用先注册声明--->再绑定实现--->最后执行启动的分层设计,设备和部件之间解耦互不干扰。 为了更清晰地展示各模块如何协同工作,以下详解核心流程。
部件初始化
设备服务、BLE服务、WiFi服务模块向部件注册声明,厂商应用的实现与设备服务模块的声明进行绑定映射关系
图3 部件初始化
- 设备服务模块初始化 :
- 当
厂商应用调用IotcOhDevInit时,设备服务模块做以下注册,但不执行:- 向部件注册服务回调列表声明,包括物模型查询回调、物模型控制回调、物模型服务上报回调、设备信息配置、部件重启回调等声明,APP 通过 IotcOhSetOption 接口来绑定声明与 APP 的回调函数。
- 向部件注册设备服务模块初始化和去初始化入口函数。
- 当
- BLE 服务模块初始化 :
厂商应用按需调用IotcOhBleEnable时,BLE 服务模块做以下注册,但不执行:- 向部件注册服务回调列表声明,包括设备配网回调声明、配置广播时长等。
- 向部件注册 BLE 服务模块初始化和去初始化入口函数。
- WiFi 服务模块初始化 :
厂商应用按需调用IotcOhWifiEnable时,wifi 服务模块做以下注册,但不执行:- 向部件注册服务回调列表声明,包括配网模式、配网超时时长等。
- 向部件注册 WiFi 服务模块初始化和去初始化入口函数。
部件启动
图4 部件启动
- 设置运行参数 :
厂商应用可以根据需要调用 IotcOhSetOption 接口设置运行参数,不设置则使用默认的参数。参数包括日志级别、线程栈空间大小、配置文件目录等。
- 启动主线程 :
- 当
厂商应用调用 IotcOhMain 时,部件会根据运行参数进行部件的初始化,然后执行设备服务模块、BLE 服务模块、WiFi 服务模块注册的初始化函数,创建设备服务实例、BLE 服务实例、WiFi 服务实例,启动部件主线程,发布主线程启动事件。
- 当
- 启动设备服务 :
- 设备服务实例接收到主线程启动事件后,会启动设备服务,并发布设备服务启动事件。
- 启动 BLE/WiFi 服务 :
- BLE/WiFi 服务实例接收到设备服务启动事件后,会启动 BLE/WiFi 服务
BLE 服务:初始化 BLE 协议栈、注册 GATT 服务用于跟控制端互通、发送设备发现广播等 。 WiFi 服务:初始化 WiFi 协议栈、启动 Coap 服务用于跟控制端或者云端互通。
- BLE/WiFi 服务实例接收到设备服务启动事件后,会启动 BLE/WiFi 服务
设备发现连接
通用互联APP通过BLE协议实现与被控设备的发现与连接,流程如下:
图5 BLE设备发现
- 发送广播 :
- BLE 设备在出厂状态或者恢复出厂状态下,设备上电默认开启 Advertising 广播,广播数据包含设备类型、厂商名称等信息。
- 发现和连接 :
- 用户通过控制端 通用互联APP 扫描发现设备,并将扫描到的设备显示到通用互联APP 界面。
- 用户点击连接被控端设备,通过 BLE 协议建立连接通道。
- 秘钥协商和加密传输:用户在 通用互联APP手动输入 PIN 码,双方通过获取到的 PIN 码,进行 SPEKE 会话密钥协商生成加密秘钥,后续数据交互通过协商的密钥进行加密传输。具体请参考:安全协商流程。
设备配网
通过BLE辅助设备接入WiFi网络。
图6 BLE设备辅助配网
-
获取设备注册验证码和 psk 信息 :
- 通用互联APP登录到云端,获取设备注册验证码和 psk 等信息。
-
发送配网信息 :
- 通用互联 APP 向被控设备发送 WiFi 配网信息(SSID / 密码)、认证信息、云端域名及端口信息。
-
配网执行 :
- 被控端设备配网模块接收到消息后,根据配网参数(WiFi SSID 和密码)接入家庭网络后,广播配网成功消息,同时缓存配网信息。
设备注册
图7 设备注册
设备注册流程实现设备与云端服务的安全通信,包括端云建连、PSK 协商、设备注册、设备登录。
- 网络就绪检查 :
- 被控设备配网完成连接上 WiFi ,定时检查设备状态,检测到设备已经准备就绪,开始与云端进行连接。
- 端云连接 :
- 被控端读取配网时发过来的云端域名和端口,与云端建立连接。
- 资源不受限场景下被控端设备与云端通过 TLS 建立连接,用于设备注册,登录,控制,传输层加密。
- 资源受限场景下被控端设备与云端通过 TCP 建立连接,用于设备注册,登录,控制,消息需要应用层加密。
- PSK 协商 :
- 被控端向云端发送随机数 sn1 和 devId。
- 云端接收 sn1,生成随机数 sn2,使用 sn1、sn2 以及密码生成 PskInfo,将 sn2 响应给被控端。
- 被控端接收 sn2,同样通过 sn1、sn2 以及密码(已在配网时通过 APP 发送给被控端)生成 PskInfo。
- 设备注册 :
- 被控端向云端发送设备认证码(配网阶段已由 APP 下发至被控端)及设备信息。
- 云端校验设备认证码,完成设备信息注册,并返回校验结果与安全码。
- 被控端注册成功后,持久化保存 pskInfo、云端 url、安全码等信息,后续设备重启不会再进行注册,直接读取此类信息,用于设备登录。
- 设备登录 :
- 被控端向云端发送 devId 和安全码。
- 云端验证安全码后,生成访问 token 发给控制端。
- 控制端缓存 token,用于后续交互。
- 设备信息同步 :
- 登录成功后,被控端向云端发送最新的设备信息和物模型服务信息。设备变为
ONLINE状态,端云连接流程完成。
- 登录成功后,被控端向云端发送最新的设备信息和物模型服务信息。设备变为
设备控制
控制端和被控设备建立连接之后,控制端通过BLE GATT/云端方式发送指令控制被控设备。
图8 设备控制
设备控制流程支持多通道控制能力,包括云端远程控制(WiFi+Coap)及 BLE 点对点控制,提供统一的设备服务状态管理。
- 控制指令处理流程
- 指令接收 :
- 通用互联APP通过云远程、BLE 直连方式向被控端发送控制指令,内容包含服务 ID(svcId)和控制数据(JSON 格式)。
- 被控端通过 BLE GATT 或者 WiFi + Coap 协议接收指令信息,由事件总线向上层透传数据到
设备控制模块。
- 指令执行 :
设备控制调用物模型写服务,物模型将数据解析封装,传递给 APP 绑定的写服务回调函数。通用互联APP根据 svcId 找到对应的物模型服务,执行并更新设备状态。
- 查询指令处理流程
- 指令接收 :
通用互联APP通过云远程、BLE 直连方式向被控端发送查询指令,内容需包含服务 ID(svcId)。- 被控端通过 BLE GATT 或者 WiFi + Coap 协议接收指令信息,由事件总线向上层透传数据到
设备控制模块。
- 状态获取 :
设备控制调用物模型读服务,物模型将数据解析封装,传递给厂商应用绑定的读服务回调函数。厂商应用根据 svcId 找到对应的物模型服务,将服务执行结果返回。
- 响应返回 :
厂商应用返回 JSON 格式的状态数据(如{"on":1, "brightness":80})。- 数据经加密后传给控制端。
消息上报
厂商应用可通过IotcOhDevReportCharState主动向云端、通用互联APP上报消息,如设备状态变化、事件。
图9 消息上报
- 消息上报处理流程
厂商应用可通过IotcOhDevReportCharState主动上报状态变化。- 消息数据经加密后发送至控制端。