add meterbus stuff
This commit is contained in:
parent
167e1486f1
commit
d9579748c6
@ -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>
|
||||
|
@ -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
|
||||
msg = self.inQueue.get()
|
||||
|
||||
Logger.log("MeterBusDecoder is doing something with %s" % msg)
|
||||
|
||||
|
||||
try:
|
||||
msg = self.inQueue.get()
|
||||
|
||||
Logger.log("MeterBusDecoder is doing something with %s" % msg)
|
||||
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))
|
||||
|
@ -39,9 +39,9 @@ def on_message(client, userdata, msg):
|
||||
# print(json.dumps(j, indent=2, separators=(',',':')))
|
||||
mbusPayload = j['data']['telegram']
|
||||
if mbusPayload[-1] == ' ':
|
||||
mbusPayload2 = mbusPayload[:-1]
|
||||
mbusPayload2 = mbusPayload[:-1]
|
||||
else:
|
||||
mbusPayload2 = mbusPayload
|
||||
mbusPayload2 = mbusPayload
|
||||
print("<" + mbusPayload2 + ">")
|
||||
telegram = MeterbusLib.Telegram(devices)
|
||||
telegram.fromHexString(mbusPayload2)
|
||||
|
@ -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"
|
||||
|
Loading…
x
Reference in New Issue
Block a user