将 MQTT 消息发送到 Google 云物联网设备
Send MQTT messages to Google Cloud IoT Device
我们正在使用 Google 的 IoT Core 产品并注册了多个设备。这些设备能够成功地接收来自 /config 和 /command 主题的消息,以及发布到我们创建的其他主题。
我们希望能够向我们的物联网设备发送多条消息(具有不同的数据)并让它接收它们。如果设备处于离线状态,这些消息应在其在线并收听订阅后传送。
解决这个问题的正确方法是什么? /config 一次只允许一条消息(最新的)。我们可以为该设备创建一个特定主题并让它订阅发布到它的任何内容吗? (我们尝试过,但在尝试让设备从订阅中提取消息 pubsub 时不断出错)
感谢任何帮助。
非权威回答,如有错误,我会根据要求更正或删除。请谨慎对待我的信息。
我的理解是 Google IoT 的核心故事是它具有大规模的可扩展性,可以从连接到 Internet 的 IoT 设备接收传入的遥测数据。似乎对设备数量或其遥测发布速率没有内在限制。从 IoT 设备的角度来看,它使用 MQTT 或 HTTP 来发送和接收数据。在 Internet 和 Google 之间的边界 "edge" 接收 MQTT 协议通信。然后接收消息并将其作为 Google Pub/Sub 消息中继到 Google 云平台 (GCP)(这些不同于 MQTT 协议消息)。
据我所知,如果我们希望向下游发送数据(从 GCP 到设备),我们可以这样做,但有一些限制。 Google 定义了两种类型的消息...配置和命令。这些在此处描述
https://cloud.google.com/iot/docs/how-tos/commands
每个设备的配置限制为每秒 1 个,而每个项目的命令为每秒 1000 个(请注意那里的域差异)。
配置消息限制为 64K,而命令限制为 256K。
一个(且只有一个)配置消息可以为一个设备激活。如果设备处于离线状态,则在它恢复时只会传送最后一条配置消息。对于命令,如果设备处于离线状态,则消息为 dropped/lost/discarded。
到目前为止我所说的可能是您已经知道的内容的总结。
我不相信 Cloud IoT 中有一种机制可以实现对任意数量的消息进行 MQTT 排队以最终传送到设备。但是,这并不意味着我们无法实现您的目标。你可以做的是使用配置消息来传输一个 flag/indicator 有数据可用于设备但不发送数据本身。例如消息:
{
data_available: true
}
当设备收到此消息时,它可以(从设备)执行拉取请求以拉取数据。然后,这种拉取数据将在 Cloud IoT 核心产品之外,这将是您想要如何实现该存储和检索的设计。您可以使用数据存储(Cloud DataStore、Cloud SQL)来存储数据并使用 Cloud Function 或其他 HTTP 请求(源自设备)来检索数据。或者,您可以 运行 您自己的 Compute Engines 上的 MQTT 代理。
我们正在使用 Google 的 IoT Core 产品并注册了多个设备。这些设备能够成功地接收来自 /config 和 /command 主题的消息,以及发布到我们创建的其他主题。
我们希望能够向我们的物联网设备发送多条消息(具有不同的数据)并让它接收它们。如果设备处于离线状态,这些消息应在其在线并收听订阅后传送。
解决这个问题的正确方法是什么? /config 一次只允许一条消息(最新的)。我们可以为该设备创建一个特定主题并让它订阅发布到它的任何内容吗? (我们尝试过,但在尝试让设备从订阅中提取消息 pubsub 时不断出错)
感谢任何帮助。
非权威回答,如有错误,我会根据要求更正或删除。请谨慎对待我的信息。
我的理解是 Google IoT 的核心故事是它具有大规模的可扩展性,可以从连接到 Internet 的 IoT 设备接收传入的遥测数据。似乎对设备数量或其遥测发布速率没有内在限制。从 IoT 设备的角度来看,它使用 MQTT 或 HTTP 来发送和接收数据。在 Internet 和 Google 之间的边界 "edge" 接收 MQTT 协议通信。然后接收消息并将其作为 Google Pub/Sub 消息中继到 Google 云平台 (GCP)(这些不同于 MQTT 协议消息)。
据我所知,如果我们希望向下游发送数据(从 GCP 到设备),我们可以这样做,但有一些限制。 Google 定义了两种类型的消息...配置和命令。这些在此处描述
https://cloud.google.com/iot/docs/how-tos/commands
每个设备的配置限制为每秒 1 个,而每个项目的命令为每秒 1000 个(请注意那里的域差异)。
配置消息限制为 64K,而命令限制为 256K。
一个(且只有一个)配置消息可以为一个设备激活。如果设备处于离线状态,则在它恢复时只会传送最后一条配置消息。对于命令,如果设备处于离线状态,则消息为 dropped/lost/discarded。
到目前为止我所说的可能是您已经知道的内容的总结。
我不相信 Cloud IoT 中有一种机制可以实现对任意数量的消息进行 MQTT 排队以最终传送到设备。但是,这并不意味着我们无法实现您的目标。你可以做的是使用配置消息来传输一个 flag/indicator 有数据可用于设备但不发送数据本身。例如消息:
{
data_available: true
}
当设备收到此消息时,它可以(从设备)执行拉取请求以拉取数据。然后,这种拉取数据将在 Cloud IoT 核心产品之外,这将是您想要如何实现该存储和检索的设计。您可以使用数据存储(Cloud DataStore、Cloud SQL)来存储数据并使用 Cloud Function 或其他 HTTP 请求(源自设备)来检索数据。或者,您可以 运行 您自己的 Compute Engines 上的 MQTT 代理。