MqttDispatcherPy/MongoImporter.py
2017-11-14 20:02:36 +01:00

102 lines
4.1 KiB
Python

#!/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':1,
'host':'172.16.2.17',
'user':'smarthome',
'password':'smarthome123',
'db':'testhome'
}
QUEUE_CONFIG = {
'file':'/tmp/mqttDispatcherQueue',
'maxsize':1000
}
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")