下发命令


设备连接上云后,允许云端远程控制和监控。命令是云端向设备主动发送的指令,可触发特定动作,如开灯、关灯、调节温度等。你可以远程向设备发送命令,以及查看命令下发的状态。


设备可调用的命令已在设备模型中定义。可前往 EnOS 模型管理 配置模型定义

命令的类型


命令的类型可分为以下两种:

  • 测点设置:更新或设置某个测点的参数值,当该测点与设备控制逻辑绑定时,测点值的变化将作为设备执行动作的触发条件。例如将智能空调的目标温度值设置为 25℃,当 设备固件 监控到实时温度与目标温度存在差异时,将触发制冷或加热的动作。设置测点值时,必须确保:

    • 该测点在模型定义中 支持可写

    • 且更新后的值符合模型定义的数值要求,例如在有效值范围內,防止无效命令。

    需要注意的是,云端设置测点值后,云端查询的设备实时测点值并不一定会立即更新,如果设备没有将更新后的测点值回传给云端,云端查询的值就不会变化。

  • 服务调用:通过命令触发设备执行某项预定义的服务,服务可能涉及多个步骤或复杂逻辑,已经预封装在设备固件中。例如远程调用智能空调的“自动”模式,空调将根据实时环境温度,自动执行制冷或制热的动作。你也可以为这类型的命令设置参数,例如为“自动”模式定时 2 小时。

命令下发的时间


命令根据下发时间可分为两种:

  • 立即下发:设备管理人员在云端发送命令后,EnOS 立即下发,如果设备不在线或者设备没收到命令,则下发失败。当设备与云端建立稳定连接时,或时间窗口严格且设备不在线时可接受失败时,可使用立即下发命令。

  • 缓存下发:EnOS 首先将该条命令加入到此设备的缓存下发队列中。缓存队列是一个有序的队列,等待设备重新与 EnOS 云端建立连接后,缓存的命令将按顺序进行下发。缓存下发适合在设备与 EnOS 连接断开,或低功耗设备因长期休眠无法及时执行命令的场景。EnOS 为单个设备缓存最多 50 条命令。

命令下发流程


假定命令的有效期设为 3600 秒,命令下发的流程如下图:


../../_images/issuing_cached_commands.png


命令在下发的过程中,遵守以下规则:

  • 有序下发:设备处理并返回上一条命令的响应信息后,EnOS 才会发送下一条命令。上一条命令的处理结果包括:发送成功(设备接收命令并正常响应)和响应超时(EnOS 已经发送了命令但是设备没有及时响应)。

  • 无优先级:无论设备是否在线,在缓存的命令尚未处理完,而应用又发送了一条新命令的情况下,无论新命令是立即下发的还是缓存下发的,都会加入到队列中等待按照顺序下发。如果要优先发送新命令,应用应当调用 Cancel Command API 对缓存的命令进行撤销,才可下发新的命令。也就是说,缓存队列中也可以存储本应立即下发的命令,所有命令按顺序下发。如果此时设备下线了,则立即下发的命令将自动失败。

  • 自动清除超期命令:超过有效期的缓存命令,EnOS 从缓存队列中自动清除,并将状态置为“已超期”。

下发命令操作步骤

步骤 1:云端下发命令


你可以通过 EnOS API 向设备批量下发命令或单次下发命令:

  • 为多个设备批量下发命令:

    1. 使用 Create Command Job API 创建批量下发任务,EnOS 将自动为每个设备单独创建下发命令的任务。

    2. 使用 Search Command Tasks API 查询单个命令下发任务的执行状态。

  • 为某一设备单次下发命令:


你可以在 API 请求参数中定义命令的有效期:当有效期为 0 时,表示立即下发。当有效期大于 0 时,表示可以缓存下发。

步骤 2:设备返回执行状态


设备可以在 API 响应信息中带上自定义的业务描述信息,以说明命令执行的状态。响应数据格式如下,message 为描述命令执行状态的字段。

{
    "id": "123",
    "code": 200,
    "message": "该命令已成功执行"
    "data": {
               "outputdata1":234,
               "outputdata2":"xyz"
              }
}

步骤 3:云端查看命令状态


你也可以在应用门户中查看某一设备最近 7 天所有命令的执行状态。


备注

当前账号需要有 开发者 角色,以访问应用门户的开发者控制台,如果没有需联系 OU 管理员添加。


  1. 在应用门户的开发者控制台中选择 设备管理 > 设备资产

  2. 选择需查看命令的设备,并点击其 查看 图标 btn_view

  3. 设备详情 页面,点击 命令 页签,你可以在该页面查询命令的信息和状态。命令有以下几种状态:

    • 已创建:云端接收命令并创建,但未发送给设备。你可以对 已创建 而未下发的命令进行 撤销。撤销后,命令将不再出现在下发队列中。

    • 已撤销:该命令已被撤销,只有处于 已创建 状态的命令才能被撤销。

    • 已超期:命令超过指定的有效期。有效期可以通过 API 指定,默认值为 0,即创建后立即下发命令。有效期最大值不超过 48 小时(172,800s)。对于超过有效期的缓存命令,云端将自动从缓存队列中清除该命令,并将状态置为 已超期

    • 已下发:云端已将命令投递到发往设备的下行消息通道中,但设备尚未响应。注意,该状态不代表一定发送成功。

    • 发送成功:设备接收命令并返回响应信息,表示设备已执行命令成功。设备可能在响应信息中的 message 里带上自定义的业务描述信息。

    • 发送失败:命令因为各种原因发送失败,例如该条命令无法被正确投递到下行消息通道中,或者设备已收到命令,但执行失败。可能原因为:设备离线、脚本解析错误、无效命令等。

    • 响应超时:命令发送到设备下行消息通道,设备在超时周期内无响应。


../../_images/cached_commands.png


仅支持在页面中查看该设备最近 7 天的命令,如需查看更多命令,可使用 Search Command API