Как отправить текстовые данные с файлом с устройства IoT в Cloud IoT Core? - PullRequest
3 голосов
/ 30 января 2020

Я отправляю изображения из Raspberry Pi в Cloud IoT Core. Это работает, но теперь я понял, что мне также нужно имя файла файла (или данные, которые я добавил к имени файла), при сохранении его в Google Cloud Storage, но, насколько я вижу, это только содержимое файла, который отправляется. Я попытался выполнить sh с помощью приведенного ниже фрагмента кода, но это, похоже, не сработало, что, я думаю, понятно, учитывая, что это байтовый массив внутри JSON объекта ..?

Есть ли способ вообще? Может ли имя файла быть извлечено при отправке через облачную функцию в хранилище?

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)

1 Ответ

0 голосов
/ 03 февраля 2020

Чтобы сохранить изображение в облачном хранилище, вам необходимо использовать облачную функцию с триггером Cloud Pub / Sub .

облачная функция должна состоять из следующих шагов :

  1. Декодировать данные из свойства данных PubSubMessage аналогично этой функции .
  2. Извлечь значение из поле имени файла и преобразуйте строку значения из поля изображения в фактическое изображение .
  3. Загрузите изображение в облачное хранилище, используя один из доступных методов. Как, например, клиентские библиотеки Google Cloud для Python или API REST и любые доступные библиотеки запросов (например, запросы ). Вы можете найти примеры кодирования здесь в документации.

Наконец, обратите внимание, что в соответствии с рекомендациями для облачного хранилища вы должны избегать использования меток времени для своего имена файлов (это ограничит вашу пропускную способность). В контексте облачного хранилища рекомендуется создавать имена файлов следующим образом . Так что учтите это последнее сообщение, если заметите проблемы с производительностью в вашем приложении.

...