X-Git-Url: https://git.rvb.name/weathermon.git/blobdiff_plain/333cb703da2fbe639e6eb9d630e4f4221cc26d36..7edb3771717d15f7c36d8459fa12b3d6f76d7d9a:/weathermon-light?ds=sidebyside diff --git a/weathermon-light b/weathermon-light deleted file mode 100755 index 1827377..0000000 --- a/weathermon-light +++ /dev/null @@ -1,209 +0,0 @@ -#!/usr/bin/python - -import serial - -from os import system - -from pprint import pprint - -from termios import tcflush, TCIOFLUSH - -from time import sleep - -from uuid import getnode - -import sys,traceback - -import pycurl -from urllib import urlencode -from StringIO import StringIO - -path = None -baud = None -timeout = None - -import ConfigParser - -import thread -from threading import Timer - -def open_port(path): - - global proc - - print "Opening path "+path - - ser = serial.Serial(path,1200); - ser.open(); - ser.close(); - - ser = serial.Serial(path,baud,timeout=timeout) - if ser.portstr: - tcflush(ser,TCIOFLUSH); - return ser - -def read_port(ser): - - try: - timeout_timer = Timer(timeout, thread.interrupt_main) - timeout_timer.start() - line = ser.readline() - return line.strip() - except KeyboardInterrupt: - return "<>" - finally: - timeout_timer.cancel() - -def read_loop(ser,callback): - - global proc - - while True: - - try: - line=read_port(ser) - if line=="<>": - print "Reopening port..." - ser.close() - ser=open_port(path) - if line: - callback(line) - except KeyboardInterrupt: - break - finally: - None - -def print_log(str): - global logging - print str - if logging == "on": - system("logger -t weathermon \""+str+"\"") - -def submit_data(stype,sid,param,value): - - global url,username,password - - params = {'stype':stype, 'sid':sid, 'param':param, 'value':value} - - pprint (params) - - try: - - response_buffer = StringIO() - curl = pycurl.Curl() - - curl.setopt(curl.URL, url) - if username: - curl.setopt(curl.USERPWD, '%s:%s' % (username, password)) - 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('Server 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 process_str(str): - print_log("Received: "+str) - try: - msg_type, msg_body = str.split(':') - except: - return - try: - if msg_type == 'STATUS': - print_log('Status: '+msg_body) - elif msg_type == 'ERROR': - print_log('Error: '+ msg_body) - elif msg_type == 'SENSOR': - sens = msg_body.split(',') - sensor = {} - sensor_type = None - sensor_id = None - for rec in sens: - key,value = rec.split('=') - value=value.strip() - if len(value)>0: - if key == 'TYPE': - sensor_type = value - elif key == 'ID': - sensor_id = value - else: - sensor[key] = value - if sensor_type: - if not sensor_id: - sensor_id=devid; - for key in sensor: - if sensor[key]: - print_log('Type = '+sensor_type+', ID = '+sensor_id+', Param = '+key+', Value = '+sensor[key]) - submit_data(sensor_type,sensor_id,key,sensor[key]) - else: - print_log('Error: got empty parameter value for '+sensor_type+'.'+sensor_id+'.'+key) - except: - print_log('Exception processing...') - 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=5, file=sys.stdout) - -def weather_mon(): - - global path - - ser = open_port(path) - read_loop(ser,process_str) - -def main(): - weather_mon() - -try: - - cfg = ConfigParser.RawConfigParser(allow_no_value=True) - cfg.readfp(open('/etc/weathermon.conf')) - url = cfg.get("web","url") - path = cfg.get("serial","port"); - try: - username = cfg.get("web","user"); - password = cfg.get("web","password"); - except: - username = None - password = None - try: - logging = cfg.get("logging","enabled") - except: - logging = None - try: - timeout = int(cfg.get("serial","timeout")) - except: - timeout = 120 - try: - baud = int(cfg.get("serial","baud")) - except: - baud = 57600 - try: - devid = cfg.get("web","devid") - except: - devid = "{:0>12X}".format(getnode()) - -except: - - print_log("Cannot intialize system") - exit() - -if __name__ == "__main__": - import sys - reload(sys) - sys.setdefaultencoding('utf-8') - main()