您可以使用 Cloud IoT Core 向设备发送命令。命令是临时的一次性指令,发送至连接到 Cloud IoT Core 并订阅命令主题的设备。
与设备配置相比,命令速度更快,发送频率更高,并且独立于其他 Cloud IoT Core 功能。在命令和配置之间进行选择时,请考虑您是否需要持久保存/了解相关信息(配置),或者更希望使用速度和/或时间受限的指令(命令)。
在以下情况下,命令非常有用:
- 在特定时间快速向多台设备发送消息
- 在特定时间向多台设备发送大量消息
- 发送应该有时限性的指令
- 发送增量设备设置
命令具有以下特征:
- 直接发送到订阅的已连接设备
- 不会保留在 Cloud IoT Core 中
- 对于在发送命令时未订阅和连接的设备,会被丢弃
- 不是唯一的(尽管发送不太可能,但可能会发送重复)
- 不按任何特定顺序发送(但大致按照发送顺序发送)
- 采用任何格式(数据 blob)
目前,Cloud IoT Core 仅支持通过 MQTT(而非 HTTP)运行命令。
与配置相比较的命令
Cloud IoT Core 还支持设备配置。配置比命令更一致且更持久。配置将保留在 Cloud IoT Core 中。使用 MQTT 时,最新的配置最终将传送到所有订阅的设备,甚至包括后来订阅的设备。
下表可帮助您决定是使用命令还是配置:
配置 | 命令 |
---|---|
系统会重试最新配置,直到传送完毕 (MQTT) | 针对 QoS 1 进行重试,但不保证传送 |
永久有效,因此如果设备之后连接 (MQTT) 或轮询 (HTTP),系统仍会提供最新的配置 | 非永久性;仅传送到发送命令时连接的设备 |
每个新版本都会替换前一个版本 | 命令之间无关系或顺序 |
告知设备充当什么角色;对应于 Cloud IoT Core 中的状态 | 告知设备在特定时间执行什么操作 |
延迟时间较长 | 延迟时间较短 |
通常较小(最大 64 KB) | 最多 256 KB |
用户定义的任意 blob | 用户定义的任意 blob |
每台设备每秒 1 次更新 | 每个项目每秒 1000 次(可配置) 每秒 2500 次,每个注册表 |
由于命令不会持久保存在 Cloud IoT Core 中,因此不会无限期地重试,因此您不应指引设备遥测或状态数据来反映特定命令。设备可能尚未收到命令,也可能已收到后续命令或配置。命令应是临时的,不属于长期设备数据的一部分。
如需管理命令排序和重复,请使用设备逻辑或客户端应用。
发送命令
如需将命令发送到设备,请使用 Google Cloud 控制台、gcloud 或 Cloud IoT Core API。
控制台
如需向设备发送命令,请执行以下操作:
- 转到 Google Cloud 控制台中的注册表页面。
- 点击设备的注册表的 ID。
- 在左侧的注册表菜单中,点击设备。
- 点击要向其发送命令的设备的 ID。
- 点击页面顶部的发送命令。
选择命令的格式:
- 文字
- Base64
在命令数据字段中,输入命令。
在可选的子文件夹字段中,为此命令输入子文件夹的名称。订阅通配符主题的设备将收到发送到子文件夹的命令。
点击发送命令。
gcloud
如需向设备发送命令,请运行 gcloud iot devices commands send
命令:
gcloud iot devices commands send \ { --command-file=COMMAND_FILE | --command-data=COMMAND_DATA } \ --region=REGION \ --registry=REGISTRY_ID \ --device=DEVICE_ID \ [--subfolder=SUBFOLDER]\
如果命令数据中包含特殊字符,请使用 --command-file
,而不是 --command-data
。
API
使用 SendCommandToDevice 方法发送命令。
C#
Go
Java
Node.js
PHP
Python
Ruby
接收命令
如需接收命令,设备必须:
- 使用 MQTT 协议连接到 Cloud IoT Core
- 订阅 MQTT 主题
/devices/{device-id}/commands/#
(必须提供 # 通配符)
通过订阅通配符主题,设备将接收发送至 devices/{device-id}/commands
的命令,以及发送到子文件夹(例如 devices/{device-id}/commands/{subfolder}
)的命令。不支持订阅特定子文件夹。
命令会传送给在特定时间连接和订阅的设备。系统不会将其加入队列,也不会针对稍后连接和订阅的设备保留。
服务质量 (QoS)
命令发送取决于您使用的服务质量 (QoS) 级别:
QoS 级别 | 保证 |
---|---|
0 | 不保证(仅限尽力而为),即使请求返回 OK 也是如此 |
1 | 如果 sendCommandtoDevice 请求返回 OK ,则保证至少传送一次 |
换言之,对于 QoS 0,无论设备响应如何,消息一旦发送就会被视为成功。对于 QoS 1,成功表示设备已确认消息传送。请注意,“至少一次”传送意味着设备可能会多次接收该命令;Cloud IoT Core 不会跟踪该命令的接收次数。
错误
如果达到命令超时(60 秒,如配额和限制所述),则返回
DEADLINE_EXCEEDED
。如果设备未连接或已连接但未订阅 MQTT 通配符主题,则返回
FAILED_PRECONDITION
。
日志记录
发送到设备的命令以及设备确认记录在 Cloud Logging 中。
价格
命令的计费方式与通过 MQTT 发送的所有其他消息相同。如需了解详情,请参阅价格。