def on_rx_done(self): #BOARD.led_on() print("\nRxDone") self.clear_irq_flags(RxDone=1) payload = self.read_payload(nocheck=True) data = ''.join([chr(c) for c in payload]) print ">> Saving..." #print data #common.save_sms_to_memory(data) data = re.sub(r'[^\w*<>#/:.\-,+]',"",data) timestamp = dt.now().strftime("%y%m%d%H%M%S") print (str(self.rssi_value*-1)) if data.startswith('>>'): print ">> Valid lora data!" hashStart = data.find('#') if hashStart != -1: data = data[hashStart+1:-1] data = data[:data.find('<<')] data = re.sub(r'[<>]',"",data) dts = data #+ '*' + timestamp common.save_sms_to_memory(dts) else: print ">> Invalidated." dts = data + '*INVALID*' + timestamp filename = "lora_data.txt" with open(filename,'a+') as fh: fh.write(dts+'\n') print dts print ">> Saved to text file." #print(bytes(payload).decode()) self.set_mode(MODE.SLEEP) self.reset_ptr_rx() #BOARD.led_off() self.set_mode(MODE.RXCONT)
def cycle_gsm(row): # gsmio.power_gsm('OFF') # gsmio.power_gsm() gsmio.reset_gsm() reply = 'Reset GSM success' common.save_sms_to_memory(reply, row["contact_id"])
def main(): parser = argparse.ArgumentParser(description="Health routine [-options]") parser.add_argument("-r", "--read_only", help="do not save data to memory", action='store_true') try: args = parser.parse_args() except IndexError: print '>> Error in parsing arguments' error = parser.format_help() print error sys.exit() mc = common.get_mc_server() ts = dt.today() ts_str = ts.strftime("%x,%X,") try: if mc.get('rst_gsm_done') * mc.get('init_gsm_done'): gsmio.check_csq() csq = int(mc.get("csq_val")) csq = str(csq) else: print ">> GSM is busy" csq = "98" except: print ">> Error reading GSM CSQ. Setting CSQ to error value" csq = "98" cfg = mc.get("server_config") try: mmpertip = float(cfg['rain']['mmpertip']) except: os.system('sudo shutdown -r +1') sys.exit() rainval = "%0.2f" % (rd.check_rain_value(reset_rain=True) * mmpertip) sysvol = "%0.2f" % (pmon.read()["bus_voltage"]) temp = os.popen("vcgencmd measure_temp").readline() tempval = temp.replace("temp=", "").replace("'C\n", "") print "Temperature: {0}".format(tempval) msgtosend = cfg["coordinfo"]["name"] + "W," + ts_str msgtosend += "0,000," + tempval + "," + rainval + "," msgtosend += sysvol + "," msgtosend += csq if not args.read_only: print ">> Saving to memory:" time.sleep(5) print msgtosend common.save_sms_to_memory(msgtosend)
def change_running_version(args, row): version = args[2] try: common.spawn_process("python ~/gateway/processcontrol.py -v %s" % version) except IndexError: reply = "No argument given (%s)" % (row['msg']) common.save_sms_to_memory(reply, row["contact_id"]) return reply = "Running version changed to %s" % (version) common.save_sms_to_memory(reply, row["contact_id"])
def routine(xbee=None): if not xbee: xbee = get_xbee_handle() #reset(xbee) power_off(xbee) time.sleep(5) power_on(xbee) time.sleep(5) rssi_info = get_rssi(xbee) time.sleep(2) transmit_time(xbee) #wakeup(xbee) sc = common.get_config_handle() signal.signal(signal.SIGALRM, signal_handler) signal.alarm(sc['xbee']['sampletimeout']) # try: router_tsm_msgs, voltage_info = receive(xbee) # except KeyboardInterrupt: # print '>> Uesr timeout!' # for key in router_tsm_msgs.keys(): # for msg in router_tsm_msgs[key].split(",")[:-1]: # # msg_cleaned = re.sub('[^A-Zxyabc0-9\*]',"",msg) # # print msg_cleaned # print msg # common.save_sms_to_memory(msg) # rssi and voltage message sc = common.get_config_handle() site_code = sc['coordinfo']['name'] rssi_msg = "GATEWAY*RSSI,%s" % (site_code) for key in list(rssi_info.keys()): try: rssi_msg += ",%s,%s,%s" % (key, rssi_info[key], voltage_info[key]) except KeyError: rssi_msg += ",%s,%s,," % (key, rssi_info[key]) rssi_msg += dt.now().strftime("*%y%m%d%H%M%S") print(rssi_msg) common.save_sms_to_memory(rssi_msg) power_off(xbee)
def change_coord_name(row): print("Changing site name") cfg = common.read_cfg_file() msg = row['msg'] try: cfg.set('coordinfo', 'name', msg.split(" ")[2].upper()) common.save_cfg_changes(cfg) reply = "New coordname " + msg.split(" ")[2].upper() except TypeError: print(">> No name given") reply = "ERROR in SMS" + msg.data print(reply) common.save_sms_to_memory(reply, row["contact_id"])
def register_number(row): print '>> Registering number' args = row['msg'].split() try: name = args[2] sim_num = args[3] except IndexError: reply = "Insufficient arguments." common.save_sms_to_memory(reply, row['contact_id']) return query = "insert into phonebook (name,sim_num) values ('%s','%s')" % (name,sim_num) dbio.commit_to_db(query,'rn') reply = "Contact %s-%s registered" % (name, sim_num) common.save_sms_to_memory(reply, row['contact_id'])
def change_xbee_timeout(row): cfg = common.read_cfg_file() args = row['msg'].split() try: timeout_s = args[2] except IndexError: reply = "Insufficient arguments." common.save_sms_to_memory(reply, row['contact_id']) return print("Changing xbee sampling timeout") try: cfg.set('xbee', 'sampletimeout', timeout_s) common.save_cfg_changes(cfg) reply = "NEW XBEE TIMEOUT " + timeout_s except TypeError: print(">> No timeoout value given") reply = "ERROR IN SMS: " + row['msg'] # sendMsgWRetry(reply,msg.simnum) common.save_sms_to_memory(reply, row['contact_id']) gateway_initialize()
def change_server_number(row): cfg = common.read_cfg_file() args = row['msg'].split() try: number = args[2] except IndexError: reply = "Insufficient arguments." common.save_sms_to_memory(reply, row['contact_id']) return print("Changing server num") try: cfg.set('serverinfo', 'simnum', number) common.save_cfg_changes(cfg) reply = "NEW SERVERNUMBER " + number except TypeError: print(">> No number given") reply = "ERROR IN SMS" + row['msg'] # sendMsgWRetry(reply,msg.simnum) common.save_sms_to_memory(reply, row['contact_id']) gateway_initialize()
def change_report_interval(row): msg_arguments = row['msg'].split(" ") try: job_name = msg_arguments[2] except IndexError: reply_message = "ERROR: job name" print("No report interval in message") common.save_sms_to_memory(reply_message, row['contact_id']) try: interval = msg_arguments[3] except IndexError: reply_message = "ERROR: missing argument:\n %s" % row["msg"] common.save_sms_to_memory(reply_message, row['contact_id']) return reply_message = pctrl.change_report_interval(job_name, interval) common.save_sms_to_memory(reply_message, row['contact_id'])
def receive(xbee): paddr = "" i = 0 sfin = [] fin = [] net_info = common.mc.get("network_info") router_volt_msg = "Router voltages:" router_tilt_soms_msg = {} voltage_info = {} msg_ctr = {} for n in list(net_info["router_addr_short_by_name"].keys()): msg_ctr[n] = dict() msg_ctr[n]["total"] = 20 msg_ctr[n]["received"] = 0 router_tilt_soms_msg[n] = "" print(msg_ctr) while True: print("\nwaiting for packets ... ") try: response = xbee.wait_read_frame() except (SampleTimeoutException, KeyboardInterrupt): print('Timeout!') break #print response rf = response['rf_data'] print(rf) rf = str(rf) datalen = len(rf) paddr = "" paddr = paddr + hex(int(ord(response['source_addr_long'][4]))) paddr = paddr + hex(int(ord(response['source_addr_long'][5]))) paddr = paddr + hex(int(ord(response['source_addr_long'][6]))) paddr = paddr + hex(int(ord(response['source_addr_long'][7]))) if paddr in net_info['addr_long_list']: router_name = net_info['router_name_by_addr_long'][paddr] elif paddr in net_info['addr_short_list']: router_name = net_info['router_name_by_addr_short'][paddr] else: print(">> Error: unknown address", paddr) continue print(">> Packet from: %s" % (router_name)) hashStart = rf.find('#') slashStart = rf.find("/") if rf.find('VOLTAGE') is not -1: # voltage info packet try: volt = re.search("(?<=\#)[0-9\.]+(?=\<)", rf).group(0) except (NameError, TypeError): volt = "" print(">> Error in volt conversion", rf) # volt= re.sub('[^.0-9\*]',"",volt) print("%s: %s" % (router_name, volt)) voltage_info[router_name] = volt else: # tilt or soms packet msg = rf[hashStart + 1:-1] msg = re.sub('[^A-Za-z0-9\*\:\.\-\,\+\/]', "", msg) rf = re.sub('[^A-Za-z0-9\*<>\#\/\:\.\-\,\+]', "", rf) msg = re.sub('TIMESTAMP000', tstamp, msg) rf = re.sub('TIMESTAMP000', tstamp, rf) print(msg) print(rf) if re.search("\d{2,3}>>\d{1,2}\/\d{1,2}#.*<<", rf): print(">> Sending complete message") # counters = re.serach("\d{1,2}\/\d{1,2}",rf).group(0).split("/") # print counters # msg_ctr[router_name]["total"] = int(counters[1]) # msg_ctr[router_name]["received"] # msg_ctr[router_name] = dict() router_tilt_soms_msg[router_name] = msg common.save_sms_to_memory(router_tilt_soms_msg[router_name]) elif re.search("\d{2,3}>>\d{1,2}\/\d{1,2}#.*", rf): router_tilt_soms_msg[router_name] = msg elif re.search(".*<<", rf): router_tilt_soms_msg[router_name] += msg print("Sending at end of message") common.save_sms_to_memory(router_tilt_soms_msg[router_name]) elif re.search(".*", rf): router_tilt_soms_msg[router_name] += msg else: print("::: unrecognized") return router_tilt_soms_msg, voltage_info
def main(): # allmsgs = senslopedbio.getAllSmsFromDb("UNREAD") smsinbox = mc.get("smsinbox") smsinbox = smsinbox[smsinbox["stat"] == 0] print(dt.now()) exit_flag = False reboot_system = False if len(smsinbox) <= 0: print('>> No message to process') return # else: # print smsinbox for index, row in smsinbox.iterrows(): # print "MSG:", row["contact_id"], row["msg"], row["ts"] msg_args = row['msg'].split(" ") # check password and message structure if is_sms_valid(row['msg']): print("sms is valid") else: print("sms is not valid") print(row['msg']) if sconf["sms"]["delsmsafterread"]: smsinbox.loc[index, 'stat'] = 1 continue cmd = msg_args[0].lower() if cmd == "coordname": change_coord_name(row) common.spawn_process('python3 /home/pi/gateway3/common.py') elif cmd == "version": change_running_version(msg_args, row) # registerNumber(msg) # elif msg.simnum not in getcfg.authnum.split(","): # print ">> Error: number not registered" # continue elif cmd == "servernum": change_server_number(row) common.spawn_process('python3 /home/pi/gateway3/common.py') # elif cmd == "servernum?": # print 'response' # # sendMsgWRetry("SERVERNUM " + getcfg.servernum, msg.simnum) # senslopeServer.WriteOutboxMessageToDb("SERVERNUM " + getcfg.servernum, msg.simnum) # elif cmd == "coordname": # changeCoordName(msg) # elif cmd == "sendingtime": # changeReportInterval(msg) elif cmd == "resetgsm": cycle_gsm(row) elif cmd == "register": register_number(row) # exit_flag = True # # sendMsgWRetry("RESET successful", msg.simnum) # senslopeServer.WriteOutboxMessageToDb("RESET successful", msg.simnum) elif cmd == 'reboot': print(">> Setting reboot command for 2 mins") ts = dt.today().strftime("%c") reboot_message = "USER REBOOT initiated at %s" % (ts) common.save_sms_to_memory(reboot_message, row['contact_id']) reboot_system = True elif cmd == 'sensorpoll': ts = dt.today().strftime("%c") cmd_reply = "USER initiated sensorpoll at %s" % (ts) common.save_sms_to_memory(cmd_reply, row['contact_id']) #subprocess.Popen(["python","/home/pi/gateway/xbeegate.py -s"]) common.spawn_process('python3 /home/pi/gateway3/gateway.py -sr') elif cmd == 'interval': change_report_interval(row) elif cmd == 'xbeetimeout': change_xbee_timeout(row) else: # read_fail = True print(">> Command not recognized", cmd) if sconf["sms"]["delsmsafterread"]: smsinbox.loc[index, 'stat'] = 1 if exit_flag: sys.exit() mc.set("smsinbox", smsinbox) # # gsmClosePortAndHandle() # setReadStatus("READ-SUCCESS",read_success_list) # setReadStatus("READ-FAIL",read_fail_list) if reboot_system: # reboot after 2 mins os.system('sudo shutdown -r +2') sys.exit()
print("Valid raw packet received:\n {}".format(rx)) ser.write("OK") elif rx == "STOPLORA\r\n": time.sleep(.5) break else: print("Invalid packet:\n {}".format(rx)) msg = rx[hashStart + 1:-1] msg = re.sub('[^A-Za-z0-9\*\:\.\-\,\+\/]', "", msg) rx = re.sub('[^A-Za-z0-9\*<>\#\/\:\.\-\,\+]', "", rx) if re.search(">>\d{1,2}\/\d{1,2}#.*<<", rx): print ">> Sending whole message.\n" timestamp = dt.now().strftime("%y%m%d%H%M%S") tilt_soms_msg = msg + timestamp #print(tilt_soms_msg) common.save_sms_to_memory(tilt_soms_msg) elif re.search(">>\d{1,2}\/\d{1,2}#.*", rx): tilt_soms_msg = msg elif re.search(".*<<", rx): print ">> Sending completed message.\n" timestamp = dt.now().strftime("%y%m%d%H%M%S") tilt_soms_msg = tilt_soms_msg + msg + timestamp #print(tilt_soms_msg) common.save_sms_to_memory(tilt_soms_msg) elif re.search(".*", rx): tilt_soms_msg += msg else: print "::: unrecognized" except SampleTimeoutException: print(">> Timeout!")
def create_startup_message(): sc = common.get_config_handle() ts = dt.today().strftime("%c") common.save_sms_to_memory("%s SUCCESSFUL SYSTEM STARTUP at %s" % (sc['coordinfo']['name'], ts))