47 lines
1.5 KiB
Python
47 lines
1.5 KiB
Python
import network
|
|
import asyncio
|
|
|
|
from log import Logger, Color
|
|
from statusled import STATUS_LED
|
|
|
|
async def ensure_network():
|
|
from secret import SSID, PASSWORD
|
|
log = Logger("net", Color.BLUE)
|
|
|
|
nic = network.WLAN(network.STA_IF)
|
|
log.info("setting up WLAN interface...")
|
|
nic.active(True)
|
|
while not nic.active():
|
|
await asyncio.sleep(0.1)
|
|
log.info("connecting...")
|
|
nic.connect(SSID, PASSWORD)
|
|
|
|
logged = False
|
|
|
|
status_name = {
|
|
network.STAT_CONNECT_FAIL: "CONNECT_FAIL",
|
|
network.STAT_CONNECTING: "CONNECTING",
|
|
network.STAT_IDLE: "IDLE",
|
|
network.STAT_NO_AP_FOUND: "NO_AP_FOUND",
|
|
network.STAT_WRONG_PASSWORD: "WRONG_PASSWORD"
|
|
}
|
|
|
|
while True:
|
|
if (status := nic.status()) == network.STAT_GOT_IP: # pyright: ignore[reportAny]
|
|
STATUS_LED.status(2)
|
|
if not logged:
|
|
logged = True
|
|
log.success(f"Got IP: {nic.ifconfig()!r}")
|
|
rssi = nic.status("rssi") # pyright: ignore[reportAny]
|
|
log.info(f"{rssi=}")
|
|
else:
|
|
logged = False
|
|
STATUS_LED.status(1)
|
|
log.warning("status={}".format(status_name.get(status, f"UNKNOWN ({status})"))) # pyright: ignore[reportAny]
|
|
if status == network.STAT_CONNECT_FAIL or status == network.STAT_NO_AP_FOUND:
|
|
log.info("retrying in 3s...")
|
|
await asyncio.sleep(3)
|
|
nic.connect(SSID, PASSWORD)
|
|
|
|
await asyncio.sleep(1)
|