我需要获得通知成功发送。我读了很多,然后尝试了。我有GSM调制解调器ZTE K4510Z。我没有收到任何通知或保存到SIM卡。在我的考验中。虽然我的SIM卡坏了。因此,我尝试AT + CMGW将临时消息写入simcard。它成功并存在。所以最后我认为,这是命令而不是Simcard。我尝试了很多来自AT + CNMI,AT + CPMS的想法。发送邮件后得到的无应答缓冲区。发送邮件后,我也用AT + CPMS?进行了检查。如果有消息,它会在没有通知的情况下写入simcard。但是什么也没有,没有通知,也没有消息写入到SIM卡存储中。
import serial
import time
modem = serial.Serial('COM35', 9600, timeout=0)
modem.write(b'AT\r')
while True:
buffer = modem.readline()
if buffer == b'OK\r\n':
print('OK')
break
# Set SMS MODE
modem.write(b'AT+CMGF=1\r')
while True:
buffer = modem.readline()
if buffer == b'OK\r\n':
print('OK')
break
# Set Preffered Storage
modem.write(b'AT+CPMS="SM","SM","SM"\r')
while True:
buffer = modem.readline()
if buffer == b'OK\r\n':
print('OK')
break
# Set how a notification
modem.write(b'AT+CNMI=2,2,0,0,0\r')
while True:
buffer = modem.readline()
if buffer == b'OK\r\n':
print('OK')
break
recipient = "Phone_number"
message = 'Message'
# Set Recipient
modem.write(b'AT+CMGS="' + recipient.encode('UTF-8') + b'"\r')
while True:
buffer = modem.read(1)
if buffer == b'>':
break
# Set Message
modem.write(message.encode('UTF-8') + b'\r')
# Input CTRL+Z
modem.write(bytes([26]))
# Waiting any buffer
while True:
buffer = modem.readline()
print(buffer)
time.sleep(1)
modem.close()
您正在发送AT+CNMI=2,2,0,0,0
命令,目标是在SM中包含传入的SMS或SMS传递报告,以及针对它们的URC通知。我将尝试说明如何启用这两个功能。
根据规范,该命令的语法是:
AT + CNMI = [mode [,mt [,bm [,ds [,bfr]]]]]]
mode=2
表示在调制解调器繁忙时缓冲URC。mt=2
表示直接使用+CMT: ...
URC显示传入的消息。没有存储!!ds=0
表示不报告和不存储状态报告!那不是你想要的!相反,您可能想要:
+CMTI: <mem>,<idx>
URC,表明已将其存储在index = idx的memory = mem中。+CDSI: <mem>,<idx>
URC,表明已存储在index = idx处的memory = mem中。这可能会对您有所帮助,但请注意
+CDS: ...
显示报告。注意:也请注意+ CNMI设置是易失的,因此,如果重新启动,除非将其保存在默认配置文件中(通过发出AT&W&P
),否则它们会丢失。