예제 #1
0
 def __init__(self, settings):
     self.timer = MOD.secCounter()
     self.settings = settings
     self.settingsByKey = settingsByKey = self.settings.byKey
     SER.set_speed('300')
     #self.charmParsed = settingsByKey['charm']
     self.name = settingsByKey['name']
     self.i = settingsByKey['id']
     self.serverAddr = settingsByKey['serverAddr']
     self.maxLate = settingsByKey['maxlate']
     self.desc = settingsByKey['desc']
     self.charm = settingsByKey['charm']
     self.mainLoop = None
     print self.timer
     # Komendy odpowiedzialne za komunikacje internetową
     SER.setDSR(0)
     SER.setCTS(0)
     SER.setDCD(0)
     self.time = 0
     self.SMS = SMS(self)
     self.ipAddr = ""
     self.getTime()
     atstart = settingsByKey["atstart"]
     if len(atstart): sendATlist(atstart)
     self.maxSMSinMEM = settingsByKey["sms_limit"]
     MDM.send(self.m_init, 10)
     MDM.receive(20)
예제 #2
0
    def net(self):
        """	Funkcja Wprowadza komendy AT odpowiedzialne
			za komunikacje internetnetową"""
        b = ""
        i = 0
        a1, a2 = self.m_net
        list = map(\
         (lambda x,y,s=(self.settingsByKey): x + s[y][0] +'"\r'),\
         ('AT#USERID="','AT#PASSW="'),\
         ('gsmuser',"gsmpass")\
        )
        for a in a1, list, a2:
            for c in a:
                MDM.send(str(c), 10)
                i = 0
                while i < 20:
                    b = MDM.receive(10)
                    if not b:
                        i = i + 1
                        MOD.sleep(5)
                        continue
                    print "Network Initializer: ", c
                    isError(b)
                    break
                # self.ipAddr=b[:b.find("\r")]
                else:
                    print "ERROR to receive command responce."
예제 #3
0
def sendAndCheck(command="AT\r",
                 commit="OK",
                 s=10,
                 retryR=3,
                 retryS=1,
                 timeout=5):
    """
		Funkcja wysyła komendy AT oraz sprawdza ich
		wartość zwrotną. Wrazie nietrzymania wartości
		zwrotnej funkcja ponawia próbe jej odebrania.
		Wrazie przekroczenie limitu prób odebrania
		wartości zwrotnej ("retryR" razy). Funkcja
		ponawia próbe wywołania komendy AT (retryS razy)
	"""
    i = 0
    c = e = None
    while i < retryS:
        MDM.receive(1)
        # if a[:-1]!="\r": a+="\r"
        e = MDM.send(command, s)
        for a in range(0, retryR):
            c = MDM.receive(10)
            if c.find(commit) > -1: return 1
            MOD.sleep(timeout)
        i = i + 1
    return 0
예제 #4
0
 def sendATData(self, atcom, atres, trys=1, timeout=1, csd=1):
     mdm_timeout = int(self.config.get('TIMEOUT_MDM'))
     s = MDM.receive(mdm_timeout)
     result = -2
     while (1):
         if (csd):
             self.tryCSD()
         if (self.config.get('DEBUG_AT') == '1'):
             self.debug.send('DATA AT OUT: ' + atcom)
         s = ''
         MDM.send(atcom, mdm_timeout)
         timer = MOD.secCounter() + timeout
         while (1):
             s = s + MDM.receive(mdm_timeout)
             if (s.find(atres) != -1):
                 result = 0
                 break
             if (s.find('ERROR') != -1):
                 result = -1
                 break
             if (MOD.secCounter() > timer):
                 break
         if (self.config.get('DEBUG_AT') == '1'):
             self.debug.send('DATA AT IN: ' + s[2:])
         trys = trys - 1
         if ((trys <= 0) or (result == 0)):
             break
         MOD.sleep(15)
     return (result, s)
예제 #5
0
def sendSMS(NUMBER, SMSText):
	TIMEOUT_CMD = 50
	Helper.writeLog('Starting sendSMS\r\n')
	
	res = Helper.sendCmd('AT+CMGF', '1', TIMEOUT_CMD) # select text format type
	Helper.writeLog('Finished AT+CMGF\r\n')
	
	res = Helper.sendCmd('AT+CNMI', '2,1', TIMEOUT_CMD) # alarm indicators
	Helper.writeLog('Finished AT+CNMI\r\n')
	
	res = Helper.sendCmd('AT+CMGS', NUMBER, TIMEOUT_CMD) # send the message without storing it
	Helper.writeLog('Finished AT+CMGS\r\n')
	
	if (res.find('>') == -1):
		return -1
	else:
		res = MDM.send(SMSText, 0)
		Helper.writeLog('Finished sending SMSText\r\n')
		
		res = MDM.sendbyte(0x1a, 0)
		Helper.writeLog('Finished CTRL+Z\r\n')
		
		for i in range(6):
			res=MDM.read()
			if(res.find("OK")!=-1):
				Helper.writeLog('Found and returning\r\n')
				return 1
			else:
				MOD.sleep(300)
		
		Helper.writeLog('REturning -1\r\n')
		return -1
예제 #6
0
def sendAT(cmd):
    MDM.send(cmd + '\r', 0)
    res = MDM.receive(30)
    if (res.find('OK') == -1):
        print 'cmd: %s failed: %s' % (cmd, res)
        return 0
    return 1
예제 #7
0
def gprsIsOn():
    MDM.send('AT#GPRS?\r', 0)
    res = MDM.receive(10)
    print 'GPRS on: ' + res
    if (res.find('1') == -1):
        return 0
    else:
        return 1
예제 #8
0
 def sendSMS(self, number, smstext):
     # Send command for sending message
     a = MDM.send('AT+CMGS="' + number + '"\r', 2)
     # clear receive buffer
     res = MDM.receive(10)
     a = MDM.send(smstext, 2)  # Send body of message
     # this terminates the message and sends it
     a = MDM.sendbyte(0x1A, 2)  # terminating the message require ctrl-z
     return ()
예제 #9
0
def sendEscapeSequence():

    # Module doesn't care if it isn't in data mode
    # Must sleep AT LEAST  1 sec before and after escape sequence
    MOD.sleep(12)
    MDM.send("+++", 5)
    MOD.sleep(12)

    timeout = MOD.secCounter() + 5
    return _target(["OK"], timeout) != 0
예제 #10
0
    def __init__(self, module):
        self.allowedNumbers = ["+48796752703", "+48601593746"]

        MDM.send('ATE0\r', 2)
        self.prepare()
        self.messageFlag = 0
        self.messages = {}
        self.messagePos = ""
        module.add_operation("SMSCHECK", lambda module,SMS = self: \
         SMS.smsCheck(module) \
        )
예제 #11
0
def initModem():
    if (not sendAT('AT')):
        return 0
    if (not sendAT('AT+IPR=9600')):
        return 0
    if (not sendAT('AT+CMEE=2')):
        return 0
    res = MDM.send('AT+CPIN=1234\r', 0)  # insert your pin
    res = MDM.receive(3)
    # ignore error, maybe pin is already set
    return 1
예제 #12
0
def sendCmd(cmd, value, waitfor):
    if (value != ""):
        cmd = cmd + '='
    else:
        cmd = cmd + '\r'
    res = MDM.send(cmd, 0)
    if (value != ""):
        res = MDM.send(value, 0)
        res = MDM.send('\r', 0)
    if (waitfor > 0):
        res = MDM.receive(waitfor)
    return res
예제 #13
0
    def serverCommunication(self,\
      counter = MOD.secCounter,
      read = MDM.read,
      sleep = MOD.sleep
     ):
        """	Funkcja przekazuje komunikacje do funkcji
			parseConfiguration odpowiedzialnej za
			interpretacje konfiguracji."""
        x = ""
        loD = 0
        timeout = counter() + 60
        p = config(self.module)
        while timeout > counter():
            x = read()
            if x == "":
                sleep(10)
                continue
            loD = len(x)
            e = p.parse(x, loD)
            if e == 0: return
            timeout = counter() + 60
        del p
        MDM.send("+++", 10)
        MDM.receive(50)
        MDM.send("AT#SH=1", 10)
        MDM.receive(10)
예제 #14
0
 def getMessage(self, msgid):
     msg = self.messages.get(msgid)
     if msg: return msg
     MDM.receive(10)
     MDM.send('AT+CMGR=' + str(msgid) + '\r', 2)
     SMScontent = ""
     t = 0
     while not SMScontent:
         SMScontent = MDM.receive(15)
         if t >= 5:
             print "[SMS] Cannot get message number", msgid, "\r"
             return ""
         t = t + 1
     self.messages[msgid] = SMScontent
     return SMScontent
예제 #15
0
def receiveReponse():

    timeout = MOD.secCounter() + 10

    str = ""
    length = ""
    newlinepos = 0

    while (MOD.secCounter() < timeout):

        newlinepos = str.find("\n\r")

        if ((newlinepos != -1) and not length):

            newlinepos = newlinepos + 2
            pos = str.find("Content-Length:") + 15

            while (str[pos] != '\n'):
                length = "%s%s" % (length, str[pos])
                pos = pos + 1

            length = int(length) + newlinepos

        else:
            MOD.sleep(5)
            str = str + MDM.receive(1)

        if (length and len(str) >= length):
            return str[newlinepos:(newlinepos + length)]

    return 0
예제 #16
0
 def __init__(self, api=None, maxPS=512):
     self.api = api
     if api is MDM:
         self.isMDM = 1
         self.isSER = 0
         self.name = "MDM"
         self.send = lambda b: MDM.send(b, 1)
         self.alive = self.MDM_connection_alive
     else:
         self.isSER = 1
         self.isMDM = 0
         self.name = "SER"
         self.limit = 256
         self.alive = lambda: 1
         self.send = lambda b: SER.send(b)
     self.maxPS = maxPS
     self.baudSec = 0
     self.baud = None
     self.isMDM = 0
     self.baudId = "-1"
     self.b = ""
     self.ex = 0
     self.p = 0
     self.c = 0
     self.name = ""
     self.limit = 1024
     self.l = 0
     self.reset = 0
     self.nextInterface = None
예제 #17
0
 def parseConfigLine(self):
     # - Znak "#" powoduje do wprowadznie konfiguracji nastepujacej po nim
     # - Za wyjątkiem sytuacji w której pd znaku "#" występuje znak "?",
     #	w tej sytuacji moduł wysyła na interfejs konfiguracje w formacie:
     #	<Id>%<Nazwa modułu>%<Opis>%<Harmonogram>
     argsLine = [""]
     charm = []
     argsIn = 0
     isnEnd = 1
     a = ""
     c_now = ""
     forward = self.forward
     m = self.module
     c_now = forward()[1]
     if c_now == "?":
         MDM.send(self.module.getDeviceInfoLine(), 1)
         return
     else:
         print "Parsing properties."
         while (c_now and c_now != ';'):
             a = argsLine[argsIn]
             if c_now == '/' and a:
                 charm.append(argsLine[argsIn])
                 argsLine[argsIn] = ""
             elif c_now == "%":
                 print "Argument: ", a
                 argsIn = argsIn + 1
                 argsLine.append("")
             else:
                 argsLine[argsIn] = a + c_now
             c_now = forward()[1]
         if argsIn:
             m.i[0] = argsLine[0]
             m.name[0] = argsLine[1]
             m.desc[0] = argsLine[2]
         if len(charm) and m.mainLoop:
             m.mainLoop.parseCharmSequence(charm)
         print \
          "id: ", m.i[0],'\r\n',\
          "name: ", m.name[0],'\r\n',\
          "desc: ", m.desc[0],'\r\n',\
          "charm: ", charm,'\r\n',\
          "parsing charm...",'\r\n'
         print "OK"
     return 1
예제 #18
0
 def connectToServer(self, module):
     """Funkcja rozpoczyna komunikacje z serwerem"""
     i = 0
     module.getCSGN()
     MDM.send("AT#SH=1\r", 1)
     MDM.receive(0)
     print module.serverAddr
     ip, port = module.serverAddr[0:2]
     command = "AT#SD=1,0," + port + "," + ip + "\r"
     if sendAndCheck(command, "CONNECT", 5, 5, 5):
         print "--SOCKET OPENED--"
         MDM.send(str("$" + module.CSGN), 1)
         self.serverCommunication()
     else:
         print "Cannot connect to socket"
         print "--SOCKET FAILURE--"
         MDM.send("AT#SH=1", 1)
         MDM.receive(0)
예제 #19
0
파일: main.py 프로젝트: darksv/garbage
def wait_for_response(timeout=5.0):
    data = ''
    time_max = time.time() + timeout
    while not contains_any(data, 'OK\r', 'ERROR\r') and time.time() < time_max:
        byte = MDM.readbyte()
        if byte != -1:
            data += chr(byte)

    return 'OK\r' in data
예제 #20
0
파일: main.py 프로젝트: darksv/garbage
def read_registers(start_reg, n):
    SER2.send('reading: %02x %d\r\n' % (start_reg, n))
    MDM.send(
        'AT#I2CRD=%d,%d,%02x,%02x,%d\r' %
        (GPIO_SDA, GPIO_SCL, CODEC_ADDR, start_reg, n), 0)

    data = ''
    time_max = time.time() + 10.0
    while not contains_any(data, 'OK\r', 'ERROR\r') and time.time() < time_max:
        byte = MDM.readbyte()
        if byte != -1:
            data += chr(byte)

    data = data.lstrip()
    if data.startswith('#I2CRD: '):
        return data[8:data.index('\r')]

    return None
예제 #21
0
 def isMessage(self):
     res = MDM.receive(5)
     a = res.find('+CMTI: "SM",')
     if (a != -1):
         firstdigit_pos = a + 12
         self.messagePos = res[firstdigit_pos:-2]
         print "Message id is", self.messagePos
         self.messageFlag = 1
         return 1
     else:
         self.messageFlag = 0
         return 0
예제 #22
0
파일: gsm.py 프로젝트: teleofis/AntiTheft
def sendAT(request, response, timeout=2, interface=1):
    if (interface == 1):
        MDM.send(request + '\r', 2)
    else:
        MDM2.send(request + '\r', 2)
    result = -2
    data = ''
    timer = MOD.secCounter() + timeout
    while (MOD.secCounter() < timer):
        if (interface == 1):
            rcv = MDM.read()
        else:
            rcv = MDM2.read()
        if (len(rcv) > 0):
            data = data + rcv
            if (data.find(response) != -1):
                result = 0
                break
            if (data.find('ERROR') != -1):
                result = -1
                break
    return (result, data)
예제 #23
0
def _target(targets, timeout):
    res = ""

    while (MOD.secCounter() < timeout):

        res = res + MDM.receive(1)
        index = 0

        for target in targets:
            if (res.rfind(target) != -1):
                return [index, res]
            index = index + 1

    return 0
예제 #24
0
def enableAndReb(fileToExec, Number, MessageIndex):
    #deleteSMS(MessageIndex)
    SER.send('In Save file' + fileToExec + '\r\n')
    SER.send('After renaming file' + fileToExec + '\r\n')
    NUMBER = Number
    SMSText = "I'm going to reboot, enabling the following file: " + fileToExec
    SER.send("enableAndReb: trying to enable and reboot the module\r\n")
    fileName = '"' + fileToExec + '"'
    res = MDM.read()
    res = Helper.sendCmd('AT#ESCRIPT', fileName, 0)
    res = MDM.receive(30)

    if res.find('OK') != -1:
        MOD.sleep(200)
        text = "script qualified :" + fileName + '\r\n'
        SER.send(text + "\r\n")
        res = sendSMS(NUMBER, SMSText)
        MOD.sleep(200)
        res = MDM.send('AT#REBOOT\r', 0)
        MOD.sleep(200)
        SER.send('rebooting\r\n')
        return 1
    else:
        return -1
예제 #25
0
파일: main.py 프로젝트: darksv/garbage
def write_registers(start_reg, *data):
    SER2.send('writing: %02x %r\r\n' % (start_reg, data))

    MDM.send(
        'AT#I2CWR=%d,%d,%02x,%02x,%d\r' %
        (GPIO_SDA, GPIO_SCL, CODEC_ADDR, start_reg, len(data)), 0)
    MDM.send(''.join(hex(x)[2:].zfill(2) for x in data), 0)
    MDM.sendbyte(0x1a, 0)

    return wait_for_response()
예제 #26
0
def _command(command, timeout=5):

    # Clear input buffer before reading
    MDM.receive(1)

    MDM.send(command, 5)
    MDM.send(CRLF, 5)

    #SER.send("%s \n" % (command))

    return MOD.secCounter() + timeout
예제 #27
0
 def receiveMDM(self):
     data = ''
     size = int(self.config.get('TCP_MAX_LENGTH'))
     while(1):
         rcv = MDM.read()
         if(len(rcv) > 0):
             self.buffer = self.buffer + rcv
             if(len(self.buffer) > size):
                 break
         else:
             break
     if(len(self.buffer) > 0):
         data = self.getBuffer(size)
         if(data.find('NO CARRIER') != -1):
             raise Exception, '"NO CARRIER" on socket #1'
         self.debug.send('Data received from socket #1 (data): ' + str(len(data)) + ' bytes')
     return data
예제 #28
0
def check4SMS():
	Helper.sendCmd('AT+CMGF','1', 50)
	data= ''
	data = Helper.sendCmd('AT+CMGL','"ALL"',20)
	smslist=''
	#listen to what the telit says with a timeout of 20
	smslist = smslist + data
	while data != '':
		data = MDM.receive(20)
		smslist = smslist + data
    
	smsarray = []
	lines = smslist.split('+CMGL:')
	if len(lines) > 1:
		for i in range(1,len(lines)):
			smsarray.append(parseSMS(lines[i]))
	
	return smsarray
예제 #29
0
def makeRequest(path, content):

    MDM.receive(1)

    message = ("POST %s HTTP/1.1\n"
               "Host: %s\n"
               "Content-Type: application/json\n"
               "Content-Length: %s\n"
               "\n"
               "%s") % (path, CONNECTED_HOST, len(content), content)

    MDM.send(message, 5)
    MDM.send(CRLF, 5)

    response = receiveReponse()

    return response
예제 #30
0
파일: main.py 프로젝트: darksv/garbage
def main():
    if config_codec():
        SER2.send('Codec configured\r\n')
    else:
        SER2.send('Cannot configure the codec\r\n')

    data = ''
    while True:
        byte = MDM.readbyte()
        if byte == -1:
            time.sleep(0.1)
            continue

        data += chr(byte)
        if not '\r' in data:
            time.sleep(0.1)
            continue

        line, data = data.split('\r', 2)
        if 'RING' in line:
            SER2.send('ring!!!\r\n')
            accept_call()
        else:
            SER2.send(line + '\r\n')