def write_sms_to_outbox(sms_msg, pb_id=None, send_status=0): query = ("INSERT INTO smsoutbox (ts_written,pb_id,sms_msg," "send_status) VALUES ") tsw = dt.today().strftime("%Y-%m-%d %H:%M:%S") mc = common.get_mc_server() inv_pb_names = mc.get('phonebook_inv') # default send to server if sim_num is empty if not pb_id: #mc = common.get_mc_server() s_conf = common.get_config_handle() #pb_names = mc.get('pb_names') #sendto = s_conf['serverinfo']['sendto'] #inv_pb_names = {v: k for k, v in pb_names.items()} #print inv_pb_names #pb_id = inv_pb_names[sendto] pb_id = s_conf['serverinfo']['simnum'] pb_id = inv_pb_names[str(pb_id)] query += "('%s','%s','%s','%s')" % (tsw, pb_id, sms_msg, send_status) print(query) commit_to_db(query, "WriteOutboxMessageToDb")
def init_gsm_serial(): gsm = serial.Serial() s_conf = common.get_config_handle() port = s_conf['gsmio']['port'] baudrate = s_conf['gsmio']['baudrate'] timeout = s_conf['gsmio']['timeout'] gsm.port = port gsm.baudrate = baudrate gsm.timeout = timeout count = 0 while gsm.isOpen(): print 'GSM is busy...' time.sleep(10) count += 1 if count == 10: print 'Force close gsm serial' gsm.close() break gsm.open() return gsm
def power_gsm(mode="ON"): print ">> Power GSM", mode # reset_pin = common.get_config_handle()['gsmio']['reset_pin'] sconf = common.get_config_handle() reset_pin = sconf['gsmio']['resetpin'] stat_pin = sconf['gsmio']['statpin'] GPIO.setmode(GPIO.BOARD) GPIO.setup(reset_pin, GPIO.OUT) GPIO.setup(stat_pin, GPIO.IN) if mode == "ON": exit_stat = 1 else: exit_stat = 0 print exit_stat, GPIO.input(stat_pin) now = time.time() if GPIO.input(stat_pin) == exit_stat: print 'already in %s mode' % (mode) return True else: GPIO.output(reset_pin, True) while GPIO.input(stat_pin) != exit_stat and time.time()<now+10: time.sleep(0.2) GPIO.output(reset_pin, False) if time.time()>10: return False else: return True
def set_system_time(): now = time.time() pmod = serial.Serial() sc = common.get_config_handle() print 'Initializing power module', sc['pmm']['port'] pmod.port = sc['pmm']['port'] pmod.baudrate = sc['pmm']['baud'] pmod.open() pmod.write("PM+R\r") a = pmod.readline() print a try: a = re.sub(r'\W+', '', a) print "I got time" print a dtnow = dt.strptime(a, "%y%m%d%H%M%S") print "Time is" print dt.now().strftime("%c") subprocess.call(["date", "-s", dtnow.strftime("%c")]) except ValueError: print "Error in processing time" f = open('timelog.txt', 'a') f.write("no time\r\n") f.close()
def reset_gsm(delay=45): print(">> Resetting GSM Module") mc = common.get_mc_server() mc.set('rst_gsm_done', False) #SIM800L try: raise CustomGSMResetException reply = gsmcmd('AT+CPOWD=1') print(">> Waiting GSM Reboot") print(delay) time.sleep(delay) except CustomGSMResetException: print(">> Hard Reset Initialized") sconf = common.get_config_handle() reset_pin = sconf['gsmio']['resetpin'] GPIO.setmode(GPIO.BOARD) GPIO.setup(reset_pin, GPIO.OUT) GPIO.output(reset_pin, False) time.sleep(0.2) GPIO.output(reset_pin, True) print(delay) time.sleep(delay) mc.set('rst_gsm_done', True) return
def init_gsm(delay=45): print('Connecting to GSM modem') mc = common.get_mc_server() mc.set('init_gsm_done', False) gsm = init_gsm_serial() reset_gsm(delay) print("Initializing ...") gsm.write(('AT\r\n').encode()) time.sleep(0.5) gsm.write(('AT\r\n').encode()) time.sleep(0.5) print('Switching to no-echo mode', gsmcmd('ATE0').strip('\r\n')) print('Switching to text mode', gsmcmd('AT+CMGF=1').rstrip('\r\n')) try: sconf = common.get_config_handle() simnetconfig = 'AT+COPS=1,1,"{}"'.format(sconf['coordinfo']['simnet']) print('Connecting manually to network', gsmcmd(simnetconfig).rstrip('\r\n')) except: print(">> Error connecting to sim network") mc.set('init_gsm_done', True) gsm.close()
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 get_xbee_handle(): sc = common.get_config_handle() try: ser = serial.Serial(sc['xbee']['port'], sc['xbee']['baud']) xbee = ZigBee(ser, escaped=True) except serial.serialutil.SerialException: print('>> Error: No serial port') # send error message to server here sys.exit() return xbee
def main(): sconf = common.get_config_handle() ri_pin = sconf['gsmio']['ripin'] GPIO.setmode(GPIO.BOARD) GPIO.setup(ri_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.add_event_detect(ri_pin, GPIO.FALLING, callback=ring_isr, bouncetime=3000) while True: time.sleep(100000)
def db_connect(): s_conf = common.get_config_handle() while True: try: db = MySQLdb.connect(host=s_conf['localdb']['host'], user=s_conf['localdb']['user'], passwd=s_conf['localdb']['password'], db=s_conf['localdb']['dbname']) cur = db.cursor() return db, cur except MySQLdb.OperationalError: print('6.', end=' ') time.sleep(2)
def reset_gsm(): print ">> Resetting GSM Module" mc = common.get_mc_server() mc.set('rst_gsm_done',False) #SIM800L sconf = common.get_config_handle() reset_pin = sconf['gsmio']['resetpin'] GPIO.setmode(GPIO.BOARD) GPIO.setup(reset_pin, GPIO.OUT) GPIO.output(reset_pin, False) time.sleep(0.5) GPIO.output(reset_pin, True) time.sleep(45) mc.set('rst_gsm_done',True) return
def get_network_info(): sc = common.get_config_handle() # mc = common.get_mc_server() site_code = sc['coordinfo']['name'] # get info from mysql tables query = ("select r.name, r.xbee_addr_short, r.xbee_addr_long from " "gateways g inner join routers r on g.gateway_id = r.gateway_id " "where g.code = '%s';") % (site_code) router_info = dbio.query_database(query, "gni") # print router_info # routers = pd.DataFrame(columns = ['name','addr_short','addr_long']) network_info = {} network_info['site_code'] = site_code network_info['router_name_by_addr_long'] = {} network_info['router_name_by_addr_short'] = {} network_info['addr_short_list'] = [] network_info['addr_long_list'] = [] network_info['router_addr_long_by_name'] = {} network_info['router_addr_short_by_name'] = {} for name, addr_short, addr_long in router_info: addr_long_packed = struct.pack('>q', int(addr_long, 16)) network_info['router_name_by_addr_long'][addr_long_packed] = name network_info['router_name_by_addr_short'][addr_short] = name network_info['addr_short_list'].append(addr_short) network_info['addr_long_list'].append(addr_long_packed) network_info['router_addr_long_by_name'][name] = addr_long_packed network_info['router_addr_short_by_name'][name] = addr_short print(network_info) common.mc.set('network_info', network_info)
def listen(xbee): sc = common.get_config_handle() signal.signal(signal.SIGALRM, signal_handler) signal.alarm(sc['xbee']['utslidartimeout']) router_tsm_msgs, voltage_info = receive(xbee)
# from gsmSerialio import * import configparser, os, sys, subprocess from datetime import datetime as dt from crontab import CronTab import gsmio import common import processcontrol as pctrl import dbio import subprocess mc = common.get_mc_server() sconf = common.get_config_handle() def gateway_initialize(): common.main() 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")
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))