@liruiyi962464
2025-04-17T08:18:50.000000Z
字数 10648
阅读 202
Linux服务器部署
for /L %i IN (1,1,254) DO ping -w 2 -n 1 172.0.0.%i
● 网口最右侧为wan口。其余4个为lan口。● 默认接口ip:192.168.1.1。修改后:172.0.0.221。● 网线一端连接lan口,另一侧连接到计算机,通过接口ip接入到终端
● 添加路由网关的方式route add default gw 172.0.0.8● 修改DNSvi /etc/resolv.confnameserver 180.76.76.76nameserver 114.114.114.144● 测试网络连接情况ping baidu.com
● 地址文件的位置: vi /etc/opkg/distfeeds.conf● 删除并修改文件内容,为官方下载地址src/gz openwrt_core http://archive.openwrt.org/releases/23.05.0/targets/ramips/mt7621/packagessrc/gz openwrt_base http://archive.openwrt.org/releases/23.05.0/packages/mipsel_24kc/basesrc/gz openwrt_luci http://archive.openwrt.org/releases/23.05.0/packages/mipsel_24kc/lucisrc/gz openwrt_packages http://archive.openwrt.org/releases/23.05.0/packages/mipsel_24kc/packagessrc/gz openwrt_routing http://archive.openwrt.org/releases/23.05.0/packages/mipsel_24kc/routingsrc/gz openwrt_telephony http://archive.openwrt.org/releases/23.05.0/packages/mipsel_24kc/telephony
● opkg update 更新可以获取的软件包列表● opkg upgrade 对已经安装的软件包升级● 下载连接文件传输opkg install vsftpd openssh-sftp-server加入开机自启——/etc/init.d/vsftpd enable启动——/etc/init.d/vsftpd start● opkg install minicom● opkg install make● opkg install python3● opkg install python3-pip● opkg install luci-i18n-base-zh-cn● 安装linux后台运行插件nohupopkg install nohup(将两个文件传送进去,需要手动下载 文件名如下:)coreutils_9.3-1_mipsel_24kc.ipk 和 coreutils-nohup_9.3-1_mipsel_24kc.ipk● pip3 install pyserial -i https://mirrors.aliyun.com/pypi/simple● pip3 install flask -i https://mirrors.aliyun.com/pypi/simple● pip3 install requests -i https://mirrors.aliyun.com/pypi/simple● pip3 install ping3 -i https://mirrors.aliyun.com/pypi/simpleping3下载地址https://mirrors.aliyun.com/pypi/packages/e6/f4/4070daca3da5bbc3ef5e622d68f979e034e5bf678416817918e51a1b2907/ping3-4.0.8-py3-none-any.whl汉化下载地址http://archive.openwrt.org/releases/23.05.0/packages/mipsel_24kc/luci/luci-i18n-base-zh-cn_git-24.101.63174-10fd9f2_all.ipk● 文件存放地址python执行文件存放在 ./根目录下自启动文件存放在./etc/init.d目录下修改IP地址vi /etc/config/network/etc/init.d/network restart
ln -s /etc/init.d/Start /etc/rc.d/S92Startchmod +x /etc/init.d/Start/etc/init.d/Start enable/etc/init.d/Start start
root@OpenWrt:~# cat /etc/init.d/Start#!/bin/sh /etc/rc.commonSTART=92STOP=15start(){python3 start.py}stop(){python3 start.py}restart(){python3 start.py}enable(){python3 start.py}disable(){python3 start.py}root@OpenWrt:~# cat /etc/rc.d/S92Start#!/bin/sh /etc/rc.commonSTART=92STOP=15start(){python3 start.py}stop(){python3 start.py}restart(){python3 start.py}enable(){python3 start.py}disable(){python3 start.py}
● 发送接口——at.py传送IP地址,模组状态和卡状态———"http://"+ip_addr+":8091/jeecg-boot/system/deviceInfo/updateDeviceSIMStateAndMoudleState?ip="+data["ip"]+"&moudelState="+str(data["moudelState"])+"&simState="+str(data["simStat"])传送信号值信息———"http://"+ip_addr+":8091/jeecg-boot/onlineStateDetection/deviceNetworkstatus/add"● 接收接口——api.py接收终端ping模组命令并执行操作——http://localhost:3562/ping接收注册注销等命令并执行相关操作——http://localhost:3562/init
● SIM卡开关机流程开机初始化设置:ATAT+CIMIAT+CMEE=1ATE0AT+CGDCONT=1,"IP"通电上电:AT+CFUN?AT+CFUN=1轮询系统和网络信息AT+CSQAT^SYSINFOAT+COPS=3,0AT+COPS?AT+COPS=3,2AT+COPS?关机流程AT+CFUN=4AT+CFUN=0● 搜网流程测试当前可用的网络AT^SYSCONFIG?AT^SYSCONFIG=2,2,1,3AT+COPS=?手动网络搜索AT^SYSCONFIG?AT+COPS=1,2,"46030",0AT+COPS=0● 网络附着链接过程AT+CFUN=1AT+CGACT=1,1AT+ZGACT=1,1
from flask import Flask, jsonify, request,flashimport at,requests,serial,time,os,ping3,threadingapp = Flask(__name__)app.secret_key = 'asdfghjkl'Dialer="/usr/local/bin/quectel-CM"tty_com="/dev/ttyUSB1"ip_addr = "172.0.0.10"@app.route('/ping/<ip>/<num>', methods=['POST', 'GET'])def ping(ip, num):result = os.popen('ping -c '+num+' '+ip, 'r')out = result.read()out = out.split('\n')num = len(out)# print(out)if num == 1:if out[0] == '':print("error")return "error"else:if out[1] == '':print("error")return "error"else:print(out)return outdef send_AT(tty,cmd):tty.write(cmd.encode())data=ser.read(1)time.sleep(0.1)data = (data + ser.read(ser.inWaiting())).decode()return data@app.route('/init', methods=['POST', 'GET'])def init():global serser = serial.Serial(tty_com, 115200,bytesize=serial.EIGHTBITS,parity=serial.PARITY_NONE,stopbits=serial.STOPBITS_ONE,timeout=3600)state = request.args.get('state')print(state)if state.isdigit():try:os.system("kill $(pgrep -f 'python3 at.py')")if state == '0':datas = send_AT(ser,"AT+CFUN=1\r\n")time.sleep(1)elif state == '1':datas = send_AT(ser,"AT+CFUN=0\r\n")datas = send_AT(ser,"AT+ZEMCI=0\r\n")time.sleep(1)elif state == '2':datas = send_AT(ser,"AT+CFUN=1\r\n")time.sleep(1)elif state == '3':datas = send_AT(ser,"AT+CGATT=0\r\n")time.sleep(0.5)start_time = time.time()datas = send_AT(ser,"AT+CGATT=1\r\n")datas = datas.split('\r\n')[0]if datas == 'ok':end_time = time.time()time_interval = end_time-start_timeprint(time_interval)time.sleep(1)elif state == '4':datas = send_AT(ser,"AT+CEREG=1\r\nAT+CGDCONT=1,\"IP\"\r\nAT+CGACT=1,1\r\nAT+ZGACT=1,1\r\n")time.sleep(1)else:time.sleep(0.2)return stateexcept:return 'error'finally:data = os.system("nohup python3 at.py >> /dev/null 2>&1 &")if __name__ == '__main__':app.run(host='172.0.0.221', port=3652, debug=True)
import os,sys,re,time,serial,subprocess,requests,json,socketDialer="/usr/local/bin/quectel-CM"tty_com="/dev/ttyUSB1"ip_addr = "172.0.0.10"def send_AT(tty,cmd):tty.write(cmd.encode())data=ser.read(1)time.sleep(0.1)data = (data + ser.read(ser.inWaiting())).decode()return datadef cfun():global serser = serial.Serial(tty_com, 115200,bytesize=serial.EIGHTBITS,parity=serial.PARITY_NONE,stopbits=serial.STOPBITS_ONE,timeout=3600)datas = send_AT(ser,"AT+CFUN=0\r\n")datas = send_AT(ser,"AT+ZEMCI=0\r\n")time.sleep(0.5)# datas = send_AT(ser,"AT\r\nAT+CIMI\r\nAT+CMEE=1\r\nATE0\r\nAT+CGDCONT=1,\"IP\"\r\nAT+CFUN=?\r\nAT+CFUN=1\r\n")# datas = send_AT(ser,"AT+CSQ\r\nAT^SYSINFO\r\nAT+COPS=3,0\r\nAT+COPS?\r\nAT+COPS=3,2\r\nAT+COPS?\r\n")# datas = send_AT(ser,"AT^SYSCONFIG?\r\nAT+SYSCONFIG=2,2,1,3\r\nAT+COPS=?\r\n")datas = send_AT(ser,"AT+CFUN=1\r\n&AT+CGACT=1,1\r\n&AT+ZGACT=1,1\r\n")time.sleep(2)datas = send_AT(ser,"AT+CGACT=1,1\r\n")print("dadsqweqweqfas")time.sleep(2)datas = send_AT(ser,"AT+ZGACT=1,1\r\n")time.sleep(2)datas = send_AT(ser,"AT+ZEMCI=1\r\n")datas = send_AT(ser,"AT+CGPADDR=1\r\n")ip = datas.split('\r\n')[0]ser.close()return 0def attach():global serser = serial.Serial(tty_com, 115200,bytesize=serial.EIGHTBITS,parity=serial.PARITY_NONE,stopbits=serial.STOPBITS_ONE,timeout=3600)datas = send_AT(ser,"AT+ZGACT=1,1\r\n")time.sleep(1)ser.close()return 0def zemci():parameter = {}global serser = serial.Serial(tty_com, 115200,bytesize=serial.EIGHTBITS,parity=serial.PARITY_NONE,stopbits=serial.STOPBITS_ONE,timeout=3600)datas = send_AT(ser,"AT+ZEMCI=1\r\n")time.sleep(1.2)datas = send_AT(ser,"AT+ZEMCI=1\r\n")zemci = datas.split('\r\n')[1]# print(zemci)if zemci[5:10] != "ERROR" and zemci != "OK":try:zemci = zemci.split(':')[1]zemci = zemci.split(',')cellId = hex(int(zemci[0]))[2:]tac = zemci[2]band = zemci[6]rsrp = int(zemci[10])-140rsrq = int(zemci[11])*0.5-20pci = zemci[14][:4]earfcn = int(zemci[14][4:],16)datas = send_AT(ser,"AT+ZEMCI=0\r\n")csq = zemci[10]except:print("error")result = subprocess.check_output(['ifconfig'], shell=True)ifconfig_output = result.decode('utf-8')ip = ifconfig_output[78:89]parameter["ip"] = ipparameter["cellId"] = cellIdparameter["tac"] = tacparameter["band1"] = bandparameter["rsrp"] = rsrpparameter["rsrq"] = rsrqparameter["pci"] = pciparameter["earfcn"] = earfcnparameter["csq"] = csqparameter['zemci'] = zemcireturn parameterelse:print("yizhuxiao")return "yizhuxiao"def state():parameter = {}global serser = serial.Serial(tty_com, 115200,bytesize=serial.EIGHTBITS,parity=serial.PARITY_NONE,stopbits=serial.STOPBITS_ONE,timeout=3600)result = subprocess.check_output(['ifconfig'], shell=True)ifconfig_output = result.decode('utf-8')ip = ifconfig_output[78:89]datas = send_AT(ser,"AT+CPIN?\r\n")card_status = datas.split('\r\n')[1]datas = send_AT(ser,"AT+CFUN?\r\n")fun = datas.split('\r\n')[1]# print(fun)if fun == '+CFUN: 0':moudelState = 0else:moudelState = 1if card_status == '+CME ERROR: 10':simState = 0else:simState = 1parameter["ip"] = ipparameter['moudelState'] = moudelStateparameter['simState'] = simStatereturn parameterdef loop():data = {}global serser = serial.Serial(tty_com, 115200,bytesize=serial.EIGHTBITS,parity=serial.PARITY_NONE,stopbits=serial.STOPBITS_ONE,timeout=3600)datas = zemci()print(datas)if datas != "yizhuxiao" and datas["ip"] == '172.0.0.221':data = {"deviceIp":datas["ip"],"band1":datas["band1"],"cellId":datas["cellId"],"csq":datas["csq"],"earfcn":datas["earfcn"],"pci":datas["pci"],"rsrp":datas["rsrp"],"rsrq":datas["rsrq"],"tac":datas["tac"],}print(data)url = "http://"+ip_addr+":8091/jeecg-boot/onlineStateDetection/deviceNetworkstatus/add"print("123")response = requests.post(url,data=json.dumps(data),headers={"Content-Type":"application/json"})print(response)else:print("error")return dataif __name__=="__main__":num = 0cfun()while True:try:data = state()# print(data)except Exception as e:print('error')result = os.system('ping -c 1 '+ip_addr+' >>/dev/null')print(result)attach()if result:time.sleep(10)print('error1')else:try:if num == 0:num = 1loop()print(2)time.sleep(5)url = "http://"+ip_addr+":8091/jeecg-boot/system/deviceInfo/updateDeviceSIMStateAndMoudleState?ip="+data["ip"]+"&moudelState="+str(data["moudelState"])+"&simState="+str(data["simState"])response = requests.get(url)elif num == 1:num = 0loop()print(200)time.sleep(5)url = "http://"+ip_addr+":8091/jeecg-boot/system/deviceInfo/updateDeviceSIMStateAndMoudleState?ip="+data["ip"]+"&moudelState="+str(data["moudelState"])+"&simState="+str(data["simState"])response = requests.get(url)except:print("error2")
from flask import Flask, jsonify, request,flashimport at,requests,serial,time,os,ping3,threadingapp = Flask(__name__)app.secret_key = 'asdfghjkl'Dialer="/usr/local/bin/quectel-CM"tty_com="/dev/ttyUSB1"ip_addr = "172.0.0.10"def send_AT(tty,cmd):tty.write(cmd.encode())data=ser.read(1)time.sleep(0.1)data = (data + ser.read(ser.inWaiting())).decode()return data@app.route('/attach/<num>', methods=['POST', 'GET'])def attach(num):global serser = serial.Serial(tty_com, 115200,bytesize=serial.EIGHTBITS,parity=serial.PARITY_NONE,stopbits=serial.STOPBITS_ONE,timeout=3600)result = []if num.isnumeric():while True:try:for i in range(int(num)):time_interval = 0datas = send_AT(ser,"AT+CGATT=0\r\n")print(datas)time.sleep(1)t = time.time()start_time = int(round(t * 1000))datas = send_AT(ser,"AT+CGATT=1\r\n")datas = datas.split('\r\n')[1]if datas != 'ok':t = time.time()end_time = int(round(t * 1000))time_interval = end_time-start_timeresult.append(time_interval)else:result[i] = 'error'if len(result) == int(num):breaktime.sleep(0.5)breakexcept:print("IndexError")# datas = send_AT(ser,"AT+CGATT?\r\n")return resultelse:return "error"if __name__ == '__main__':app.run(host='172.0.0.221', port=3653, debug=True)
import threading,time,osdef at1():os.system("python3 at.py")def api1():os.system("python3 api.py")def attach_api():os.system("python3 attach_api.py")if __name__=="__main__":t1 = threading.Thread(target=at1)t2 = threading.Thread(target=api1)t3 = threading.Thread(target=attach_api)t1.start()t2.start()t3.start()