commit c515650f33b862abd70678bb8a1992990df32f52
Author: IrvingGao <1729854488@qq.com>
Date: Sun May 19 15:25:20 2024 +0800
first commit
diff --git a/templates/index.html b/templates/index.html
new file mode 100644
index 0000000..7dcc513
--- /dev/null
+++ b/templates/index.html
@@ -0,0 +1,136 @@
+
+
+
+
+ Wi-Fi 设置
+
+
+
+
+ 配置
+ WIFI 名称
+
+
+
+
+ WIFI 密码
+
+
+
+
+
+
+
+
+
+
+
+ Powered by
+ Takway.ai
+
+
+
+
+
+
diff --git a/wifi_manger.py b/wifi_manger.py
new file mode 100644
index 0000000..07b5bf4
--- /dev/null
+++ b/wifi_manger.py
@@ -0,0 +1,164 @@
+import subprocess
+import os
+import time
+from flask import Flask, render_template, request, redirect, url_for, make_response
+
+app = Flask(__name__)
+
+# 检测 Wi-Fi 连接状态
+def check_wifi_connection():
+ try:
+ # 使用nmcli命令检查Wi-Fi连接状态
+ output = subprocess.check_output(['nmcli', 'device', 'status']).decode('utf-8')
+
+ # 分析输出以查找Wi-Fi连接状态
+ for line in output.split('\n'):
+ if 'wifi' in line and 'connected' in line:
+ return True
+ except subprocess.CalledProcessError as e:
+ print(f"Error checking Wi-Fi status: {e}")
+
+ return False
+
+# 设置热点
+def set_hotspot():
+ try:
+ subprocess.run(['sudo', 'create_ap', 'wlan0', 'eth0', 'Takway-Toy', '--no-virt'], check=True)
+ except subprocess.CalledProcessError as e:
+ print(f"Error setting up hotspot: {e}")
+
+def scan_wifi():
+ try:
+ subprocess.run(['nmcli', 'dev', 'wifi', 'rescan'], check=True)
+ time.sleep(1)
+ output = subprocess.check_output(['nmcli', 'dev', 'wifi'])
+ wifi_list = []
+ lines = output.decode().splitlines()
+ print(lines)
+ print(len(lines))
+ # for new in lines.split("', '"):
+ # print(f"new: {new}")
+ print("###### ")
+ for idx, line in enumerate(lines[1:]):
+ print(f"{idx}: {line}")
+
+ # 分割字符串以空格为分隔符
+ columns = line.split()
+
+ # 提取第一列和第三列的值
+ mac_address = columns[0]
+
+ ssid = " ".join(columns[1:3])
+ if "Infra" in ssid:
+ ssid = ssid.replace(" Infra", "")
+ print("ssid: ", ssid.strip())
+
+ # 提取第六列的强度值
+ last_info = columns[4:8]
+ # 去除所有的空格
+ columns = line.replace(" ", "")
+ # 提取"Mbit/s"后两位数字
+ strength = int(columns[columns.index("Mbit/s")+6:columns.index("Mbit/s")+8])
+
+
+ print("MAC地址:", mac_address)
+ print("SSID:", ssid)
+ print("强度:", strength)
+
+ wifi_list.append({'ssid': ssid, 'signal': strength})
+ if len(wifi_list) == 15:
+ break
+
+ return wifi_list
+ except subprocess.CalledProcessError as e:
+ print(f"Error scanning for Wi-Fi networks: {e}")
+ return []
+
+def scan_wifi_table():
+ import csv
+ import subprocess
+ from io import StringIO
+
+ # 调用 nmcli dev wifi 命令并获取输出
+ output = subprocess.check_output(['nmcli', 'dev', 'wifi']).decode()
+
+ # 创建一个内存中的文件对象
+ file_object = StringIO(output)
+
+ # 使用csv模块读取文件对象,并指定分隔符为whitespace
+ reader = csv.reader(file_object, delimiter=' ')
+
+ # 将数据存储到二维列表中
+ data = [row for row in reader]
+
+ # 打印表格数据
+ for row in data:
+ print(row)
+
+# 连接 Wi-Fi
+def connect_wifi(ssid, password):
+ scan_wifi()
+ time.sleep(1)
+ try:
+ subprocess.run(['sudo', 'create_ap', '--stop', 'wlan0'], check=True)
+ print("Stopping create_ap service")
+ except subprocess.CalledProcessError as e:
+ print(f"Error stopping hotspot: {e}")
+
+ time.sleep(1)
+
+ try:
+ subprocess.run(['nmcli', 'dev', 'wifi', 'connect', ssid, 'password', password], check=True)
+ except subprocess.CalledProcessError as e:
+ print(f"Error connecting to Wi-Fi: {e}")
+
+ time.sleep(5)
+ # 检查是否成功连接Wi-Fi
+ if check_wifi_connection():
+ print("成功连接到Wi-Fi,程序即将退出。")
+ os._exit(0) # 成功连接后退出程序
+ else:
+ print("Wi-Fi连接失败。")
+
+# 主页
+@app.route('/')
+def index():
+ wifi_list = scan_wifi()
+ response = make_response(render_template('index.html', wifi_list=wifi_list))
+ response.headers.set('Content-Type', 'text/html')
+ response.headers.set('Apple-Web-App-Capable', 'yes')
+ response.headers.set('Apple-Mobile-Web-App-Status-Bar-Style', 'black-translucent')
+ return response
+
+# 提交 Wi-Fi 信息
+@app.route('/submit', methods=['POST'])
+def submit():
+ ssid = request.form['ssid']
+ password = request.form['password']
+ print(f"Connecting to Wi-Fi: {ssid} with password {password}")
+ connect_wifi(ssid, password)
+ stop_hotspot() # 关闭热点
+ return redirect(url_for('index'))
+
+if __name__ == '__main__':
+ debug_mode = True # 设置为 True 以跳过 Wi-Fi 连接状态检测
+
+ if not debug_mode:
+ if check_wifi_connection():
+ print("已连接到 Wi-Fi 网络")
+ else:
+ print("未连接到 Wi-Fi 网络")
+ set_hotspot()
+
+ print("Starting Flask server")
+ print("----------------------------")
+ wf_list = scan_wifi()
+ print("----------------------------")
+ print(wf_list)
+
+
+ '''
+ # 启动 Flask 服务器
+ app.run(host='0.0.0.0', port=80, debug=True)
+ '''
+
\ No newline at end of file