From eec170056e355bf2318d36c9aeb63d65d979ea6b Mon Sep 17 00:00:00 2001 From: sickprodigy Date: Tue, 4 Nov 2025 18:57:19 -0500 Subject: [PATCH] Add WiFiMonitor class: implement WiFi connection monitoring and reconnection logic with LED indicators and Discord notifications --- Scripts/monitors.py | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/Scripts/monitors.py b/Scripts/monitors.py index f620861..bf37a5a 100644 --- a/Scripts/monitors.py +++ b/Scripts/monitors.py @@ -59,6 +59,50 @@ class TemperatureMonitor(Monitor): for alert in alerts: send_discord_message(alert) +class WiFiMonitor(Monitor): + """Monitor WiFi connection and handle reconnection.""" + def __init__(self, wifi, led, interval=5, reconnect_cooldown=60): + super().__init__(interval) + self.wifi = wifi + self.led = led + self.reconnect_cooldown = reconnect_cooldown + self.last_reconnect_attempt = 0 + self.was_connected = wifi.isconnected() if wifi else False + + def run(self): + """Check WiFi status, blink LED, attempt reconnect if needed.""" + import network + from scripts.networking import connect_wifi + + is_connected = self.wifi.isconnected() if self.wifi else False + + if not is_connected: + # Fast blink when disconnected + self.led.on() + time.sleep(0.2) + self.led.off() + + # Try reconnect if cooldown passed + now = time.ticks_ms() + if time.ticks_diff(now, self.last_reconnect_attempt) >= (self.reconnect_cooldown * 1000): + self.last_reconnect_attempt = now + print("Attempting WiFi reconnect...") + self.wifi = connect_wifi(self.led) + + if self.wifi and self.wifi.isconnected(): + send_discord_message("WiFi connection restored 🔄") + self.was_connected = True + else: + # Slow blink when connected + self.led.on() + time.sleep(1) + self.led.off() + + # Notify if connection was just restored + if not self.was_connected: + send_discord_message("WiFi connection restored 🔄") + self.was_connected = True + def run_monitors(monitors): """ Run all monitors in the list, checking if each should run based on interval.