2013-09-28 7 views
1

이것은 python으로 작성된 코드 스 니펫으로 usb 모뎀을 통해 sms를 수신합니다. 프로그램을 실행하면 상태 메시지가 "확인"되지만 다른 메시지는 나타나지 않습니다.받는 메시지를 인쇄하려면 어떻게해야합니까? 두 가지가 GetAllSMS에서pyserial이있는 AT 명령은 SMS 수신과 작동하지 않습니다.

import serial 

class HuaweiModem(object): 

    def __init__(self): 
     self.open() 

    def open(self): 
     self.ser = serial.Serial('/dev/ttyUSB_utps_modem', 115200, timeout=1) 
     self.SendCommand('ATZ\r') 
     self.SendCommand('AT+CMGF=1\r') 

    def SendCommand(self,command, getline=True): 
     self.ser.write(command) 
     data = '' 
     if getline: 
      data=self.ReadLine() 
     return data 



    def ReadLine(self): 
     data = self.ser.readline() 
     print data 
     return data 

    def GetAllSMS(self): 
     self.ser.flushInput() 
     self.ser.flushOutput() 



     command = 'AT+CMGL="all"\r' 
     print self.SendCommand(command,getline=False) 
     self.ser.timeout = 2 
     data = self.ser.readline() 
     print data 

     while data !='': 
      data = self.ser.readline() 
     if data.find('+cmgl')>0: 
      print data 


h = HuaweiModem() 
h.GetAllSMS() 

답변

0

나는주의 사항 : OK 최종 응답되기 전에) 당신은 self.ser.readline를 사용하지 self.Readline 그래서 GetAllSMS 첫 번째 응답 라인을 제외하고 (아무것도 인쇄하지 않습니다

1) 수신하고 그 시점에서 data.find('+cmgl')>0은 절대로 일치하지 않습니다.

그냥 문제입니까?

2) print self.SendCommand(command,getline=False)self.SendCommand(command,getline=False)과 똑같이 기능을 호출합니까? (필자가 직접 파이썬을 작성하지 않았기 때문에 확인)


어쨌든 AT 구문 분석을 약간 수정해야합니다.

def SendCommand(self,command, getline=True): 

여기서 getline 매개 변수는 매우 좋은 추상화가 아닙니다. SendCommand 함수의 응답을 읽습니다. 모뎀에 의해 주어진 응답을 적절한 구문 분석을 구현하고 외부에서 처리해야합니다. 응답의 명시적인 처리없이 명령에 대한

self.SendCommand('AT+CSOMECMD\r') 
data = self.ser.readline() 
while ! IsFinalResult(data): 
    data = self.ser.readline() 
    print data  # or do whatever you want with each line 

같은 일반적인 경우 뭔가에, 당신은 위의를 수행하는 SendCommandAndWaitForFinalResponse 기능을 구현할 수 있습니다. IsFinalResult 함수에 대한 자세한 내용은 this 답변을 참조하십시오.

0

여기서 GetAllSMS 기능에 문제가 있습니다. 이제 ...

당신과 나의 GeTALLSMS 기능을 대체하고 모든

 def GetAllSMS(self): 
     self.ser.flushInput() 
     self.ser.flushOutput() 



     command = 'AT+CMGL="all"\r' #to get all messages both read and unread 
     print self.SendCommand(command,getline=False) 
     while 1: 
      self.ser.timeout = 2 
      data = self.ser.readline() 
      print data 

또는이

def GetAllSMS(self): 
     self.ser.flushInput() 
     self.ser.flushOutput() 



     command = 'AT+CMGL="all"\r' #to get all messages both read and unread 
     print self.SendCommand(command,getline=False) 
     self.ser.timeout = 2 
     data = self.ser.readall() #you can also u read(10000000) 
     print data 

그게 전부 어떻게되는지