我需要收到成功发送的通知。我读了很多并尝试过。我有 GSM 调制解调器中兴K4510Z。我没有收到任何通知或保存到 SIM 卡。在我的测试中。我以为我的SIM卡坏了。所以我尝试AT+CMGW将临时消息写入 SIM 卡。它成功并存在。所以最后我认为,这是命令而不是SIM卡。我尝试了很多想法AT+CNMI, AT+CPMS。发送消息后我没有收到回复缓冲区。我也检查一下AT+CPMS?发送消息后。如果有消息,它会在不通知的情况下写入 SIM 卡。但什么也没有,没有通知,没有消息写入 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 Preferred 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=[模式[mt[bm[ds[bfr]]]]]
-
mode:未经请求的结果代码缓冲选项。
mode=2
意味着在调制解调器繁忙的情况下 URC 会被缓冲。
-
mt:SMS-DELIVER 的结果代码指示报告。
mt=2
意味着传入的消息直接显示+CMT: ...
URC。没有存储!
-
bm:广播报告选项。与我们无关。
-
ds:SMS-STATUS-REPORTs 报告选项。
ds=0
表示状态报告接收不报告也不存储!那不是你想要的!
-
bfr:缓冲结果代码处理方法。与我们无关。
相反,您可能想要:
-
mt=2,这意味着传入的短信被存储并且
+CMTI: <mem>,<idx>
显示 URC,表明它已存储在内存=mem 的索引=idx 处。
-
ds=2, 意思是如果存储状态报告,那么一个
+CDSI: <mem>,<idx>
显示 URC,表明它已存储在内存=mem 的索引=idx 处。
这可能对您有帮助,但请注意
- 您必须确保您的调制解调器型号确实支持这些功能(在其 AT 用户指南中进行验证)并且它们不是虚拟的。
- 您必须确保您的运营商支持状态传送报告,并且已为您的 SIM 卡启用了这些报告。
- SMS 存储类别会影响调制解调器执行的存储操作,对于状态传送报告尤其如此。在这种情况下你可以使用ds=1设置,这至少使调制解调器显示带有 URC 的报告
+CDS: ...
.
注意:还要注意 +CNMI 设置是不稳定的,因此如果您重新启动,您将丢失它们,除非您将它们保存在默认配置文件中(通过发出AT&W&P
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)