我有一个python脚本,可从智能插头检索数据(以监视设备的能耗)。我的最终目标是使用Stream Analytics分析此数据,因此我需要将其发送到Microsoft Azure中的数据库。
现在,我在Node-RED上运行python脚本,输出进入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 mA,229867 mV,0 mW,556 Wh)是我要保存在Blob存储中的值。我知道此节点可以连接到我的Blob存储帐户,因为每次按Inject时都会创建container5。但是数据不会随处可见。谁能提供帮助?
答案 0 :(得分:0)
由于您已经在使用Python,因此使用官方的Azure Blob存储客户端从Python内编写blob会容易得多。
一旦安装了客户端(例如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)