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 服务用于跟控制端或者云端互通。

设备发现连接

通用互联APP通过BLE协议实现与被控设备的发现与连接,流程如下:

图5 BLE设备发现
BLE设备发现
  • 发送广播 :
    • BLE 设备在出厂状态或者恢复出厂状态下,设备上电默认开启 Advertising 广播,广播数据包含设备类型、厂商名称等信息。
  • 发现和连接 :
    • 用户通过控制端 通用互联APP 扫描发现设备,并将扫描到的设备显示到通用互联APP 界面。
    • 用户点击连接被控端设备,通过 BLE 协议建立连接通道。
    • 秘钥协商和加密传输:用户在 通用互联APP手动输入 PIN 码,双方通过获取到的 PIN 码,进行 SPEKE 会话密钥协商生成加密秘钥,后续数据交互通过协商的密钥进行加密传输。具体请参考:安全协商流程

设备配网

通过BLE辅助设备接入WiFi网络。

图6 BLE设备辅助配网
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 点对点控制,提供统一的设备服务状态管理。

  • 控制指令处理流程
  1. 指令接收 :
    • 通用互联APP通过云远程、BLE 直连方式向被控端发送控制指令,内容包含服务 ID(svcId)和控制数据(JSON 格式)。
    • 被控端通过 BLE GATT 或者 WiFi + Coap 协议接收指令信息,由事件总线向上层透传数据到 设备控制 模块。
  2. 指令执行 :
    • 设备控制 调用物模型写服务,物模型将数据解析封装,传递给 APP 绑定的写服务回调函数。
    • 通用互联APP 根据 svcId 找到对应的物模型服务,执行并更新设备状态。
  • 查询指令处理流程
  1. 指令接收 :
    • 通用互联APP 通过云远程、BLE 直连方式向被控端发送查询指令,内容需包含服务 ID(svcId)。
    • 被控端通过 BLE GATT 或者 WiFi + Coap 协议接收指令信息,由事件总线向上层透传数据到 设备控制 模块。
  2. 状态获取 :
    • 设备控制 调用物模型读服务,物模型将数据解析封装,传递给 厂商应用 绑定的读服务回调函数。
    • 厂商应用 根据 svcId 找到对应的物模型服务,将服务执行结果返回。
  3. 响应返回 :
    • 厂商应用 返回 JSON 格式的状态数据(如 {"on":1, "brightness":80})。
    • 数据经加密后传给控制端。

消息上报

厂商应用可通过IotcOhDevReportCharState主动向云端、通用互联APP上报消息,如设备状态变化、事件。

图9 消息上报
消息上报
  • 消息上报处理流程
    • 厂商应用 可通过 IotcOhDevReportCharState 主动上报状态变化。
    • 消息数据经加密后发送至控制端。