linux下的EC20的监控python脚本

工作原因使用到EC20模块来给设备提供网络,使用写了个监控4G网络的脚本来监控网络状态,进行保活

该脚本可以将相关网络参数定时写入日志文件中,起到检测网络状态的作用。

安装工具与python串口库

apt install psmisc
#下载pyserial库
pip install pyserial

脚本代码

#!/usr/bin/python3

# 本脚本用于监控4G模块的运行状态
# 运行环境:linux
import os,sys,re,time   # 系统基础库
import serial

Dialer="/usr/local/bin/quectel-CM"  # 拨号程序
tty_com="/dev/ttyUSB2"              # AT通信口

# 测试IP与相关调节参数
IP1="111.230.129.137" #公司自有IP
IP2="114.114.114.114" #DNS IP
ping_cycle = 5  #ping测试周期(秒)

# 发送AT指令接收数据返回的函数
def send_AT(tty,cmd):

    #print("串口对象参数:",tty)
    tty.write(cmd.encode())

    data=serial.read(1)
    time.sleep(0.1)
    data = (data + serial.read(serial.inWaiting())).decode()

    return data

# 记录当前4G网络信息
def fun_4gnet_record():

    print(">>> 发送询问指令,查询4G网络参数~~~~~~~~")
    # 配置串口接口
    global serial 
    serial = serial.Serial(tty_com, 115200,
                            bytesize=serial.EIGHTBITS,    # 数据位:8位
                            parity=serial.PARITY_NONE,    # 校验位:无
                            stopbits=serial.STOPBITS_ONE, # 停止位:1位
                            timeout=3600)                 # 读超时时间
    if serial.is_open != False :
        print("打开串口成功,串口详情参数:",serial)
    else:
        print("串口打开失败!")

    # 获取4G信号强度    ###########################################
    datas = send_AT(serial,"AT+CSQ\r\n")
    signal_intensity_info = datas.split('\r\n')[1]

    # 获取卡状态    ################################################
    datas = send_AT(serial,"AT+CPIN?\r\n")
    card_status = datas.split('\r\n')[1]

    # 获取4G网络注册状态    #########################################
    datas = send_AT(serial,"AT+CREG?\r\n")
    registration_status = datas.split('\r\n')[1]
    
    # 查询4G的网络状态  #############################################
    datas = send_AT(serial,"AT+CPIN?\r\n")
    network_status = datas.split('\r\n')[1]
    
    # 查询PDP上下文信息 #############################################
    datas = send_AT(serial,"AT+CGDCONT?\r\n")
    PDP_data = datas

    serial.close() #关闭串口

    print(">>> 写入日志文件~~~")
    # # 打开日志文件
    log_file = open("4gnet.log","a")

    # 数据写入
    # print("["+time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())+"]")
    log_file.write(" \n\r")
    log_file.write("["+time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())+"]"+"\r\n")
    if(state == False):         # 判断是正常状态还是异常状态?
        log_file.write("ping tset is failing!!!   "+"\n\r")
    else:
        log_file.write("ping tset is OK!!!   "+"\n\r")
    log_file.write(signal_intensity_info+"\n\r")
    log_file.write(card_status+"\n\r")
    log_file.write(registration_status+"\n\r")
    log_file.write(network_status+"\n\r")
    log_file.write("\b\r")
    log_file.write(PDP_data+"\n\r")
    log_file.write(" \n\r")

    log_file.close() #关闭日志文件

# 主函数
if __name__ == "__main__":

    print("4G网络监测程序V1.0 启动!~")

    #检查是否识别到EC20模块
    ret = os.popen("lsusb | grep Quectel").read()
    if(ret.find("Quectel") != -1):
        print(">>> EC20设备已接入!~")

    # 检查是否存在ttyUSB2
    if(os.path.exists(tty_com) == False):
        print(">>> AT串口未识别~~~")
        exit(-1)
    else:
        print(">>> AT串口已识别~~~")

    # 先检查是否正在运行,关闭
    procedure_PID = os.popen("ps aux | grep "+Dialer+" | awk 'NR==1 {print $2}'").read()
    print("procedure_PID = %s"%procedure_PID)
    if  procedure_PID != 0:
        os.system("kill -9 "+procedure_PID)
        print(">>> 存在残留的拨号进程,已关闭~~~")

    time.sleep(10)
    #再启动拨号程序
    cmd_ret_fp = os.system(Dialer+" &")
    time.sleep(7) #延时5秒,等待拨号程序运行完成

    # 获取生成的网卡名
    card_name = os.popen("ifconfig | grep ww").read().split(":")[0]
    print(card_name)

    #检测状态
    while True:
        # 简单ping公司服务器IP
        
        ret_ping_1 = os.system("ping -c 1 "+IP1+" -I "+ card_name)
        # print(">>>"+str(ret_ping_1))
        if(ret_ping_1 != 0):  # 不为零则为没有ping通
            # 再次ping别的IP,减少误判
            ret_ping_2 = os.system("ping -c 1 "+IP2+" -I "+ card_name)
            if(ret_ping_2 != 0):
                # 第二个IP都ping不通了,80%网络已经断开了
                
                fun_4gnet_record(False) #记录信息

                # 重新拨号
                cmd_ret_fp = os.system(Dialer+" &")
                time.sleep(6) #延时5秒,等待拨号程序运行完成
        else:
            time.sleep(ping_cycle) #5秒后再ping一次   
            #fun_4gnet_record(True) #记录信息

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用中提到了一个关于Linux ec20的代码片段,该代码片段涉及到通过pppd拨号上网以及修改波特率。引用中提到了ec20的缺省路由记录的metric设置。如果第一条路由记录没有连接网线,则无法进行跨网段的IP网络访问。而引用中提到了如何修改缺省的eth0和eth1的路由记录,使其具有不同的掩码和网关设置。 根据引用的内容,Linux ec20是一个用于进行网络连接的设备。我们可以通过pppd命令来进行拨号上网,其中通过修改波特率可以提高上网速度。同时,对于ec20的网络设置,需要注意缺省路由记录的设置,以及如何设置不同的掩码和网关。这些设置将对跨网段的IP网络访问产生影响。因此,对于Linux ec20的使用,需要根据具体需求进行相应的配置和调整。 请注意,上述回答仅基于引用内容,可能并不完整。具体的操作和配置细节可能需要参考相关的文档或资料。123 #### 引用[.reference_title] - *1* [【嵌入式linux】使用4G模块EC20自适应运营商和ppp拨号上网](https://blog.csdn.net/yechongbinbin/article/details/127505108)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] - *2* *3* [linux 网卡路由表与ec20路由表的冲突协调](https://blog.csdn.net/bingdund/article/details/123399794)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值