2

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

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

如果我改用 Cloud Functions 会怎样?

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

谢谢!

4

3 回答 3

3

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

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

于 2019-05-02T18:01:39.180 回答
1

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

def cloud_function(event, context):
    attribute = event['attributes']
    attribute['deviceRegistryLocation']
    attribute['deviceRegistryId']
    attribute['deviceId']
于 2019-06-09T02:34:46.580 回答
0

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

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

于 2019-05-02T16:56:55.520 回答