Write data from given aggregation pipeline into excel
This commit is contained in:
parent
9be4a96c6b
commit
d2a256957f
97
powerProfile.py
Normal file
97
powerProfile.py
Normal 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()
|
Loading…
x
Reference in New Issue
Block a user