parsing added

This commit is contained in:
Wolfgang Hottgenroth
2017-11-12 21:51:29 +01:00
parent edcfa86f65
commit eea141df19
2 changed files with 90 additions and 4 deletions

View File

@ -1,6 +1,43 @@
import json
import MeterbusLib
from logger import Logger from logger import Logger
from AbstractParser import AbstractParser from AbstractParser import AbstractParser
from AbstractNextStage import AbstractNextStage from AbstractNextStage import AbstractNextStage
from TemperatureDatabasePreparer import TemperatureDatabasePreparer
from EnergyDatabasePreparer import EnergyDatabasePreparer
OnePhaseElectric_Finder, ThreePhaseElectric_Finder, Thermometer_Hottis, Watermeter_Hyd = 'OnePhaseElectric_Finder', 'ThreePhaseElectric_Finder', 'Thermometer_Hottis', 'Watermeter_Hyd'
devices = []
device_dishwasher_electric = MeterbusLib.Device(0x53, OnePhaseElectric_Finder, "Dishwasher", ["Energy total", "Energy partial", "Voltage", "Current", "Power", "img. Power"])
devices.append(device_dishwasher_electric)
device_computer_electric = MeterbusLib.Device(85, OnePhaseElectric_Finder, "Computer", ["Energy total", "Energy partial", "Voltage", "Current", "Power", "img. Power"])
devices.append(device_computer_electric)
device_freezer_electric = MeterbusLib.Device(86, OnePhaseElectric_Finder, "Freezer", ["Energy total", "Energy partial", "Voltage", "Current", "Power", "img. Power"])
devices.append(device_freezer_electric)
device_laundry_electric = MeterbusLib.Device(82, OnePhaseElectric_Finder, "Laundry", ["Energy total", "Energy partial", "Voltage", "Current", "Power", "img. Power"])
devices.append(device_laundry_electric)
device_dryer_electric = MeterbusLib.Device(81, OnePhaseElectric_Finder, "Dryer", ["Energy total", "Energy partial", "Voltage", "Current", "Power", "img. Power"])
devices.append(device_dryer_electric)
device_light_electric = MeterbusLib.Device(84, OnePhaseElectric_Finder, "Light", ["Energy total", "Energy partial", "Voltage", "Current", "Power", "img. Power"])
devices.append(device_light_electric)
device_3phase_electric = MeterbusLib.Device(0x50, ThreePhaseElectric_Finder, "3 Phase Electric", ["Energy T1 total", "Energy T1 partial", "Energy T2 total", "Energy T2 partial",
"Voltage phase 1", "Current phase 1", "Power phase 1", "img. Power phase 1",
"Voltage phase 2", "Current phase 2", "Power phase 2", "img. Power phase 2",
"Voltage phase 3", "Current phase 3", "Power phase 3", "img. Power phase 3",
"converter ratio", "Power total", "img. Power total", "tariff"
])
devices.append(device_3phase_electric)
device_thermometer = MeterbusLib.Device(0x21, Thermometer_Hottis, "Thermometer", ["Uptime Seconds", "Uptime Minutes", "Uptime Hours", "Uptime Days",
"Temperature 1", "Temperature 2", "Temperature 3", "Temperature 4",
"rawdata"
])
devices.append(device_thermometer)
device_watermeter = MeterbusLib.Device(0x30, Watermeter_Hyd, "Watermeter", ["Volume", "Minimum Volume", "Volume Flow", "OpTime", "Flow Temperature", "TimePoint1", "Volume2", "tariff1", "TimePoint2", "TimePoint3"])
devices.append(device_watermeter)
class MBusParser(AbstractParser, AbstractNextStage): class MBusParser(AbstractParser, AbstractNextStage):
def __init__(self): def __init__(self):
@ -8,5 +45,54 @@ 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)
try:
j = json.loads(data['payload'])
name = j['metadata']['name']
Logger.log("name: %s" % (name))
telegram = j['data']['telegram']
if telegram[-1] == ' ':
telegram = telegram[:-1]
Logger.log("telegram: <%s>" % (telegram))
mbusTelegram = MeterbusLib.Telegram(devices)
mbusTelegram.fromHexString(telegram)
mbusTelegram.parse()
# Logger.log(json.dumps(mbusTelegram.getJSON(), indent=2))
if mbusTelegram.frame.category == OnePhaseElectric_Finder:
# one-phase electricity
v = EnergyDatabasePreparer({'name': mbusTelegram.frame.comment,
'power': mbusTelegram.frame.dib[4].value,
'energy': mbusTelegram.frame.dib[0].value,
'timestamp':data['timestamp']})
elif mbusTelegram.frame.category == ThreePhaseElectric_Finder:
# three-phases electricity
v = EnergyDatabasePreparer({'name': mbusTelegram.frame.comment,
'power': mbusTelegram.frame.dib[17].value,
'energy': mbusTelegram.frame.dib[0],
'timestamp':data['timestamp']})
elif mbusTelegram.frame.category == Thermometer_Hottis:
# thermometer
v = []
vv = TemperatureDatabasePreparer({'name': 'Hedge',
'temperature': mbusTelegram.frame.dib[4].value,
'timestamp':data['timestamp']})
v.append(vv)
vv = TemperatureDatabasePreparer({'name': 'House',
'temperature': mbusTelegram.frame.dib[6].value,
'timestamp':data['timestamp']})
v.append(vv)
else:
raise Exception('illegal name in mbus message found')
self.executeNextStage(v)
except Exception, e:
Logger.log("Exception in MBusParser, %s" % (str(e)))

View File

@ -50,11 +50,11 @@ try:
Logger.log("MqttReader started ...") Logger.log("MqttReader started ...")
mbusParser = MBusParser() mbusParser = MBusParser()
#mqttReader.registerParser(mbusParser) mqttReader.registerParser(mbusParser)
Logger.log("MBusParser started ...") Logger.log("MBusParser started ...")
modbusParser = ModbusParser() modbusParser = ModbusParser()
mqttReader.registerParser(modbusParser) #mqttReader.registerParser(modbusParser)
Logger.log("ModbusParser started ...") Logger.log("ModbusParser started ...")
persistentQueue = PersistentQueue() persistentQueue = PersistentQueue()