From 93c29b4a113ee9ce347e4f8e5376fa3d7637e747 Mon Sep 17 00:00:00 2001 From: IrvingGao <1729854488@qq.com> Date: Thu, 13 Jun 2024 18:09:43 +0800 Subject: [PATCH] [wifi] scan --- wifi_manager.py | 53 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/wifi_manager.py b/wifi_manager.py index 50be1c6..3e81e2b 100644 --- a/wifi_manager.py +++ b/wifi_manager.py @@ -178,13 +178,63 @@ def check_wifi_connection(): wifi_ssid = columns[3] if led_enabled: orangepi.set_led_off('blue') + logging.info(f"Wi-Fi connected: {wifi_ssid}") return True, wifi_ssid elif len(columns) >= 4 and columns[2] == "connecting": wifi_ssid = columns[4] if led_enabled: orangepi.set_led_on('blue') + logging.info(f"Wi-Fi connected: {wifi_ssid}") + return True, wifi_ssid return False, None +def get_known_wifi(): + # 定义一个空列表来存储解析后的连接信息 + connections = [] + + cmd = "nmcli connection show" + result = subprocess.run(cmd, shell=True, capture_output=True, text=True) + output = result.stdout.strip() + lines = output.split("\n")[1:] # Skip the header line + # output = result.stdout.strip() + # 按行分割输出 + # lines = output.strip().split('\n')[1:] # 跳过标题行 + + # 遍历每一行以解析连接信息 + for line in lines: + if line.strip(): # 确保跳过空行 + # 分割每一行以获取字段 + fields = line.split() + if len(fields) >= 4: + # 创建一个字典来存储当前连接的信息 + connection_info = { + 'ssid': fields[0], + # 'uuid': fields[1], + 'type': fields[2], + # 'device': fields[3] if fields[3] != '--' else None # 如果设备列为'--',则设为None + } + # 将连接信息添加到列表中 + if connection_info['type'] == 'wifi': # 只处理wifi连接信息 + connections.append(connection_info) + logging.info(f"Known Wi-Fi connections: {connections}") + return connections + +def check_known_wifi(scan_wifi_list): + known_wifi_exist = False + known_wifi_list = get_known_wifi() + for known_wifi in known_wifi_list: + for wifi in scan_wifi_list: + if known_wifi['ssid'] == wifi['ssid']: + known_wifi_exist = True + if not known_wifi_exist: + return False + while known_wifi_exist: + logging.info(f"Known Wi-Fi exist, wait for connecting...") + connected, _ = check_wifi_connection() + if connected: + break + return True + def force_scan_wifi(): wifi_list = [] while wifi_list == []: @@ -270,7 +320,6 @@ def scan_wifi(): json.dump(wifi_list, f) logging.info(f"Wi-Fi scaned list: {wifi_list}") - return wifi_list # 连接 Wi-Fi @@ -390,6 +439,8 @@ if __name__ == '__main__': # wifi_list = scan_wifi() # time.sleep(2) # 等待2秒,确保wifi scan完成 + known_wifi = get_known_wifi() + connected, wifi_ssid = check_wifi_connection() if connected: logging.info(f"系统已自动连接到 Wi-Fi 网络,退出程序")