ongoing changes

This commit is contained in:
Wolfgang Hottgenroth
2017-11-10 22:56:17 +01:00
parent 3fcf6fe486
commit 6c8abd1adf
6 changed files with 61 additions and 4 deletions

39
DatabaseEngine.py Normal file
View File

@ -0,0 +1,39 @@
import threading
from logger import Logger
class DatabaseEngine(threading.Thread):
singleton = None
@classmethod
def create(cls, queue, period):
if cls.singleton is None:
cls.singleton = DatabaseEngine(queue, period)
return cls.singleton
def __init__(self, queue, period):
threading.Thread.__init__(self)
self.event = threading.Event()
self.period = period
self.queue = queue
self.startTimer()
self.setDaemon(True)
def triggerStoring(self):
self.event.set()
def startTimer(self):
self.timer = threading.Timer(self.period, self.event.set)
self.timer.start()
def run(self):
while True:
self.event.wait()
self.event.clear()
while not self.queue.empty():
data = self.queue.get()
Logger.log("DatabaseEngine receives: %s" % (str(data)))
else:
Logger.log("DatabaseEngine: no more data to handle")
self.startTimer()

View File

@ -8,5 +8,5 @@ class MBusParser(AbstractParser, AbstractNextStage):
self.topic = "IoT/Measurement/MeterbusHub" self.topic = "IoT/Measurement/MeterbusHub"
def execute(self, data): def execute(self, data):
Logger.log("MBusParser %s" % (str(data))) #Logger.log("MBusParser %s" % (str(data)))
self.executeNextStage(data) self.executeNextStage(data)

View File

@ -8,5 +8,5 @@ class ModbusParser(AbstractParser, AbstractNextStage):
self.topic = "IoT/Measurement/ModbusHub" self.topic = "IoT/Measurement/ModbusHub"
def execute(self, data): def execute(self, data):
Logger.log("ModbusParser %s" % (str(data))) #Logger.log("ModbusParser %s" % (str(data)))
self.executeNextStage(data) self.executeNextStage(data)

View File

@ -9,6 +9,7 @@ import time
from MBusParser import MBusParser from MBusParser import MBusParser
from ModbusParser import ModbusParser from ModbusParser import ModbusParser
from PersistentQueue import PersistentQueue from PersistentQueue import PersistentQueue
from DatabaseEngine import DatabaseEngine
DEBUG = True DEBUG = True
@ -50,12 +51,20 @@ try:
mbusParser = MBusParser() mbusParser = MBusParser()
mqttReader.registerParser(mbusParser) mqttReader.registerParser(mbusParser)
Logger.log("MBusParser started ...")
modbusParser = ModbusParser() modbusParser = ModbusParser()
mqttReader.registerParser(modbusParser) mqttReader.registerParser(modbusParser)
Logger.log("ModbusParser started ...")
persistentQueue = PersistentQueue() persistentQueue = PersistentQueue()
mbusParser.setNextStage(persistentQueue) mbusParser.setNextStage(persistentQueue)
modbusParser.setNextStage(persistentQueue)
Logger.log("PersistentQueue instantiated ...")
databaseEngine = DatabaseEngine(persistentQueue, 60.0)
databaseEngine.start()
Logger.log("DatabaseEngine started ...")
Logger.log("MqttDispatcher running") Logger.log("MqttDispatcher running")

View File

@ -11,7 +11,7 @@ def on_message(client, userdata, msg):
try: try:
j = {'payload':msg.payload, 'topic':msg.topic, 'timestamp':datetime.datetime.now()} j = {'payload':msg.payload, 'topic':msg.topic, 'timestamp':datetime.datetime.now()}
Logger.debug("MqttReceiver receives: %s" % j) # Logger.debug("MqttReceiver receives: %s" % j)
global _parsers global _parsers
_parsers[msg.topic].execute(j) _parsers[msg.topic].execute(j)

View File

@ -1,8 +1,17 @@
from logger import Logger from logger import Logger
import Queue
class PersistentQueue(object): class PersistentQueue(object):
def __init__(self): def __init__(self):
super(PersistentQueue, self).__init__() super(PersistentQueue, self).__init__()
self.queue = Queue.Queue()
def execute(self, data): def execute(self, data):
Logger.log("PersistentQueue %s" % (str(data))) # Logger.log("PersistentQueue %s" % (str(data)))
self.queue.put_nowait(data)
def empty(self):
return self.queue.empty()
def get(self):
return self.queue.get()