2014-04-09 107 views
2

我需要一段代碼來幫助我通過短信與華爲3G加密狗發送天氣預報。AT命令在python的短信文本中發送

它的工作,但這裏是我得到:

AT+CMGF=1 
AT+CMGS="+12345678" 
It's partly cloudy and 20C now in Wahren. 

爲什麼我收到那些AT字符串?

import pywapi 
import string 
import serial 


weather_com_result = pywapi.get_weather_from_weather_com('AGXX0006') 
sms_text = "It's " + string.lower(weather_com_result['current_conditions']['text']) + " and " + weather_com_result['current_conditions']['temperature'] + "C now in Wahren.\n\n" 

dongle = serial.Serial(port="COM6",baudrate=460800,timeout=0,rtscts=0,xonxoff=0) 


def sendatcmd(): 
    number = "+12345678" 
    dongle.write('AT+CMGF=1\r') 
    dongle.write('AT+CMGS="' +number+'"\r') 
    dongle.write(str(sms_text)+"\r") 
    dongle.write(chr(26)) 
    dongle.close() 
    print "sent" 

sendatcmd() 
+0

Python如何獲得對此類處理器的訪問權限(以便它可以讀取/寫入AT命令)。在Android中,該訪問由無線接口層(RIL)提供,並且用戶可以*不*有權訪問它。 – jww

+0

由於操作系統將USB視爲COM端口,並且正在使用python串行庫,所以我不認爲主控處理器正在處理AT命令,而只是將其轉發到串行/ USB接口作爲僅由加密狗解釋的數據,就像任何其他串行數據一樣。 – stanri

+0

SMS短信需要後回車嗎? http://www.diafaan.com/sms-tutorials/gsm-modem-tutorial/at-cmgs-text-mode/表示否則。這可能會使解析器混淆。 – stanri

回答

0

我想你可能需要以轉關呼應首先發送ATE0命令,否則每個命令會被調制解調器呼應。

我曾經對GSM調制解調器進行編程,但現在沒有任何硬件來測試它。嘗試在第一個AT命令之前插入此代碼:

dongle.write('ATE0\r') 
+0

我試過了但我收到了一條空的消息。 –

+0

哪條消息是空的? PS:你應該等待調制解調器的回答(OK或ERROR)並解析它們,否則你不能保證你所期望的事情正在發生 –

+0

我把這行放在函數中的第一個AT命令之前,就像你告訴我的那樣,我得到了一個空的短信文本。 –