# 使用场景
使用场景
当设备作为网关统一管理下级子设备时,可在平台新增网关设备和下级子设备的关联关系,网关在登录认证完成后可发送获取下级子设备列表命令,平台收到该命令会回复该网关所关联的子设备列表信息,设备根据收到的子设备信息上送对应的子设备数据。当平台配置的网关和子设备关联关系有变化时平台会直接下发网关子设备列表,id由平台生成,网关收到后需要重新初始化子设备列表。
# 步骤说明
步骤说明
1.网关设备登录成功后可按需发送一次获取子设备列表命令,同步平台配置的子设备信息。
2.平台回复网关子设备总数。
3.网关根据总数自定义分包获取子设备列表。
4.平台根据分包信息下发网关子设备列表。
5.网关判断一包数据接收并处理完毕还有后续包时,包号+1重复步骤3,直到网关同步完毕子设备。
6.若在平台下发同步子设备列表命令会直接进入到步骤2,向设备发送子设备总数,设备从步骤3 开始回复平台。
# 主题和内容说明
# 网关获取下级子设备列表
topic
iot/rx/${AppKey}/${ID}/slaveDevList{ "id": "xxx", "step":"getSlaveDevList" }
1
2
3
4
参数说明
id=每次获取列表时生成一个唯一id,平台使用该id回复,建议使用uuid
step=当前步骤
getSlaveDevList=获取子设备列表
# 平台回复网关子设备总数
topic
iot/tx/${AppKey}/${ID}/slaveDevList{ "id": "xxx", "step":"resultTotal", "total": 10 }
1
2
3
4
5
参数说明
id=网关设备上报的id,若是平台直接下发分包信息则是平台生成,后续设备需要回复该id
step=当前步骤
resultTotal=返回子设备总数
total=当前网关设备在平台配置的下级子设备总数,后续网关根据该值自行分包获取
# 网关准备好接收子设备列表
topic
iot/rx/${AppKey}/${ID}/slaveDevList{ "id": "xxx", "step":"readyToReceive", "packageNum": 1, "packageSize": 10 }
1
2
3
4
5
6
参数说明
id=平台下发给设备的id
step=当前步骤
readyToReceive=网关准备好接收子设备列表
packageNum=分包获取当前包号
packageSize=每包需要平台下发的子设备数量,为0时说明不需要接收子设备列表,平台不会下发列表给网关
# 平台下发网关子设备列表
topic
iot/tx/${AppKey}/${ID}/slaveDevList{ "id": "xxx", "step":"resultSlaveDevList", "slaveDevList": [{"name":"xx","addr":"xx"}], "total": 10, "packageNum": 1, "packageSize": 10, "packages": 1 }
1
2
3
4
5
6
7
8
9
参数说明
id=网关设备上报的id
step=当前步骤
resultSlaveDevList=返回子设备列表
slaveDevList=子设备列表
name=子设备名称
addr=子设备通讯地址
total=当前网关设备在平台配置的下级子设备总数,网关收到列表后建议判断通讯地址是否重复,若在一次获取流程中在平台有修改网关和子设备关联关系则可能会导致本次下发数据异常
packageNum=当前包号
packageSize=每包子设备列表数量
packages=总包数
当数据量过大时,平台默认按每包1M大小分包发送,也可在平台网关设备点位配置页面添加编码为259,数据类型为字符串,名称为下行限制的点位,数值根据网关设备下行限制填写,单位为byte,平台判断网关设备有该点位并且点位值大于0时,按照该值作为每包大小分包发送。若当前包数据量超过每包限制大小时,相同的packageNum也会分包发送,网关可通过包号和每包子设备数量判断该包列表是否接收完毕,接收处理完毕后可获取下一包数据,直到接收完毕。
# 网关回复子设备同步结果
topic
iot/rx/${AppKey}/${ID}/slaveDevList{ "id": "xxx", "step":"resultStatus", "status": 0, "msg": "设备异常同步失败" }
1
2
3
4
5
6
参数说明
id=平台下发给设备的id
step=当前步骤
resultStatus=网关返回同步结果
status= 0-同步失败,1-同步成功
msg=同步失败原因,非必传