From d2a256957f2711fba36540938b2b003e9a4fd094 Mon Sep 17 00:00:00 2001 From: Wolfgang Hottgenroth Date: Sat, 11 Jun 2016 18:17:13 +0200 Subject: [PATCH] Write data from given aggregation pipeline into excel --- powerProfile.py | 97 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 powerProfile.py diff --git a/powerProfile.py b/powerProfile.py new file mode 100644 index 0000000..df77317 --- /dev/null +++ b/powerProfile.py @@ -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() \ No newline at end of file