fix in MonitorPublisher

This commit is contained in:
Wolfgang Hottgenroth
2016-07-11 21:20:22 +02:00
parent 42259f991c
commit 43cf7396c1
2 changed files with 41 additions and 29 deletions

View File

@ -1,18 +1,10 @@
import threading import threading
import paho.mqtt.client as mqtt import paho.mqtt.client as mqtt
from logger import Logger from logger import Logger
import json
import datetime
from time import mktime, localtime
class MyEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime.datetime):
return str(obj)
return json.JSONEncoder.default(self, obj)
class MonitorPublisher(threading.Thread): class MonitorPublisher(threading.Thread):
def __init__(self, queue, broker): def __init__(self, queue, broker):
@ -21,35 +13,49 @@ class MonitorPublisher(threading.Thread):
self.broker = broker self.broker = broker
self.setDaemon(True) self.setDaemon(True)
self.nameMap = {
'light': { 'oldbody':'', 'body':'', 'slot': 1, 'header': 'Licht', 'cnt': 0 },
'computer': { 'oldbody':'', 'body':'', 'slot': 2, 'header': 'Computer', 'cnt': 0 },
'laundry': { 'oldbody':'', 'body':'', 'slot': 3, 'header': 'Waschm.', 'cnt': 0 },
'dryer': { 'oldbody':'', 'body':'', 'slot': 4, 'header': 'Trockner', 'cnt': 0 },
'dishwasher': { 'oldbody':'', 'body':'', 'slot': 5, 'header': 'Spuelm.', 'cnt': 0 },
'freezer': { 'oldbody':'', 'body':'', 'slot': 6, 'header': 'Gefrier.', 'cnt': 0 },
'electricity': { 'oldbody':'', 'body':'', 'slot': 7, 'header': 'Strom', 'cnt': 0 },
'thermom.': { 'oldbody':'', 'body':'', 'slot': 8, 'header': 'Temp.', 'cnt': 0 },
'fridge_x': { 'oldbody':'', 'body':'', 'slot': 9, 'header': 'Gefr.T.', 'cnt': 0 },
'os_x': { 'oldbody':'', 'body':'', 'slot': 10, 'header': 'Server', 'cnt': 0 },
}
def run(self): def run(self):
client = mqtt.Client() client = mqtt.Client()
client.connect(self.broker, 1883, 60) client.connect(self.broker, 1883, 60)
client.loop_start() client.loop_start()
lastEvent = 0.0
while True: while True:
try: try:
msg = self.queue.get() msg = self.queue.get()
dataBlock = msg['data']
metadataBlock = msg['metadata']
if 'Slave' in metadataBlock:
if metadataBlock['Slave'] == 'Thermometer' and metadataBlock['device'] == 'ModbusHub':
metadataBlock['name'] = 'fridge'
name = metadataBlock['name']
Logger.log("Name: " + name)
if name in self.nameMap:
if name in ['light', 'computer', 'laundry', 'dryer', 'dishwasher', 'freezer', 'electricity']:
self.nameMap[name]['body'] = str(dataBlock['power'])
elif name == 'thermom.':
self.nameMap[name]['body'] = "{0:.2f}".format(dataBlock['temperature2'])
monitorMessages = [ if (self.nameMap[name]['oldbody'] != self.nameMap[name]['body']) or (self.nameMap[name]['cnt'] == 10):
['header1', 'body1'], self.nameMap[name]['cnt'] = 0;
['header1', 'body1'], self.nameMap[name]['oldbody'] = self.nameMap[name]['body']
['header1', 'body1'], message = str(self.nameMap[name]['slot']) + " " + self.nameMap[name]['header'] + " " + self.nameMap[name]['body']
['header1', 'body1'], client.publish("IoT/Monitor/Message", message)
['header1', 'body1'], Logger.log("MonitorPublisher has sent: " + message)
['header1', 'body1'], else:
['header1', 'body1'], self.nameMap[name]['cnt'] += 1
['header1', 'body1'], else:
['header1', 'body1'], Logger.log("unknown name: " + name)
['header1', 'body1'],
['header1', 'body1'],
['header1', 'body1'],
['header1', 'body1']
]
currentTime = mktime(localtime())
if (currentTime > lastEvent + 60):
lastEvent = currentTime
client.publish("IoT/Message/Monitor", monitorMsg)
Logger.log("MonitorPublisher has sent data")
except Exception, e: except Exception, e:
Logger.log("Unexcepted exception %s in MonitorPublisher: %s" % (e.__class__.__name__, str(e))) Logger.log("Unexcepted exception %s in MonitorPublisher: %s" % (e.__class__.__name__, str(e)))

View File

@ -8,6 +8,7 @@ from MqttReceiver import MqttReceiver
from MongoWriter import MongoWriter from MongoWriter import MongoWriter
from MeterBusDecoder import MeterBusDecoder from MeterBusDecoder import MeterBusDecoder
from RePublisher import RePublisher from RePublisher import RePublisher
from MonitorPublisher import MonitorPublisher
from Broker import Broker from Broker import Broker
import Queue import Queue
import os import os
@ -73,6 +74,11 @@ try:
republisher.start() republisher.start()
Logger.log("RePublisher started ...") Logger.log("RePublisher started ...")
queue5 = broker.subscribe('monitorpublisher')
monitorpublisher = MonitorPublisher(queue5, MQTT_BROKER)
monitorpublisher.start()
Logger.log("MonitorPublisher started ...")
Logger.log("mqtt2mongo running") Logger.log("mqtt2mongo running")