2023-11-09 19:03:28 +08:00

419 lines
11 KiB
Bash

#!/bin/sh
source /usr/share/cpe/cpedebug
source /usr/share/cpe/SIMCOM
source /usr/share/cpe/Quectel
source /usr/share/cpe/Fibocom
#初值化数据结构
InitData()
{
Date=''
CHANNEL="-"
ECIO="-"
RSCP="-"
ECIO1=" "
RSCP1=" "
NETMODE="-"
LBAND="-"
PCI="-"
CTEMP="-"
MODE="-"
SINR="-"
IMEI='-'
IMSI='-'
ICCID='-'
phone='-'
conntype=''
Model=''
}
#写数据
SETData()
{
{
echo $Model #'RM520N-GL'
echo $conntype #'conntype'
echo '1e0e:9001'
echo $COPS #运营商
echo 'ttyUSB2' #端口
echo $TEMP #温度
echo 'QMI' #协议
echo '---------------------------------'
echo $IMEI #imei
echo $IMSI #imsi
echo $ICCID #iccid
echo $phone #phone
echo '---------------------------------'
echo $MODE
echo $CSQ
echo $CSQ_PER
echo $CSQ_RSSI
echo $ECIO #参考信号接收质量 RSRQ ecio
echo $ECIO1 #参考信号接收质量 RSRQ ecio1
echo $RSCP #参考信号接收功率 RSRP rscp0
echo $RSCP1 #参考信号接收功率 RSRP rscp1
echo $SINR #信噪比 SINR rv["sinr"]
echo $NETMODE #连接状态监控 rv["netmode"]
echo '---------------------------------'
echo $COPS_MCC #MCC
echo $$COPS_MNC #MNC
echo $LAC #eNB ID
echo '' #LAC_NUM
echo $RNC #TAC
echo '' #RNC_NUM
echo $CID
echo '' #CID_NUM
echo $LBAND
echo $CHANNEL
echo $PCI
echo $Date
echo $MODTYPE
echo $QTEMP
} > /tmp/cpe_cell.file
}
ATPORT=1
# 自动处理模块信号
AUTO_CPE()
{
Debug "------------------------------端口$ATPORT---------------------------"
Debug "AUTO_CPE"
Date=$(date "+%Y-%m-%d %H:%M:%S")
#检测设备是否准备好
rec=$(sendat $ATPORT "AT" 500 |grep OK |wc -l)
if [ $rec == "1" ];then
sleep 1s
else
sleep 5s
return
fi
#读取模块信息
# if [ "$conntype" == "" ]; then
# {
# Debug "计算模块"
# ATATI=$( sendat $ATPORT "ATI")
# Getconntype=$(echo "$ATATI" | sed -n '2p')
# if [ "$Getconntype" == "" ]; then
# {
# sleep 5s
# return
# }
# fi
# Model=$(echo "$ATATI" | sed -n '3p')
# conntype=$Getconntype
# }
# fi
Debug "读取模块信息 计算模块"
ATATI=$( sendat $ATPORT "ATI")
Getconntype=$(echo "$ATATI" | sed -n '2p')
if [ "$Getconntype" == "" ]; then
{
sleep 5s
return
}
fi
Model=$(echo "$ATATI" | sed -n '3p')
conntype=$Getconntype
cpin=$( sendat $ATPORT "at+cpin?")
ERR=$(echo "$cpin" | grep "ERROR")
if [ ! -z "$ERR" ]; then # No SIM
Debug "No SIM"
sleep 5s
return
fi
RDY=$(echo "$cpin" | grep "READY")
if [ -z "$RDY" ]; then # SIM Locked
Debug "Correct Pin"
sleep 5s
return
else
Debug "Not Locked"
fi
#执行对应模块
if [ $(echo $conntype |grep "Quectel"| wc -l) -ge 1 ];then
{
Quectel_AT
}
elif [ $(echo $conntype |grep "SIMCOM"| wc -l) -ge 1 ];then
{
SIMCOM_AT
}
elif [ $(echo $conntype |grep "Fibocom"| wc -l) -ge 1 ];then
{
Fibocom_AT
}
else
{
Debug "null "
}
fi
}
#重新联网
modem_reset()
{
echo "Abnormal network restart"
lsusb=$( lsusb )
RDFM650=$(echo "$lsusb" | grep "ID 2cb7:0a05 " | wc -l)
echo "RDFM650 $RDFM650"
if [ "$RDFM650" == 1 ]; then
{
GTRNDIS=$(sendat $ATPORT "AT+GTRNDIS=1,1" 500 |grep OK |wc -l)
sleep 2s
}
else
{
start="$( /etc/init.d/modem stop )"
sleep 2s
start="$( /etc/init.d/modem start )"
sleep 5s
}
fi
}
#检测SIM卡是否插入,10次检测不到则重启模块
check_sim()
{
while [ 1 ]
do
enabled=$(uci -q get modem.@ndis[0].enabled)
if [ $enabled == '1' ] ;then
echo "Check the sim"
rec=$( sendat 2 "AT+CPIN?")
rec1=$(echo $rec | grep "READY" | wc -l )
if [ $rec1 == 1 ]; then
x=0
echo "SIM is READY"
else
let x++
if [ $x == 10 ]; then
echo "SIM abnormal restart"
modem_reset #重启模块
x=0
fi
fi
fi
sleep 6s
done
}
#检测网络状态第一次开机
chenk_firstdns()
{
while [ 1 ]
do
enabled=$(uci -q get modem.@ndis[0].enabled)
en1=$(uci -q get modem.@ndis[0].en)
if [ $enabled == '1' ] ;then
if [ $en1 == '1' ] ;then
echo "------------------------------开启任务---------------------------"
ipadd=$(uci -q get modem.@ndis[0].ipaddress)
ping -c 1 -w 1 $ipadd > /dev/null 2>&1
if [ $? -eq 0 ];then
echo "网络连接正常"
xx=0
return
else
echo "网络连接异常 $ipadd"
let xx++
let pxx++
fi
fi
if [ $xx == 5 ];then
xx=0
modem_reset
fi
if [ $pxx == 10 ];then
xx=0
pxx=0
return
fi
echo "------------------------------结束任务---------------------------"
fi
sleep 1s
done
}
#检测网络状态
chenk_dns()
{
en1=$(uci -q get modem.@ndis[0].en)
if [ $en1 == '1' ] ;then
echo "------------------------------开启任务---------------------------"
ipadd=$(uci -q get modem.@ndis[0].ipaddress)
ping -c 1 -w 1 $ipadd > /dev/null 2>&1
if [ $? -eq 0 ];then
echo "网络连接正常"
xx=0
else
echo "网络连接异常 $ipadd 次数$xx"
let xx++
fi
fi
an=$(uci -q get modem.@ndis[0].an)
if [ $xx == $an ];then
xx=0
modem_reset
fi
echo "------------------------------结束任务---------------------------"
}
# 信号任务
chenk_Task()
{
while [ 1 ]
do
enabled=$(uci -q get modem.@ndis[0].enabled)
if [ $enabled == '1' ] ;then
ATPORT
Debug "------------------------------开启任务---------------------------"
AUTO_CPE
SETData
chenk_dns
Debug "------------------------------结束任务---------------------------"
fi
sleep 10s
done
}
#注册网卡
RegisterNetwork()
{
# ATPORT
Debug "RegisterNetwork 注册网卡 $ $MODEMNAME"
# if [ "$MODEMNAME" == "FM650CN" ]; then
# getFM650=$(uci -q get network.wwan5g |grep "interface"| wc -l)
# if [ $getFM650 == "0" ] ;then
# uci set network.wwan5g=interface
# uci set network.wwan5g.ifname='usb0'
# uci set network.wwan5g.proto=dhcp
# uci commit network
# uci set firewall.@zone[1].network="wan wan6 wwan5g wwan5g6 wlan"
# uci commit firewall
# $(/etc/init.d/network reload)
# fi
# getFM650=$(uci -q get network.wwan5g6|grep "interface"| wc -l)
# if [ $getFM650 == "0" ] ;then
# uci set network.wwan5g6=interface
# uci set network.wwan5g6.ifname='usb0'
# uci set network.wwan5g6.proto='dhcpv6'
# uci set network.wwan5g6.reqaddress='try'
# uci set network.wwan5g6.reqprefix='auto'
# uci set network.wwan5g6._orig_ifname='usb0'
# uci set network.wwan5g6._orig_bridge='false'
# uci set network.wwan5g6.extendprefix='1'
# uci commit network
# uci set firewall.@zone[1].network="wan wan6 wwan wwan5g wwan5g6 wlan"
# uci commit firewall
# $(/etc/init.d/network reload)
# fi
# fi
if [ $(uci -q get network.wwan5g |grep "interface"| wc -l) == "0" ] ;then
uci set network.wwan5g=interface
if [ "$MODEMNAME" == "FM650CN" ]; then
uci set network.wwan5g.ifname='usb0'
else
uci set network.wwan5g.ifname='wwan0'
fi
uci set network.wwan5g.proto=dhcp
uci commit network
uci set firewall.@zone[1].network="wan wan6 wwan5g wwan5g6 wlan"
uci commit firewall
$(/etc/init.d/network reload)
fi
if [ $(uci -q get network.wwan5g6 |grep "interface"| wc -l) == "0" ] ;then
uci set network.wwan5g6=interface
if [ "$MODEMNAME" == "FM650CN" ]; then
uci set network.wwan5g6.ifname='usb0'
uci set network.wwan5g6._orig_ifname='usb0'
else
uci set network.wwan5g6.ifname='wwan0'
uci set network.wwan5g6._orig_ifname='wwan0'
fi
uci set network.wwan5g6.proto='dhcpv6'
uci set network.wwan5g6.reqaddress='try'
uci set network.wwan5g6.reqprefix='auto'
uci set network.wwan5g6._orig_bridge='false'
uci set network.wwan5g6.extendprefix='1'
uci commit network
uci set firewall.@zone[1].network="wan wan6 wwan wwan5g wwan5g6 wlan"
uci commit firewall
$(/etc/init.d/network reload)
fi
if [ "$MODEMNAME" == "FM650CN" ]; then
if [ $(uci -q get network.wwan5g.ifname |grep "usb0"| wc -l) == "0" ] ;then
uci set network.wwan5g.ifname='usb0'
uci commit network
$(/etc/init.d/network reload)
fi
if [ $(uci -q get network.wwan5g6.ifname |grep "usb0"| wc -l) == "0" ] ;then
uci set network.wwan5g6.ifname='usb0'
uci commit network
$(/etc/init.d/network reload)
fi
else
if [ $(uci -q get network.wwan5g.ifname |grep "wwan0"| wc -l) == "0" ] ;then
uci set network.wwan5g.ifname='wwan0'
uci commit network
$(/etc/init.d/network reload)
fi
if [ $(uci -q get network.wwan5g6.ifname |grep "wwan0"| wc -l) == "0" ] ;then
uci set network.wwan5g6._orig_ifname='wwan0'
uci set network.wwan5g6.ifname='wwan0'
uci commit network
$(/etc/init.d/network reload)
fi
fi
}
# 运行入口
first()
{
Debug "开启RSSI服务"
# 初值化数据结构
InitData
Debug "初值化数据完成"
sleep 1s
# 计算模块AT端口号
ATPORT
# 注册网卡
RegisterNetwork
# 第一次获取模块信息数据
AUTO_CPE
# 保存结构数据
SETData
#开机直接运行网络注册
modem_reset
# 第一次开机检测是否联网
chenk_firstdns
chenk_Task
}
#############################################
# #
# 进入主函数 #
# #
#############################################
first