From 5be27e19943e6974080b9a85f763ba472cae30fd Mon Sep 17 00:00:00 2001 From: Wolfgang Hottgenroth Date: Fri, 10 Nov 2017 23:35:06 +0100 Subject: [PATCH] DatabasePreparer --- AbstractDatabasePreparer.py | 9 +++++++++ DatabaseEngine.py | 5 ++++- EnergyDatabasePreparer.py | 7 +++++++ ModbusParser.py | 22 ++++++++++++++++++++-- MqttDispatcher.py | 6 +++--- TemperatureDatabasePreparer.py | 7 +++++++ 6 files changed, 50 insertions(+), 6 deletions(-) create mode 100644 AbstractDatabasePreparer.py create mode 100644 EnergyDatabasePreparer.py create mode 100644 TemperatureDatabasePreparer.py diff --git a/AbstractDatabasePreparer.py b/AbstractDatabasePreparer.py new file mode 100644 index 0000000..c737f69 --- /dev/null +++ b/AbstractDatabasePreparer.py @@ -0,0 +1,9 @@ +from logger import Logger + +class AbstractDatabasePreparer(object): + def __init__(self, tablename): + self.tablename = tablename + self.values = {} + + def getInsertStatement(self): + return "table: %s " % (self.tablename) + str(self.values) \ No newline at end of file diff --git a/DatabaseEngine.py b/DatabaseEngine.py index 24d8c3c..ceab13a 100644 --- a/DatabaseEngine.py +++ b/DatabaseEngine.py @@ -32,7 +32,10 @@ class DatabaseEngine(threading.Thread): while not self.queue.empty(): data = self.queue.get() - Logger.log("DatabaseEngine receives: %s" % (str(data))) + if (type(data) != list): + data = [data] + for dbo in data: + Logger.log("DatabaseEngine receives: %s" % (str(dbo.getInsertStatement()))) else: Logger.log("DatabaseEngine: no more data to handle") diff --git a/EnergyDatabasePreparer.py b/EnergyDatabasePreparer.py new file mode 100644 index 0000000..c1a3814 --- /dev/null +++ b/EnergyDatabasePreparer.py @@ -0,0 +1,7 @@ +from AbstractDatabasePreparer import AbstractDatabasePreparer + +class EnergyDatabasePreparer(AbstractDatabasePreparer): + def __init__(self, values): + super(EnergyDatabasePreparer, self).__init__('ElectricEnergy') + self.values = values + \ No newline at end of file diff --git a/ModbusParser.py b/ModbusParser.py index 817d70d..0606018 100644 --- a/ModbusParser.py +++ b/ModbusParser.py @@ -1,6 +1,8 @@ +import json from logger import Logger from AbstractParser import AbstractParser from AbstractNextStage import AbstractNextStage +from TemperatureDatabasePreparer import TemperatureDatabasePreparer class ModbusParser(AbstractParser, AbstractNextStage): def __init__(self): @@ -8,5 +10,21 @@ class ModbusParser(AbstractParser, AbstractNextStage): self.topic = "IoT/Measurement/ModbusHub" def execute(self, data): - #Logger.log("ModbusParser %s" % (str(data))) - self.executeNextStage(data) \ No newline at end of file + Logger.log("ModbusParser %s %s" % (type(data), str(data))) + + try: + j = json.loads(data['payload']) + + if j['metadata']['Slave'] == 'Thermometer': + vv = [] + v = TemperatureDatabasePreparer({'name':'Fridge', + 'temperature':j['data']['t1'], + 'timestamp':data['timestamp']}) + vv.append(v) + v = TemperatureDatabasePreparer({'name':'Freezer', + 'temperature':j['data']['t2'], + 'timestamp':data['timestamp']}) + vv.append(v) + self.executeNextStage(vv) + except Exception, e: + Logger.log("Exception in ModbusParser, %s" % (str(e))) diff --git a/MqttDispatcher.py b/MqttDispatcher.py index 01711b7..4040556 100644 --- a/MqttDispatcher.py +++ b/MqttDispatcher.py @@ -1,11 +1,11 @@ #!/usr/bin/python -from MqttReceiver import MqttReceiver import os import sys -from logger import Logger import time +from logger import Logger +from MqttReceiver import MqttReceiver from MBusParser import MBusParser from ModbusParser import ModbusParser from PersistentQueue import PersistentQueue @@ -50,7 +50,7 @@ try: Logger.log("MqttReader started ...") mbusParser = MBusParser() - mqttReader.registerParser(mbusParser) + #mqttReader.registerParser(mbusParser) Logger.log("MBusParser started ...") modbusParser = ModbusParser() diff --git a/TemperatureDatabasePreparer.py b/TemperatureDatabasePreparer.py new file mode 100644 index 0000000..06420f7 --- /dev/null +++ b/TemperatureDatabasePreparer.py @@ -0,0 +1,7 @@ +from AbstractDatabasePreparer import AbstractDatabasePreparer + +class TemperatureDatabasePreparer(AbstractDatabasePreparer): + def __init__(self, values): + super(TemperatureDatabasePreparer, self).__init__('Temperature') + self.values = values + \ No newline at end of file