Write data from given aggregation pipeline into excel

This commit is contained in:
Wolfgang Hottgenroth 2016-06-11 18:17:13 +02:00
parent 9be4a96c6b
commit d2a256957f

97
powerProfile.py Normal file
View File

@ -0,0 +1,97 @@
'''
Created on 11. 06. 2016
@author: wn
'''
import xlrd
import xlwt
from xlutils.copy import copy
import pymongo
from bson.son import SON
import datetime
DBHOST = '172.16.2.17'
DBNAME = 'iot'
DBCOLL = 'iot'
FILENAME = 'powerProfile.xls'
PIPELINE = [
{'$match':
{
'metadata.device':'MeterbusHub',
'metadata.timestamp':
{
'$gt': datetime.datetime(2016, 6, 11, 12, 5, 0),
'$lt': datetime.datetime(2016, 6, 11, 15, 45, 0)
},
'data.decodedTelegram.frame.comment':'Dishwasher'}
},
{'$project':
{
'_id':0,
'timestamp': '$metadata.timestamp',
'energy': '$data.energy',
'power': '$data.power'
}
},
{'$sort':
{'metadata.timestamp':1}
}
]
class DataAdder(object):
def __init__(self, dbhost, dbname, dbcoll, filename, pipeline):
self.dbhost = dbhost
self.dbname = dbname
self.dbcoll = dbcoll
self.filename = filename
self.pipeline = pipeline
self.client = pymongo.MongoClient(dbhost)
self.db = self.client[self.dbname]
self.coll = self.db[self.dbcoll]
self.date_format = xlwt.XFStyle()
self.date_format.num_format_str = 'dd.mm.yyyy'
def openExcel(self):
self.excelW = xlwt.Workbook(encoding='ascii', style_compression=0)
self.sheetW = self.excelW.add_sheet('data')
def collectData(self):
cursor = self.coll.aggregate(
self.pipeline,
useCursor = True, allowDiskUse = True
)
return cursor
def run(self):
print("stage 1")
self.openExcel()
print("stage 2")
cursor = self.collectData()
print("stage 3")
for rownum, row in enumerate(cursor):
print(rownum)
if (rownum == 0):
for pos, key in enumerate(row.iterkeys()):
self.sheetW.write(rownum, pos, key)
else:
for pos, value in enumerate(row.itervalues()):
if (pos == 0):
v = str(value)
else:
v = value
self.sheetW.write(rownum, pos, v)
self.excelW.save(self.filename)
dataAdder = DataAdder(DBHOST, DBNAME, DBCOLL, FILENAME, PIPELINE)
dataAdder.run()