+++ /dev/null
-#!/usr/bin/python
-
-from pprint import pprint
-from os import system;
-
-import pycurl
-from urllib import urlencode
-from StringIO import StringIO
-
-import MySQLdb
-import ConfigParser
-
-import uuid
-
-debug = True
-
-def print_log(str):
- global logging,debug
- if debug>0:
- print str
- if logging == "on":
- system("logger -t weathermon \""+str+"\"")
-
-def submit_narodmon():
-
- global debug
-
- param = { 'ID':devid }
-
- c = database.cursor()
- c.execute(
- '''
-select nm_id,avg(value) from meteo.ext_sensors e,meteo.sensor_values v
-where
-e.sensor_id=v.sensor_id and e.param_id=v.parameter_id
-and v.timestamp>DATE_SUB(CURRENT_TIMESTAMP(),INTERVAL 15 MINUTE)
-and e.nm_id is not null
-group by e.sensor_id,e.param_id,e.nm_id,e.owm_id
- '''
- )
-
- queue=c.fetchall()
-
- if debug>1:
- pprint(queue)
-
- for (sensor,value) in queue:
- param[sensor] = value
-
- if debug>1:
- pprint (param)
-
- url = "http://narodmon.ru/post.php"
-
- try:
-
- response_buffer = StringIO()
- curl = pycurl.Curl()
-
- curl.setopt(curl.URL, url)
- curl.setopt(curl.WRITEFUNCTION, response_buffer.write)
- curl.setopt(curl.POST, 1)
- curl.setopt(curl.POSTFIELDS, urlencode(param))
-
- curl.perform()
- curl.close()
-
- response_value = response_buffer.getvalue()
-
- print_log('Narodmon response: '+response_value)
-
- return True
-
- except:
-
- exc_type, exc_value, exc_traceback = sys.exc_info()
- traceback.print_tb(exc_traceback, limit=1, file=sys.stdout)
- traceback.print_exception(exc_type, exc_value, exc_traceback,
- limit=2, file=sys.stdout)
- return False
-
-def submit_owm():
-
- global debug
-
- url = "http://openweathermap.org/data/post"
- params = {'name':owm_station, 'lat':owm_lat, 'long':owm_lon}
-
- c = database.cursor()
- c.execute(
- '''
- select owm_id,value from
- (
- SELECT sensor_id,parameter_id,avg(timestamp) timestamp,round(avg(value),1) value FROM meteo.sensor_values
- where
- timestamp>=date_sub(current_timestamp(), INTERVAL 15 MINUTE)
- group by sensor_id,parameter_id
- ) v,meteo.ext_sensors e
- where v.sensor_id=e.sensor_id and v.parameter_id=e.param_id
- and owm_id is not null
- '''
- )
-
- queue=c.fetchall()
-
- if debug>1:
- pprint(queue)
-
- for (sensor,value) in queue:
- params[sensor]=value
- if debug>1:
- pprint (params)
-
- try:
-
- response_buffer = StringIO()
- curl = pycurl.Curl()
-
- curl.setopt(curl.URL, url)
- curl.setopt(curl.USERPWD, '%s:%s' % (owmuser, owmpasswd))
- curl.setopt(curl.WRITEFUNCTION, response_buffer.write)
- curl.setopt(curl.POST, 1)
- curl.setopt(curl.POSTFIELDS, urlencode(params))
-
- curl.perform()
- curl.close()
-
- response_value = response_buffer.getvalue()
-
- print_log('Openweathermap response: '+response_value)
-
- return True
-
- except:
-
- exc_type, exc_value, exc_traceback = sys.exc_info()
- traceback.print_tb(exc_traceback, limit=1, file=sys.stdout)
- traceback.print_exception(exc_type, exc_value, exc_traceback,
- limit=2, file=sys.stdout)
- return False
-
-def main():
- submit_narodmon()
- submit_owm()
-
-def init():
-
- global logging,debug;
- global devid;
- global dbhost,dbuser,dbpasswd;
- global owmuser,owmpasswd,owm_temp,owm_pres,owm_humi,owm_lat,owm_lon,owm_station;
-
- try:
-
- cfg = ConfigParser.RawConfigParser(allow_no_value=True)
- cfg.readfp(open('/etc/weathermon.conf'))
-
- try:
- logging = cfg.get("logging","enabled")
- except:
- logging = None
- try:
- debug = int(cfg.get("logging","debug"))
- except:
- debug = 0
-
- dbhost = cfg.get("mysql","host")
- dbuser = cfg.get("mysql","user")
- dbpasswd = cfg.get("mysql","passwd")
- try:
- narmon = cfg.get("narodmon","enable")
- except:
- narmon = 'off'
- try:
- devid = cfg.get("narodmon","devid")
- except:
- devid = "{:0>12X}".format(getnode())
- try:
- owmuser = cfg.get("openweathermap","user")
- owmpasswd = cfg.get("openweathermap",'passwd')
- except:
- owmuser = None
- if owmuser:
- try:
- owm_station=cfg.get("openweathermap","station")
- owm_lat=cfg.get("openweathermap","lat")
- owm_lon=cfg.get("openweathermap","lon")
- except:
- None
-
- global database
- database = MySQLdb.connect(host=dbhost,user=dbuser,passwd=dbpasswd,use_unicode=True,connect_timeout=10)
- database.set_character_set('utf8')
- c = database.cursor()
- c.execute('SET NAMES utf8;')
- print_log("Database connected...")
- connected = True
-
- except:
-
- print_log("Cannot intialize system")
- exit()
-
-if __name__ == "__main__":
- import sys
- reload(sys)
- sys.setdefaultencoding('utf-8')
- init()
- main()