定时执行任务
package/files/etc/crontabs/root文件(如果没有root,touch root)
# 每分钟检查4G模组配置自动联网模式
*/1 * * * * /home/read_ec20x_config.sh
# 每分钟检测WiFi是否开启成功
*/1 * * * * /home/wifi_check.sh
# 每天凌晨3点55分重启设备
55 3 * * * sync && sleep 120 && /home/reboot.sh
重启脚本
该脚本对重启WiFi模块的添加自定义重启4G模组的脚本
#!/bin/sh
#########################################
# File Name: reboot.sh
# Version: v1.0
# Author:kinder
#########################################
# 调整输出串口终端字体的颜色 echo -e xxxx > /dev/console
GREED_WORK='\e[1;32m'
RED_WORK='\e[1;31m'
DEF_WORK='\e[0m'
DATE_TIME=`date +"%Y-%m-%d %H:%M:%S"`
SONSOLE=/dev/console
EC20X_DEVICE=/dev/ttyUSB1
TIMEOUT=300
# 打印重启提示
echo -e $RED_WORK"\n$DATE_TIME Reboot Device ..."$DEF_WORK > $SONSOLE
# 使用 touch 写文件,因为路由器如果没有及时联网从NTP服务器上获取到时间,那么路由器的系统时间和重启的系统时间便一样,如果修改过文件,Openwrt 开机后会把最后修改或者访问的文件时间作为默认系统时间。因此延迟1min重启,可以避免这个问题
touch /etc/banner
# 重启前系统文件同步
sync
# 判断是否有4G模组,如果有则重启4G模组
if [ -c $EC20X_DEVICE ]
then
echo -e "AT+QPOWD=1\r\n"| microcom -t $TIMEOUT $EC20X_DEVICE
else
echo -e $RED_WORK"Not Find Ec20x Device:"$EC20X_DEVICE$DEF_WORK > $SONSOLE
fi
reboot -f
检测WIFI是否开启成功
该脚本只适合单WiFi检测,检测设备WiFi开启失败进行重新开启WiFi,并且连续多次开启WiFi失败后重启设备。
#!/bin/sh
#########################################
# File Name: wifi_check.sh
# Version: v1.0
# Author:kinder
#########################################
# 调整输出串口终端字体的颜色 echo -e xxxx > /dev/console
GREED_WORK='\e[1;32m'
RED_WORK='\e[1;31m'
DEF_WORK='\e[0m'
DATE_TIME=`date +"%Y-%m-%d %H:%M:%S"`
SONSOLE=/dev/console
# WiFi开启检测的标志的临时文件初始化(打开失败,会向文件中数值+1)
WIFI_STATUS=/tmp/wifi_status
if [ -f $WIFI_STATUS ]
then
num=`cat $WIFI_STATUS | grep "[0-9]" | tr -d '\r' | tr -d '\n'`
if expr $num + 1 &>/dev/null
then
echo -e "\nopen wifi error time:"$num
else
echo 0 > $WIFI_STATUS
num=0
fi
else
echo 0 > $WIFI_STATUS
num=0
fi
# 检测WiFi配置是否禁用,用户禁用则跳过检测
disabled=`cat /etc/config/wireless | grep "disabled '1'" | wc -l`
if [ $disabled != 1 ]
then
state=`iwinfo | grep "SSID" | wc -l`
# 只适合单WIFI,因为这个判断局限性(可以修改成检测WIFI名称-前提WIFI有一套固定生成规则)
if [ $state -gt 0 ]
then
echo "wifi ssid is open"
# 重置WiFi开启标志
echo 0 > $WIFI_STATUS
else
echo -e $RED_WORK"\n $DATE_TIME wifi open error"$DEF_WORK > $SONSOLE
# 开启WIFI
wifi up
# 将失败次数累加,连续失败后会重启设备
temp=`expr $num + 1`
if [ $temp -gt 2 ]
then
echo -e $RED_WORK"\n$DATE_TIME wifi open error . will reboot system"$DEF_WORK > $SONSOLE
# 做重启指令,由于附带4G模块。如果只重启WiFi模块,不重启4G模块会导致4G速率没有正常上电的快。故重写reboot.sh
/home/reboot.sh
fi
# 写入文件
echo $temp > $WIFI_STATUS
fi
else
echo 0 > $WIFI_STATUS
echo "wifi disabled"
fi
4G模组常规配置的检查及配置
注意:脚本需要busybox ->microcom 工具
该脚本检测是否自动联网,如果不是则通过命令修改模组配置并且重启设备。另外还查询4G模组信息,联网信息。不对插卡以及注网结果进行实际性处理,只做提示与记录。
#!/bin/sh
#########################################
# File Name: read_ec20x_config.sh
# Version: v1.0
# Author:kinder
#########################################
echo "Read EC20X Config ..."
GREED_WORK='\e[1;32m'
RED_WORK='\e[1;31m'
DEF_WORK='\e[0m'
DATE_TIME=`date +"%Y-%m-%d %H:%M:%S"`
SONSOLE=/dev/console
# 缓存EC200 模组信息
EC20X_CONFIG=/tmp/ec20x_config
# EC200 设备号
EC20X_DEVICE=/dev/ttyUSB1
# EC200 访问超时时间 单位ms
TIMEOUT=300
# 设备是否存在 ,如果不存在设备,则跳出检测
if [ -c $EC20X_DEVICE ]
then
# 判断 EC200信息 是否存在 如果第一次读取到模组信息后续,不再检测(1. 减少频繁访问,因为采用时间计划方式,2.通过ping方式协助管理4g模组)
if [ -s $EC20X_CONFIG ]
then
echo "exit"
else
# 确认设备是否自动联网
CQNETDEVCTL=`echo -e "AT+QNETDEVCTL?\r\n"| microcom -t $TIMEOUT $EC20X_DEVICE | grep -i "+QNETDEVCTL: 3,1" | wc -l`
if [ $CQNETDEVCTL != 1 ]
then
# 模组自动联网配置
QNETDEVCTL=`echo -e "AT+QNETDEVCTL=3,1\r\n"| microcom -t $TIMEOUT $EC20X_DEVICE | grep -i "AT+QNETDEVCTL" | cut -f 2 -s -d "="`
echo -e "QNETDEVCTL:"$QNETDEVCTL >> $EC20X_CONFIG
echo -e $RED_WORK"\n$DATE_TIME set ec20x module auto connect network. will reboot..."$DEF_WORK > $SONSOLE
sync
sleep 3
echo -e "AT+QPOWD=1\r\n" | microcom -t $TIMEOUT $EC20X_DEVICE
reboot -f
fi
# 模组版本号
GMR=`echo -e "AT+GMR\r\n" | microcom -t $TIMEOUT $EC20X_DEVICE | grep -i "EC"`
echo -e "GMR:"$GMR >> $EC20X_CONFIG
# 模组IMEI
IMEI=`echo -e "AT+GSN\r\n" | microcom -t $TIMEOUT $EC20X_DEVICE | grep "[0-9]"`
echo -e "IMEI:"$IMEI >> $EC20X_CONFIG
# 模组网卡选择
USBNET=`echo -e "AT+QCFG="usbnet"\r\n"| microcom -t $TIMEOUT $EC20X_DEVICE | grep -i "+QCFG:" | cut -f 2 -s -d "," | tr -d '\r' | tr -d '\n'`
case $USBNET in
1)
echo "USBNET:ECM" >> $EC20X_CONFIG
break
;;
3)
echo "USBNET:RNIDS" >> $EC20X_CONFIG
break
;;
esac
# 查询 SIM卡 是否插入
CPIN=`echo -e "AT+CPIN?\r\n"| microcom -t $TIMEOUT $EC20X_DEVICE | grep -i "+CPIN:" | cut -f 2 -s -d " "`
echo -e "CPIN:"$CPIN >> $EC20X_CONFIG
# 判断 SIM卡 是否插入
CCPIN=`echo -e "AT+CPIN?\r\n"| microcom -t $TIMEOUT $EC20X_DEVICE | grep -i "+CPIN:" | wc -l`
if [ $CCPIN == 1 ]
then
# 查询 是否 注册 网络
temp=`echo -e "AT+CREG?\r\n"| microcom -t $TIMEOUT $EC20X_DEVICE | grep -i "+CREG:" | cut -f 2 -d " "`
echo -e "CREG:"$temp >> $EC20X_CONFIG
# 判断 模组是否注网成功
CCREG=`echo -e "AT+CREG?\r\n"| microcom -t $TIMEOUT $EC20X_DEVICE | grep -i "+CREG: 0,1\|+CREG: 0,5" | wc -l`
if [ $CCREG == 1 ]
then
# 查询信号质量
CSQ=`echo -e "AT+CSQ\r\n"| microcom -t $TIMEOUT $EC20X_DEVICE | grep -i "+CSQ:" | cut -f 2 -s -d " "`
echo "CSQ:"$CSQ >> $EC20X_CONFIG
# 查询SIM卡的IMSI
IMSI=`echo -e "AT+CIMI\r\n"| microcom -t $TIMEOUT $EC20X_DEVICE | grep "[0-9]"`
echo "IMSI:"$IMSI >> $EC20X_CONFIG
# 查询SIM卡的ICCID
ICCID=`echo -e "AT+QCCID\r\n"| microcom -t $TIMEOUT $EC20X_DEVICE | grep -i "+QCCID:" | cut -f 2 -s -d " "`
echo "ICCID:"$ICCID >> $EC20X_CONFIG
# 查询运营商
COPS=`echo -e "AT+COPS?\r\n"| microcom -t $TIMEOUT $EC20X_DEVICE | grep -i "+COPS:" | cut -f 2 -s -d "\""`
echo "COPS:"$COPS >> $EC20X_CONFIG
# 查询信道
QNWINFO=`echo -e "AT+QNWINFO\r\n"| microcom -t $TIMEOUT $EC20X_DEVICE | grep -i "+QNWINFO:" | cut -f 2 -s -d ":"`
echo "QNWINFO:"$QNWINFO >> $EC20X_CONFIG
else
echo -e $RED_WORK"\n$DATE_TIME ec20x connect fail. CREG:"$temp$DEF_WORK > $SONSOLE
rm -f $EC20X_CONFIG
fi
else
echo -e $RED_WORK"\n$DATE_TIME SIM Card fail\n"$DEF_WORK > $SONSOLE
rm -f $EC20X_CONFIG
fi
fi
else
echo -e $RED_WORK"\n$DATE_TIME Not Find Ec20x Device:"$EC20X_DEVICE$DEF_WORK > $SONSOLE
rm -f $EC20X_CONFIG
fi
检测网络
#!/bin/sh
#########################################
# File Name: detection_network.sh
# Version: v1.0
# Author:kinder
#########################################
GREED_WORK='\e[1;32m'
RED_WORK='\e[1;31m'
DEF_WORK='\e[0m'
DATE_TIME=`date +"%Y-%m-%d %H:%M:%S"`
SONSOLE=/dev/console
EC20X_CONFIG=/tmp/ec20x_config
NETWORK_STATUS=/tmp/network_status
# 带域名方式,通用性较好 ping的地址自己根据自己需要修改
IP1=wwww.baidu.com
# 百度公共IP,可能一些设备dns不了域名,
IP2=180.76.76.76
# 谷歌IP 114有时候ping 不通
IP3=8.8.8.8
# 记录网络状态标志的文件
if [ -f $NETWORK_STATUS ]
then
num=`cat $NETWORK_STATUS | grep "[0-9]" | tr -d '\r' | tr -d '\n'`
if expr $num + 1 &>/dev/null
then
echo -e "\nping error time:"$num
else
echo 0 > $NETWORK_STATUS
num=0
fi
else
echo 0 > $NETWORK_STATUS
num=0
fi
# 尝试 第一次 ping
state=`ping -w 3 -c 1 $IP1 | grep -i "time=" | wc -l`
if [ $state != 1 ]
then
echo -e $RED_WORK"\n$DATE_TIME ping:"$IP1" fail"$DEF_WORK > $SONSOLE
# 尝试 第二次 ping
state=`ping -w 3 -c 1 $IP2 | grep -i "time=" | wc -l`
if [ $state != 1 ]
then
echo -e $RED_WORK"$DATE_TIME ping:"$IP2" fail"$DEF_WORK > $SONSOLE
# 尝试 第三次 ping
state=`ping -w 3 -c 1 $IP3 | grep -i "time=" | wc -l`
if [ $state != 1 ]
then
rm -f $EC20X_CONFIG
echo -e $RED_WORK"$DATE_TIME ping:"$IP3" fail"$DEF_WORK > $SONSOLE
temp=`expr $num + 1`
if [ $temp -gt 2 ]
then
echo -e $RED_WORK"\n$DATE_TIME ping error . will reboot system"$DEF_WORK > $SONSOLE
/home/reboot.sh
fi
echo $temp > $NETWORK_STATUS
else
echo 0 > $NETWORK_STATUS
fi
else
echo 0 > $NETWORK_STATUS
fi
else
echo 0 > $NETWORK_STATUS
fi