网关子设备

更新时间:2024-05-14 08:00:15下载pdf

管理子设备的能力是网关的核心能力。

本文简单介绍如何使用 添加删除子设备 以及 控制子设备的在线离线 等子设备相关的能力。

添加子设备

网关的能力是转换不同设备间的通讯协议,可以让不具有联网能力的子设备通过网关连接上云端。
如果我们想要达到该目的,需要将子设备添加到网关下,建立子设备与网关的联系。

因此首先要做的是 添加子设备 到网关。

基础操作路径如下:

设置网关为配网模式(允许子设备加入) > 加入子设备 > 设置网关退出配网(禁止子设备加入)

添加子设备的时候都需要将模组设置为允许子设备加入的状态,如果不在此状态下,直接发起添加子设备设备的请求会被模组拒绝。

添加子设备可以根据发起允许加入状态的对象不同,分为两种情况。

  • 通过 App 发起添加。
  • 通过 MCU 本地发起添加。

通过 App 添加

  1. App 会将模组设置为允许入网状态,此时模组会通知 MCU(0x06命令),MCU 需要在此时进入配网模式,允许子设备入网。

  2. MCU 进入配网模式后收到子设备加入的信息,MCU 发送子设备信息(0x08命令),将子设备加入网关。

  3. 网关收到子设备信息后将设备注册到云端(从而可以在 APP 上显示),同时获取子设备的相关属性(DP 点)。

  4. 网关注册成功后通知 MCU(0x13命令)添加完成。直到此步,子设备添加才真正添加成功。

  5. App 退出配网页面,通知模组。模组发送关闭子设备入网命令(0x07命令)。

    网关子设备

通过本地添加

  1. MCU 使用命令0x1A通知模组,需要进入允许入网状态。
  2. 模组收到命令后,模组发送允许子设备命令0x06通知 MCU 进入配网模式
  3. MCU 进入配网模式后收到子设备加入的信息,MCU 发送子设备信息(0x08命令),将子设备加入网关。
  4. 网关收到子设备信息后将设备注册到云端(从而可以在 App 上显示),同时获取子设备的相关属性(DP 点)。
  5. 网关注册成功后通知 MCU(0x13命令)添加完成。直到此步,子设备添加才真正添加成功。
  6. 网关根据步骤 1 中设置的时间(0x1A命令),到时间后发送0x07命令,通知 MCU 关闭子设备入网。您也可以通过 MCU 主动发送0x1A命令通知模组退出。模组会随即发送0x07命令通知 MCU 关闭子设备入网。
    网关子设备

当 MCU 发送0x06指令时,如果模组处于断网的状态下,是无法添加成功的。但是在该环境下,模组会保存子设备的信息,在恢复网络的情况下重新向云端注册。

删除子设备

  • 通过 App 删除
    通过 App 删除,App 会把删除命令发送给模组,模组收到后会删除存在自身的子设备信息并通过0x09命令通知 MCU(具体内容参照协议)。
  • 通过 MCU 删除
    MCU 主动发起删除命令,MCU 发送0x19命令,告知模组删除指定子设备(具体内容参照协议),模组收到后执行删除操作,并通知删除结果。

子设备的在线离线管理

作为网关,需要管理网关下子设备的在线离线情况。
在一般情况下,网关采用心跳查询的机制来检测各子设备的状态。但同时也可由 MCU 主动设置子设备的在线状态。

心跳管理

模组采用心跳检测的模式来判断子设备的离线以及在线情况。
在子设备加入到网关后,模组会发送心跳检测指令(0x0A命令)来查询子设备的在线状况。MCU 收到心跳检测指令后,如果该子设备在线,则需要回复对应的帧。如果两个心跳周期都没有回复,那么该子设备会被网关设置为离线。

状态上报(0x0D命令)也会刷新心跳周期,如果在两次心跳周期的时间内持续有状态上报,设备不会被判定离线

查询周期和子设备数量相关,子设备数量越多,子设备心跳查询间隔越频繁。查询机制见下表。

设备数 间隔(秒) 轮询次数 第一个设备的离线时间 最后一个设备离线时间
1 5 3 10 10
2 3.333 2 10 13.333
3 2.5 2 10 15
4 2 2 10 16
5 1.667 2 10 16.667
6 1.429 2 10 17.143
7 1.25 2 10 17.5
8 1.111 2 10 17.777
9 1 2 10 18
10 0.909 1
说明:当间隔小于 1 秒时,按 1 秒计算。
2 10 11
说明:当设备数大于等于 10 时,第一个设备离线时间按 N+1 秒计算。
18.182 20
说明:当设备数大于等于 10 时,最后一个设备离线时间按 2N 秒计算。
11 1 2 12 22
32 1 2 33 64
64 1 2 65 128
128 1 2 129 256
N 1 2 N+1 2N

模组只会主动向被设置为标准功耗设备0x0A命令中回复"lp":0)的子设备查询心跳,如果在心跳检测命令中,MCU 将该设备设置为低功耗子设备0x0A命令中回复"lp":1),那么模组将不会主动查询该子设备的心跳。此时需要该子设备主动上报心跳(0x0A命令)。
如果十二小时内没有收到来自该设备的心跳(或者该子设备的0x0D状态上报),则网关判定该子设备离线。

由 MCU 更新子设备状态

在大部分情况下,MCU 对子设备的在线与离线状态的感知更敏感,当子设备离线的时候,模组至少需要两次心跳查询的周期来判定子设备的离线。但对于 MCU 来说,子设备的离线在线情况,MCU 可以更快的感知到。在这种情况下,MCU 可以使用命令 0x2A 来直接将子设备设置为在线或离线的状态。具体可参见协议。

通用对接网关(非 Pro) 支持 关闭心跳查询
如果 MCU 可以自行管理设备的在线和离线状况,也可以在产品信息0x01命令中设置 cap 值对应的 bit7 为 1,从而关闭心跳检测。MCU 可以只通过0x2A命令来完成设备的在线离线状态维护。