更新信号界面

This commit is contained in:
ling 2024-04-28 18:29:32 +08:00
parent 8ad7373bf2
commit ee99695368
10 changed files with 410 additions and 292 deletions
applications/luci-app-modem

@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-modem
LUCI_TITLE:=LuCI support for Modem
LUCI_PKGARCH:=all
PKG_VERSION:=1.4.2
PKG_VERSION:=1.4.3
PKG_LICENSE:=GPLv3
PKG_LINCESE_FILES:=LICENSE
PKF_MAINTAINER:=siriling <siriling@qq.com>
@ -15,7 +15,7 @@ LUCI_DEPENDS:=+luci-compat \
+pciutils \
+quectel-CM-5G \
+sms-tool \
+jq +grep\
+jq \
define Package/luci-app-modem/conffiles
/etc/config/modem

@ -22,6 +22,65 @@ end
}
} */
.signal-view {
position: relative;
min-width: 11rem;
height: 1.5rem;
margin: 0 0;
border: thin solid #999;
background: #eee;
border-radius: 4px;
overflow: hidden;
}
.signal-percent {
width: 0;
height: 100%;
/* transition: width .25s ease-in; */
border-top-left-radius: 4px;
border-bottom-left-radius: 4px;
/* border-top-right-radius: 4px;
border-bottom-right-radius: 4px; */
}
.signal-context{
font-family: monospace;
/* font-size: 1em; */
font-weight: bold;
font-size-adjust: .38;
line-height: 1.5rem;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
overflow: hidden;
content: attr(title);
text-align: center;
white-space: pre;
text-overflow: ellipsis;
/* color:#000000; */
}
.signal-context small{
font-family: monospace;
/* font-size: 1em; */
font-weight: bold;
font-size-adjust: .38;
line-height: 1.5rem;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
overflow: hidden;
content: attr(title);
text-align: center;
white-space: pre;
text-overflow: ellipsis;
/* color:#000000; */
}
table {
width: 100%;
border-spacing: 10px;
@ -61,7 +120,6 @@ end
var rate_view;
if (mb>=1) {
console.log(mb);
rate_view=mb.toFixed(2)+" MB/s";
}
else if (kb>=1) {
@ -148,8 +206,8 @@ end
if (value!="-"&&value!="")
{
//添加单位
if (key=="RSSI") {
value=value+" dBm";
if (key=="AMBR UL"||key=="AMBR DL") {
value=value+" Mbps";
}
else if (key=="Tx Rate"||key=="Rx Rate")
{
@ -188,216 +246,207 @@ end
return percent.toFixed(2);
}
// 获取参考信号接收功率RSRP的信息视图
function get_rsrp_info_view(network_type,value)
{
// 获取参考信号的信息视图
function get_signal_info_view(network_type,key,value) {
value=parseFloat(value);
var rsrp_info_view={percent:100,quality:"Unknown",style:"width:100.00%;background-color: gray;"};
var signal_info_view={percent:100,quality:"Unknown",style:"width:100.00%;background-color: gray;"};
// 获取参考信号接收功率RSRP的信息视图'
if (key=="RSRP") {
set_rsrp_info_view(network_type,value,signal_info_view);
}
else if (key=="RSRQ") {
set_rsrq_info_view(network_type,value,signal_info_view);
}
else if (key=="SINR") {
set_sinr_info_view(network_type,value,signal_info_view);
}
else if (key=="RxLev") {
set_rxlev_info_view(network_type,value,signal_info_view);
}
//添加100%时候的样式
if (signal_info_view.percent==100) {
signal_info_view.style+="border-top-right-radius: 4px;border-bottom-right-radius: 4px;";
}
return signal_info_view;
}
// 获取参考信号接收功率RSRP的信息视图
function set_rsrp_info_view(network_type,value,signal_info_view)
{
// 获取百分比
var percent=100;
if (network_type.includes("NR"))
{
percent=get_percent(value,-153,31);
signal_info_view.percent=get_percent(value,-153,31);
}
else if (network_type.includes("LTE"))
{
percent=get_percent(value,-140,-44);
signal_info_view.percent=get_percent(value,-140,-44);
}
else if (network_type.includes("WCDMA"))
{
// percent=get_percent(value,-140,-44);
// signal_info_view.percent=get_percent(value,-140,-44);
}
// 获取样式
var quality="Unknown";
var color="gray";
if (value>=-70)
{
quality="Excellent";
signal_info_view.quality="Excellent";
color="limegreen";
}
else if (value>=-80&&value<-70)
{
quality="Good";
signal_info_view.quality="Good";
color="lime";
}
else if (value>=-90&&value<-80)
{
quality="Fair";
signal_info_view.quality="Fair";
color="gold";
}
else if (value<-90)
{
quality="Bad";
signal_info_view.quality="Bad";
color="red";
}
rsrp_info_view.percent=percent;
rsrp_info_view.quality=quality;
rsrp_info_view.style='width:'+rsrp_info_view.percent+'%;background-color: '+color+';';
return rsrp_info_view;
signal_info_view.style='width:'+signal_info_view.percent+'%;background-color: '+color+';';
}
// 获取参考信号接收质量RSRQ的信息视图
function get_rsrq_info_view(network_type,value)
function set_rsrq_info_view(network_type,value,signal_info_view)
{
value=parseFloat(value);
var rsrq_info_view={percent:100,quality:"Unknown",style:"width:100.00%;background-color: gray;"};
// 获取百分比
var percent=100;
if (network_type.includes("NR"))
{
percent=get_percent(value,-43,20);
signal_info_view.percent=get_percent(value,-43,20);
}
else if (network_type.includes("LTE"))
{
percent=get_percent(value,-19.5,-3);
signal_info_view.percent=get_percent(value,-19.5,-3);
}
else if (network_type.includes("WCDMA"))
{
// percent=get_percent(value,-19.5,-3);
// signal_info_view.percent=get_percent(value,-19.5,-3);
}
// 获取样式
var quality="Unknown";
var color="gray";
if (value>=-10)
{
quality="Excellent";
signal_info_view.quality="Excellent";
color="limegreen";
}
else if (value>=-15&&value<-10)
{
quality="Good";
signal_info_view.quality="Good";
color="lime";
}
else if (value>=-20&&value<-15)
{
quality="Fair";
signal_info_view.quality="Fair";
color="gold";
}
else if (value<-20)
{
quality="Bad";
signal_info_view.quality="Bad";
color="red";
}
rsrq_info_view.percent=percent;
rsrq_info_view.quality=quality;
rsrq_info_view.style='width:'+rsrq_info_view.percent+'%;background-color: '+color+';';
return rsrq_info_view;
signal_info_view.style='width:'+signal_info_view.percent+'%;background-color: '+color+';';
}
// 获取信噪比SINR的信息视图
function get_sinr_info_view(network_type,value)
function set_sinr_info_view(network_type,value,signal_info_view)
{
value=parseFloat(value);
var sinr_info_view={percent:100,quality:"Unknown",style:"width:100.00%;background-color: gray;"};
// 获取百分比
var percent=100;
if (network_type.includes("NR"))
{
percent=get_percent(value,-23,40);
signal_info_view.percent=get_percent(value,-23,40);
}
else if (network_type.includes("LTE"))
{
percent=get_percent(value,-20,-30);
signal_info_view.percent=get_percent(value,-20,-30);
}
else if (network_type.includes("WCDMA"))
{
// percent=get_percent(value,-20,-30);
// signal_info_view.percent=get_percent(value,-20,-30);
}
// 获取样式
var quality="Unknown";
var color="gray";
if (value>=25)
{
quality="Excellent";
signal_info_view.quality="Excellent";
color="limegreen";
}
else if (value>=15&&value<25)
{
quality="Good";
signal_info_view.quality="Good";
color="lime";
}
else if (value>=-10&&value<15)
else if (value>=10&&value<15)
{
quality="Fair";
signal_info_view.quality="Fair";
color="gold";
}
else if (value<10)
{
quality="Bad";
signal_info_view.quality="Bad";
color="red";
}
sinr_info_view.percent=percent;
sinr_info_view.quality=quality;
sinr_info_view.style='width:'+sinr_info_view.percent+'%;background-color: '+color+';';
return sinr_info_view;
signal_info_view.style='width:'+signal_info_view.percent+'%;background-color: '+color+';';
}
// 获取接收信号功率RxLev的信息视图
function get_rxlev_info_view(network_type,value)
function set_rxlev_info_view(network_type,value,signal_info_view)
{
value=parseFloat(value);
var sinr_info_view={percent:100,quality:"Unknown",style:"width:100.00%;background-color: gray;"};
// 获取百分比
var percent=100;
if (network_type.includes("NR"))
{
percent=get_percent(value,-153,31);
signal_info_view.percent=get_percent(value,-153,31);
}
else if (network_type.includes("LTE"))
{
percent=get_percent(value,-140,-44);
signal_info_view.percent=get_percent(value,-140,-44);
}
else if (network_type.includes("WCDMA"))
{
percent=get_percent(value,-120,-25);
signal_info_view.percent=get_percent(value,-120,-25);
}
else if (network_type.includes("GSM"))
{
percent=get_percent(value,-110,-48);
signal_info_view.percent=get_percent(value,-110,-48);
}
// 获取样式
var quality="Unknown";
var color="gray";
if (value>=-70)
{
quality="Excellent";
signal_info_view.quality="Excellent";
color="limegreen";
}
else if (value>=-80&&value<-70)
{
quality="Good";
signal_info_view.quality="Good";
color="lime";
}
else if (value>=-90&&value<-80)
{
quality="Fair";
signal_info_view.quality="Fair";
color="gold";
}
else if (value<-100)
else if (value<-90)
{
quality="Bad";
signal_info_view.quality="Bad";
color="red";
}
sinr_info_view.percent=percent;
sinr_info_view.quality=quality;
sinr_info_view.style='width:'+sinr_info_view.percent+'%;background-color: '+color+';';
return sinr_info_view;
signal_info_view.style='width:'+signal_info_view.percent+'%;background-color: '+color+';';
}
//获取小区信息视图
@ -446,13 +495,16 @@ end
if (key=="RSRP")
{
var rsrp_info_view=get_rsrp_info_view(network_type,value);
value='<div class="cbi-progressbar" title="'+value+' dBm | '+translation[rsrp_info_view.quality]+' ('+rsrp_info_view.percent+'%)"><div style="'+rsrp_info_view.style+'"></div></div>';
var unit="dBm";
var signal_info_view=get_signal_info_view(network_type,"RSRP",value);
// value='<div class="cbi-progressbar" title="'+value+' dBm | '+translation[signal_info_view.quality]+' ('+signal_info_view.percent+'%)"><div style="'+signal_info_view.style+'"></div></div>';
value='<div class="signal-view"><div class="signal-percent" style="'+signal_info_view.style+'"><div class="signal-context"><small title="'+value+' '+unit+' | '+translation[signal_info_view.quality]+' ('+signal_info_view.percent+'%)"><div style="'+signal_info_view.style+'">'+value+' dB | '+translation[signal_info_view.quality]+' ('+signal_info_view.percent+'%)</small></div></div></div>';
}
else if (key=="RxLev")
{
var rxlev_info_view=get_rxlev_info_view(network_type,value);
value='<div class="cbi-progressbar" title="'+value+' dBm | '+translation[rxlev_info_view.quality]+' ('+rxlev_info_view.percent+'%)"><div style="'+rxlev_info_view.style+'"></div></div>';
var unit="dBm";
var signal_info_view=get_signal_info_view(network_type,"RxLev",value);
value='<div class="signal-view"><div class="signal-percent" style="'+signal_info_view.style+'"><div class="signal-context"><small title="'+value+' '+unit+' | '+translation[signal_info_view.quality]+' ('+signal_info_view.percent+'%)"><div style="'+signal_info_view.style+'">'+value+' dB | '+translation[signal_info_view.quality]+' ('+signal_info_view.percent+'%)</small></div></div></div>';
}
else
{
@ -463,13 +515,15 @@ end
if (key=="RSRQ")
{
var rsrq_info_view=get_rsrq_info_view(network_type,value);
value='<div class="cbi-progressbar" title="'+value+' dB | '+translation[rsrq_info_view.quality]+' ('+rsrq_info_view.percent+'%)"><div style="'+rsrq_info_view.style+'"></div></div>';
var unit="dB";
var signal_info_view=get_signal_info_view(network_type,"RSRQ",value);
value='<div class="signal-view"><div class="signal-percent" style="'+signal_info_view.style+'"><div class="signal-context"><small title="'+value+' '+unit+' | '+translation[signal_info_view.quality]+' ('+signal_info_view.percent+'%)"><div style="'+signal_info_view.style+'">'+value+' dB | '+translation[signal_info_view.quality]+' ('+signal_info_view.percent+'%)</small></div></div></div>';
}
else if (key=="SINR")
{
var sinr_info_view=get_sinr_info_view(network_type,value);
value='<div class="cbi-progressbar" title="'+value+' dB | '+translation[sinr_info_view.quality]+' ('+sinr_info_view.percent+'%)"><div style="'+sinr_info_view.style+'"></div></div>';
var unit="dB";
var signal_info_view=get_signal_info_view(network_type,"SINR",value);
value='<div class="signal-view"><div class="signal-percent" style="'+signal_info_view.style+'"><div class="signal-context"><small title="'+value+' '+unit+' | '+translation[signal_info_view.quality]+' ('+signal_info_view.percent+'%)"><div style="'+signal_info_view.style+'">'+value+' dB | '+translation[signal_info_view.quality]+' ('+signal_info_view.percent+'%)</small></div></div></div>';
}
else
{
@ -479,7 +533,7 @@ end
else if (key=="SCS") {
value=value+" KHz";
}
cell_info_view+='<tr class="tr"><td class="td left" title="'+full_name+'">'+translation[key]+'</td><td class="td left" id="'+key+'">'+value+'</td></tr>';
cell_info_view+='<tr class="tr"><td class="td left" title="'+full_name+'">'+translation[key]+' ('+key+')</td><td class="td left" id="'+key+'">'+value+'</td></tr>';
break;
}
}

@ -352,6 +352,18 @@ msgstr "网络信息"
msgid "Network Type"
msgstr "网络类型"
msgid "CQI UL"
msgstr "上行信道质量指示"
msgid "CQI DL"
msgstr "下行信道质量指示"
msgid "AMBR UL"
msgstr "上行访问最大比特率"
msgid "AMBR DL"
msgstr "下行访问最大比特率"
msgid "Tx Rate"
msgstr "上传速率"

@ -121,6 +121,13 @@ set_ipv4_interface()
local interface_name="$1"
local network_interface="$2"
#删除原网络配置
uci -q del network.${interface_name}.ipaddr
uci -q del network.${interface_name}.netmask
uci -q del network.${interface_name}.gateway
uci -q del network.${interface_name}.peerdns
uci -q del network.${interface_name}.dns
#添加或修改网络配置
uci set network.${interface_name}='interface'
uci set network.${interface_name}.proto='dhcp'
@ -287,10 +294,6 @@ modemmanager()
qmi()
{
#设置网络接口
local network_interface=$(uci -q get modem.modem${modem_no}.network_interface)
set_interface "${modem_no}" "$network_interface"
#选择拨号工具
case $dial_tool in
"quectel-CM") quectel_cm ;;
@ -302,11 +305,6 @@ qmi()
gobinet()
{
#获取网络接口
local network_interface=$(uci -q get modem.modem${modem_no}.network_interface)
#设置网络接口
set_interface "${modem_no}" "$network_interface"
#拨号
procd_open_instance
procd_set_param command sh ${SCRIPT_DIR}/modem_network_task.sh "${id}" "${modem_no}" "gobinet"
@ -316,11 +314,6 @@ gobinet()
ecm()
{
#获取网络接口
local network_interface=$(uci -q get modem.modem${modem_no}.network_interface)
#设置网络接口
set_interface "${modem_no}" "$network_interface"
#拨号
procd_open_instance
procd_set_param command sh ${SCRIPT_DIR}/modem_network_task.sh "${id}" "${modem_no}" "ecm"
@ -335,11 +328,6 @@ mbim()
rndis()
{
#获取网络接口
local network_interface=$(uci -q get modem.modem${modem_no}.network_interface)
#设置网络接口
set_interface "${modem_no}" "$network_interface"
#拨号
procd_open_instance
procd_set_param command sh ${SCRIPT_DIR}/modem_network_task.sh "${id}" "${modem_no}" "rndis"
@ -632,8 +620,15 @@ dial()
#查看移动网络是否已经有配置在运行
mkdir -m 0755 -p "${MODEM_RUNDIR}"
if [ -f "${MODEM_RUN_CONFIG}" ]; then #文件存在
if grep -q "${network}" "${MODEM_RUN_CONFIG}"; then #是否记录该移动网络
if [ ! -f "${MODEM_RUN_CONFIG}" ] || ! grep -q "${network}" "${MODEM_RUN_CONFIG}"; then
#文件不存在或者未记录该移动网络
echo "${network},${id}" >> "${MODEM_RUN_CONFIG}"
#获取网络接口
local network_interface=$(uci -q get modem.modem${modem_no}.network_interface)
#设置网络接口
set_interface "${modem_no}" "$network_interface"
else
local config_id=$(awk -v network="${network}" -F',' '!/^#/ && $0 ~ network { print $2 }' "${MODEM_RUN_CONFIG}")
#该移动网络已存在,且已有其他配置运行
if [ "$id" != "$config_id" ]; then
@ -641,11 +636,6 @@ dial()
uci commit modem
return 0
fi
else
echo "${network},${id}" >> "${MODEM_RUN_CONFIG}"
fi
else
echo "${network},${id}" >> "${MODEM_RUN_CONFIG}"
fi
#设置网络预设

@ -698,7 +698,9 @@ fibocom_cell_info()
rat=$(fibocom_get_rat ${rat_num})
}
response=$(echo "$response" | sed -n '4p')
for response in $response; do
#排除+GTCCINFO:、NR service cell:还有空行
[ -n "$response" ] && [[ "$response" = *","* ]] && {
case $rat in
"NR")
@ -805,6 +807,17 @@ fibocom_cell_info()
wcdma_ecio=$(fibocom_get_ecio ${wcdma_ecio_num})
;;
esac
#联发科平台特殊处理FM350-GL
[[ "$name" = "FM350-GL" ]] && {
nr_sinr="${nr_sinr_num}"
endc_nr_sinr="${endc_nr_sinr_num}"
}
#只选择第一个,然后退出
break
}
done
}

@ -32,6 +32,10 @@ init_modem_info()
#网络信息
connect_status="disconnect" #SIM卡状态
network_type="-" #蜂窝网络类型
cqi_ul="-" #上行信道质量指示
cqi_dl="-" #下行信道质量指示
ambr_ul="-" #上行签约速率
ambr_dl="-" #下行签约速率
tx_rate="-" #上传速率
rx_rate="-" #下载速率
@ -167,6 +171,10 @@ set_network_info()
{
network_info="\"network_info\":[
{\"Network Type\":\"$network_type\", \"full_name\":\"Network Type\"},
{\"CQI UL\":\"$cqi_ul\", \"full_name\":\"Channel Quality Indicator for Uplink\"},
{\"CQI DL\":\"$cqi_dl\", \"full_name\":\"Channel Quality Indicator for Downlink\"},
{\"AMBR UL\":\"$ambr_ul\", \"full_name\":\"Access Maximum Bit Rate for Uplink\"},
{\"AMBR DL\":\"$ambr_dl\", \"full_name\":\"Access Maximum Bit Rate for Downlink\"},
{\"Tx Rate\":\"$tx_rate\", \"full_name\":\"Transmit Rate\"},
{\"Rx Rate\":\"$rx_rate\", \"full_name\":\"Receive Rate\"}
],"

@ -281,6 +281,7 @@ modem_network_task()
#重新设置网络接口广和通FM350-GL
if [ "$manufacturer" = "fibocom" ] && [ "$platform" = "mediatek" ]; then
reset_network_interface "${at_port}" "${define_connect}" "${modem_no}"
sleep 3s
fi
[ "$mode" != "modemmanager" ] && {

@ -120,6 +120,37 @@
"data_interface":"usb",
"define_connect":"1",
"modes":["qmi","gobinet","ecm","mbim","rndis"]
}
},
"pcie":{
"rm500q-gl":{
"manufacturer":"quectel",
"platform":"qualcomm",
"data_interface":"pcie",
"define_connect":"1",
"modes":["qmi","gobinet","mbim"]
},
"rm502q-gl":{
"manufacturer":"fibocom",
"platform":"qualcomm",
"data_interface":"pcie",
"define_connect":"1",
"modes":["qmi","gobinet","mbim"]
},
"fm350-gl":{
"manufacturer":"fibocom",
"platform":"mediatek",
"data_interface":"pcie",
"define_connect":"1",
"modes":["mbim"]
},
"fm150-ae":{
"manufacturer":"fibocom",
"platform":"qualcomm",
"data_interface":"pcie",
"define_connect":"1",
"modes":["qmi","mbim"]
}
},
"device":{
"quectel":{
@ -169,36 +200,5 @@
}
}
}
},
"pcie":{
"rm500q-gl":{
"manufacturer":"quectel",
"platform":"qualcomm",
"data_interface":"pcie",
"define_connect":"1",
"modes":["qmi","gobinet","mbim"]
},
"rm502q-gl":{
"manufacturer":"fibocom",
"platform":"qualcomm",
"data_interface":"pcie",
"define_connect":"1",
"modes":["qmi","gobinet","mbim"]
},
"fm350-gl":{
"manufacturer":"fibocom",
"platform":"mediatek",
"data_interface":"pcie",
"define_connect":"1",
"modes":["mbim"]
},
"fm150-ae":{
"manufacturer":"fibocom",
"platform":"qualcomm",
"data_interface":"pcie",
"define_connect":"1",
"modes":["qmi","mbim"]
}
}
}
}

@ -213,8 +213,15 @@ m_add_usb_id()
#如果已经添加则返回
grep -q "${manufacturer_id} ${product_id}" "${new_id_path}" && return
while true; do
if [ -f "$new_id_path" ]; then
#添加ID
echo "${manufacturer_id} ${product_id}" >> "${new_id_path}"
break
fi
sleep 5s
done
}
#设置模组硬件配置
@ -329,6 +336,20 @@ m_set_usb_device()
fi
}
#处理特殊的模组名称
# $1:模组名称
handle_special_modem_name()
{
local modem_name="$1"
#FM350-GL-00 5G Module
[[ "$modem_name" = *"fm350-gl"* ]] && {
modem_name="fm350-gl"
}
echo "$modem_name"
}
#重新尝试设置模组
# $1:模组序号
# $2:AT串口
@ -351,22 +372,23 @@ retry_set_modem_config()
local at_command="AT+CGMM?"
local modem_name=$(at ${at_port} ${at_command} | grep "+CGMM: " | awk -F'"' '{print $2}' | tr 'A-Z' 'a-z')
#再一次获取模组名称
[ -z "$modem_name" ] && {
at_command="AT+CGMM"
modem_name=$(at ${at_port} ${at_command} | sed -n '2p' | sed 's/\r//g' | tr 'A-Z' 'a-z')
}
#处理特殊的模组名称
[ -n "$modem_name" ] && {
#特殊处理FM350-GL-00 5G Module
[[ "$modem_name" = *"fm350-gl"* ]] && {
modem_name="fm350-gl"
modem_name="$(handle_special_modem_name ${modem_name})"
}
#获取模组信息
local data_interface=$(uci -q get modem.modem${modem_no}.data_interface)
local modem_info=$(echo ${modem_support} | jq '.modem_support.'$data_interface'."'$modem_name'"')
[ -n "$modem_name" ] && [ "$modem_info" != "null" ] && {
#获取制造商
local manufacturer=$(echo ${modem_info} | jq -r '.manufacturer')
#获取平台

@ -491,6 +491,24 @@ quectel_network_info()
# per=$((csq * 100/31))"%"
# fi
#最大比特率,信道质量指示
at_command='AT+QNWCFG="nr5g_ambr"'
response=$(sh ${SCRIPT_DIR}/modem_at.sh $at_port $at_command | grep "+QNWCFG:")
for context in $response; do
local apn=$(echo "$context" | awk -F'"' '{print $4}' | tr 'a-z' 'A-Z')
if [ -n "$apn" ] && [ "$apn" != "IMS" ]; then
#CQL UL上行信道质量指示
cqi_ul=$(echo "$context" | awk -F',' '{print $5}')
#CQI DL下行信道质量指示
cqi_dl=$(echo "$context" | awk -F',' '{print $3}')
#AMBR UL上行签约速率单位Mbps
ambr_ul=$(echo "$context" | awk -F',' '{print $6}' | sed 's/\r//g')
#AMBR DL下行签约速率单位Mbps
ambr_dl=$(echo "$context" | awk -F',' '{print $4}')
break
fi
done
#速率统计
at_command='AT+QNWCFG="up/down"'
response=$(sh ${SCRIPT_DIR}/modem_at.sh $at_port $at_command | grep "+QNWCFG:" | sed 's/+QNWCFG: "up\/down",//g' | sed 's/\r//g')