#!/usr/bin/python import os import sys import time from logger import Logger from pymongo import MongoClient from PersistentQueue import PersistentQueue from DatabaseEngine import DatabaseEngine from EnergyDatabasePreparer import EnergyDatabasePreparer from TemperatureDatabasePreparer import TemperatureDatabasePreparer LOG_FILE = "/tmp/MongoImporter.log" DEBUG = True DEBUG_TO_STDOUT = True DATABASE_CONFIG = { 'period':60, 'host':'localhost', 'user':'smarthome', 'password':'smarthome123', 'db':'smarthome' } QUEUE_CONFIG = { 'file':'/tmp/mqttDispatcherQueue' } Logger.openlog(LOG_FILE) if DEBUG: Logger.debugEnable() if DEBUG_TO_STDOUT: Logger.debugToStdoutEnable() Logger.log("MongoImporter starting") persistentQueue = PersistentQueue(QUEUE_CONFIG) Logger.log("PersistentQueue instantiated ...") databaseEngine = DatabaseEngine(persistentQueue, DATABASE_CONFIG) databaseEngine.start() Logger.log("DatabaseEngine started ...") client = MongoClient() db = client.iot coll = db.iot for item in coll.find(): try: v = None if (item['metadata']['device'] == 'MeterbusHub') and ('name' in item['metadata']): if item['metadata']['name'] in ('laundry', 'dryer', 'light', 'dishwasher', 'computer', 'freezer', 'electricity'): if ('power' in item['data']) and ('energy' in item['data']): #Logger.log("%s %s: %s %s" % (item['metadata']['name'], item['metadata']['timestamp'], item['data']['power'], item['data']['energy'])) v = EnergyDatabasePreparer(item['metadata']['name'].capitalize(), item['metadata']['timestamp'], { 'power': item['data']['power'], 'energy': item['data']['energy']}) elif item['metadata']['name'] in ('thermom.'): if ('temperature1' in item['data']): #Logger.log("%s %s: %s %s %s %s" % (item['metadata']['name'], item['metadata']['timestamp'], # item['data']['temperature1'], item['data']['temperature2'], item['data']['temperature3'], item['data']['temperature4'])) v = [] vv = TemperatureDatabasePreparer('Zero-Reference', item['metadata']['timestamp'], {'temperature': item['data']['temperature1']}) v.append(vv) vv = TemperatureDatabasePreparer('Hedge', item['metadata']['timestamp'], {'temperature': item['data']['temperature2']}) v.append(vv) vv = TemperatureDatabasePreparer('Indoor Basement', item['metadata']['timestamp'], {'temperature': item['data']['temperature3']}) v.append(vv) vv = TemperatureDatabasePreparer('House', item['metadata']['timestamp'], {'temperature': item['data']['temperature4']}) v.append(vv) elif item['metadata']['device'] == 'ModbusHub': #Logger.log("%s %s: %s" % ('Freezer', item['metadata']['timestamp'], item['data']['t2'])) #Logger.log("%s %s: %s" % ('Fridge', item['metadata']['timestamp'], item['data']['t1'])) vv = [] v = TemperatureDatabasePreparer('Fridge', item['metadata']['timestamp'], {'temperature':item['data']['t1']}) vv.append(v) v = TemperatureDatabasePreparer('Freezer', item['metadata']['timestamp'], {'temperature':item['data']['t2']}) vv.append(v) if v: persistentQueue.execute(v) except KeyError: raise Exception("KeyError in item %s" % (item)) Logger.log("Done")