Language agnostic +;CNMI命令:如何接收通知并将收到的短信保存到SIM卡
我需要获得成功交付的通知。我读了很多书,也试过了。我有GSM调制解调器中兴K4510Z。我没有收到任何通知或保存到sim卡。在我的测试中。我想我的sim卡坏了。因此,我尝试在+CMGW处向simcard写入临时消息。它是成功和存在的。所以最后我认为,这是命令而不是simcard。我试着从AT+CNMI,AT+CPMS进行思考。发送消息后没有收到回复缓冲区。在发送消息后,我也会使用+CPMS检查它。如果收到一条消息,它将在不通知的情况下写入simcard。但是没有,没有通知,没有消息写入simcard存储Language agnostic +;CNMI命令:如何接收通知并将收到的短信保存到SIM卡,language-agnostic,sms,at-command,Language Agnostic,Sms,At Command,我需要获得成功交付的通知。我读了很多书,也试过了。我有GSM调制解调器中兴K4510Z。我没有收到任何通知或保存到sim卡。在我的测试中。我想我的sim卡坏了。因此,我尝试在+CMGW处向simcard写入临时消息。它是成功和存在的。所以最后我认为,这是命令而不是simcard。我试着从AT+CNMI,AT+CPMS进行思考。发送消息后没有收到回复缓冲区。在发送消息后,我也会使用+CPMS检查它。如果收到一条消息,它将在不通知的情况下写入simcard。但是没有,没有通知,没有消息写入simca
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传递报告,以及针对它们的URCs通知。我将尝试解释如何启用这两个功能
根据规范,该命令的语法为:
AT+CNMI=[模式[,mt[,bm[,ds[,bfr]]]]
- 模式:未经请求的结果代码缓冲选项
表示在调制解调器忙的情况下,URC被缓冲mode=2
- mt:SMS-DELIVER的结果代码指示报告
表示传入消息直接显示为mt=2
URC。禁止储存李>+CMT:…
- bm:广播报告选项。与我们无关
- ds:SMS状态报告报告选项
表示状态报告接收未报告且未存储!那不是你想要的李>ds=0
- bfr:缓冲结果代码处理方法。与我们无关
- mt=2,这意味着将存储传入的SMS,并显示一个
URC,说明它已存储在内存=memory=mem的index=idx中+CMTI:,
- ds=2,这意味着如果存储了状态报告,则会显示一个
URC,说明它已存储在索引=idx处的memory=mem中+CDSI:,
+CDS:…
的报告注意:还要注意,+CNMI设置是不稳定的,因此如果重新启动,除非将它们保存在默认配置文件中(通过发出
AT&W&p
),否则将丢失这些设置。您正在发送AT+CNMI=2,2,0,0,0
命令,目的是在SM中包含传入SMS或SMS传递报告,以及URCs通知。我将尝试解释如何启用这两个功能
根据规范,该命令的语法为:
AT+CNMI=[模式[,mt[,bm[,ds[,bfr]]]]
- 模式:未经请求的结果代码缓冲选项
表示在调制解调器忙的情况下,URC被缓冲mode=2
- mt:SMS-DELIVER的结果代码指示报告
表示传入消息直接显示为mt=2
URC。禁止储存李>+CMT:…
- bm:广播报告选项。与我们无关
- ds:SMS状态报告报告选项
表示状态报告接收未报告且未存储!那不是你想要的李>ds=0
- bfr:缓冲结果代码处理方法。与我们无关
- mt=2,这意味着将存储传入的SMS,并显示一个
URC,说明它已存储在内存=memory=mem的index=idx中+CMTI:,
- ds=2,这意味着如果存储了状态报告,则会显示一个
URC,说明它已存储在索引=idx处的memory=mem中+CDSI:,
+CDS:…
的报告注意:还要注意,+CNMI设置是不稳定的,因此如果重新启动,除非将它们保存在默认配置文件中(通过发出
AT&W&p
),否则将丢失这些设置。问题在于命令。语言实现是可选的。@Herohtar我可以轻松地将实现切换到c或其他语言。但结果是一样的。我读了很多文章。在发送消息之后。它将得到一个指向索引内存卡的缓冲区+CMTI。但是我不明白,对于语言不可知论的问题,你不应该把所有的语言都贴上标签。你应该给它贴上标签[语言不可知]
你能在日志上贴上标签吗?简单的命令发送+接收响应,hilighting什么与您期望的不同。问题在于命令。语言实现是可选的。@Herohtar我可以轻松地将实现切换到c或其他语言。但结果是一样的。我读了很多文章。在发送消息之后。它将得到一个指向索引m的缓冲区+CMTI