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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top