كيفية إرسال/استلام الرسائل القصيرة باستخدام الأوامر؟
-
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
مع حلقة الحالة في انتظار الاستجابة من المودم "موافق" قبل متابعة الحالة التالية.