40 lines
1.2 KiB
Python
40 lines
1.2 KiB
Python
try:
|
|
import network
|
|
has_network = True
|
|
except ImportError:
|
|
has_network = False
|
|
|
|
class _ActiveWiFiUtil:
|
|
def __init__(self):
|
|
self.wlan = network.WLAN(network.STA_IF)
|
|
self.wlan.active(True)
|
|
|
|
def scan(self):
|
|
"""Scans for networks and returns a list of dictionaries with ssid and rssi."""
|
|
print("Scanning for Wi-Fi networks...")
|
|
networks = self.wlan.scan()
|
|
result = []
|
|
for net in networks:
|
|
try:
|
|
ssid = net[0].decode('utf-8')
|
|
except Exception:
|
|
try:
|
|
ssid = ''.join(chr(b) if 32 <= b < 127 else '?' for b in net[0])
|
|
except Exception:
|
|
ssid = "<Unknown SSID>"
|
|
rssi = net[3]
|
|
if ssid: # Filter out hidden/empty SSIDs
|
|
result.append({"ssid": ssid, "rssi": rssi})
|
|
|
|
# Sort by signal strength (RSSI) descending
|
|
result.sort(key=lambda x: x['rssi'], reverse=True)
|
|
return result
|
|
|
|
class _DummyWiFiUtil:
|
|
def __init__(self):
|
|
print("Wi-Fi not supported on this platform.")
|
|
def scan(self):
|
|
return []
|
|
|
|
WiFiUtil = _ActiveWiFiUtil if has_network else _DummyWiFiUtil
|