diff --git a/py/demo.py b/py/demo.py index f9d2426..a341757 100644 --- a/py/demo.py +++ b/py/demo.py @@ -16,35 +16,43 @@ import requests import picamera import json -#from six.moves import input -#from ftplib import FTP -from func import * -from var import * -#import new dependencies -from depdata import * -from depconfig import * +import re + +try: + from var import * + from func import * + from depdata import * + from depconfig import * +except Exception,e: + #logger.critical("\033[1;31;40mCannot import:%s,%s\033[0m" % (Exception,e)) + print "\033[1;31;40mCannot import neccessary file:%s,%s\033[0m" % (Exception,e) + quit() import logging -from logging.handlers import RotatingFileHandler -#logging.basicConfig(level=logging.DEBUG, -# datefmt='%a, %d %b %Y %H:%M:%S', -# format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', -# filename='demo.log', -# filemode='w') +from logging.handlers import TimedRotatingFileHandler +#console_formatter = logging.Formatter('%(name)-5s: %(levelname)-8s %(message)s') +#Rthandler = RotatingFileHandler('demo.log',maxBytes=10*1024*1024,backupCount=5) console = logging.StreamHandler() console.setLevel(logging.DEBUG) -formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s') -console.setFormatter(formatter) +console_formatter = logging.Formatter('%(asctime)s [%(levelname)s] [%(filename)s:%(lineno)d %(name)s] - %(message)s') +#console_formatter = logging.Formatter(console_format) +file_formatter = logging.Formatter('%(asctime)s [%(levelname)s] [%(filename)s:%(lineno)d %(name)s] - %(message)s [%(process)d,%(thread)d:%(threadName)s]') +#file_formatter = logging.Formatter(file_format) +console.setFormatter(console_formatter) +#logger = logging.getLogger('demo') logger = logging.getLogger('demo') logger.addHandler(console) +Trthandler = TimedRotatingFileHandler(filename=cur_file_dir()+'/'+log_name,when=file_handler_when,interval=file_handler_interval,backupCount=file_handler_backupcount) +#Trthandler.suffix = "%Y%m%d.log" +Trthandler.suffix = log_suffix +Trthandler.extMatch = r"^\d{4}-\d{2}-\d{2}.log$" + +Trthandler.setLevel(logging.INFO) +Trthandler.setFormatter(file_formatter) +logger.addHandler(Trthandler) +logger.setLevel(logging.DEBUG) -#Rthandler = RotatingFileHandler('myapp.log',maxBytes=10*1024*1024,backupCount=5) -#Rthandler.setLevel(logging.INFO) -#formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s') -#Rthandler.setFormatter(formatter) -#logger.addHandler(Rthandler) - global stationAlias global reconnect_count global reconnect_count_mqtt @@ -64,7 +72,6 @@ positionQ= Queue.Queue(PositionQueueLength) commandQ = Queue.Queue(CommandQueueLength) callQ = Queue.Queue(CallQueueLength) -print "\033[0;32;40m %d\033[0m" % (os.geteuid(),) def reconnect(): #count reconnect counts, if bigger than 200, do reconn @@ -76,16 +83,15 @@ def reconnect(): try: s.close() except socket.error as msg: - print"socket reconnect:close error : %s " % (msg,) - logger.debug("[reconnect]socket reconnect:close error : %s " % (msg,)) + #print"socket reconnect:close error : %s " % (msg,) + logger.warning("[reconnect]\033[1;33;40msocket reconnect:close error : %s\033[0m " % (msg,)) #logger.debug(' try: s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect((depHost,depPort)) except socket.error as msg: - #print(msg) - print"socket reconnect error : %s " % (msg,) - logger.debug("[reconnect]socket reconnect:connect error : %s " % (msg,)) + #print"socket reconnect error : %s " % (msg,) + logger.warning("[reconnect\033[1;33;40m]socket reconnect:connect error %s,%s: %s \033[0m" % (depHost,depPort,msg)) def reconnect_mqtt(): global reconnect_count_mqtt @@ -97,71 +103,73 @@ def reconnect_mqtt(): try: client.disconnect() except Exception,e: - print "mqtt reconnect:disconnect error :%s,%s " % (Exception,e) - logger.debug("[reconnect_mqtt]mqtt reconnect:close error : %s " % (msg,)) + #print "mqtt reconnect:disconnect error :%s,%s " % (Exception,e) + logger.warning("[reconnect_mqtt]\033[1;33;40mmqtt reconnect:close error : %s\033[0m" % (msg,)) try: client.connect(MQTTServer,MQTTPort,mqttClientKeepAliveTime) except Exception,e: - print "mqtt reconnect error :%s,%s " % (Exception,e) - logger.debug("[reconnect_mqtt]mqtt reconnect:connect error : %s " % (msg,)) + #print "mqtt reconnect error :%s,%s " % (Exception,e) + logger.warning("[reconnect_mqtt]\033[1;33;40mmqtt reconnect:connect error : %s \033[0m" % (msg,)) return False else: return True class ScanDelegate(DefaultDelegate): - def __init__(self): - DefaultDelegate.__init__(self) + def __init__(self): + DefaultDelegate.__init__(self) def handleDiscovery(self, dev, isNewDev, isNewData): global stationAlias,stationMac data = {} timestamp = time.time() global lastDiscoveryTime global s - global dataddd #assemble all data before the loop + global dataddd #assemble all data before the loop try: for (adtype,desc,value) in dev.getScanData(): data[desc]=value except UnicodeDecodeError,e: pass - ##::here is new processing using depdata.py codes; - if (data.has_key('Manufacturer')) and ( manu_filter(data.get('Manufacturer')) ): - #if match the manufilter then start new processing: - #u just want update minimum fresh data here - try: - #s.send(bytearray.fromhex('01ab02ab')) - dataddd['keyflag']=rawdata_translate(data['Manufacturer']) - # if alarm_update(dev.addr.replace(':',''), dataddd['keyflag']): - # dataddd['keyflag'] = KEY_BINDING - #ip need update - except: - print('dev+1 %s' % dev.addr ) - if alarm_update(dev.addr.replace(':',''), dataddd['keyflag']): - dataddd['keyflag'] = KEY_BINDING - #local_ip = get_ip_address(depIfip) - #dataddd['ip'] = str(local_ip) - #dataddd['hexip'] = ''.join([hex(int(i)).lstrip('0x').rjust(2,'0') for i in local_ip.split('.')]) - dataddd['bcaddr'] = dev.addr - dataddd['bcmac'] = dev.addr.replace(':','') - dataddd['rssi'] = hex(dev.rssi*(-1)).lstrip('0x').rjust(2,'0') - dataddd['srssi'] = dev.rssi*(-1) - ## data type - if depProt == 'B': - #print('%s' % dataddd) - load = gen_bin_data(dataddd) - #print('%s' % dataddd) - else: - load = gen_json_data(dataddd) - ## send type - #if depNet == 'S': - try: - s.send(load) - print('all xxx sent %s' % load) - except socket.error as msg: - print('socket error %s' % msg) - reconnect() - ##Mqtt not processed + ##::here is new processing using depdata.py codes; + if (data.has_key('Manufacturer')) and ( manu_filter(data.get('Manufacturer')) ): + #if match the manufilter then start new processing: + #u just want update minimum fresh data here + try: + #s.send(bytearray.fromhex('01ab02ab')) + dataddd['keyflag']=rawdata_translate(data['Manufacturer']) + # if alarm_update(dev.addr.replace(':',''), dataddd['keyflag']): + # dataddd['keyflag'] = KEY_BINDING + #ip need update + except Exception,e: + print('dev+1 %s' % dev.addr ) + logger.warning("[ScanDelegate.handleDiscovery]\033[1;33;40mrawdata_translate %s get exception:%s,%s\033[0m" % (dev.addr,Exception,e)) + if alarm_update(dev.addr.replace(':',''), dataddd['keyflag']): + dataddd['keyflag'] = KEY_BINDING + #local_ip = get_ip_address(depIfip) #dataddd['ip'] = str(local_ip) #dataddd['hexip'] = ''.join([hex(int(i)).lstrip('0x').rjust(2,'0') for i in local_ip.split('.')]) + dataddd['bcaddr'] = dev.addr + dataddd['bcmac'] = dev.addr.replace(':','') + dataddd['rssi'] = hex(dev.rssi*(-1)).lstrip('0x').rjust(2,'0') + dataddd['srssi'] = dev.rssi*(-1) + ## data type + if depProt == 'B': + #print('%s' % dataddd) + load = gen_bin_data(dataddd) + #print('%s' % dataddd) + else: + load = gen_json_data(dataddd) + ## send type + #if depNet == 'S': + try: + s.send(load) + #print('all xxx sent %s' % load) + except socket.error as msg: + logger.warning("[ScanDelegate.handleDiscovery]\033[1;33;40msocket error:%s\033[0m" % (msg,)) + #print('socket error %s' % msg) + reconnect() + else: + logger.info("[ScanDelegate.handleDiscovery]socket send %s " % (load,)) + ##Mqtt not processed - ## below is old codes + ## below is old codes #print "%s,%s" % (data['Manufacturer'],braceletFlag) if (not data.has_key('Manufacturer')) or ( not data['Manufacturer'].startswith(braceletFlag)): return 0 @@ -175,7 +183,7 @@ def handleDiscovery(self, dev, isNewDev, isNewData): #battery+station ip #electricity = data['Manufacturer'][16:18] electricity = '64' #fixed - flag = data['Manufacturer'][6:8] + flag = data['Manufacturer'][6:8] local_ip = get_ip_address(ifname) hex_ip = ''.join([hex(int(i)).lstrip('0x').rjust(2,'0') for i in local_ip.split('.')]) temp = 50 @@ -183,105 +191,106 @@ def handleDiscovery(self, dev, isNewDev, isNewData): if data['Manufacturer'].startswith(callFlag,6): callData=data callData['nursecall'] = True - print "\033[1;31;40m%s\033[0m" % (json.dumps(callData,)) + logger.info("[ScanDelegate.handleDiscovery]Call data get:%s" % (json.dumps(callData),)) + #print "\033[1;31;40m%s\033[0m" % (json.dumps(callData,)) try: client.publish(CALLTITLE,json.dumps(callData)) except Exception,e: - print "\033[1;31;40mMqtt Exception:%s\033[0m" % (Exception,e) - logger.warning("[ScanDelegate.handleDiscovery]\033[1;31;40mMqtt Exception:%s\033[0m" % (Exception,e)) + #print "\033[1;31;40mMqtt Exception:%s\033[0m" % (Exception,e) + logger.warning("[ScanDelegate.handleDiscovery]\033[1;33;40msending call data %s to %s get %s:%s\033[0m and trying to reconnect" % (json.dumps(callData),CALLTITLE,Exception,e)) reconnect_mqtt() - lastDiscoveryTime = time.time() - return 0 + else: + logger.info("[ScanDelegate.handleDiscovery]\033[1;32;40mCall\033[0m data sended to %s(%s:%s):%s" % (CALLTITLE,MQTTServer,MQTTPort,json.dumps(callData))) + #lastDiscoveryTime = time.time() elif data['Manufacturer'].startswith(outbodyFlag,6): outbodyData = data - #client.publish(COMMONTITLE,json.dumps(outbodyData)) + logger.info("[ScanDelegate.handleDiscovery]Outbody data get:%s" % (json.dumps(outbodyData),)) try: client.publish(OUTBODYTITLE,json.dumps(outbodyData)) - except Exception,e: - print "\033[1;31;40mMqtt Exception:%s\033[0m" % (Exception,e) - logger.warning("[ScanDelegate.handleDiscovery]\033[1;31;40mMqtt Exception:%s\033[0m" % (Exception,e)) + #print "\033[1;31;40mMqtt Exception:%s\033[0m" % (Exception,e) + logger.warning("[ScanDelegate.handleDiscovery]\033[1;33;40msending outbody data %s get %s:%s\033[0m and trying to reconnect" % (json.dumps(outbodyData),Exception,e)) reconnect_mqtt() - lastDiscoveryTime = time.time() - return 0 + else: + logger.info("[ScanDelegate.handleDiscovery]\033[1;32;40mOutbody\033[0m data sended to %s(%s:%s):%s" % (OUTBODYTITLE,MQTTServer,MQTTPort,json.dumps(outbodyData))) + #lastDiscoveryTime = time.time() #change to send to mqtt immidiately #positionQ.put(json.dumps(data)) - try: - client.publish(POSITIONTITLE,json.dumps(data)) - except Exception,e: - print "\033[1;31;40mMqtt Exception:%s\033[0m" % (Exception,e) - logger.warning("[ScanDelegate.handleDiscovery]\033[1;31;40mMqtt Exception:%s\033[0m" % (Exception,e)) + else: + logger.info("[ScanDelegate.handleDiscovery]Position data get:%s" % (json.dumps(data),)) + #logger.info("[ScanDelegate.handleDiscovery]Position data sended %s,%s:%s" % (MQTTServer,MQTTPort,json.dumps(data))) + try: + client.publish(POSITIONTITLE,json.dumps(data)) + except Exception,e: + #print "\033[1;31;40mMqtt Exception:%s\033[0m" % (Exception,e) + logger.warning("[ScanDelegate.handleDiscovery]\033[1;33;40msending position data %s get %s:%s\033[0m and trying to reconnect" % (json.dumps(data),Exception,e)) reconnect_mqtt() - print "%s,%s:%s" % (MQTTServer,MQTTPort,json.dumps(data)) - logger.info("[ScanDelegate.handleDiscovery]published.%s,%s:%s" % (MQTTServer,MQTTPort,json.dumps(data))) - lastDiscoveryTime = time.time() + #print "%s,%s:%s" % (MQTTServer,MQTTPort,json.dumps(data)) + else: + logger.info("[ScanDelegate.handleDiscovery]\033[1;32;40mPosition\033[0m data sended to %s(%s:%s)%s" % (POSITIONTITLE,MQTTServer,MQTTPort,json.dumps(data))) + #lastDiscoveryTime = time.time() def on_connect(client,userdata,flags,rc): client.subscribe(CMDTITLE) - print("Connected with resut code " + str(rc)) + #print("Connected with resut code " + str(rc)) logger.info("[MqttClient.on_connect] Mqtt Connected with resut code " + str(rc)) def on_disconnect(client, userdata, rc): - print "Mqtt Disconnected..." + #print "Mqtt Disconnected..." logger.info("[MqttClient.on_disconnect]Mqtt Disconnected...") def on_message(client,userdata,msg): - print "\033[1;31;40m[get] topic %s , payload:%s\033[0m" % (msg.topic, str(msg.payload)) - logger.debug("[MqttClient.on_message]\033[1;31;40mget topic %s , payload:%s\033[0m" % (msg.topic, str(msg.payload))) + #print "\033[1;31;40m[get] topic %s , payload:%s\033[0m" % (msg.topic, str(msg.payload)) + logger.debug("[MqttClient.on_message]get topic \033[1;32;40m%s\033[0m,payload:%s" % (msg.topic, str(msg.payload))) if msg.topic == CMDTITLE: - print "\033[1;31;40m[get] %s \033[0m" % (str(msg.payload),) - logger.debug("[MqttClient.on_meesage]\033[1;31;40m runcmd2 going to deal with %s \033[0m" % (str(msg.payload),)) + #print "\033[1;31;40m[get] %s \033[0m" % (str(msg.payload),) + logger.debug("[MqttClient.on_message]runcmd2 going to deal with %s" % (str(msg.payload),)) runcmd2(str(msg.payload)) class MyListener(object): -# def remove_service(self, zeroconf, type, name): -# pass - - def add_service(self, zeroconf, type, name): - global MQTTServer,MQTTPort,client - info = zeroconf.get_service_info(type, name) - #log sth - logger.info("[MyListerner.add_service]Service %s added, service info: %s" % (name, info)) - if info.server != MQTTServer or info.port != MQTTPort: - #log sth - print "\033[1;31;40m received new address from zeroconf so need to change to new mqtt server : %s:%s\033[0m" % (info.server,info.port) - logger.info("[MyListener.add_service]\033[1;31;40m received new address from zeroconf so need to change to new mqtt server : %s:%s\033[0m" % (info.server,info.port)) - MQTTServer = info.server - MQTTPort = info.port - res = reconnect_mqtt() - if res: - logger.info('[MyListener.add_service]change to new mqtt server suc.') - try: - write_conf('MQTT','server',MQTTServer) - write_conf('MQTT','port',MQTTPort) - except Exception,e: - logger.warning('[Mylistener.add_service]Failed to write mqtt new address back to conf file:%s,%s' % (MQTTServer,MQTTPort)) - print "\033[1;31;40m failed to write back new mqtt server : %s:%s\033[0m" % (Exception,e) - else: - logger.info('[MyListener.add_service]Failed to reconnect to new mqtt server:%s,%s'% (MQTTServer,MQTTPort)) - print "\033[1;31;40m failed to reconnect to new mqtt server : %s:%s\033[0m" % (Exception,e) + def add_service(self, zeroconf, type, name): + global MQTTServer,MQTTPort,client + info = zeroconf.get_service_info(type, name) + logger.debug("[MyListerner.add_service]Service \033[1;32;40m%s\033[0m added, service info: \033[1;32;40m%s\033[0m" % (name, info)) + if info.server != MQTTServer or info.port != MQTTPort: + #print "\033[1;31;40m received new address from zeroconf so need to change to new mqtt server : %s:%s\033[0m" % (info.server,info.port) + logger.info("[MyListener.add_service]received new address from zeroconf so need to change to new mqtt server : %s:%s\033[0m" % (info.server,info.port)) + MQTTServer = info.server + MQTTPort = info.port + res = reconnect_mqtt() + if res: + logger.info('[MyListener.add_service]change to new mqtt server suc.') + try: + write_conf('MQTT','server',MQTTServer) + write_conf('MQTT','port',MQTTPort) + except Exception,e: + logger.warning('[Mylistener.add_service]\033[1;33;40mFailed to write mqtt new address back to conf file:%s,%s\033[0m' % (MQTTServer,MQTTPort)) + #print "\033[1;31;40m failed to write back new mqtt server : %s:%s\033[0m" % (Exception,e) + else: + logger.warning('[MyListener.add_service]\033[1;33;40mFailed to reconnect to new mqtt server:%s,%s\033[0m'% (MQTTServer,MQTTPort)) + #print "\033[1;31;40m failed to reconnect to new mqtt server : %s:%s\033[0m" % (Exception,e) def runcmd2(data): - #print "\033[0;32;40m runcmd2 \033[0m" global MQTTServer,MQTTPort global cameraReviewed global hasCamera #print "\033[0;32;40m looping in runcmd %s while \033[0m" % (q,) - print "\033[0;32;40m runcmd2 get %s \033[0m" % (data,) + #print "\033[0;32;40m runcmd2 get %s \033[0m" % (data,) if data.startswith('update'): - print "\033[0;32;40mget cmd as %s \033[0m" % (data,) - logger.info("[runcmd2]\033[0;32;40mget cmd as %s \033[0m" % (data,)) + #print "\033[0;32;40mget cmd as %s \033[0m" % (data,) + logger.info("[runcmd2]get cmd \033[1;32;40m%s \033[0m" % (data,)) #parse args update -f[filename]* -m[md5_sum]* -i[ip/domain] -p[port]* -r[random range] -v[version]* ArgsDict = parseArgs2Dict(data.lstrip('update')) if (not ArgsDict.has_key('f')) or (ArgsDict.has_key('i') and (not ArgsDict.has_key('p'))) or (not ArgsDict.has_key('v')) or (not ArgsDict.has_key('m')): #shoule rase Exception ,return and exit #print "Error: lack some para" - logger.warning('[runcmd2]update cmd lack some para: %s' % (data,)) + logger.warning('[runcmd2]\033[1;33;40mupdate cmd lack some para: %s\033[0m' % (data,)) return try: if float(ArgsDict['v']) > version: - print "\033[0;32;40m new version upgrade command received \033[0m" + #print "\033[0;32;40m new version upgrade command received \033[0m" + logger.info("[runcmd2]new version upgrade command received") if not ArgsDict.has_key('i'): ArgsDict['i'] = MQTTServer if not ArgsDict.has_key('p'): @@ -290,27 +299,26 @@ def runcmd2(data): ArgsDict['r'] = 600 update_self(ArgsDict['f'],ArgsDict['m'],ArgsDict['v'],ArgsDict['i'],ArgsDict['p'],int(ArgsDict['r'])) else: - print "033[0;32;40m current version : %f, order version :%f\033[0m " % (version,float(ArgsDict['v'])) - logger.debug("[runcmd2]033[0;32;40m current version : %f, order version :%f\033[0m " % (version,float(ArgsDict['v']))) + logger.warning("[runcmd2]\033[1;33;40m current version : %f, order version :%f\033[0m " % (version,float(ArgsDict['v']))) except Exception,e: - print "\033[0;32;40m runcmd2 judging params get %s:%s\033[0m" % (Exception,e) - logger.warning('[runcmd2]judging params get %s:%s' % (Exception,e)) + #print "\033[0;32;40m runcmd2 judging params get %s:%s\033[0m" % (Exception,e) + logger.warning('[runcmd2]\033[1;33;40mjudging params get %s:%s\033[0m' % (Exception,e)) else : try: cmd = json.loads(data) except Exception,e: #print "\033[0;32;40m runcmd2 cannot cover cmd %s to json\033[0m" % (data,) - logger.warning('[runcmd2]cannot loads cmd to json:%s' % (data,)) + logger.warning('[runcmd2]\033[1;33;40mcannot loads cmd to json:%s\033[0m' % (data,)) if cmd['cmd'] == 'capture' : - print "\033[0;32;40m runcmd2 capture cmd2 received\033[0m" - logger.debug('[runcmd2]received capture cmd:%s' % (data,)) + #print "\033[0;32;40m runcmd2 capture cmd2 received\033[0m" + logger.info('[runcmd2]received capture cmd:%s' % (data,)) #get photo if cmd['ap'] == stationAlias : #print "\033[0;32;40m capture cmd2 received and going to capture\033[0m" - logger.debug('[rumcmd2]demanded to capture') + logger.info('[rumcmd2]demanded to capture') #print "\033[0;32;40m H:%s, %s ; V:%s, %s\033[0m" % (picResolutionH,type(picResolutionH),picResolutionV,type(picResolutionV)) - logger.debug("\033[0;32;40m H:%s, %s ; V:%s, %s\033[0m" % (picResolutionH,type(picResolutionH),picResolutionV,type(picResolutionV))) + logger.debug("[runcmd2]capture resolution:\033[1;32;40m H:%s, %s ; V:%s, %s\033[0m" % (picResolutionH,type(picResolutionH),picResolutionV,type(picResolutionV))) now = int(time.time()) filename = '%s_%s.jpg' % (cmd['bracelet'],now) #take_photo(filename,picUploadDir,picResolutionV,picResolutionH,cameraReviewed,hottime) @@ -318,54 +326,82 @@ def runcmd2(data): #if not cameraReviewed: # cameraReviewed = True if hasCamera: - print "\033[0;32;40m has Camera and going to capture:\033[0m" + #print "\033[0;32;40m has Camera and going to capture:\033[0m" try: take_photo(filename,picUploadDir,picResolutionV,picResolutionH,cameraReviewed,hottime) #print "\033[0;32;40m Capture ? %s " % (re,) except Exception,e: - print "\033[0;32;40m Capture get Exception:%s:%s\033[0m" % (Exception,e) + #print "\033[0;32;40m Capture get Exception:%s:%s\033[0m" % (Exception,e) + logger.error("[runcm2]\033[1;31;40mCapture get Exception:%s:%s\033[0m" % (Exception,e)) else: #print "\033[0;32;40m Capture ? %s " % (re,) #if re: + logger.info("[runcmd2]take photo suc") if cmd.has_key('url'): - send_photo_url(filename,picUploadDir,cmd['url'],now) + logger.debug("[runcmd2]going to call send_photo_url") + try: + res = send_photo_url(filename,picUploadDir,cmd['url'],now) + except Exception,e: + logger.error("[runcmd2]\033[1;31;40msend_photo_url:%s,%s,%s,%s meet %s,%s\033[0m" % (filename,picUploadDir,cmd['url'],now,Exception,e)) + if res: + logger.info("[send_photo_url]suc") + else: + logger.warning("[send_photo_url]\033[1;33;40mFailed\033[0m") else: - send_photo(filename,picUploadDir,picUploadServer,picUploadPort,cmd['ap'],cmd['bracelet'],now) - print "\033[0;32;40msend_photo done\033[0m" + logger.debug("[runcmd2]going to call send_photo for no url, cmd:\033[1;31;40n%s\033[0m" % (json.dumps(cmd),)) + res = send_photo(filename,picUploadDir,picUploadServer,picUploadPort,cmd['ap'],cmd['bracelet'],now) + if res: + logger.info("[send_photo]suc") + else: + logger.warning("[send_photo]\033[1;33;40mFailed\033[0m") + + #print "\033[0;32;40msend_photo done\033[0m" if not cameraReviewed: cameraReviewed = True else: - print "\033[0;32;40m no camera and ignore capture \033[0m" - #log sth + #print "\033[0;32;40m no camera and ignore capture \033[0m" + logger.warning("[rumcmd2]\033[1;33;40m capture cmd got but I did't have a camera!\033[0m") #return sth to server? - pass def update_self(filename,md5_sum,version,ip=MQTTServer,port=8000,ran=600): global stationAlias try: rdl = download(filename,md5_sum,ip,port,ran) except Exception,e: - print "download got error : %s, %s " % (Exception,e) + #print "download got error : %s, %s " % (Exception,e) + logger.warning("[update_self]\033[1;33;40m Download file %s got error: %s,%s\033[0m" % (filename,Exception,e)) + #should report to server? if rdl['status'] == 'OK': - print "\033[0;32;40mDownload %s Successfully...\033[0m" % (filename,) + #print "\033[0;32;40mDownload %s Successfully...\033[0m" % (filename,) + logger.info("[update_self]Download file %s Successfully" % (filename,)) rdp = deploy(filename) if rdp['status'] == 'OK': - print "\033[0;32;40mDeploy Successfully...\nPreparing to remove the %s restart the program...\033[0m" % (filename,) - if os.path.exists(filename): - os.remove(filename) + #print "\033[0;32;40mDeploy Successfully...\nPreparing to remove the %s restart the program...\033[0m" % (filename,) + logger.info("[update_self]Deploy Successfully.") + try: + if os.path.exists(filename): + os.remove(filename) + except Exception,e: + logger.warning("[update_self]\033[1;33;40mException caught during reomove file%s:%s,%s\033[0m" % (filename,Exception,e)) + else: + logger.info("[update_self]Removed file %s" % (filename,)) #write back the alias ID - write_conf('station','alias',stationAlias) + try: + write_conf('station','alias',stationAlias) + except Exception,e: + logger.warning("[update_self]\033[1;33;40mcannot write stationAlias %s bakc to conf file \033[0m and going to restart raspi." % (stationAlias,)) + else: + logger.info("[update_self]Wrote stationAlias %s back to conf file and going to call restart_raspi()" % (stationAlias,)) restart_raspi() #restart_program() else: - #TODO - #log sth - pass + logger.warning("[update_self]\033[1;33;40mFailed to deploy file %s.\033[0m" % (filename,)) + #should report to server? else: - #log sth #TODO - pass + logger.warning("[update_self]\033[1;33;40mFailed to download file %s.\033[0m" % (filename,)) + #should report to server? class MqttClient(threading.Thread): @@ -389,15 +425,15 @@ def run(self): try: client.connect(self.server,self.port,self.alivetime) except Exception,e: - #log sth - print "\033[1;31;40mmqtt connect error (%s,%s) %s:%s\033[0m try reconnect" % (MQTTServer,MQTTPort,Exception,e) + #print "\033[1;31;40mmqtt connect error (%s,%s) %s:%s\033[0m try reconnect" % (MQTTServer,MQTTPort,Exception,e) + logger.warning("[MqttClient.run]\033[1;33;40m mqtt server %s:%s connect error: %s,%s\033[0m and going to reconnect" % (MQTTServer,MQTTPort,Exception,e)) reconnect_mqtt() while True: try: client.loop(timeout=self.timeout) except Exception,e: - #log sth - print "\033[1;31;40mmqtt loop error (%s,%s) %s:%s\033[0m try reconnect" % (MQTTServer,MQTTPort,Exception,e) + #print "\033[1;31;40mmqtt loop error (%s,%s) %s:%s\033[0m try reconnect" % (MQTTServer,MQTTPort,Exception,e) + logger.warning("[MqttClient.run]\033[1;33;40mmqtt %s:%s loop error: %s,%s\033[0m and going to reconnect" % (MQTTServer,MQTTPort,Exception,e)) reconnect_mqtt() @@ -414,8 +450,10 @@ def run(self): global hasCamera if has_camera(): hasCamera = True + logger.debug("[heartBeat.run]I got a camera!") else: hasCamera =False + logger.debug("[heartBeat.run]Oooops,I haven't got a camera") while True: nowtime = time.time() heartbeat = get_system_info() @@ -430,18 +468,21 @@ def run(self): heartbeat['features'].append('camera') try: client.publish(HEARTBEATTITLE,json.dumps(heartbeat)) - print "\033[1;31;40mheartbeat %s\033[0m" % (json.dumps(heartbeat),) + #print "\033[1;31;40mheartbeat %s\033[0m" % (json.dumps(heartbeat),) except Exception,e: - print "\033[1;31;40mMqtt Exception:%s\033[0m" % (Exception,e) + #print "\033[1;31;40mMqtt Exception:%s\033[0m" % (Exception,e) + logger.warning("[heartbeat]\033[1;31;40mMqtt Exception:%s,%s [%s]\033[0m" % (MQTTServer,MQTTPort,json.dumps(heartbeat))) reconnect_mqtt() + else: + logger.info("[heartbeat]\033[1;34;40m%s\033[0m"% (json.dumps(heartbeat)),) time.sleep(heartbeatSleeptime) if __name__=='__main__': global starttime global hasCamera global reconnect_count_mqtt + reconnect_count_mqtt =0 #global mqttClientKeepAliveTime - print "\033[0;32;40m %d\033[0m" % (os.geteuid(),) starttime=time.time() client = mqtt.Client(client_id=stationAlias,clean_session=False) thread1 = MqttClient(1,'thread1',on_connect,on_message,on_disconnect,MQTTServer,MQTTPort,mqttClientKeepAliveTime,mqttClientLoopSleepTime,mqttClientLoopTimeout) @@ -459,31 +500,28 @@ def run(self): global lastDiscoveryTime global s - print "\033[0;32;40mbefore socket\033[0m" - dataddd = get_empty_datadict() s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) - try: - s.connect((depHost,depPort)) - s.setblocking(0) - except socket.error as msg: - print "socket error:%s" % (msg,) - #print(msg) - print "\033[0;32;40mafter socket\033[0m" - reconnect_count = 0 + try: + s.connect((depHost,depPort)) + s.setblocking(0) + except socket.error as msg: + #print "socket error:%s" % (msg,) + logger.warning("[__main__]\033[1;33;40msocket error %s,%s:%s\033[0m" % (depHost,depPort,msg)) + reconnect_count = 0 lastDiscoveryTime=0 try: callscanner = Scanner().withDelegate(ScanDelegate()) except Exception,e: - print "\033[0;32;40m main:BLEscanner init:%s,%s\033[0m" % (Exception,e) - print "\033[0;32;40mafter callscanner\033[0m" + #print "\033[0;32;40m main:BLEscanner init:%s,%s\033[0m" % (Exception,e) + logger.warning("[main]\033[1;33;40mBLEScan init error:%s,%s\033[0m" % (Exception,e)) count =0 while True: - try: - devices = callscanner.scan(scannerScanTime) - except Exception,e: - #print e - print "\033[0;32;40m main:callscanner:scan %s,%s\033[0m and going to sleep 5s and scan again" % (Exception,e) - time.sleep(5) + try: + devices = callscanner.scan(scannerScanTime) + except Exception,e: + #print "\033[0;32;40m main:callscanner:scan %s,%s\033[0m and going to sleep 5s and scan again" % (Exception,e) + logger.warning("[main]\033[1;33;40mcallscanner:scan %s,%s and going to sleep 5s and scan again\033[0m" % (Exception,e)) + time.sleep(5) diff --git a/py/func.py b/py/func.py index fa8e81b..8c7eb28 100644 --- a/py/func.py +++ b/py/func.py @@ -28,19 +28,20 @@ def get_ip_address(ifname): - s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) - #try to avoid net drop exceptions - try: - res = socket.inet_ntoa(fcntl.ioctl( - s.fileno(), - 0x8915, # SIOCGIFADDR - struct.pack('256s', ifname[:15]) - )[20:24]) - except Exception,e: - #print Exception,e - print "\033[0;32;40m get_ip_address %s:%s %s\033[0m" % (ifname,Exception,e) - res = '127.0.0.1' - return res + s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + #try to avoid net drop exceptions + try: + res = socket.inet_ntoa(fcntl.ioctl( + s.fileno(), + 0x8915, # SIOCGIFADDR + struct.pack('256s', ifname[:15]) + )[20:24]) + except Exception,e: + #print Exception,e + #print "\033[0;32;40m get_ip_address %s:%s %s\033[0m" % (ifname,Exception,e) + logger_func.warning("[get_ip_address]\033[1;33;40mget_ip_address(%s):%s,%s\033[0m" % (ifname,Exception,e)) + res = '127.0.0.1' + return res #def get_mac_address(*args): @@ -52,133 +53,145 @@ def get_ip_address(ifname): # return deli.join([mac[e:e+2] for e in range(0,11,2)]) def get_mac_address(st,*args): - a = os.popen('ifconfig | awk "/^' + st + '/{print \$5}"') - b = a.readline().rstrip() - if len(args)>0: - deli = args[0] - return b.replace(':',deli) - return b.replace(':','') + a = os.popen('ifconfig | awk "/^' + st + '/{print \$5}"') + b = a.readline().rstrip() + if len(args)>0: + deli = args[0] + return b.replace(':',deli) + return b.replace(':','') def get_ifname(st): - a = os.popen('ifconfig | awk "/^' + st + '/{print \$1}"') - return a.readline().rstrip() + a = os.popen('ifconfig | awk "/^' + st + '/{print \$1}"') + return a.readline().rstrip() def checksum(b): - sum = 0 - for e in b: - sum += e - cc = bytearray.fromhex('{:04x}'.format(sum)) - b = bytearray([0]) - n = cc[-1] + sum = 0 + for e in b: + sum += e + cc = bytearray.fromhex('{:04x}'.format(sum)) + b = bytearray([0]) + n = cc[-1] # b[1]= n & 0xFF # n >>= 8 - b[0]= n & 0xFF - return b + b[0]= n & 0xFF + return b def restart_program(): """Restarts the current program. Note: this function does not return. Any cleanup action (like - saving data) must be done before calling this function.""" + saving data) must be done before calling this function. + get some problem with multi-threads and not used. + """ python = sys.executable os.execl(python, python, * sys.argv) #os.execl("/usr/bin/sudo", python, * sys.argv) def restart_raspi(): - os.system('shutdown -r 1') + os.system('shutdown -r 1') def md5sum(fname): - """ 计算文件的MD5值 - """ - def read_chunks(fh): - fh.seek(0) - chunk = fh.read(8096) - while chunk: - yield chunk - chunk = fh.read(8096) - else: #最后要将游标放回文件开头 - fh.seek(0) - m = hashlib.md5() - if isinstance(fname, basestring) \ - and os.path.exists(fname): - with open(fname, "rb") as fh: - for chunk in read_chunks(fh): - m.update(chunk) - #上传的文件缓存 或 已打开的文件流 - elif fname.__class__.__name__ in ["StringIO", "StringO"] \ - or isinstance(fname, file): - for chunk in read_chunks(fname): - m.update(chunk) - else: - return "" - return m.hexdigest() + """ 计算文件的MD5值 + """ + def read_chunks(fh): + fh.seek(0) + chunk = fh.read(8096) + while chunk: + yield chunk + chunk = fh.read(8096) + else: #最后要将游标放回文件开头 + fh.seek(0) + m = hashlib.md5() + if isinstance(fname, basestring) \ + and os.path.exists(fname): + with open(fname, "rb") as fh: + for chunk in read_chunks(fh): + m.update(chunk) + #上传的文件缓存 或 已打开的文件流 + elif fname.__class__.__name__ in ["StringIO", "StringO"] \ + or isinstance(fname, file): + for chunk in read_chunks(fname): + m.update(chunk) + else: + return "" + return m.hexdigest() def download(filename,md5_sum,ip,port,ran): waittime = random.randrange(0,ran) - print "\033[0;32;40m sleep %ss\033[0m" % (waittime,) + #print "\033[0;32;40m sleep %ss\033[0m" % (waittime,) + logger_func.debug("[download]going to sleep\033[1;32;40m%s\033[0m" % (waittime,)) time.sleep(waittime) - print "\033[0;32;40m sleep %ss done\033[0m" % (waittime,) + #print "\033[0;32;40m sleep %ss done\033[0m" % (waittime,) try: url = 'http://%s:%s/%s' % (ip,port,filename) urllib.urlretrieve(url,filename) - print "\033[0;32;40m download suc\033[0m " + #print "\033[0;32;40m download suc\033[0m " except Exception,e: #print "\033[0;32;40m runcmd \033[0m" - print "\033[0;32;40m download ERROR %s:%s\033[0m" % (Exception,e) - client.publish('ap','download error %s,%s' % (Exception,e)) + #print "\033[0;32;40m download ERROR %s:%s\033[0m" % (Exception,e) + #TODO:return sth to server + #client.publish('ap','download error %s,%s' % (Exception,e)) + logger_func.warning("[download]\033[1;33;40mCannot download file %s:%s,%s\033[0m" % (filename,Exception,e)) return {'status':'Error','Info':"cannot download file %s:%s,%s" % (filename,Exception,e)} - + else: + logger_func.info("[download]Download succ") md5OfFile = md5sum(filename) if md5OfFile == md5_sum: - print "\033[0;32;40m download md5 check ok\033[0m " + #print "\033[0;32;40m download md5 check ok\033[0m " + logger_func.info("[download]md5 check ok") return {'status':'OK'} else: - print "\033[0;32;40m download md5 check failure receive:%s file:%s\033[0m "% (md5_sum,md5OfFile) + #print "\033[0;32;40m download md5 check failure receive:%s file:%s\033[0m "% (md5_sum,md5OfFile) + logger_func.warning("[download]\033[1;33;40mmd5 wrong, received:%s, received file:%s \033[0m" % (md5_sum,md5OfFile)) return {'status':'Error','Info': 'md5 of file:%s , md5 providd:%s, doesn\'t match.' % (md5OfFile,md5_sum)} - + def extract(tar_path, target_path): - try: - tar = tarfile.open(tar_path, "r") - file_names = tar.getnames() - for file_name in file_names: - tar.extract(file_name, target_path) - tar.close() - except Exception, e: - print "\033[0;32;40m extract Exception:%s %s\033[0m" % (Exception,e) - raise Exception, e + try: + tar = tarfile.open(tar_path, "r") + file_names = tar.getnames() + for file_name in file_names: + tar.extract(file_name, target_path) + tar.close() + except Exception, e: + #print "\033[0;32;40m extract Exception:%s %s\033[0m" % (Exception,e) + logger_func.warning("[extract]\033[1;33;40mExtract %s:%s,%s\033[0m" % (file_name,Exception,e)) + #raise Exception, e def deploy(filename): try: extract(filename,cur_file_dir()) except Exception,e: - print "\033[0;32;40m deploy Exception:%s %s\033[0m" % (Exception,e) - #pass - return {'status':'OK'} + #print "\033[0;32;40m deploy Exception:%s %s\033[0m" % (Exception,e) + logger_func.warning("[deploy]\033[1;33;40mDeploy %s:%s,%s\033[0m" % (filename,Exception,e)) + return {'status':'ERROR'} + else: + return {'status':'OK'} def parseArgs2Dict(cmd_line): args_array = cmd_line.split() args_hash = {} - for i in args_array: + for i in args_array: if i.startswith('-'): args_hash[i[1]] = i[2:] + else: + logger_func.warning("[parseArgs2Dict]\033[1;33;40msome para not start with '-':%s\033[0m" % (cmd_line,)) return args_hash def cur_file_dir(): - path = sys.path[0] - if os.path.isdir(path): - return path - elif os.path.isfile(path): - return os.path.dirname(path) + path = sys.path[0] + if os.path.isdir(path): + return path + elif os.path.isfile(path): + return os.path.dirname(path) def take_photo(filename,filedir,picResolutionV,picResolutionH,cameraReviewed,hottime): try: camera = picamera.PiCamera() #print pic except Exception,e: - #log sth - #camera.close() - print "\033[0;32;40mError from take_photo: %s, %s \033[0m" % (Exception,e) + #print "\033[0;32;40mError from take_photo: %s, %s \033[0m" % (Exception,e) + logger_func.error("[take_photo]\033[0;31;40mCannot Init Picamera:%s,%s\033[0m" % (Exception,e)) return False else: camera.resolution = (picResolutionH,picResolutionV) @@ -191,32 +204,51 @@ def take_photo(filename,filedir,picResolutionV,picResolutionH,cameraReviewed,hot else: camera.capture('%s/%s/%s' % (cur_file_dir(),filedir,filename,)) camera.close() + logger_func.info("[take_photo]Capture succ") return True def send_photo(filename,filedir,ip,port,bsid,bcid,now): pic = open('%s/%s/%s' % (cur_file_dir(),filedir,filename)) url_path = 'http://%s:%s/photo/%s?bracelets=%s&time=%s' % (ip,port,bsid,bcid,now) - print "\033[1;31;40mURL:%s\033[0m" % (url_path,) + #print "\033[1;31;40mURL:%s\033[0m" % (url_path,) + logger_func.debug("[send_photo]URL:\033[1;32;40m%s\033[0m" % (url_path,)) res = requests.post(url = url_path, data=pic, headers={'Content-Type': 'image/jpeg'}) - print "\033[1;31;40m%s \033[0m " % (res,) - print "\033[1;31;40m%s \033[0m " % (res.status_code,) + #print "\033[1;31;40m%s \033[0m " % (res,) + #print "\033[1;31;40m%s \033[0m " % (res.status_code,) if res.status_code == 200 : os.remove('%s/%s/%s' % (cur_file_dir(),filedir,filename)) + logger_func.info("[send_photo]Send photo succ,status_code:%s" % (res.status_code,)) + logger_func.debug("[send_photo]send photo suc, res:%s" % (res,)) return True + else: + logger_func.error("[send_photo]\033[1;31;40mFailed to send photo %s:%s\033[0m" % (filename,res)) + return False def send_photo_url(filename,filedir,url,now): - pic = open('%s/%s/%s' % (cur_file_dir(),filedir,filename)) + logger_func.info("[send_photo_url]begin in send_photo_url") + try: + pic = open('%s/%s/%s' % (cur_file_dir(),filedir,filename)) + except Exception,e: + logger_func.error("[send_photo_url]\033[1;31;40mCannot open file %s/%s/%s:%s,%s\033[0m" % (cur_file_dir(),filedir,filename,Exception,e)) + return False url_path ="%s%s" % (url,now) - print "\033[1;31;40mURL:%s\033[0m" % (url_path,) - res = requests.post(url = url_path, - data=pic, - headers={'Content-Type': 'image/jpeg'}) - print "\033[1;31;40m%s \033[0m " % (res,) - print "\033[1;31;40m%s \033[0m " % (res.status_code,) + #print "\033[1;31;40mURL:%s\033[0m" % (url_path,) + logger_func.debug("[send_photo_url]URL received:\033[1;32;40m%s\033[0m" % (url_path,)) + try: + res = requests.post(url = url_path, data=pic, headers={'Content-Type': 'image/jpeg'}) + except Exception,e: + logger_func.error("[send_photo_url]\033[1;31;40mPost Exception:%s,%s\033[0m" % (Exception,e)) + #print "\033[1;31;40m%s \033[0m " % (res,) + #print "\033[1;31;40m%s \033[0m " % (res.status_code,) if res.status_code == 200 : os.remove('%s/%s/%s' % (cur_file_dir(),filedir,filename)) + logger_func.info("[send_photo_url]Send photo succ,status_code:\033[1;32;40m%s\033[0m" % (res.status_code,)) + logger_func.debug("[send_photo_url]send photo suc, res:%s" % (res,)) return True + else: + logger_func.error("[send_photo_url]\033[1;31;40mFailed to send photo %s:%s\033[0m" % (filename,res)) + return False def get_cpu_temp(): tempFile = open( "/sys/class/thermal/thermal_zone0/temp" ) cpu_temp = tempFile.read() @@ -228,14 +260,16 @@ def get_gpu_temp(): return round(float(gpu_temp),1) def has_camera(): - try: - c = picamera.PiCamera() - except Exception,e: - print "\033[0;32;40m has_camera Exception:%s %s\033[0m" % (Exception,e) - return False - else: + try: + c = picamera.PiCamera() + except Exception,e: + #print "\033[0;32;40m has_camera Exception:%s %s\033[0m" % (Exception,e) + logger_func.debug("[has_camera]I didn't have a camera o~") + return False + else: c.close() - return True + logger_func.debug("[has_camera]I have a camera yeah~") + return True def getRAMinfo(): p = os.popen('free') @@ -248,6 +282,7 @@ def getRAMinfo(): b = line.split()[1:6] b.append(v.readline()) return b + def getCPUuse(): return(str(os.popen("top -n1 | awk '/Cpu\(s\):/ {print $2}'").readline().strip())) @@ -267,54 +302,54 @@ def osUptime(): return round(float(sec)/60.0,1) def get_system_info(): - heartbeatInfo = {} - CPU_usage = getCPUuse() - - RAM_stats = getRAMinfo() - RAM_total = round(int(RAM_stats[0]) / 1000,1) - RAM_used = round(int(RAM_stats[1]) / 1000 + int(RAM_stats[4])/1000,1) - RAM_free = round(int(RAM_stats[2]) / 1000,1) - RAM_bufcch = round(int(RAM_stats[4])/ 1000,1) - free_version = RAM_stats[5] - # Disk information - DISK_stats = getDiskSpace() - DISK_total = DISK_stats[0] - DISK_used = DISK_stats[1] - DISK_perc = DISK_stats[3] - - #stationID,scriptversion,mqtt listening - - #heartbeatInfo['ip'] = get_ip_address('wlan0') - #heartbeatInfo['mac'] = get_mac_address(':') + heartbeatInfo = {} + CPU_usage = getCPUuse() + + RAM_stats = getRAMinfo() + RAM_total = round(int(RAM_stats[0]) / 1000,1) + RAM_used = round(int(RAM_stats[1]) / 1000 + int(RAM_stats[4])/1000,1) + RAM_free = round(int(RAM_stats[2]) / 1000,1) + RAM_bufcch = round(int(RAM_stats[4])/ 1000,1) + free_version = RAM_stats[5] + # Disk information + DISK_stats = getDiskSpace() + DISK_total = DISK_stats[0] + DISK_used = DISK_stats[1] + DISK_perc = DISK_stats[3] + + #stationID,scriptversion,mqtt listening + + #heartbeatInfo['ip'] = get_ip_address('wlan0') + #heartbeatInfo['mac'] = get_mac_address(':') #heartbeatInfo['mac'] = get_mac_address(MacFilter,':') - temp = {} - heartbeatInfo['temp'] = temp - temp['cpu'] = str(get_cpu_temp()) - temp['gpu'] = str(get_gpu_temp()) - heartbeatInfo['timestamp'] = int(time.time()) - - heartbeatInfo['features'] = [] - #if has_camera(): - # heartbeatInfo['features'].append('camera') - #heartbeatInfo['hasCamera'] = str(has_camera()) - heartbeatInfo['cpu_load'] = "%s %s" % (CPU_usage,"%") - RamInfo = {} - heartbeatInfo['ram'] = RamInfo - RamInfo['total'] = "%s %s" % (str(RAM_total),'MB') - RamInfo['used'] = "%s %s" % (str(RAM_used),'MB') - RamInfo['free'] = "%s %s" % (str(RAM_free),'MB') - RamInfo['buffcache'] = "%s %s" % (str(RAM_bufcch),'MB') - RamInfo['used_perc'] = "%s %s" % (str(round(RAM_used/RAM_total*100,1)),'%') - DiskInfo = {} - heartbeatInfo['DiskInfo'] = DiskInfo - DiskInfo['DiskTotal'] = "%s%s" % (str(DISK_total),'B') - DiskInfo['DiskUsed'] = "%s%s" % (str(DISK_used),'B') - DiskInfo['DiskUsedPerc'] = str(DISK_perc) - #heartbeatInfo['os_uptime'] = "%s min" % (str(osUptime()),) - heartbeatInfo['os_uptime'] = "%s min" % (str(psutil.cpu_percent(interval=1)),) - - #print json.dumps(heartbeatInfo,indent=4) - return heartbeatInfo + temp = {} + heartbeatInfo['temp'] = temp + temp['cpu'] = str(get_cpu_temp()) + temp['gpu'] = str(get_gpu_temp()) + heartbeatInfo['timestamp'] = int(time.time()) + + heartbeatInfo['features'] = [] + #if has_camera(): + # heartbeatInfo['features'].append('camera') + #heartbeatInfo['hasCamera'] = str(has_camera()) + heartbeatInfo['cpu_load'] = "%s %s" % (CPU_usage,"%") + RamInfo = {} + heartbeatInfo['ram'] = RamInfo + RamInfo['total'] = "%s %s" % (str(RAM_total),'MB') + RamInfo['used'] = "%s %s" % (str(RAM_used),'MB') + RamInfo['free'] = "%s %s" % (str(RAM_free),'MB') + RamInfo['buffcache'] = "%s %s" % (str(RAM_bufcch),'MB') + RamInfo['used_perc'] = "%s %s" % (str(round(RAM_used/RAM_total*100,1)),'%') + DiskInfo = {} + heartbeatInfo['DiskInfo'] = DiskInfo + DiskInfo['DiskTotal'] = "%s%s" % (str(DISK_total),'B') + DiskInfo['DiskUsed'] = "%s%s" % (str(DISK_used),'B') + DiskInfo['DiskUsedPerc'] = str(DISK_perc) + #heartbeatInfo['os_uptime'] = "%s min" % (str(osUptime()),) + heartbeatInfo['os_uptime'] = "%s min" % (str(psutil.cpu_percent(interval=1)),) + + #print json.dumps(heartbeatInfo,indent=4) + return heartbeatInfo def write_conf(node,key,value): @@ -322,10 +357,12 @@ def write_conf(node,key,value): fh = open('t.cnf','w') conf.set(node,key,value) conf.write(fh) - except: + except Exception,e: #log sth + logger_func.error("[write_conf]\033[1;31;40mCannot write %s back as %s.%s for:%s,%s\033[0m" % (value,node,key,Exception,e)) return False else: + logger_func.debug("[write_conf]Write back %s as %s.%s Succ" % (value,node,key)) return True finally: fh.close() diff --git a/py/t.cnf b/py/t.cnf index 2c9cb8f..8c857da 100644 --- a/py/t.cnf +++ b/py/t.cnf @@ -1,7 +1,7 @@ [station] alias = pinky version = 1.0 -mac_filter = en +mac_filter = wl [queue] position_l = 10000 @@ -9,8 +9,8 @@ cmd_l = 100 call_l = 100 [MQTT] -#server = 10-8-47-94.local. -server = 192.168.1.135 +server = 10-8-47-94.local. +#server = 192.168.1.135 port = 1883 position_t = position cmd_t = ap @@ -53,4 +53,12 @@ upload_host = 10.8.47.29 upload_port = 9090 tmp_dir = jpeg - +[log] +console_format = \%(asctime)s [\%(levelname)s] [\%(filename)s:\%(lineno)d \%(name)s] - \%(message)s +file_format = \%(asctime)s [\%(levelname)s] [\%(filename)s:\%(lineno)d \%(name)s] - \%(message)s [\%(process)d,\%(thread)d:\%(threadName)s]' +log_suffix = '%Y-%m-%d.log' +log_extMatch_string = r"^\d{4}-\d{2}-\d{2}.log$" +log_name = demo +file_handler_when = D +file_handler_interval = 1 +file_handler_backupcount = 7 diff --git a/py/var.py b/py/var.py index 580cbb3..e0a795f 100644 --- a/py/var.py +++ b/py/var.py @@ -2,17 +2,27 @@ import ConfigParser import os,sys from func import cur_file_dir -#def cur_file_dir(): -# path = sys.path[0] -# if os.path.isdir(path): -# return path -# elif os.path.isfile(path): -# return os.path.dirname(path) +import logging + + conf = ConfigParser.ConfigParser() conf.read('%s/%s'% (cur_file_dir(),'t.cnf')) + +##############################3 +# +# station +# +############################### version = round(float(conf.get('station','version')),1) MacFilter = conf.get('station','mac_filter') +stationAlias=conf.get('station','alias') + +############################### +# +# MQTT +# +############################### POSITIONTITLE = conf.get("MQTT","position_t") CMDTITLE = conf.get("MQTT","cmd_t") CALLTITLE = conf.get("MQTT","call_t") @@ -22,15 +32,18 @@ PositionQueueLength = int(conf.get("queue",'position_l')) CommandQueueLength = int(conf.get("queue",'cmd_l')) CallQueueLength = int(conf.get("queue","call_l")) -#global MQTTserver -#global MQTTPort MQTTServer = conf.get('MQTT','server') if conf.has_option('MQTT','port'): MQTTPort = int(conf.get('MQTT','port')) else: MQTTPort = 1883 -stationAlias=conf.get('station','alias') + +############################### +# +# time +# +############################### mqttClientKeepAliveTime = int(conf.get('time','thread_mqtt_keepalive_time')) mqttClientLoopSleepTime = float(conf.get('time','thread_mqtt_loop_sleeptime')) mqttClientLoopTimeout = float(conf.get('time','thread_mqtt_loop_timeout')) @@ -38,12 +51,42 @@ cmdSleepTime = float(conf.get('time','thread_cmd_sleep_time')) positionSenderSleeptime = float(conf.get('time','thread_mqtt_sender_position_sleeptime')) scannerScanTime = float(conf.get('time','main_scanner_scantime')) + + + +############################### +# +# BLE +# +############################### callFlag= conf.get('BLE','call_manufacturer_flag') braceletFlag= conf.get('BLE','bracetlet_flag') outbodyFlag = conf.get('BLE','outbody_manufacturer_flag') positionFlag= conf.get('BLE','position_manufacturer_flag') + + + +############################### +# +# SOCKET +# +############################### socketHost = conf.get('SOCKET','host') socketPort = int(conf.get('SOCKET','port')) + + + + +############################### +# +# camera +# +############################### +picUploadDir = conf.get('camera','tmp_dir') +hottime = float(conf.get('camera','hottime')) +picUploadServer = conf.get('camera','upload_host') +picUploadPort = conf.get('camera','upload_port') + if conf.has_option('camera','resolution_h'): picResolutionH = int(conf.get('camera','resolution_h')) else: @@ -52,11 +95,22 @@ picResolutionV = int(conf.get('camera','resolution_v')) else: picResolutionH = 1200 -print "H:%s, %s ; V:%s, %s" % (picResolutionH,type(picResolutionH),picResolutionV,type(picResolutionV)) -picUploadServer = conf.get('camera','upload_host') -picUploadPort = conf.get('camera','upload_port') -picUploadDir = conf.get('camera','tmp_dir') -hottime = float(conf.get('camera','hottime')) + +############################### +# +# log +# +############################### +#console_format = conf.get('log','console_format') +#file_format = conf.get('log','console_format') +log_suffix = conf.get('log','log_suffix') +log_exMatch_string = conf.get('log','log_extMatch_string') +log_name = conf.get('log','log_name') +file_handler_when = conf.get('log','file_handler_when') +file_handler_interval = int(conf.get('log','file_handler_interval')) +file_handler_backupcount = int(conf.get('log','file_handler_backupcount')) + + #def write_conf(node,key,value): # try: # fh = open('t.cnf','w')