File manager - Edit - /home/wwwroot/camplus.hk/master.camplus.hk/public_html/loraTest3.py
Back
#!/usr/bin/python from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer from os import curdir, sep import cgi import math import time import array import Queue import copy import RPi.GPIO as GPIO from time import sleep from loraHelper_SW import loraHelper_SW #from WSHelper import WSHelper from threading import Thread import threading import errno PORT_NUMBER = 8080 import sys,getopt import socket import select import os import fcntl from subprocess import call from cardMysql import cardMysql from ipHelper import ipHelper from lcdHelper import lcdHelper from datetime import datetime, timedelta from dateutil import tz #This class will handles any incoming request from #the browser running=True mLORA_R=None mLORA_T=None outStr="" sendReq=False sendBinReq=False binOut=None from setTime import timeChanger import json from pprint import pprint cardDB=None devID=-1 devRole="server" devTxCh=0 devRxCh=0 spreadFactor=2 bandWidth=5 rfPower=0 tc=timeChanger() outLen=0 outBuffer=[0]*1024 inLen=0 inBuffer=[0]*1024 msg_dest=0 msg_src=0 sentAck=False getAck=False ackID=0 binQueue = Queue.Queue() binSrcQueue=Queue.Queue() binDestQueue=Queue.Queue() strQueue = Queue.Queue() strSrcQueue=Queue.Queue() strDestQueue=Queue.Queue() binQueue2 = Queue.Queue() binSrcQueue2=Queue.Queue() binDestQueue2=Queue.Queue() strQueue2 = Queue.Queue() strSrcQueue2=Queue.Queue() strDestQueue2=Queue.Queue() rxQueue = Queue.Queue() rxBinSrcQueue=Queue.Queue() rxBinDestQueue=Queue.Queue() sock=None doorState=0 changeReq=False updateRSSI=False rssi=0 ackRSSI=0 HWPort="eth0" ipH=None tmpMAC=[0]*6 testMode=False openDoor=False mUDPComm=None server=None downTimeCount=0 class udpComm(): def __init__(self,_port): print('Initializing udp comm') self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.sock.bind(('0.0.0.0', _port)) fcntl.fcntl(self.sock, fcntl.F_SETFL, os.O_NONBLOCK) self.clients_list = [] def talkToClient(self, ip): print("Sending 'ok' to %s", ip) self.sock.sendto("ok", ip) def sendMsgThread(self, _ip,_port,_msg): print("Sending to ",(_ip,_port)) self.sock.sendto(_msg, (_ip,_port)) def sendMsg(self, _ip,_port,_msg): t = threading.Thread(target=self.sendMsgThread, args=(_ip,_port,_msg,)) t.start() def listen_clients(self): while running: try: msg, client = self.sock.recvfrom(1024) #print('Received data from client %s: %s', client, msg) if(msg.startswith("cardReader:")): cmd=msg[11:] #print(cmd) if(cmd=="doorOpen"): global doorState doorState=0 if(cmd=="doorClose"): global doorState doorState=1 #t = threading.Thread(target=self.talkToClient, args=(client,)) #t.start() sleep(0.2) except socket.error, e: err = e.args[0] if err == errno.EAGAIN or err == errno.EWOULDBLOCK: sleep(0.2) #print 'No data available' continue else: # a "real" error occurred print (e) #sys.exit(1) def run_udp_comm(): global mUDPComm mUDPComm=udpComm(9009) mUDPComm.listen_clients() class rxLoraPacket: src=0 dest=0 data=[] dataLen=0 packetLen=0 packetSize=0 def __init__(self,_src,_dest,_data,_len,_size): self.src=_src self.dest=_dest self.dataLen=_len self.packetSize=_size self.data=_data[:] class loraPacket: src=0 dest=0 data="" dataLen=0 packetLen=0 def __init__(self,_src,_dest): self.src=_src self.dest=_dest def setData(self,_data): self.data=_data[:]#copy the list self.dataLen=len(_data) self.packetLen=len(_data)+6 def xorChecksum(self,mData): checksum=0 for el in mData: checksum ^= el print checksum, hex(checksum) return checksum def makePacket(self): outBytes=[0]*self.packetLen destL=int(self.dest%256) destH=int(self.dest/256) outBytes[0]=destH outBytes[1]=destL srcL=int(self.src%256) srcH=int(self.src/256) outBytes[2]=srcH outBytes[3]=srcL outBytes[4]=self.dataLen for i in range(0,self.dataLen): outBytes[i+5]=self.data[i] checksum=self.xorChecksum(outBytes) outBytes[self.packetLen-1]=checksum return outBytes def stringToBytes(self,string): strBytes=[ord(c) for c in string] return strBytes def send(self,mLORA): bytes=self.makePacket() ret=mLORA.sx1276_7_8_LoraTxBin(bytes,self.packetLen) if(ret==1): global changeReq changeReq=True else: global downTimeCount downTimeCount=0 def sendString(self,mLORA,string): dataBytes=[ord('s')]+self.stringToBytes(string) self.setData(dataBytes) ret=mLORA.sx1276_7_8_LoraTxBin(self.makePacket(),self.packetLen) if(ret==1): global changeReq changeReq=True else: global downTimeCount downTimeCount=0 def sendBin(self,mLORA,binData): strBytes=[ord('b')]+binData self.setData(strBytes) ret=mLORA.sx1276_7_8_LoraTxBin(self.makePacket(),self.packetLen) if(ret==1): global changeReq changeReq=True else: global downTimeCount downTimeCount=0 def checkDoorLock(): global doorState doorState1=GPIO.input(15) if(doorState1!=doorState): doorState=doorState1 print("doorState=%d"%doorState) class myHandler(BaseHTTPRequestHandler): #mLORA=0 #Handler for the GET requests def do_GET(self): global devRole if self.path=="/": myForm=""" TX Channel:"""+str(devTxCh)+"""<br/> RX Channel:"""+str(devRxCh)+"""<br/> Device ID :"""+str(devID)+"""<br/> <form action="sendB" method="post"> src: <input type="text" name="src" value='"""+str(devID)+"""'><br> dest: <input type="text" name="dest" value="2"><br> msg: <input type="text" name="msg"><br> <input type="submit" value="Submit"> </form> """ mimetype='text/html' self.send_response(200) self.send_header('Content-type',mimetype) self.end_headers() self.wfile.write("<br/>%s<br/>" % myForm) return if(self.path=="/resetLORA"): tmpDevID=0 tmpTxCh=1 tmpRxCh=0 global mLORA_T global mLORA_R changeDeviceID(tmpDevID) changeRxChannel(tmpRxCh) changeTxChannel(tmpTxCh) global changeReq global devRole changeReq=True mimetype='text/html' self.send_response(200) self.send_header('Content-type',mimetype) self.end_headers() self.wfile.write("set device ID to 0x00<br/>TX channel:1<br/>RX channel:0") return if self.path=="/door_open": global doorState doorState=0 mimetype='text/html' self.send_response(200) self.send_header('Content-type',mimetype) self.end_headers() self.wfile.write("<br/>opened<br/>") return if self.path=="/door_close": global doorState doorState=1 mimetype='text/html' self.send_response(200) self.send_header('Content-type',mimetype) self.end_headers() self.wfile.write("<br/>closed<br/>") return if self.path=="/checkDoor": global openDoor mimetype='text/html' self.send_response(200) self.send_header('Content-type',mimetype) self.end_headers() if(doorState==0): self.wfile.write("open") else: self.wfile.write("close") openDoor=False return if self.path=="/open_door": global openDoor mimetype='text/html' self.send_response(200) self.send_header('Content-type',mimetype) self.end_headers() self.wfile.write("open") mUDPComm.sendMsg('127.0.0.1',9008,'openDoor') openDoor=True return if self.path=="/sendB": myForm=""" TX Channel:"""+str(devTxCh)+"""<br/> RX Channel:"""+str(devRxCh)+"""<br/> Device ID :"""+str(devID)+"""<br/> <form action="sendB" method="post"> src: <input type="text" name="src" value='"""+str(devID)+"""'><br> dest: <input type="text" name="dest" value="2"><br> msg: <input type="text" name="msg"><br> <input type="submit" value="Submit"> </form> """ mimetype='text/html' self.send_response(200) self.send_header('Content-type',mimetype) self.end_headers() self.wfile.write("<br/>%s<br/>" % myForm) return if self.path=="/doorCheck": global openDoor mimetype='text/html' self.send_response(200) self.send_header('Content-type',mimetype) self.end_headers() if(openDoor): self.wfile.write("open") else: self.wfile.write("close") #openDoor=False return if self.path=="/testMode": myForm=""" entering test mode<br/> tx:"""+str(devTxCh)+""",rx:"""+str(devRxCh)+""" <br/>src:1,dest:2""" global testMode testMode=True mimetype='text/html' self.send_response(200) self.send_header('Content-type',mimetype) self.end_headers() self.wfile.write("<br/>%s<br/>" % myForm) return if self.path=="/exitTestMode": myForm="""exiting test mode<br/>""" global testMode testMode=False mimetype='text/html' self.send_response(200) self.send_header('Content-type',mimetype) self.end_headers() self.wfile.write("<br/>%s<br/>" % myForm) return try: #Check the file extension required and #set the right mime type sendReply = False if self.path.endswith(".html"): mimetype='text/html' sendReply = True if self.path.endswith(".jpg"): mimetype='image/jpg' sendReply = True if self.path.endswith(".gif"): mimetype='image/gif' sendReply = True if self.path.endswith(".js"): mimetype='application/javascript' sendReply = True if self.path.endswith(".css"): mimetype='text/css' sendReply = True if sendReply == True: #Open the static file requested and send it f = open(curdir + sep + self.path) self.send_response(200) self.send_header('Content-type',mimetype) self.end_headers() self.wfile.write(f.read()) f.close() return except IOError: self.send_error(404,'File Not Found: %s' % self.path) #Handler for the POST requests def do_POST(self): global devRole if self.path=="/sendB": form = cgi.FieldStorage( fp=self.rfile, headers=self.headers, environ={'REQUEST_METHOD':'POST', 'CONTENT_TYPE':self.headers['Content-Type'], }) mimetype='text/html' self.send_response(200) self.send_header('Content-type',mimetype) self.end_headers() try: print "msg: %s" % form["msg"].value self.wfile.write("src:%s<br/>" % form["dest"].value) self.wfile.write("dest:%s<br/>" % form["src"].value) self.wfile.write("msg:%s<br/>" % form["msg"].value) global msg_src global msg_dest msg_src=int(form["src"].value) msg_dest=int(form["dest"].value) msg=form["msg"].value global sendBinReq global changeReq if(msg.startswith('localCmd:')): cmdArr=msg[9:].split(",") print(cmdArr) call(cmdArr) elif(msg=='door state'): #msg_src=devID #msg_dest=msg_dest strSrcQueue.put(msg_src) strDestQueue.put(msg_dest) strQueue.put("door state,"+devRole) elif(msg.startswith('addCard')): print("addCard") try: msgArr=msg.split(",") cardNo=int(msgArr[1]) numGroups=int(msgArr[2]) groupsArr=[] for i in range(numGroups): groupID=int(msgArr[3+i]) groupsArr+=[groupID] packet=makeAddCardPacket(cardNo,groupsArr) binSrcQueue.put(msg_src) binDestQueue.put(msg_dest) binQueue.put(packet) #sendBinReq=True except Exception, e: print(str(e)) elif(msg.startswith('delCardRecord')): try: msgArr=msg.split(",") startTime=datetime.strptime(msgArr[1],'%Y-%m-%d %H:%M:%S') endTime=datetime.strptime(msgArr[2],'%Y-%m-%d %H:%M:%S') packet=makeDelCardRecordPacket(startTime,endTime) binSrcQueue.put(msg_src) binDestQueue.put(msg_dest) binQueue.put(packet) #global sendBinReq #sendBinReq=True #cardRecords=cardDB.getCardRecord(startTime.strftime('%Y-%m-%d %H:%M:%S'),endTime.strftime('%Y-%m-%d %H:%M:%S')) #for rec in cardRecords: # print(rec[1].strftime('%Y-%m-%d %H:%M:%S')+"---"+str(rec[0])) except Exception, e: print(str(e)) elif(msg=='delAllCardRecord'): try: packet=makeDelAllCardRecordPacket() binSrcQueue.put(msg_src) binDestQueue.put(msg_dest) binQueue.put(packet) #global sendBinReq #sendBinReq=True #cardRecords=cardDB.getCardRecord(startTime.strftime('%Y-%m-%d %H:%M:%S'),endTime.strftime('%Y-%m-%d %H:%M:%S')) #for rec in cardRecords: # print(rec[1].strftime('%Y-%m-%d %H:%M:%S')+"---"+str(rec[0])) except Exception, e: print(str(e)) elif(msg.startswith('removeCard') or msg.startswith('delCard')): print("removeCard") try: msgArr=msg.split(",") cardNo=int(msgArr[1]) packet=makeRemoveCardPacket(cardNo) binSrcQueue.put(msg_src) binDestQueue.put(msg_dest) binQueue.put(packet) #sendBinReq=True except Exception, e: print(str(e)) elif(msg.startswith('addTimeGroup') or msg.startswith('addTime')): try: msgArr=msg.split(",") groupID=int(msgArr[1]) startHour=int(msgArr[2]) startMin=int(msgArr[3]) endHour=int(msgArr[4]) endMin=int(msgArr[5]) startTime=datetime.time(startHour,startMin) endTime=datetime.time(endHour,endMin) packet=makeAddTimePacket(groupID,startTime,endTime) binSrcQueue.put(msg_src) binDestQueue.put(msg_dest) binQueue.put(packet) #sendBinReq=True except Exception, e: print(str(e)) elif(msg.startswith('removeTimeGroup') or msg.startswith('delTime')): try: msgArr=msg.split(",") groupID=int(msgArr[1]) packet=makeRemoveTimePacket(groupID) binSrcQueue.put(msg_src) binDestQueue.put(msg_dest) binQueue.put(packet) #sendBinReq=True except Exception, e: print(str(e)) elif(msg.startswith('addWLCard') or msg.startswith('addWhitelistCard')): try: msgArr=msg.split(",") groupID=int(msgArr[1]) packet=makeAddWLCardPacket(groupID) #sendBinReq=True binSrcQueue2.put(msg_src) binDestQueue2.put(msg_dest) binQueue2.put(packet) except Exception, e: print(str(e)) elif(msg.startswith('delWLCard') or msg.startswith('delWhitelistCard')): try: msgArr=msg.split(",") groupID=int(msgArr[1]) packet=makeDelWLCardPacket(groupID) binSrcQueue2.put(msg_src) binDestQueue2.put(msg_dest) binQueue2.put(packet) #sendBinReq=True #sendBinReq=True except Exception, e: print(str(e)) elif(msg.startswith('getCardRecord')): try: msgArr=msg.split(",") startTime=datetime.strptime(msgArr[1],'%Y-%m-%d %H:%M:%S') endTime=datetime.strptime(msgArr[2],'%Y-%m-%d %H:%M:%S') packet=makeGetCardRecordPacket(startTime,endTime) binSrcQueue.put(msg_src) binDestQueue.put(msg_dest) binQueue.put(packet) print("get records") print(startTime) print(endTime) #global sendBinReq #sendBinReq=True #cardRecords=cardDB.getCardRecord(startTime.strftime('%Y-%m-%d %H:%M:%S'),endTime.strftime('%Y-%m-%d %H:%M:%S')) #for rec in cardRecords: # print(rec[1].strftime('%Y-%m-%d %H:%M:%S')+"---"+str(rec[0])) except Exception, e: print(str(e)) elif(msg==('getAllCardRecord')): try: packet=makeGetAllCardRecordPacket() binSrcQueue.put(msg_src) binDestQueue.put(msg_dest) binQueue.put(packet) print("get records") print(startTime) print(endTime) #global sendBinReq #sendBinReq=True #cardRecords=cardDB.getCardRecord(startTime.strftime('%Y-%m-%d %H:%M:%S'),endTime.strftime('%Y-%m-%d %H:%M:%S')) #for rec in cardRecords: # print(rec[1].strftime('%Y-%m-%d %H:%M:%S')+"---"+str(rec[0])) except Exception, e: print(str(e)) elif(msg=="syncTime"): try: packet=makeSyncTimePacket(tc.getCurrentTimeObj()) #sendBinReq=True binSrcQueue.put(msg_src) binDestQueue.put(msg_dest) binQueue.put(packet) except Exception, e: print(str(e)) elif(msg.startswith("setDev,")): msgArr=msg.split(",") tmpDevID=int(msgArr[1]) tmpTxCh=int(msgArr[2]) tmpRxCh=int(msgArr[3]) global mLORA_T global mLORA_R changeDeviceID(tmpDevID) changeRxChannel(tmpRxCh) changeTxChannel(tmpTxCh) if(len(msgArr)>4): devRole=msgArr[4] if(len(msgArr)>7): global rfPower global spreadFactor global bandWidth rfPower=int(msgArr[5]) spreadFactor=int(msgArr[6]) bandWidth=int(msgArr[7]) print("rfPower:"+str(rfPower)) print("spreadFactor:"+str(spreadFactor)) print("bandWidth:"+str(bandWidth)) changeReq=True elif(msg.startswith("setRemoteDev,")): msgArr=msg.split(",") tmpDevID=int(msgArr[1]) tmpTxCh=int(msgArr[2]) tmpRxCh=int(msgArr[3]) if(len(msgArr)>6): tmpRfPower=int(msgArr[4]) tmpSpreadFactor=int(msgArr[5]) tmpBandWidth=int(msgArr[6]) packet=makeSetDevPacket_PSW(tmpDevID,tmpTxCh,tmpRxCh,tmpRfPower,tmpSpreadFactor,tmpBandWidth) else: packet=makeSetDevPacket(tmpDevID,tmpTxCh,tmpRxCh) binSrcQueue.put(msg_src) binDestQueue.put(msg_dest) binQueue.put(packet) elif(msg.startswith("setRemoteRole,")): msgArr=msg.split(",") tmpDevRole=int(msgArr[1]) packet=makeSetRolePacket(tmpDevRole) strSrcQueue.put(msg_src) strDestQueue.put(msg_dest) strQueue.put(packet) elif(msg.startswith("setMACDev,")): msgArr=msg.split(",") tmpDevID=int(msgArr[1]) tmpTxCh=int(msgArr[2]) tmpRxCh=int(msgArr[3]) packet=makeSetDevMacPacket(tmpMAC,tmpDevID,tmpTxCh,tmpRxCh) binSrcQueue.put(msg_src) binDestQueue.put(msg_dest) binQueue.put(packet) elif(msg==("saveRemoteDev")): makeSaveDevPacket() binSrcQueue.put(msg_src) binDestQueue.put(msg_dest) binQueue.put(packet) elif(msg=="save"): saveChange() elif(msg=="closeMe"): global running running=False global server server.socket.close() elif(msg=="initMe"): global changeReq changeReq=True else: #global sendReq #global outStr #msg_src=devID #msg_dest=msg_dest strSrcQueue.put(msg_src) strDestQueue.put(msg_dest) strQueue.put(msg) outStr=msg #sendReq=True except Exception, e: print(str(e)) myForm=""" TX Channel:"""+str(devTxCh)+"""<br/> RX Channel:"""+str(devRxCh)+"""<br/> Device ID :"""+str(devID)+"""<br/> <form action="sendB" method="post"> src: <input type="text" name="src" value='"""+str(devID)+"""'><br> dest: <input type="text" name="dest" value="2"><br> msg: <input type="text" name="msg"><br> <input type="submit" value="Submit"> </form> """ self.wfile.write("<br/>%s<br/>" % myForm) #self.mLORA.sx1276_7_8_LosaTxString(msg) return if self.path=="/send": form = cgi.FieldStorage( fp=self.rfile, headers=self.headers, environ={'REQUEST_METHOD':'POST', 'CONTENT_TYPE':self.headers['Content-Type'], }) mimetype='text/html' #print "msg: %s" % form["msg"].value self.send_response(200) self.send_header('Content-type',mimetype) self.end_headers() myForm=""" <form action="send" method="post"> msg: <input type="text" name="msg"><br> <input type="submit" value="Submit"> </form> """ self.wfile.write("msg:%s<br/>" % form["msg"].value) self.wfile.write("<br/>%s<br/>" % myForm) msg=form["msg"].value print("received message=%s"%msg) global sendReq global outStr outStr=msg sendReq=True #self.mLORA.sx1276_7_8_LosaTxString(msg) return def processPacket(): global running global sendBinReq global binQueue global changeReq global rxQueue if(not rxQueue.empty()): RxPacket=rxQueue.get() RxData=RxPacket.data RxAddr=RxPacket.dest TxAddr=RxPacket.src print("RXaddr:"+str(RxAddr)) print("TXaddr:"+str(TxAddr)) dataLen=RxPacket.dataLen dataBin=RxData packetSize=RxPacket.packetSize if(RxAddr==0xffff or RxAddr==devID ): myData=dataBin[6:] print("procressing packet") if(dataBin[5]==ord('s')): tmpStr=array.array('B',myData).tostring() RxStr=tmpStr[:packetSize] if(RxStr.startswith("time")): changeTime(dataStr) else: readRXData(RxStr,True,TxAddr,RxAddr) if(dataBin[5]==ord('b')): readRXData(myData,False,TxAddr,RxAddr) else: print("discard packet") def recrivePacket(): #global ws GPIO.setup(22,GPIO.OUT) #GPIO.setup(24,GPIO.OUT) global running global sendBinReq global binQueue global changeReq global rxQueue global downTimeCount while(running): #checkDoorLock() while(not rxQueue.empty()): processPacket() try: if(changeReq): initLORA() changeReq=False if(sendReq): print("-EMITTING PACKET-") print("generate xor checksum") checksum=checksumStr(outStr) csStr='{:02X}'.format(checksum) #packetStr=outStr+csStr #mLORA_T.sx1276_7_8_LosaTxString(packetStr) mPacket=loraPacket(msg_src,msg_dest) mPacket.sendString(mLORA_T,outStr) global sendReq sendReq=False mLORA_T.sx1276_7_8_LoRaSetRxPtr(0) mLORA_T.sx1276_7_8_LoRaSetTxPtr(128) print("-END-") if(not strQueue2.empty()): print("-EMITTING PACKET-") packetStr=strQueue.get() print(packetStr) print("generate xor checksum") checksum=checksumStr(packetStr) csStr='{:02X}'.format(checksum) mPacket=loraPacket(strSrcQueue2.get(),strDestQueue2.get()) mPacket.sendString(mLORA_T,packetStr) mLORA_T.sx1276_7_8_LoRaSetRxPtr(0) mLORA_T.sx1276_7_8_LoRaSetTxPtr(128) time.sleep(2) print("-END-") elif(not binQueue2.empty()): print("-EMITTING PACKET-") print("generate xor checksum") packet=binQueue.get() checksum=checksumBin(packet) csStr='{:02X}'.format(checksum) #mLORA_T.sx1276_7_8_LosaTxString(packetStr) mPacket=loraPacket(binSrcQueue2.get(),binDestQueue2.get()) mPacket.sendBin(mLORA_T,packet) mLORA_T.sx1276_7_8_LoRaSetRxPtr(0) mLORA_T.sx1276_7_8_LoRaSetTxPtr(128) time.sleep(2) print("-END-") elif(not strQueue.empty()): print("-EMITTING PACKET-") packetStr=strQueue.get() print(packetStr) print("generate xor checksum") checksum=checksumStr(packetStr) csStr='{:02X}'.format(checksum) mPacket=loraPacket(strSrcQueue.get(),strDestQueue.get()) mPacket.sendString(mLORA_T,packetStr) mLORA_T.sx1276_7_8_LoRaSetRxPtr(0) mLORA_T.sx1276_7_8_LoRaSetTxPtr(128) print("-END-") elif(not binQueue.empty()): print("-EMITTING PACKET-") print("generate xor checksum") packet=binQueue.get() checksum=checksumBin(packet) csStr='{:02X}'.format(checksum) #mLORA_T.sx1276_7_8_LosaTxString(packetStr) mPacket=loraPacket(binSrcQueue.get(),binDestQueue.get()) mPacket.sendBin(mLORA_T,packet) mLORA_T.sx1276_7_8_LoRaSetRxPtr(0) mLORA_T.sx1276_7_8_LoRaSetTxPtr(128) print("-END-") if(sendBinReq): print("-EMITTING BIN PACKET-") print("generate xor checksum") print(binOut) checksum=checksumBin(binOut) csStr='{:02X}'.format(checksum) mPacket=loraPacket(msg_src,msg_dest) mPacket.sendBin(mLORA_T,binOut) global sendBinReq sendBinReq=False mLORA_T.sx1276_7_8_LoRaSetRxPtr(0) mLORA_T.sx1276_7_8_LoRaSetTxPtr(128) print("-END-") if(testMode and binQueue.empty() and strQueue.empty()): print("-EMITTING PACKET-") print("generate xor checksum") testStr="test" checksum=checksumStr(testStr) csStr='{:02X}'.format(checksum) #packetStr=outStr+csStr #mLORA_T.sx1276_7_8_LosaTxString(packetStr) mPacket=loraPacket(1,2) mPacket.sendString(mLORA_T,testStr) mLORA_T.sx1276_7_8_LoRaSetRxPtr(0) mLORA_T.sx1276_7_8_LoRaSetTxPtr(128) print("-END-") #recvUDP() packetSize=mLORA_R.sx1276_7_8_LoRaRxPacketBin() if (packetSize>0): downTimeCount=0 print("-RECEIVING PACKET-") global rssi global updateRSSI tmpRssi=mLORA_R.sx1276_7_8_LoRaReadRSSI() print("RSSI:"+str(rssi)) print("Get data.") try: #ws.sendStr(mLORA_R.RxStr) RxData=mLORA_R.RxData print("packetSize:"+str(packetSize)) checksum = RxData[packetSize-1] dataBin=RxData[:packetSize-1] print("dataBin:") for b in dataBin: print(format(b,'02x')), print(";") checksum1=checksumBin(dataBin) print("checksum:"+str(checksum)+","+str(checksum1)) if(checksum==checksum1): print("checksum is correct") #print ("received:",RxStr) RxAddr=RxData[0]*256+RxData[1] TxAddr=RxData[2]*256+RxData[3] print("RXaddr:"+str(RxAddr)) print("TXaddr:"+str(TxAddr)) dataLen=RxData[4] global ackID if(TxAddr!=devID): updateRSSI=True rssi=tmpRssi ackID=TxAddr if(devRole=='server'): mUDPComm.sendMsg('127.0.0.1',9007,"dev:RSSI,"+str(ackID)+","+str(rssi)) if((RxAddr==0xffff or RxAddr==devID) and TxAddr!=devID): rxPacket=rxLoraPacket(TxAddr,RxAddr,dataBin,dataLen,packetSize) rxQueue.put(rxPacket) '''myData=dataBin[6:] print("procressing packet") if(dataBin[5]==ord('s')): tmpStr=array.array('B',myData).tostring() RxStr=tmpStr[:packetSize] if(RxStr.startswith("time")): changeTime(dataStr) else: readRXData(RxStr,True,TxAddr,RxAddr) if(dataBin[5]==ord('b')): readRXData(myData,False,TxAddr,RxAddr) ''' else: print("discard packet") else: print("checksum is WRONG") except Exception, e: print(str(e)) mLORA_R.sx1276_7_8_LoRaSetRxPtr(0) mLORA_R.sx1276_7_8_LoRaSetTxPtr(128) #mLORA_R.sx1276_7_8_LoRaEntryRx() print("-END-") #time.sleep(0.05) #GPIO.output(24,True) #time.sleep(0.05) #GPIO.output(24,False) else: # print("waiting packet") time.sleep(0.05) #GPIO.output(24,True) GPIO.output(22,False) time.sleep(0.05) #GPIO.output(24,False) GPIO.output(22,True) except KeyboardInterrupt: print '^C received, shutting down the web server' #server.socket.close() #ws.running=False running=False #server.socket.close() def sendStrPacket(dest,data): outData=[ord(c) for c in data] dataLen=len(outData) checksum=checksumStr(data) outBuffer[0]=devID outBuffer[1]=dest for i in range(dataLen): outBuffer[i+2]=outData[i] outBuffer[dataLen+2]=checksum def makeGetMacAddrPacket(): return [0x24] def makeMacAddrPacket(port): return [0x25]+ipH.getHwAddrArr(port) def makeSetDevPacket(_devID,_txCh,_rxCh): devIDBytes=[_devID >> i & 0xff for i in (8,0)] global binOut binOut=[0x20]+devIDBytes+[_txCh]+[_rxCh] print(binOut) dataRet=[0x20]+devIDBytes+[_txCh]+[_rxCh] return dataRet def makeSetDevPacket_PSW(_devID,_txCh,_rxCh,_p,_s,_w): devIDBytes=[_devID >> i & 0xff for i in (8,0)] global binOut binOut=[0x2f]+devIDBytes+[_txCh]+[_rxCh]+[_p]+[_s]+[_w] print(binOut) dataRet=[0x2f]+devIDBytes+[_txCh]+[_rxCh]+[_p]+[_s]+[_w] return dataRet def makeSetRolePacket(_devRole): dataStr="setRole,"+_devRole return dataStr def makeSetDevMacPacket(_devMac,_devID,_txCh,_rxCh): devIDBytes=[_devID >> i & 0xff for i in (8,0)] global binOut binOut=[0x22]+_devMac+devIDBytes+[_txCh]+[_rxCh] print(binOut) dataRet=[0x22]+_devMac+devIDBytes+[_txCh]+[_rxCh] return dataRet def makeSaveDevPacket(): dataRet=[0x21,0,255,0,255] return dataRet def makeAddCardPacket(cardNo,groups): cardBytes=[cardNo >> i & 0xff for i in (24,16,8,0)] groupBytes=[0] numGroups=len(groups) groupBytes[0]=numGroups for g in groups: groupBytes+=[g] global binOut binOut=[1]+cardBytes+groupBytes print(binOut) dataRet=[1]+cardBytes+groupBytes return dataRet def makeRemoveCardPacket(cardNo): cardBytes=[cardNo >> i & 0xff for i in (24,16,8,0)] global binOut binOut=[2]+cardBytes print(binOut) dataRet=[2]+cardBytes return dataRet def makeAddWLCardPacket(cardNo): cardBytes=[cardNo >> i & 0xff for i in (24,16,8,0)] global binOut binOut=[5]+cardBytes print(binOut) dataRet=[5]+cardBytes return dataRet def makeDelWLCardPacket(cardNo): cardBytes=[cardNo >> i & 0xff for i in (24,16,8,0)] global binOut binOut=[6]+cardBytes print(binOut) dataRet=[6]+cardBytes return dataRet def makeAddTimePacket(_group,_startTime,_endTime): startTimeBytes=[_startTime.hour,_startTime.minute] endTimeBytes=[_endTime.hour,_endTime.minute] global binOut binOut=[3]+[_group]+startTimeBytes+endTimeBytes print(binOut) dataRet=[3]+[_group]+startTimeBytes+endTimeBytes return dataRet def makeRemoveTimePacket(_group): global binOut binOut=[4]+[_group] print(binOut) dataRet=[4]+[_group] return dataRet def makeSyncTimePacket(_time): yearBytes=[(_time.year >> i & 0xff) for i in (8,0)] dateTimeBytes=yearBytes+[_time.month,_time.day,_time.hour,_time.minute,_time.second] global binOut binOut=[0x10]+dateTimeBytes print(binOut) dataRet=[0x10]+dateTimeBytes return dataRet def makeGetCardRecordPacket(_sTime,_eTime): sYearBytes=[(_sTime.year >> i & 0xff) for i in (8,0)] sDateTimeBytes=sYearBytes+[_sTime.month,_sTime.day,_sTime.hour,_sTime.minute,_sTime.second] eYearBytes=[(_eTime.year >> i & 0xff) for i in (8,0)] eDateTimeBytes=eYearBytes+[_eTime.month,_eTime.day,_eTime.hour,_eTime.minute,_eTime.second] global binOut binOut=[0x07]+sDateTimeBytes+eDateTimeBytes print(binOut) dataRet=[0x07]+sDateTimeBytes+eDateTimeBytes return dataRet def makeGetAllCardRecordPacket(): global binOut binOut=[0x0d] print(binOut) dataRet=[0x0d] return dataRet def makeDelCardRecordPacket(_sTime,_eTime): sYearBytes=[(_sTime.year >> i & 0xff) for i in (8,0)] sDateTimeBytes=sYearBytes+[_sTime.month,_sTime.day,_sTime.hour,_sTime.minute,_sTime.second] eYearBytes=[(_eTime.year >> i & 0xff) for i in (8,0)] eDateTimeBytes=eYearBytes+[_eTime.month,_eTime.day,_eTime.hour,_eTime.minute,_eTime.second] global binOut binOut=[0x0b]+sDateTimeBytes+eDateTimeBytes print(binOut) dataRet=[0x0b]+sDateTimeBytes+eDateTimeBytes return dataRet def makeDelAllCardRecordPacket(): global binOut binOut=[0x0c] print(binOut) dataRet=[0x0c] return dataRet def makeCardRecordPacket(_cardNo,_time,_cardResult,idx): cardBytes=[_cardNo >> i & 0xff for i in (24,16,8,0)] yearBytes=[(_time.year >> i & 0xff) for i in (8,0)] dateTimeBytes=yearBytes+[_time.month,_time.day,_time.hour,_time.minute,_time.second] global binOut binOut=[0x8]+cardBytes+dateTimeBytes+[_cardResult]+[idx] print(binOut) dataRet=[0x8]+cardBytes+dateTimeBytes+[_cardResult]+[idx] return dataRet def makeCardRecordCountPacket(_count): countBytes=[_count >> i & 0xff for i in (8,0)] global binOut binOut=[0x0a]+countBytes print(binOut) dataRet=[0x0a]+countBytes return dataRet def makeEndCardRecordPacket(): global binOut binOut=[0x9,0xff,0xff,0xff,0xff] print(binOut) dataRet=[0x9,0xff,0xff,0xff,0xff] return dataRet def checksumStr(packet): checksum=0 for el in packet: checksum ^= ord(el) print checksum, hex(checksum) return checksum def checksumBin(mData): checksum=0 print("checksum ...") print(len(mData)) for b in mData: #print(format(el,'02x')) checksum ^= b #print checksum, hex(checksum) return checksum def readRXData(_data,isString,_src,_dest): try: global msg_dest global msg_src src=_src dest=_dest global sendReq global outStr global binQueue global devRole reply=True if(dest==0xffff): reply=False if(isString): msg_src=devID msg_dest=src data=_data print("receive data:%s"%data) if(data=="initDev"): global changeReq changeReq=True elif(data=="closeDev"): global running running=False global server server.socket.close() elif(data.startswith("getCard,")): dataArr=data.split(",") cardGroup="na" if(len(dataArr)>=2): cardNo=dataArr[1] cardGroup=cardDB.checkCardGroup(cardNo) strSrcQueue.put(msg_src) strDestQueue.put(msg_dest) strQueue.put("card:"+cardNo+","+cardGroup) print(outStr) elif(data.startswith("card:")): if(devRole=='server'): cardStr=data[5:] mUDPComm.sendMsg('127.0.0.1',9007,"dev:card,"+str(src)+","+cardStr) elif(data.startswith("getWLCard,")): dataArr=data.split(",") cardGroup="0" if(len(dataArr)>=2): cardNo=dataArr[1] wlData=cardDB.checkWLCard(cardNo) strSrcQueue.put(msg_src) strDestQueue.put(msg_dest) if(wlData>0): strQueue.put("WLCard:"+cardNo+",1") else: strQueue.put("WLCard:"+cardNo+",0") elif(data.startswith("WLCard:")): if(devRole=='server'): cardStr=data[7:] mUDPComm.sendMsg('127.0.0.1',9007,"dev:WLCard,"+str(src)+","+cardStr) elif(data=="getTime"): msg_src=devID msg_dest=src print("get current time") now=tc.getCurrentTime() if(reply): strSrcQueue.put(msg_src) strDestQueue.put(msg_dest) strQueue.put("t:"+str(now[0])+","+str(now[1])+","+str(now[2])+","+str(now[3])+","+str(now[4])+","+str(now[5])+",0") print(outStr) #sendReq=True elif(data.startswith('setRole:')): msgArr=data.split(":") devRole=msgArr[1] elif(data.startswith('cmd:')): cmdArr=data[4:].split(" ") print(cmdArr) call(cmdArr) elif(data.startswith("addDev")): msg_src=devID msg_dest=src dataArr=data.split(",") cardDB.addDev(src,dataArr[1],1) if(reply): strSrcQueue.put(msg_src) strDestQueue.put(msg_dest) strQueue.put("ackDev,"+devRole) #sendReq=True elif(data.startswith("ackDev")): msg_src=devID msg_dest=src dataArr=data.split(",") cardDB.addDev(src,dataArr[1],1) elif(data.startswith("door state,")): msg_src=devID msg_dest=src if(doorState==0): strSrcQueue.put(msg_src) strDestQueue.put(msg_dest) strQueue.put("door open,"+devRole) if(doorState==1): strSrcQueue.put(msg_src) strDestQueue.put(msg_dest) strQueue.put("door close,"+devRole) dataArr=data.split(",") #cardDB.addDev(src,dataArr[1],0) #sendReq=True elif(data==("door state")): if(doorState==0): msg_src=devID msg_dest=src strSrcQueue.put(msg_src) strDestQueue.put(msg_dest) strQueue.put("door open,"+devRole) if(doorState==1): msg_src=devID msg_dest=src strSrcQueue.put(msg_src) strDestQueue.put(msg_dest) strQueue.put("door close,"+devRole) elif(data.startswith("clearTable,")): dataArr=data.split(",") table=int(dataArr[1]) cardDB.clearTable(table) elif(data.startswith("door open,")): msg_src=devID msg_dest=src #strSrcQueue.put(msg_src) #strDestQueue.put(msg_dest) #strQueue.put("door ack") #sendReq=True dataArr=data.split(",") #cardDB.addDev(src,dataArr[1],0) if(devRole=='server'): mUDPComm.sendMsg('127.0.0.1',9007,"dev:doorState,"+str(src)+",0,"+dataArr[1]); elif(data=="getMac"): packet=makeMacAddrPacket(HWPort) msg_src=devID msg_dest=src binSrcQueue.put(msg_src) binDestQueue.put(msg_dest) binQueue.put(packet) elif(data.startswith("door close,")): outStr="door ack" msg_src=devID msg_dest=src #strSrcQueue.put(msg_src) #strDestQueue.put(msg_dest) #strQueue.put("door ack") dataArr=data.split(",") #cardDB.addDev(src,dataArr[1],1) if(devRole=='server'): mUDPComm.sendMsg('127.0.0.1',9007,"dev:doorState,"+str(src)+",1,"+dataArr[1]); elif(data=="openDoor"): global openDoor openDoor=True mUDPComm.sendMsg('127.0.0.1',9008,'openDoor') elif(data=="closeDoor"): global openDoor mUDPComm.sendMsg('127.0.0.1',9008,'closeDoor') openDoor=False elif(data.startswith("ackRSSI,")): global ackRSSI dataArr=data.split(",") ackRSSI=int(dataArr[1]) global getAck getAck=True elif(data=="getTableLen"): wlLen=cardDB.getTableLength("whitelist") cardLen=cardDB.getTableLength("AccessCard") timeLen=cardDB.getTableLength("TimeGroup") strSrcQueue.put(msg_src) strDestQueue.put(msg_dest) print("-------------") print("tableLen,"+str(cardLen)+","+str(wlLen)+","+str(timeLen)) print("-------------") strQueue.put("tableLen,"+str(cardLen)+","+str(wlLen)+","+str(timeLen)) elif(data.startswith("tableLen,")): dataArr=data.split(",") if(len(dataArr)>=4): if(devRole=='server'): print("-------------") print("dev:tableLen,"+str(src)+","+dataArr[1]+","+dataArr[2]+","+dataArr[3]) print("-------------") mUDPComm.sendMsg('127.0.0.1',9007,"dev:tableLen,"+str(src)+","+dataArr[1]+","+dataArr[2]+","+dataArr[3]) elif(data.startswith("ackADD,")): dataArr=data.split(",") if(devRole=='server'): mUDPComm.sendMsg('127.0.0.1',9007,"dev:addedCard,"+str(src)+","+dataArr[1]); elif(data.startswith("ackDEL,")): dataArr=data.split(",") if(devRole=='server'): mUDPComm.sendMsg('127.0.0.1',9007,"dev:deletedCard,"+str(src)+","+dataArr[1]); elif(data.startswith("ackADDWL,")): dataArr=data.split(",") if(devRole=='server'): mUDPComm.sendMsg('127.0.0.1',9007,"dev:addedWLCard,"+str(src)+","+dataArr[1]); elif(data.startswith("ackDELWL,")): dataArr=data.split(",") if(devRole=='server'): mUDPComm.sendMsg('127.0.0.1',9007,"dev:deletedWLCard,"+str(src)+","+dataArr[1]); elif(data!="ack" and reply): global sentAck print("sending ACK") msg_src=devID msg_dest=src strSrcQueue.put(msg_src) strDestQueue.put(msg_dest) strQueue.put("ackRSSI,"+str(rssi)) #sendReq=True sentAck=True elif(data=="ack"): global getAck getAck=True else: data=_data[:] msg_src=devID msg_dest=src if(data[0]==1 or data[0]==2 or data[0]==5 or data[0]==6 or data[0]==8): cardNo=data[1]*0x1000000+data[2]*0x10000+data[3]*0x100+data[4] if(data[0]==1): numGroups=data[5] groupsStr="" for i in range(numGroups): groupsStr+=',' groupsStr+=str(data[6+i]) gStr=groupsStr[1:] print(gStr) cardDB.addCard(str(cardNo),gStr) strSrcQueue.put(msg_src) strDestQueue.put(msg_dest) strQueue.put("ackADD,"+str(cardNo)) if(data[0]==2): cardDB.delCard(cardNo) strSrcQueue.put(msg_src) strDestQueue.put(msg_dest) strQueue.put("ackDEL,"+str(cardNo)) if(data[0]==5): cardDB.addWLCard(cardNo) strSrcQueue.put(msg_src) strDestQueue.put(msg_dest) strQueue.put("ackADDWL,"+str(cardNo)) if(data[0]==6): cardDB.delWLCard(cardNo) strSrcQueue.put(msg_src) strDestQueue.put(msg_dest) strQueue.put("ackDELWL,"+str(cardNo)) if(data[0]==8): year=data[5]*256+data[6] mon=data[7] day=data[8] hour=data[9] min=data[10] sec=data[11] cardResult=data[12] idx=data[13] cardTime=datetime(year,mon,day,hour,min,sec) if(devRole=='server'): #cardDB.addCardRecordMain(cardNo,cardTime,cardResult,src) mUDPComm.sendMsg('127.0.0.1',9007,"dev:cardRecord,"+str(src)+","+str(idx)+","+str(cardNo)+","+str(year)+"-"+str(mon)+"-"+str(day)+" "+str(hour)+":"+str(min)+":"+str(sec)+","+str(cardResult)); print(str(year)+"-"+str(mon)+"-"+str(day)+" "+str(hour)+":"+str(min)+":"+str(sec)+"---"+str(cardResult)+" "+str(cardNo)+" ") elif(data[0]==0x07 or data[0]==0x0b): year=data[1]*256+data[2] mon=data[3] day=data[4] hour=data[5] min=data[6] sec=data[7] startTime=datetime(year,mon,day,hour,min,sec) year=data[8]*256+data[9] mon=data[10] day=data[11] hour=data[12] min=data[13] sec=data[14] endTime=datetime(year,mon,day,hour,min,sec) msg_src=devID msg_dest=src if(data[0]==0x07): cardRecords=cardDB.getCardRecord(startTime.strftime('%Y-%m-%d %H:%M:%S'),endTime.strftime('%Y-%m-%d %H:%M:%S')) startPacket=makeCardRecordCountPacket(len(cardRecords)) binSrcQueue.put(msg_src) binDestQueue.put(msg_dest) binQueue.put(startPacket[:]) recN=0 for rec in cardRecords: print(rec[1].strftime('%Y-%m-%d %H:%M:%S')+"---"+str(rec[0])) cardRec=makeCardRecordPacket(rec[0],rec[1],rec[2],recN) binSrcQueue.put(msg_src) binDestQueue.put(msg_dest) binQueue.put(cardRec[:]) recN+=1 endPacket=makeEndCardRecordPacket() binSrcQueue.put(msg_src) binDestQueue.put(msg_dest) binQueue.put(endPacket[:]) elif(data[0]==0x0b): cardDB.delCardRecord(startTime.strftime('%Y-%m-%d %H:%M:%S'),endTime.strftime('%Y-%m-%d %H:%M:%S')) elif(data[0]==0x0c): print("delete all card record") cardDB.delAllCardRecord() elif(data[0]==0x0d): print("get all card record") cardRecords=cardDB.getAllCardRecord() startPacket=makeCardRecordCountPacket(len(cardRecords)) binSrcQueue.put(msg_src) binDestQueue.put(msg_dest) binQueue.put(startPacket[:]) recN=0 for rec in cardRecords: print(rec[1].strftime('%Y-%m-%d %H:%M:%S')+"---"+str(rec[0])) cardRec=makeCardRecordPacket(rec[0],rec[1],rec[2],recN) binSrcQueue.put(msg_src) binDestQueue.put(msg_dest) binQueue.put(cardRec[:]) recN+=1 endPacket=makeEndCardRecordPacket() binSrcQueue.put(msg_src) binDestQueue.put(msg_dest) binQueue.put(endPacket[:]) elif(data[0]==0x09): print("noMore record") if(devRole=='server'): mUDPComm.sendMsg('127.0.0.1',9007,"dev:endCardRecord,"+str(src)); elif(data[0]==0x0a): recCount=data[1]*256+data[2] print(str(recCount)+" record(s) from device "+str(src)) if(devRole=='server'): mUDPComm.sendMsg('127.0.0.1',9007,'dev:startCardRecord,'+str(src)+","+str(recCount)) elif(data[0]==3 or data[0]==4): groupID=data[1] if(data[0]==3): startHour=data[2] startMin=data[3] endHour=data[4] endMin=data[5] cardDB.addTimeGroup(groupID,str(startHour)+":"+str(startMin),str(endHour)+":"+str(endMin)) if(data[0]==4): cardDB.delTimeGroup(groupID) elif(data[0]==0x10): time_tuple = ( int(data[1]*256+data[2]), # Year int(data[3]), # Month int(data[4]), # Day int(data[5]), # Hour int(data[6]), # Minute int(data[7]), # Second int(0), # Millisecond ) tc._linux_set_time(time_tuple) elif(data[0]==0x20): tmpDevID=data[1]*256+data[2] tmpTxCh=data[3] tmpRxCh=data[4] changeDeviceID(tmpDevID) changeTxChannel(tmpTxCh) changeRxChannel(tmpRxCh) global changeReq changeReq=True elif(data[0]==0x2f): tmpDevID=data[1]*256+data[2] tmpTxCh=data[3] tmpRxCh=data[4] changeDeviceID(tmpDevID) changeTxChannel(tmpTxCh) changeRxChannel(tmpRxCh) global rfPower global spreadFactor global bandWidth rfPower=data[5] spreadFactor=data[6] bandWidth=data[7] global changeReq changeReq=True elif(data[0]==0x22): inMac=[data[1],data[2],data[3],data[4],data[5],data[6]] macAddr=ipH.getHwAddrArr(HWPort) print("checking mac address...") matched=True for i in range(6): if(macAddr[i]!=inMac[i]): matched=False if(matched): tmpDevID=data[7]*256+data[8] tmpTxCh=data[9] tmpRxCh=data[10] changeDeviceID(tmpDevID) changeTxChannel(tmpTxCh) changeRxChannel(tmpRxCh) global changeReq changeReq=True elif(data[0]==0x25): global tmpMAC inMac=[data[1],data[2],data[3],data[4],data[5],data[6]] print("device MAC address:"), for i in range(6): tmpMAC[i]=inMac[i] print(hex(inMac[i])), print(";") cardDB.addDevMAC(src,tmpMAC) elif(data[0]==0x21): saveChange() elif(data[0]==0x24): packet=makeMacAddrPacket(HWPort) binSrcQueue.put(msg_src) binDestQueue.put(msg_dest) binQueue.put(packet) except Exception, e: print(str(e)) return def readDeviceData(): with open('device.json') as data_file: data = json.load(data_file) global devID devID=int(data['dev']['id']) global devRole devRole=data['dev']['role'] global devTxCh devTxCh=int(data['dev']['TxCh']) print("TX:"+str(devTxCh)) global devRxCh devRxCh=int(data['dev']['RxCh']) print("RX:"+str(devRxCh)) global cardDB cardDB=cardMysql(data['mysql']['ip'],data['mysql']['user'],data['mysql']['pw'],data['mysql']['db'],data['mysql']['table']) global rfPower global spreadFactor global bandWidth if(os.path.isfile("rf.json")): with open('rf.json') as data_file: data = json.load(data_file) rfPower=int(data['rf']['power']) spreadFactor=int(data['rf']['spread']) bandWidth=int(data['rf']['band_width']) print("rfPower:"+str(rfPower)) print("spreadFactor:"+str(spreadFactor)) print("bandWidth:"+str(bandWidth)) def changeDeviceID(_devID): global devID devID=_devID def changeTxChannel(_channel): global devTxCh devTxCh=_channel def changeRxChannel(_channel): global devRxCh devRxCh=_channel def applyChange(): initLORA() def saveChange(): filename = 'device.json' with open(filename, 'r') as f: data = json.load(f) data['dev']['id'] = str(devID) # <--- add `id` value. data['dev']['TxCh']=str(devTxCh) data['dev']['RxCh']=str(devRxCh) data['dev']['role']=devRole os.remove(filename) with open(filename, 'w') as f: json.dump(data, f, indent=4) with open('rf.json', 'w') as f: data ={'rf':{'power':str(rfPower),'spread':str(spreadFactor),'band_width':str(bandWidth)}} json.dump(data, f, indent=4) def changeTime(timeString): timeArray=timeString.split(",") if(len(timeArray)>=8): time_tuple = ( int(timeArray[1]), # Year int(timeArray[2]), # Month int(timeArray[3]), # Day int(timeArray[4]), # Hour int(timeArray[5]), # Minute int(timeArray[6]), # Second int(timeArray[7]), # Millisecond ) if sys.platform=='linux2': tc._linux_set_time(time_tuple) elif sys.platform=='win32': tc=timeChanger() tc._win_set_time(time_tuple) def runWS(): ws.run() def runHttp(): #Wait forever for incoming http requests server.serve_forever() def initDevData(): readDeviceData() print("device ID:",devID) print("device role:",devRole) def initLORA(): global mLORA_R global mLORA_T GPIO.setmode(GPIO.BOARD) #init sx1276 running=True if(mLORA_R==None): mLORA_R=loraHelper_SW(18,13); if(mLORA_T==None): mLORA_T=loraHelper_SW(16,11); mLORA_T.RESET() mLORA_R.RESET() print("config...") print("TX channel:%d"%devTxCh) mLORA_T.sx1276_7_8_Config_f_p_s_w(devTxCh,rfPower,spreadFactor,bandWidth) print("RX channel:%d"%devRxCh) mLORA_R.sx1276_7_8_Config_f_p_s_w(devRxCh,rfPower,spreadFactor,bandWidth) mLORA_T.sx1276_7_8_LoRaSetRxPtr(0) mLORA_T.sx1276_7_8_LoRaSetTxPtr(128) mLORA_R.sx1276_7_8_LoRaSetRxPtr(0) mLORA_R.sx1276_7_8_LoRaSetTxPtr(128) print("done ") mLORA_T.delay(300) print ("entry RX mode.."), mLORA_T.sx1276_7_8_LoRaEntryRx() mLORA_R.sx1276_7_8_LoRaEntryRx() mLORA_T.delay(300) print("READY"); mLORA_T.sx1276_7_8_LoRaEntryTx() mLORA_T.delay(300) print("LORA module init-ed!!") def checkLORA(): global downTimeCount global changeReq while(running): time.sleep(1) downTimeCount+=1 if(downTimeCount>=0): print("downTimeCount:") print(str(downTimeCount)) if(downTimeCount>60): changeReq=True downTimeCount=0 print("------DOWNTIME OVER, re-init LORA------") def drawLCD(): try: mLcd = lcdHelper("/dev/i2c-0",0x3f,2, 1, 0, 4, 5, 6, 7); mIP=ipHelper() global downTimeCount while(running): try: mLcd.scan() mLcd.begin(16,2,0); if(running): myIP=mIP.getIP('eth0') mLcd.clear(); time.sleep(0.1) mLcd.home(); time.sleep(0.1) mLcd.writeString("L") mLcd.setCursor(1,0) time.sleep(0.1) mLcd.writeString(myIP) myWifiIP=mIP.getIP('wlan0') mLcd.setCursor(0,1) mLcd.writeString("W") mLcd.setCursor(1,1) mLcd.writeString(myWifiIP) time.sleep(1.5) if(running): mLcd.clear(); time.sleep(0.1) mLcd.home(); mLcd.writeString("devID:"+str(devID)) if(testMode): mLcd.writeString(" testMode") time.sleep(0.05) mLcd.setCursor(0,1) if(sentAck): global sentAck sentAck=False mLcd.writeString("TX:"+str(devTxCh)+" Rx:"+str(devRxCh)+" ACK") else: mLcd.writeString("TX:"+str(devTxCh)+" Rx:"+str(devRxCh)) time.sleep(1.5) if(running): mLcd.clear(); time.sleep(0.1) mLcd.home(); mLcd.writeString("role:") mLcd.setCursor(0,1) mLcd.writeString(devRole) time.sleep(1.5) if(running): if(updateRSSI): mLcd.clear(); time.sleep(0.1) mLcd.home(); global updateRSSI updateRSSI=False if(testMode): mLcd.writeString("RSSI="+str(rssi)+" testMode") else: mLcd.writeString("RSSI="+str(rssi)) mLcd.setCursor(0,1) mLcd.writeString("dev:"+str(ackID)) if(getAck): global getAck getAck=False time.sleep(0.05) mLcd.setCursor(0,1) mLcd.writeString("ackRSSI="+str(ackRSSI)) time.sleep(2) if(running and downTimeCount>5): mLcd.clear(); time.sleep(0.1) mLcd.home(); time.sleep(0.1) mLcd.writeString("Down time:") mLcd.setCursor(1,0) time.sleep(0.1) mLcd.setCursor(0,1) mLcd.writeString(str(downTimeCount)) time.sleep(1) except Exception, e: mERR=str(e) time.sleep(0.5) except Exception, e: print(str(e)) def initUDPSocket(udpPort): global sock sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # Create Datagram Socket (UDP) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # Make Socket Reusable sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) # Allow incoming broadcasts sock.setblocking(False) # Set socket to non-blocking mode sock.bind(('', udpPort)) #Accept Connections on port sock.setblocking(0) print("Accepting connections on port", hex(udpPort)) def udpRecv(): while (running): try: #time.delay(10) message, address = sock.recvfrom(8192) # Buffer size is 8192. Change as needed. if message: global doorState print (address, "> ", message) if(message=="door close"): doorState=1 elif(message=="door open"): doorState=0 except: pass def recvUDPPacket(): try: #time.delay(10) message, address = sock.recvfrom(8192) # Buffer size is 8192. Change as needed. if message: global doorState print (address, "> ", message) if(message=="door close"): doorState=1 elif(message=="door open"): doorState=0 except Exception, e: print(str(e)) def runWebServer(): handler=myHandler myHandler.mLORA=mLORA_T global server server = HTTPServer(('', PORT_NUMBER), handler) print ('Started httpserver on port ') , print(PORT_NUMBER) #httpThread = Thread(target = runHttp) #httpThread.start() #runHttp() server.serve_forever() def main(argv): global running global mLORA_R global mLORA_T initDevData() initLORA() global sock global ipH ipH=ipHelper() #GPIO.setup(15, GPIO.IN, pull_up_down=GPIO.PUD_UP) # #wsThread = Thread(target = runWS) #wsThread.start() #Create a web server and define the handler to manage the #incoming request try: #udpPort=10001 #initUDPSocket(udpPort) #ws=WSHelper("wsService","/test") #runWS() thread = Thread(target = recrivePacket) thread.start() threadLCD = Thread(target = drawLCD) threadLCD.start() #threadHTTP=Thread(targt=runWebServer) #threadHTTP.start() threadUDP=Thread(target=run_udp_comm) threadUDP.start() threadCheckLORA = Thread(target = checkLORA) threadCheckLORA.start() #threadUDP = Thread(target = udpRecv) #threadUDP.start() handler=myHandler myHandler.mLORA=mLORA_T global server server = HTTPServer(('', PORT_NUMBER), handler) print ('Started httpserver on port ') , print(PORT_NUMBER) #httpThread = Thread(target = runHttp) #httpThread.start() #runHttp() server.serve_forever() except KeyboardInterrupt: print '^C received, shutting down the web server' server.socket.close() #ws.running=False running=False thread.join() threadUDP.join() ''' while(True): try: time.sleep(1) except KeyboardInterrupt: print '^C received, shutting down the web server' #server.socket.close() #ws.running=False running=False thread.join() exit(0) ''' if __name__ == "__main__": main(sys.argv[1:])
| ver. 1.4 |
Github
|
.
| PHP 7.2.34 | Generation time: 0.18 |
proxy
|
phpinfo
|
Settings