add meterbus stuff

This commit is contained in:
hg 2015-06-15 22:28:31 +02:00
parent 167e1486f1
commit d9579748c6
4 changed files with 73 additions and 7 deletions

View File

@ -2,7 +2,11 @@
<?eclipse-pydev version="1.0"?><pydev_project>
<pydev_pathproperty name="org.python.pydev.PROJECT_SOURCE_PATH">
<path>/${PROJECT_DIR_NAME}</path>
<path>/Mqtt2Mongo</path>
</pydev_pathproperty>
<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 2.7</pydev_property>
<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
<pydev_pathproperty name="org.python.pydev.PROJECT_EXTERNAL_SOURCE_PATH">
<path>${WORKSPACE_LOC}/MeterbusLib</path>
</pydev_pathproperty>
</pydev_project>

View File

@ -8,8 +8,36 @@ Created on 09.06.2015
import threading
from logger import Logger
import Queue
import json
import MeterbusLib
from MeterbusLibExceptions import MeterbusLibException
OnePhaseElectric_Finder, ThreePhaseElectric_Finder, Thermometer_Hottis = 'OnePhaseElectric_Finder', 'ThreePhaseElectric_Finder', 'Thermometer_Hottis'
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_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)
class MeterBusDecoder(threading.Thread):
@ -21,12 +49,46 @@ class MeterBusDecoder(threading.Thread):
def run(self):
while True:
msg = None
try:
msg = self.inQueue.get()
Logger.log("MeterBusDecoder is doing something with %s" % msg)
try:
mbusPayload = msg['data']['telegram']
if mbusPayload[-1] == ' ':
mbusPayload2 = mbusPayload[:-1]
else:
mbusPayload2 = mbusPayload
Logger.log("<" + mbusPayload2 + ">")
telegram = MeterbusLib.Telegram(devices)
telegram.fromHexString(mbusPayload2)
telegram.parse()
Logger.log(json.dumps(telegram.getJSON(), indent=2))
msg['metadata']['consumer'] = telegram.frame.comment
msg['metadata']['category'] = telegram.frame.category
if telegram.frame.category == OnePhaseElectric_Finder:
msg['data']['current'] = telegram.frame.dib[3].value
msg['data']['power'] = telegram.frame.dib[4].value
msg['data']['energy'] = telegram.frame.dib[0].value
elif telegram.frame.category == ThreePhaseElectric_Finder:
msg['data']['current'] = telegram.frame.dib[5].value + telegram.frame.dib[9].value + telegram.frame.dib[13].value
msg['data']['power'] = telegram.frame.dib[17].value
msg['data']['energy'] = telegram.frame.dib[0].value
msg['data']['decodedTelegram'] = telegram.getJSON()
except KeyError, e:
Logger.log("KeyError: %s" % e)
except MeterbusLibException, e:
Logger.log("MeterbusLibException: %s" % e)
try:
self.outQueue.put_nowait(msg)
except Queue.Full:
Logger.log("MeterBusDecoder queue overrun, drop result of %s" % str(msg))

View File

@ -17,7 +17,7 @@ DEBUG = True
BACKGROUND = False
PID_FILE = "/tmp/mqtt2mongo.pid"
LOG_FILE = "/tmp/mqtt2mongo.log"
BROKER = "mqttbroker"
BROKER = "172.16.2.15"
TOPICS = ['IoT/Measurement/#', 'IoT/WiFiPowerMeter/Measurement']
MONGO_HOST = "localhost"
MONGO_DATABASE = "iot"