كيفية إرسال/استلام الرسائل القصيرة باستخدام الأوامر؟

StackOverflow https://stackoverflow.com/questions/2161197

  •  23-09-2019
  •  | 
  •  

سؤال

هل يمكن لأي شخص مساعدتي في إرسال واستقبال الرسائل القصيرة باستخدام الأوامر في بيثون؟

في حال كان الأمر مهمًا ، فأنا أستخدم Fedora 8.

أي هاتف سيكون أفضل مع Linux (Nokia ، Sony Ericson ، Samsung ، .....)؟ هل ستدعم جميع الهواتف إرسال واستقبال الرسائل القصيرة باستخدام الأوامر؟

هل كانت مفيدة؟

المحلول

إليك بعض رمز المثال الذي يجب أن تبدأ (في 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()

تحتاج إلى القيام شيئين إضافيين:

  • قم بتشفير الرسالة بالتنسيق المناسب (في الغالب GSM 03.38, ، هناك مفيد جدول الترجمة في unicode.org). إذا كنت لا تهتم حقًا بأي شخصيات أخرى غير ASCII ، فيمكنك فقط التحقق مما إذا كانت كل حرف موجودًا string.printable.

  • تحقق من طول الرسالة (لست متأكدًا مما إذا كان الأمر يتعلق بالترميز ، لكنه أحيانًا 140 حرفًا ، وأحيانًا 160).

يمكنك استخدام phone.readall() للتحقق من وجود أخطاء ، ولكن من الأفضل التأكد من أن رسالتك على ما يرام قبل إرسالها إلى الهاتف. لاحظ أيضًا أن النوم يبدو ضروريًا.

معظم الهواتف سوف تفهم هذا. من أجل الحصول على Nokia C5 القديم لفتح الاتصال التسلسلي ، اضطررت إلى تحديد "جناح الكمبيوتر الشخصي" من القائمة التي تظهر عند إدراج كابل USB. هذا يجب أن يعمل على قدم المساواة على بلوتوث.

يستخدم الرمز Pyserial حزمة ، متاحة للبيثون 2 و 3.

أنظر أيضا:

نصائح أخرى

لرؤية إرسال الرسائل القصيرة باستخدام الأمر في الأمر ، سيساعد هذا.

    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"

لاستلام الرسائل القصيرة باستخدام الأمر في الأمر ، يجب أن يساعد هذا

    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()

التحدث إلى الهاتف أمر سهل. تحتاج فقط إلى فتح ما هو مناسب /dev/ttyACM* الجهاز والتحدث معه. أي الهاتف أصعب. يجب أن يكون أي هاتف يدعم "الربط" والكامل في تعيين رسائل الرسائل القصيرة على ما يرام.

أود أن أقترح استبدال time.sleep مع حلقة الحالة في انتظار الاستجابة من المودم "موافق" قبل متابعة الحالة التالية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top