实战 命令下发与设备回执

本教程使用不操作真实硬件的 ping 命令,验证平台受理、设备执行和结果查询。设备客户端需要记录命令 ID 并保存原结果,操作者需要设备控制权限。

1 定义测试命令

在教学设备类型中定义 ping,输入和输出都包含整数 sequence。发布并让教学设备绑定该模型。若设备已绑定不可变版本,请按合法的新版本流程,不直接编辑已发布定义。

确认客户端已订阅自身 /down/#,且能按命令契约识别目标、命令 ID 和参数。

2 下发命令

通过控制台提供的控制入口或已启用的公开 API 提交 ping,输入为:

{"sequence": 1}

保留返回的 commandId 或原业务键。受理成功仅说明平台创建了命令,先查看尝试,再等待设备回执。HTTP/CoAP 客户端需主动领取,不能等待不存在的推送连接。

3 实现设备处理

收到 MQTT 下行后按以下顺序处理:

  1. 校验目标等于自身、命令为 ping、输入符合模型。
  2. 查询持久命令记录;已有结果则直接回复原结果。
  3. 新命令生成输出 sequence=1,保存 ID 与结果,再回复 SUCCESS。
  4. 回复使用命令 Topic 的原 commandId,另产生 UUIDv7 消息 ID 和真实时间。

模拟重复收到同一个 commandId,确认业务处理只发生一次;重试回复不能改变原结果。不要通过再次创建一个新命令来测试原命令去重。

4 查询并测试失败

查看原命令的终态与输出。客户端暂时离线时检查投递或到期,输入不合法时检查明确拒绝,不把 ACK 或网络写成功当作最终 SUCCESS。

写接口响应丢失时查询原幂等键;密钥轮换后结果归属变化需按身份合同处理,不用新Key猜旧记录。

完成标准

平台命令 ID、设备持久去重记录、回执和结果查询一致;教学不会驱动实际执行器。再扩展一次性任务或自动化。