Shell脚本AT命令:无法通过串口发送短信
问题描述:
我有下面的shell脚本(期望),我试图发送短信。我引用了许多堆栈溢出引用,并发现ctrl-z映射到\ x1a。但是,即使将它附加到消息并发送到端口或将ctrl z单独发送到端口也没有帮助我。它稍后超时。Shell脚本AT命令:无法通过串口发送短信
脚本被写入发送pdu格式的短信。无论如何,我相信,这是发送ctrl-z到端口的通用问题。如果您觉得该脚本有其他错误,请分享相同的解决方案。
另外,下面提到的长度(34)是根据规范的(PDU_LENGTH -2)/ 2的长度。该长度不包括ctrl-z字符。
at_command = “AT + CMGS = 34 \ R” MESSAGE_CONTENT = “0011000C810056890 ......”
脚本:
set PROMPT "0"
set timeout "$COMMAND_TIMEOUT"
send "$at_command"
expect {
"OK" { puts "Command Accepted\n"; }
"ERROR" { puts "Command Failed\n"; }
timeout { puts "Unable to connect to $HOSTIP at $HOSTPORT"; exit 1 }
"*>*" { set PROMPT "1"; }
}
if { "$PROMPT" == "1" } {
send "$message_content"
send "\x1a"
expect {
"OK" { puts "\nCommand accepted"; }
"ERROR" { puts "\nCommand failed"; }
"*>*" { puts "CTRL-Z dint reach UT. Error..."; }
"*" { puts "Unexpected return value received"; }
}
}
非常肯定的脚本发送$ MESSAGE_CONTENT “到港,但退出后立即发送 ”$ MESSAGE_CONTENT“
OUTPUT:
AT+CMGS=34
>
答
我在c#
用SMS-Gateway-Modul做了这样的事情。
我不得不switch to PDU-Mode first!
之后,我不得不传输预期的PDU长度,最后传输PDU本身。
每个命令都必须提交,可以回车ASC[13]
,最后PDU必须提交ASC[26]
。
在这里你可以看到一个流程示意图,我做到了在c#
(!):
1)创建PDU并获得长度
int len;
var pdu = PDUGenerator.GetPdu(destination, message, "", out len);
2)切换到PDUMode
SendToCom("AT+CMGF=0" + System.Convert.ToChar(13));
3)宣布消息长度
SendToCom("AT+CMGS=" + len + System.Convert.ToChar(13));
4)发送PDU,并承诺
SendToCom(pdu + System.Convert.ToChar(26));
是'有message_content''末\ r'?发送信息后,你没有收到任何回复吗? – Dinesh
@Dinesh:它也可以。 – Vasanth
发送邮件内容后,“预计”。 (可能有一些回应)。然后发送尝试发送'ctrl + z'。删除'expect *'。我怀疑这一点。为什么你首先需要这个? – Dinesh