Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Language agnostic +;CNMI命令:如何接收通知并将收到的短信保存到SIM卡_Language Agnostic_Sms_At Command - Fatal编程技术网

Language agnostic +;CNMI命令:如何接收通知并将收到的短信保存到SIM卡

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

我需要获得成功交付的通知。我读了很多书,也试过了。我有GSM调制解调器中兴K4510Z。我没有收到任何通知或保存到sim卡。在我的测试中。我想我的sim卡坏了。因此,我尝试在+CMGW处向simcard写入临时消息。它是成功和存在的。所以最后我认为,这是命令而不是simcard。我试着从AT+CNMIAT+CPMS进行思考。发送消息后没有收到回复缓冲区。在发送消息后,我也会使用+CPMS检查它。如果收到一条消息,它将在不通知的情况下写入simcard。但是没有,没有通知,没有消息写入simcard存储

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]]]]

  • 模式:未经请求的结果代码缓冲选项
    mode=2
    表示在调制解调器忙的情况下,URC被缓冲
  • mt:SMS-DELIVER的结果代码指示报告
    mt=2
    表示传入消息直接显示为
    +CMT:…
    URC。禁止储存
  • bm:广播报告选项。与我们无关
  • ds:SMS状态报告报告选项
    ds=0
    表示状态报告接收未报告且未存储!那不是你想要的
  • bfr:缓冲结果代码处理方法。与我们无关
相反,您可能希望:

  • mt=2,这意味着将存储传入的SMS,并显示一个
    +CMTI:,
    URC,说明它已存储在内存=memory=mem的index=idx中
  • ds=2,这意味着如果存储了状态报告,则会显示一个
    +CDSI:,
    URC,说明它已存储在索引=idx处的memory=mem中
这可能对您有所帮助,但请注意

  • 您必须确保您的调制解调器型号支持这些功能(在AT用户指南中验证),并且它们不是虚拟的
  • 您必须确保您的运营商支持状态传递报告,并且已为您的SIM卡启用状态传递报告
  • SMS存储类影响调制解调器执行的存储操作,尤其是状态传递报告。在这种情况下,您可以使用ds=1设置,这至少会使调制解调器显示带有URC
    +CDS:…
    的报告

  • 注意:还要注意,+CNMI设置是不稳定的,因此如果重新启动,除非将它们保存在默认配置文件中(通过发出
    AT&W&p
    ),否则将丢失这些设置。

    您正在发送
    AT+CNMI=2,2,0,0,0
    命令,目的是在SM中包含传入SMS或SMS传递报告,以及URCs通知。我将尝试解释如何启用这两个功能

    根据规范,该命令的语法为:

    AT+CNMI=[模式[,mt[,bm[,ds[,bfr]]]]

    • 模式:未经请求的结果代码缓冲选项
      mode=2
      表示在调制解调器忙的情况下,URC被缓冲
    • mt:SMS-DELIVER的结果代码指示报告
      mt=2
      表示传入消息直接显示为
      +CMT:…
      URC。禁止储存
    • bm:广播报告选项。与我们无关
    • ds:SMS状态报告报告选项
      ds=0
      表示状态报告接收未报告且未存储!那不是你想要的
    • bfr:缓冲结果代码处理方法。与我们无关
    相反,您可能希望:

    • mt=2,这意味着将存储传入的SMS,并显示一个
      +CMTI:,
      URC,说明它已存储在内存=memory=mem的index=idx中
    • ds=2,这意味着如果存储了状态报告,则会显示一个
      +CDSI:,
      URC,说明它已存储在索引=idx处的memory=mem中
    这可能对您有所帮助,但请注意

  • 您必须确保您的调制解调器型号支持这些功能(在AT用户指南中验证),并且它们不是虚拟的
  • 您必须确保您的运营商支持状态传递报告,并且已为您的SIM卡启用状态传递报告
  • SMS存储类影响调制解调器执行的存储操作,尤其是状态传递报告。在这种情况下,您可以使用ds=1设置,这至少会使调制解调器显示带有URC
    +CDS:…
    的报告

  • 注意:还要注意,+CNMI设置是不稳定的,因此如果重新启动,除非将它们保存在默认配置文件中(通过发出
    AT&W&p
    ),否则将丢失这些设置。

    问题在于命令。语言实现是可选的。@Herohtar我可以轻松地将实现切换到c或其他语言。但结果是一样的。我读了很多文章。在发送消息之后。它将得到一个指向索引内存卡的缓冲区+CMTI。但是我不明白,对于语言不可知论的问题,你不应该把所有的语言都贴上标签。你应该给它贴上标签
    [语言不可知]
    你能在日志上贴上标签吗?简单的命令发送+接收响应,hilighting什么与您期望的不同。问题在于命令。语言实现是可选的。@Herohtar我可以轻松地将实现切换到c或其他语言。但结果是一样的。我读了很多文章。在发送消息之后。它将得到一个指向索引m的缓冲区+CMTI