Wie zum Senden / Empfangen von SMS über AT-Befehle?
-
23-09-2019 - |
Frage
Kann jemand mir helfen SMS senden und empfangen können AT-Befehle in Python?
Falls es darauf ankommt, bin ich mit Fedora 8.
Welches Telefon besser sein wird mit Linux (Nokia, Sony Ericson, Samsung, .....)? Werden alle Telefone unterstützen das Senden und Empfangen von SMS über AT-Befehle?
Lösung
Hier ist ein Beispiel-Code, erhalten Sie sollten gestartet (in Python 3000):
import time
import serial
recipient = "+1234567890"
message = "Hello, World!"
phone = serial.Serial("/dev/ttyACM0", 460800, timeout=5)
try:
time.sleep(0.5)
phone.write(b'ATZ\r')
time.sleep(0.5)
phone.write(b'AT+CMGF=1\r')
time.sleep(0.5)
phone.write(b'AT+CMGS="' + recipient.encode() + b'"\r')
time.sleep(0.5)
phone.write(message.encode() + b"\r")
time.sleep(0.5)
phone.write(bytes([26]))
time.sleep(0.5)
finally:
phone.close()
Sie müssen zwei weitere Dinge tun:
-
Encode die Nachricht in dem entsprechenden Format (meist GSM 03.38 , href="http://www.unicode.org/Public/MAPPINGS/ETSI/GSM0338.TXT" gibt es eine handliche Übersetzungstabelle bei unicode.org). Wenn Sie wirklich über alle Zeichen ist es egal, andere als ASCII, können Sie einfach überprüfen, ob jedes Zeichen in
string.printable
ist. -
Überprüfen Sie die Länge der Nachricht (Ich bin mir nicht sicher, ob es mit der Codierung zu tun ist, aber es ist manchmal 140 Zeichen, manchmal 160).
Sie können mit phone.readall()
auf Fehler überprüfen, aber es ist am besten, um sicherzustellen, dass Ihre Nachricht OK ist, bevor Sie es senden, um das Telefon ab. Beachten Sie auch, dass die Betten notwendig zu sein scheinen.
Die meisten Handys wird dies verstehen. Um meinen alten Nokia C5 zu öffnen, die serielle Verbindung zu bekommen, musste ich „PC Suite“ aus dem Menü auszuwählen, das erscheint, wenn Sie die USB-Kabel ein. Dies sollte gleichermaßen gut über Bluetooth arbeiten.
Der Code verwendet das pyserial Paket, verfügbar für Python 2 und 3
Siehe auch:
Andere Tipps
SMS senden, um zu sehen Auf Befehl Dies wird helfen.
import serial
import time
class TextMessage:
def __init__(self, recipient="+2348065777685", message="TextMessage.content not set."):
self.recipient = recipient
self.content = message
def setRecipient(self, number):
self.recipient = number
def setContent(self, message):
self.content = message
def connectPhone(self):
self.ser = serial.Serial('COM70', 460800, timeout=5, xonxoff = False, rtscts = False, bytesize = serial.EIGHTBITS, parity = serial.PARITY_NONE, stopbits = serial.STOPBITS_ONE)
time.sleep(1)
def sendMessage(self):
self.ser.write('ATZ\r')
time.sleep(1)
self.ser.write('AT+CMGF=1\r')
time.sleep(1)
self.ser.write('''AT+CMGS="''' + self.recipient + '''"\r''')
time.sleep(1)
self.ser.write(self.content + "\r")
time.sleep(1)
self.ser.write(chr(26))
time.sleep(1)
def disconnectPhone(self):
self.ser.close()
sms = TextMessage("+2348063796720","Mummy i sent this message from my computer")
sms.connectPhone()
sms.sendMessage()
sms.disconnectPhone()
print "message sent successfully"
SMS empfangen Bei Befehl dabei helfen sollte
import serial
import time
import sys
class HuaweiModem(object):
def __init__(self):
self.open()
def open(self):
self.ser = serial.Serial('COM70', 406800, timeout=5)
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="REC UNREAD"\r\n'#gets incoming sms that has not been read
print self.SendCommand(command,getline=True)
data = self.ser.readall()
print data
h = HuaweiModem()
h.GetAllSMS()
Gespräch mit dem Telefon ist einfach. Sie müssen nur das entsprechende /dev/ttyACM*
Gerät und reden zu öffnen. Welches Handy ist kniffliger. Jedes Telefon, das unterstützt „Tethering“ und der volle AT-Befehlssatz für SMS-Nachrichten sollte in Ordnung sein.
würde ich vorschlagen, die time.sleep
mit Bedingung Schleife Warten auf die Antwort vom Modem „OK“, bevor weiter nächster Zustand ersetzen.