@liruiyi962464
2025-04-17T08:18:50.000000Z
字数 10648
阅读 98
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
● 修改DNS
vi /etc/resolv.conf
nameserver 180.76.76.76
nameserver 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/packages
src/gz openwrt_base http://archive.openwrt.org/releases/23.05.0/packages/mipsel_24kc/base
src/gz openwrt_luci http://archive.openwrt.org/releases/23.05.0/packages/mipsel_24kc/luci
src/gz openwrt_packages http://archive.openwrt.org/releases/23.05.0/packages/mipsel_24kc/packages
src/gz openwrt_routing http://archive.openwrt.org/releases/23.05.0/packages/mipsel_24kc/routing
src/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后台运行插件nohup
opkg 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/simple
ping3下载地址
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/S92Start
chmod +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.common
START=92
STOP=15
start(){
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.common
START=92
STOP=15
start(){
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卡开关机流程
开机初始化设置:
AT
AT+CIMI
AT+CMEE=1
ATE0
AT+CGDCONT=1,"IP"
通电上电:
AT+CFUN?
AT+CFUN=1
轮询系统和网络信息
AT+CSQ
AT^SYSINFO
AT+COPS=3,0
AT+COPS?
AT+COPS=3,2
AT+COPS?
关机流程
AT+CFUN=4
AT+CFUN=0
● 搜网流程
测试当前可用的网络
AT^SYSCONFIG?
AT^SYSCONFIG=2,2,1,3
AT+COPS=?
手动网络搜索
AT^SYSCONFIG?
AT+COPS=1,2,"46030",0
AT+COPS=0
● 网络附着链接过程
AT+CFUN=1
AT+CGACT=1,1
AT+ZGACT=1,1
from flask import Flask, jsonify, request,flash
import at,requests,serial,time,os,ping3,threading
app = 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 out
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('/init', methods=['POST', 'GET'])
def init():
global ser
ser = 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_time
print(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 state
except:
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,socket
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
def cfun():
global ser
ser = 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 0
def attach():
global ser
ser = 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 0
def zemci():
parameter = {}
global ser
ser = 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])-140
rsrq = int(zemci[11])*0.5-20
pci = 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"] = ip
parameter["cellId"] = cellId
parameter["tac"] = tac
parameter["band1"] = band
parameter["rsrp"] = rsrp
parameter["rsrq"] = rsrq
parameter["pci"] = pci
parameter["earfcn"] = earfcn
parameter["csq"] = csq
parameter['zemci'] = zemci
return parameter
else:
print("yizhuxiao")
return "yizhuxiao"
def state():
parameter = {}
global ser
ser = 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 = 0
else:
moudelState = 1
if card_status == '+CME ERROR: 10':
simState = 0
else:
simState = 1
parameter["ip"] = ip
parameter['moudelState'] = moudelState
parameter['simState'] = simState
return parameter
def loop():
data = {}
global ser
ser = 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 data
if __name__=="__main__":
num = 0
cfun()
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 = 1
loop()
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 = 0
loop()
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,flash
import at,requests,serial,time,os,ping3,threading
app = 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 ser
ser = 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 = 0
datas = 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_time
result.append(time_interval)
else:
result[i] = 'error'
if len(result) == int(num):
break
time.sleep(0.5)
break
except:
print("IndexError")
# datas = send_AT(ser,"AT+CGATT?\r\n")
return result
else:
return "error"
if __name__ == '__main__':
app.run(host='172.0.0.221', port=3653, debug=True)
import threading,time,os
def 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()