我们正在使用Google的IoT核心产品,并且已注册了多个设备。这些设备能够成功接收来自/ config和/ command主题的消息,以及发布到我们创建的其他主题。
我们希望能够向我们的IoT设备发送多条消息(具有不同的数据)并使其接收它们。如果设备处于离线状态,则这些消息应在在线后立即传递并收听订阅。
解决此问题的正确方法是什么? / config一次仅允许一条消息(最新消息)。我们可以为该设备创建特定主题,并让其订阅发布到该主题的任何内容吗? (我们尝试过,但是在尝试使设备从订阅中提取消息pubsub时不断出错)
任何帮助表示赞赏。
答案 0 :(得分:1)
这是一个非权威性的答案,如果有误,我将根据要求予以更正或删除。请小心我的信息。
我的理解是Google IoT的核心故事是它具有很大的可扩展性,可以从连接到Internet的IoT设备接收传入的遥测。对设备的数量或其遥测速率的发布似乎没有固有的限制。从物联网设备的角度来看,它使用MQTT或HTTP来发送和接收数据。 MQTT协议通信在Internet和Google之间边界的“边缘”接收。然后,这些消息将作为Google Pub / Sub消息(不同于MQTT协议消息)接收并中继到Google Cloud Platform(GCP)中。
据我所知,如果我们希望向下游发送数据(从GCP到设备),我们可以这样做,但是有一些限制。 Google定义了两种消息类型:配置和命令。这些在这里描述
https://cloud.google.com/iot/docs/how-tos/commands
配置限制为每台设备每秒1个,而命令限制为每个项目每秒1000个(请注意那里的域的不同)。
配置消息限制为64K,命令限制为256K。
一个设备(只有一个)配置消息可以处于活动状态。如果设备处于脱机状态,则返回时仅传递最后的配置消息。对于命令,如果设备处于脱机状态,则消息将被丢弃/丢失/丢弃。
到目前为止,我所说的可能是您已经知道的摘要。
我不相信Cloud IoT中有一种机制可以实现任意数量的消息的MQTT排队,以最终传送到设备。但是,这并不意味着我们无法实现您的目标。您可以做的是使用配置消息来发送标记/指示符,表明该设备有可用数据,但自身不发送数据。例如以下消息:
{
data_available: true
}
设备收到此消息后,可以(从设备)执行拉取请求以拉出数据。然后,这种数据提取将不在Cloud IoT核心产品之外,这将是您关于如何实现存储和检索的设计。您可以使用数据存储(Cloud DataStore,Cloud SQL)来存储数据,并使用Cloud Function或其他HTTP请求(源自设备)来检索数据。另外,您可以在Compute Engines上运行自己的MQTT代理。