Google IoT Core:我如何知道消息来自哪个设备?

Posted

技术标签:

【中文标题】Google IoT Core:我如何知道消息来自哪个设备?【英文标题】:Google IoT Core: how do I know which device the message is coming from? 【发布时间】:2019-09-21 03:36:08 【问题描述】:

在 Google Cloud 中,我有一个 IoT Core Registry,其中包含许多设备(通过 MQTT 连接)和 2 个 Pub/Sub 主题:事件主题(用于设备遥测事件)和状态主题(用于设备状态事件)。 我正在使用 Dataflow 作业处理来自事件主题的消息。

问题:我如何知道给定消息来自哪个设备?我是否需要使用某种设备 ID 手动丰富消息(在设备端),还是由 Google Cloud 以某种方式提供?

如果我改用 Cloud Functions 会怎样?

最后,我希望能够将消息及其源设备 ID 存储在数据存储(BigTable、BigQuery...)中。

谢谢!

【问题讨论】:

我想你需要传递一个 DeviceID。只有 Google 可能拥有的其他信息是 IP 地址,如果动态链接,则可能无法保证 1:1 匹配。 【参考方案1】:

我忘记了我们是否将设备 ID 作为元数据附加到 Pub/Sub 消息中。您可能会尝试转储传递给 Dataflow 的 Pub/Sub 对象的属性以进行检查?

简单的方法是确保在遥测 blob 中简单地将 deviceID 作为附加值传递,我就是这样做的(主要是因为我不想与其他 API 混淆),但我不这样做'我所做的大部分工作都没有网络规模问题。那将是考虑因素。如果您试图将网络流量保持在最低限度。如果这不是硬性要求,我会将其作为发送 blob 中的额外数据传递。

【讨论】:

【参考方案2】:

如果您打算使用云功能,您可以从 event['attributes'] 中的属性['deviceId'] 信息中找到设备名称/ID。附上一个由 PubSub 触发的 Python Cloud Function 示例,

def cloud_function(event, context):
    attribute = event['attributes']
    attribute['deviceRegistryLocation']
    attribute['deviceRegistryId']
    attribute['deviceId']

【讨论】:

【参考方案3】:

您可能希望将每台设备连接到不同的主题,只需记住每个注册表最多可以有 10 个主题,您也可以为每个主题设置子文件夹。

我个人喜欢使用云函数来解析遥测数据或将遥测数据传递到其他地方,例如:BigQuery 或 Firebase 实时数据库......

【讨论】:

您指的是 MQTT 还是 Pub/Sub 主题?子文件夹有什么限制? 发布/订阅主题;进行测试...您可以拥有:device1.telemetry/subfolder1(这是一个带有子文件夹的 Pub/Sub 主题)我个人使用它来执行一些测试,但是。在云功能中我不知道如何处理它,不记得但肯定有办法.... 将每个设备连接到不同的主题不会扩展。 Cloud Pub/Sub 仅允许每个项目 10,000 个主题。子文件夹机制旨在将来自所有设备的不同类型的数据分组到不同的主题中。

以上是关于Google IoT Core:我如何知道消息来自哪个设备?的主要内容,如果未能解决你的问题,请参考以下文章

如何将传感器数据(例如来自 DHT11 传感器的温度数据)发送到 Google Cloud IoT Core 并存储它

如何在 Google Core IoT 中进行配置?

Google IoT Core MQTT 发布错误

Google Core IoT 设备离线事件或连接状态

Google Cloud IoT Core 和 Pubsub 定价?

在IoT-Core上检索和编辑设备配置时的身份验证错误