Как перенести данные из Node-RED (message.payload) в хранилище BLOB-объектов Azure? - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть скрипт на python, который извлекает данные из смарт-плагина (для мониторинга энергопотребления с устройств).Моя конечная цель - проанализировать эти данные с помощью Stream Analytics, и поэтому мне нужно отправить их в базу данных в Microsoft Azure.

Сейчас я запускаю скрипт python на Node-RED, и вывод поступает в message.payload.Я хочу отправить эти данные в хранилище BLOB-объектов, и для этого я использую этот узел https://flows.nodered.org/node/node-red-contrib-azure-blob-storage

Проблема в том, что я получаю эту ошибку:

4 Apr 11:57:51 - [info] [Save Blob:Azure Save Blob Storage] Uploading blob...
4 Apr 11:57:51 - [info] [Save Blob:Azure Save Blob Storage] Container 'container5' ready for blob creation
4 Apr 11:57:52 - [info] [Save Blob:Azure Save Blob Storage] Error: ENOENT: no such file or directory, stat 'Thu Apr  4 11:57:51 2019
21 mA
229867 mV
0 mW
556 Wh

Эти значения (21 мА229867 мВ, 0 мВт, 556 Втч) - это то, что я хочу сохранить в хранилище BLOB-объектов.Я знаю, что этот узел может подключаться к моей учетной записи хранилища BLOB-объектов, поскольку этот контейнер5 создается каждый раз, когда я нажимаю клавишу «Ввод».Но данные никуда не приходят.Кто-нибудь может предложить помощь?

1 Ответ

0 голосов
/ 04 апреля 2019

Поскольку вы уже используете Python, было бы намного проще написать большой двоичный объект из Python с помощью официального клиента хранилища BLOB-объектов Azure.

После установки клиента (например, pip install azure-storage-blob)что-то вроде этого должно сделать (сухое кодирование, YMMV):

import io
import datetime
from azure.storage.blob import BlockBlobService

my_data = '''
Thu Apr  4 11:57:51 2019
21 mA
229867 mV
0 mW
556 Wh
'''


# Will generate something like 'stats-20190404-110930'
filename = 'stats-%s' % datetime.datetime.utcnow().strftime('%Y%m%d-%H%M%S')

# Grab a reference to the block blob storage service
block_blob_service = BlockBlobService(
    account_name='azure-storage-account-name',
    sas_token='access-token-from-azure-access-keys-page',
)

# Upload directly from the text you have
block_blob_service.create_blob_from_text(
    container_name='azure-storage-container-name',
    blob_name=filename,
    text=my_data,
)

Было бы намного лучше сохранить данные в структурированном формате, таком как JSON, поэтому вам не нужно анализировать этопользовательский текстовый формат где угодно, и используйте стандарт ISO8601 для даты:

import json
import datetime

data = {
  'date': datetime.datetime.utcnow().isoformat(),
  'voltage_mv': 229867,
  'current_ma': 21,
  'power_mw': 0,
  'energy_wh': 556,
}

my_data = json.dumps(data)  # encode into JSON

# (the same upload dance as before) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...