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

时间:2019-05-02 15:10:46

标签: google-cloud-functions mqtt google-cloud-dataflow google-cloud-pubsub google-cloud-iot

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

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

如果我改用Cloud Functions怎么办?

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

谢谢!

3 个答案:

答案 0 :(得分:2)

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

简单的方法是确保将deviceID作为遥测blob中的附加值进行传递,这就是我的操作方式(主要是因为我不想与其他API混淆),我不会我所做的大部分工作都不会涉及网络规模。那就是考虑因素。如果您试图将网络流量保持在绝对最低限度。如果这不是硬性要求,那么我会将其作为多余的数据传递到send blob中。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

如果您打算使用Cloud Function,则可以在事件['attributes']中的attribute ['deviceId']信息中找到设备名称/ ID。附加了由PubSub示例触发的Python Cloud Function,

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