#!/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()