+++ /dev/null
-#!/usr/bin/python -u
-
-import paho.mqtt.client as paho
-import sys
-from ConfigParser import ConfigParser
-import MySQLdb
-from pprint import pprint
-import json
-from dateutil.parser import parser
-tparser=parser()
-
-def on_message(mosq, obj, msg):
- topic=msg.topic
- payload=json.loads(msg.payload)
- timestamp=tparser.parse(payload['Time'])
- for sensor_type in payload:
- if sensor_type != 'Time' and sensor_type != 'TempUnit':
- sensor_data=payload[sensor_type]
- for param in sensor_data:
- try:
- value=sensor_data[param]
- try:
- c = database.cursor()
- c.execute('CALL meteo.submit_mqtt(%s,%s,%s,%s,NULL)', (topic,sensor_type,param,value))
- database.commit()
- print topic,sensor_type,param,value
- except:
- print "Failed to submit data"
- except:
- None
-
-def Topics():
-
- c = database.cursor()
- c.execute(
- '''
- select topic from mqtt_topics where topic<>""
- '''
- )
-
- topics=c.fetchall()
- return topics
-
-
-def Init():
-
- global client,database
-
- conffile = sys.argv[1]
-
- config = ConfigParser()
- config.add_section('mqtt')
- # set defaults for anonymous auth
- config.set('mqtt', 'username', '')
- config.set('mqtt', 'password', '')
- config.set('mqtt', 'port', '1883')
- config.read(conffile)
-
- mqtt_server = config.get('mqtt', 'server')
- mqtt_port = config.getint('mqtt', 'port')
- mqtt_username = config.get('mqtt', 'username')
- mqtt_password = config.get('mqtt', 'password')
-
- mysql_server = config.get('mysql', 'server')
- mysql_username = config.get('mysql','username')
- mysql_password = config.get('mysql','password')
- mysql_db = config.get('mysql','db')
-
- client = paho.Client('weather')
- client.username_pw_set(mqtt_username, mqtt_password)
- client.on_message=on_message
- client.connect(mqtt_server, port=mqtt_port)
-
- database = MySQLdb.connect(host=mysql_server,user=mysql_username,passwd=mysql_password,db=mysql_db,use_unicode=True,connect_timeout=10)
- database.set_character_set('utf8')
- c = database.cursor()
- c.execute('SET NAMES utf8;')
-
- topics=[]
- for topic in Topics():
- topics.append((topic[0].encode('UTF-8'),1))
-
- client.subscribe(topics)
-
-Init()
-
-try:
- while True:
- try:
- client.loop()
- except:
- break
-finally:
- exit()