Exemplo n.º 1
0
 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)
Exemplo n.º 2
0
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"])
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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"])
Exemplo n.º 5
0
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)
Exemplo n.º 6
0
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"])
Exemplo n.º 7
0
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'])
Exemplo n.º 8
0
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()
Exemplo n.º 9
0
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()
Exemplo n.º 10
0
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'])
Exemplo n.º 11
0
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
Exemplo n.º 12
0
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()
Exemplo n.º 13
0
                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!")
Exemplo n.º 14
0
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))