【问题标题】:How to send text data with file from IoT device to Cloud IoT Core?如何将带有文件的文本数据从 IoT 设备发送到 Cloud IoT Core?
【发布时间】:2020-05-16 08:07:22
【问题描述】:

我正在将图像从 Raspberry Pi 发送到 Cloud IoT Core。这是可行的,但我现在意识到,在将文件存储在 Google Cloud Storage 中时,我还需要文件的文件名(或我添加到文件名中的数据),但据我所知,它只是内容发送的文件。我尝试使用下面的代码提取来完成此操作,但这似乎不起作用,我想这是可以理解的,因为它是 JSON 对象内的字节数组..?

有办法吗?通过 Cloud Function 发送到存储时,文件名是否可以通过某种方式检索?

with open(filename, 'rb') as f:
    imagestring = f.read()
byteArray = bytes(imagestring)

now = datetime.datetime.now()
datetime_formatted = now.strftime("%Y-%m-%d_%H:%M:%S")
filename = 'img_GM4_' + datetime_formatted +'.jpg'

payload = '{{ "ts": {}, filename: {}, "image": {}}}'.format(int(time.time()), filename, byteArray)

client.publish(_MQTT_TOPIC, payload, qos=1)
# Previously: client.publish(_MQTT_TOPIC, byteArray, qos=1)

【问题讨论】:

    标签: python google-cloud-storage mqtt google-cloud-iot


    【解决方案1】:

    要将图像保存在 Cloud Storage 中,您需要使用 Cloud Function with a Cloud Pub/Sub trigger。

    云功能应包括以下步骤:

    1. 以与this function 类似的方式从PubSubMessage 的数据属性中解码数据。
    2. 从文件名字段中提取值并转换为value string from the image field to an actual image。
    3. 使用其中一种可用方法将图像上传到 Cloud Storage。例如Google Cloud Client Libraries for Python 或 REST API 以及任何可用的请求库(例如 requests)。您可以在文档中找到编码示例 here。

    最后,请注意,根据best practices for Cloud Storage,您应该避免使用基于时间戳的文件名(这会限制您的吞吐量)。在 Cloud Storage 的上下文中,建议在 following manner 中创建文件名。因此,如果您发现应用程序中存在性能问题,请考虑最后一条消息。

    【讨论】:

    • 这个答案的前提是数据是 base64 编码的。我没有这样做,因为没有必要使用 MQTT。您的意思是必须进行 base64 编码才能检索文件名吗?
    • 请注意,通常 Pub/Sub 消息的数据以 base64 编码字符串的形式存储在 PubsubMessage 对象的 data property 中。这就是我包含这一步的原因。如果不是这种情况,您可以省略解码部分并获得所需的字段。
    • 如何访问文件名字段?我不知道helloPubSub 函数的event 对象中有一个。 (顺便说一句,我正在用 Typescript 编写函数)。
    • 文件名字段应位于 Cloud Pub/Sub 主题的数据(您需要解析)(您应该使用 client.publish(_MQTT_TOPIC, payload, qos=1) 发送)。如果您在 Cloud Pub/Sub 上没有收到数据,请参考this 进行问题排查。
    • 好的。我可以毫无问题地将数据发送到 Pub/Sub,但我非常感谢有关如何(解析数据和)检索文件名的描述。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-22
    • 1970-01-01
    • 2018-11-05
    • 2020-03-27
    • 2021-01-15
    相关资源
    最近更新 更多