2012-04-11 6 views
1

Ich arbeite in Python 2.6 und ich möchte SMS an ein Handy senden, während mein Handy, d. H. Nokia E-72 ist mit dem PC über Datenkabel verbunden.SMS senden in Python 2.6 über eine Datenkabelverbindung

Das Mobiltelefon ist über eine serielle Schnittstelle verbunden und der Code fordert ebenfalls den richtigen Port auf. Es gibt keinen Fehler im Code, aber die Nachricht wird nicht gesendet.

Mein Code ist wie folgt:

import serial 
import time 
phone = serial.Serial() 
phone.baudrate = 38400 
phone.bytesize = 8 
phone.stopbits = 1 
phone.xonxoff = 0 
phone.rtscts = 0 
phone.timeout = 0 
phone.port = 4 #try different ports here, if this doesn't work. 
phone.parity=serial.PARITY_NONE 
phone.open() 
print phone.portstr 
recipient = "+923219409998" 
message = "We did it!" 
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) 
    phone.readall() 
finally: 
    phone.close() 
+6

Bitte korrigieren Sie die Codeformatierung, bevor Ihnen jemand helfen kann, das Problem zu finden. – Gangadhar

+0

Nicht sicher, ob das Telefon es sogar erlaubt, und BTW sind Sie sicher, dass es eine serielle Verbindung ist? – Geoffroy

+0

ja es ist eine serielle Verbindung. Kannst du mir sagen, warum fragst du das? – user1325702

Antwort

0

Haben Sie versucht, später die Verbindungsparameter als Argumente an Serial() statt mit ihnen zu geben? Normalerweise wird eine Verbindung sofort geöffnet, und ich bin nicht sicher, ob eine späte open() überhaupt wirksam ist ...

So

  1. etwas Versuchen Sie, wie

    phone = serial.Serial(
        baudrate=38400, 
        bytesize=8, 
        stopbits=1, 
        xonxoff=0, 
        rtscts=0, 
        timeout=0, 
        port=4, #try different ports here, if this doesn't work. 
        parity=serial.PARITY_NONE, 
    ) 
    print phone.portstr 
    

    sonst wird die Verbindung mit Standard-Parametern eingerichtet werden, was wahrscheinlich nicht das ist, was Sie wollen.

    Wenn es immer noch nicht funktioniert,

  2. versuchen, die Portnummer mit dem realen Port-Gerät Zeichenfolge zu ändern ("COM5", "/dev/ttyS5") und vielleicht

  3. auch die Antwort des Telefons analysieren. Zu diesem Zweck sollten Sie in den Verbindungsparametern eine Zeitüberschreitung definieren und/oder Ihr Lesen auf die Anzahl der von phone.inWaiting() zurückgegebenen Bytes beschränken.


Neben (aber das ist nur eine Frage des Stils), je nachdem, welche Version von Python verwenden Sie, könnte es sauberere sein

zu verwenden
import contextlib 
with contextlib.closing(phone): 
    <do stuff with phone> 

statt

try: 
    <do stuff with phone> 
finally: 
    phone.close() 

Es ist semantisch absolut gleich, aber sieht besser aus (IMHO).

+0

richtig, aber sogar als SMS wird nicht gesendet .... :( – user1325702

+0

@ user1325702 Nach welcher der nummerierten Schritte funktioniert es nicht? Was haben die anderen? – glglgl

+0

das Programm gibt keinen Fehler und es zeigt die Portnummer mit welchem ​​Handy verbunden ist (was korrekt ist) und das Telefon schließt sich am Ende aber es sendet keine SMS – user1325702