mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-07-31 06:31:17 +08:00
332 lines
8.8 KiB
Bash
332 lines
8.8 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 $quectel_device_id
|
|
echo $COPS #运营商
|
|
echo 'ttyUSB2' #端口
|
|
echo $CTEMP #温度
|
|
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=2
|
|
|
|
# 自动处理模块信号
|
|
AUTO_CPE() {
|
|
Debug "------------------------------端口$ATPORT---------------------------"
|
|
Debug "AUTO_CPE"
|
|
Date=$(date "+%Y-%m-%d %H:%M:%S")
|
|
quectel_device_id=$(lsusb | grep -i "Quectel" | awk '{print $6}')
|
|
Debug "Quectel 设备 ID: $quectel_device_id"
|
|
# 检测设备是否准备好
|
|
if sendat $ATPORT "AT" 500 | grep -q "OK"; then
|
|
sleep 1s
|
|
else
|
|
Debug "设备未准备好"
|
|
sleep 5s
|
|
return
|
|
fi
|
|
|
|
Debug "读取模块信息 计算模块"
|
|
ATATI=$(sendat $ATPORT "ATI")
|
|
Getconntype=$(echo "$ATATI" | sed -n '2p')
|
|
|
|
if [ -z "$Getconntype" ]; then
|
|
Debug "无法获取模块类型"
|
|
sleep 5s
|
|
return
|
|
fi
|
|
|
|
conntype=$Getconntype
|
|
Model=$(echo "$ATATI" | sed -n '3p')
|
|
|
|
# 检查 SIM 卡状态
|
|
cpin=$(sendat $ATPORT "at+cpin?")
|
|
if echo "$cpin" | grep -q "ERROR"; then
|
|
Debug "No SIM or SIM Error"
|
|
sleep 5s
|
|
return
|
|
elif ! echo "$cpin" | grep -q "READY"; then
|
|
Debug "SIM Locked or Not Ready"
|
|
sleep 5s
|
|
return
|
|
else
|
|
Debug "SIM Ready"
|
|
fi
|
|
|
|
# 根据模块类型执行相应命令或设置不支持的模块消息
|
|
if echo $conntype | grep -qi "Quectel"; then
|
|
Quectel_AT
|
|
else
|
|
Debug "$Model"
|
|
fi
|
|
}
|
|
|
|
#重新联网
|
|
modem_reset() {
|
|
echo "Abnormal network restart"
|
|
|
|
# 停止 modem 服务
|
|
/etc/init.d/modem stop || echo "Failed to stop modem service."
|
|
killall quectel-CM
|
|
# 发送 AT 命令重置 modem
|
|
sendat $ATPORT "AT+CFUN=1,1" || echo "Failed to send AT+CFUN=1,1 command."
|
|
|
|
# 等待 modem 重置
|
|
sleep 10s
|
|
|
|
# 无限循环,直到检测到 Quectel 设备
|
|
while true; do
|
|
if lsusb | grep -qi "Quectel"; then
|
|
echo "Quectel device detected."
|
|
# 启动 modem 服务
|
|
sleep 8s
|
|
/etc/init.d/modem start || echo "Failed to start modem service."
|
|
break # 检测到设备后跳出循环
|
|
else
|
|
echo "Waiting for Quectel device..."
|
|
sleep 1s # 等待 1 秒后再次检测
|
|
fi
|
|
done
|
|
}
|
|
|
|
#检测SIM卡是否插入,10次检测不到则重启模块
|
|
check_sim() {
|
|
while true; do
|
|
enabled=$(uci -q get modem.@ndis[0].enabled)
|
|
if [ "$enabled" -eq 1 ]; then
|
|
echo "Check the sim"
|
|
rec=$(sendat 2 "AT+CPIN?")
|
|
rec1=$(echo "$rec" | grep -c "READY")
|
|
if [ $rec1 -eq 1 ]; then
|
|
x=0
|
|
echo "SIM is READY"
|
|
else
|
|
x=$((x + 1))
|
|
if [ $x -eq 10 ]; then
|
|
echo "SIM abnormal restart"
|
|
modem_reset || echo "Failed to reset modem after SIM abnormality."
|
|
x=0
|
|
fi
|
|
fi
|
|
fi
|
|
sleep 6s
|
|
done
|
|
}
|
|
|
|
|
|
#检测网络状态第一次开机
|
|
check_firstdns() {
|
|
while true; do
|
|
enabled=$(uci -q get modem.@ndis[0].enabled)
|
|
en1=$(uci -q get modem.@ndis[0].en)
|
|
if [ "$enabled" -eq 1 ] && [ "$en1" -eq 1 ]; then
|
|
echo "------------------------------开启任务---------------------------"
|
|
urls="http://wifi.vivo.com.cn/generate_204 http://www.gstatic.com/generate_204"
|
|
success=0
|
|
for url in $urls; do
|
|
if curl -4 --interface wwan0 -I "$url" 2>/dev/null | grep -q "HTTP/.* 204"; then
|
|
echo "网络连接正常"
|
|
success=1
|
|
break
|
|
fi
|
|
done
|
|
|
|
if [ $success -eq 1 ]; then
|
|
echo "网络连接正常"
|
|
xx=0
|
|
return
|
|
else
|
|
echo "网络连接异常"
|
|
xx=$((xx + 1))
|
|
if [ $xx -eq 5 ]; then
|
|
echo "Attempting to reset modem due to network connection issue."
|
|
modem_reset || echo "Failed to reset modem."
|
|
xx=0
|
|
fi
|
|
fi
|
|
|
|
echo "------------------------------结束任务---------------------------"
|
|
fi
|
|
sleep 1s
|
|
done
|
|
}
|
|
|
|
|
|
|
|
#检测网络状态
|
|
check_dns() {
|
|
en1=$(uci -q get modem.@ndis[0].en)
|
|
if [ "$en1" = '1' ]; then
|
|
echo "------------------------------开启任务---------------------------"
|
|
# 使用 curl 检查 HTTP 状态码
|
|
urls="http://wifi.vivo.com.cn/generate_204 http://www.gstatic.com/generate_204"
|
|
success=0
|
|
for url in $urls; do
|
|
if curl -4 --interface wwan0 -I "$url" 2>/dev/null | grep -q "HTTP/.* 204"; then
|
|
echo "网络连接正常"
|
|
success=1
|
|
break
|
|
fi
|
|
done
|
|
|
|
if [ $success -eq 0 ]; then
|
|
echo "网络连接异常"
|
|
xx=$((xx + 1))
|
|
if [ $xx -eq $(uci -q get modem.@ndis[0].an) ]; then
|
|
xx=0
|
|
modem_reset || echo "Modem reset failed."
|
|
fi
|
|
fi
|
|
echo "------------------------------结束任务---------------------------"
|
|
fi
|
|
}
|
|
|
|
check_Task() {
|
|
while true; do
|
|
enabled=$(uci -q get modem.@ndis[0].enabled)
|
|
if [ "$enabled" = '1' ]; then
|
|
Debug "------------------------------开启任务---------------------------"
|
|
ATPORT || Debug "Failed to execute ATPORT."
|
|
AUTO_CPE || Debug "Failed to execute AUTO_CPE."
|
|
SETData || Debug "Failed to execute SETData."
|
|
check_dns || Debug "Failed to execute check_dns."
|
|
Debug "------------------------------结束任务---------------------------"
|
|
fi
|
|
sleep 5s
|
|
done
|
|
}
|
|
|
|
|
|
#注册网卡
|
|
RegisterNetwork()
|
|
{
|
|
Debug "RegisterNetwork 注册网卡 $MODEMNAME"
|
|
|
|
# 设置 wwan5g 网络
|
|
if [ "$(uci -q get network.wwan5g.interface)" != "interface" ]; then
|
|
uci set network.wwan5g=interface
|
|
uci set network.wwan5g.device='wwan0'
|
|
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
|
|
|
|
# 设置 wwan5g6 网络
|
|
if [ "$(uci -q get network.wwan5g6.interface)" != "interface" ]; then
|
|
uci set network.wwan5g6=interface
|
|
uci set network.wwan5g6.device='wwan0'
|
|
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
|
|
|
|
# 更新 wwan5g 和 wwan5g6 接口名称
|
|
for iface in wwan5g wwan5g6; do
|
|
if [ "$(uci -q get network.$iface.device)" != "wwan0" ]; then
|
|
uci set network.$iface.device='wwan0'
|
|
uci commit network
|
|
/etc/init.d/network reload
|
|
fi
|
|
done
|
|
}
|
|
|
|
|
|
|
|
first() {
|
|
Debug "开启RSSI服务"
|
|
InitData
|
|
Debug "初始化数据完成"
|
|
sleep 1s
|
|
ATPORT
|
|
RegisterNetwork
|
|
AUTO_CPE
|
|
SETData
|
|
modem_reset
|
|
check_firstdns
|
|
check_Task
|
|
}
|
|
|
|
first |