Add Pi Zero headless serial bridge with AP portal and daily RTC-based logs
This commit is contained in:
37
src/app_state.py
Normal file
37
src/app_state.py
Normal file
@@ -0,0 +1,37 @@
|
||||
from dataclasses import dataclass, field
|
||||
from threading import Lock
|
||||
from typing import Dict, List
|
||||
|
||||
|
||||
@dataclass
|
||||
class AppState:
|
||||
ap_mode: bool = False
|
||||
wifi_connected: bool = False
|
||||
internet_available: bool = False
|
||||
connecting: bool = False
|
||||
status_message: str = "Startup"
|
||||
last_error: str = ""
|
||||
known_ssids: List[str] = field(default_factory=list)
|
||||
ap_grace_until: float = 0.0
|
||||
lock: Lock = field(default_factory=Lock, repr=False)
|
||||
|
||||
def update_status(self, message: str, error: str = "") -> None:
|
||||
with self.lock:
|
||||
self.status_message = message
|
||||
self.last_error = error
|
||||
|
||||
def set_known_ssids(self, ssids: List[str]) -> None:
|
||||
with self.lock:
|
||||
self.known_ssids = ssids
|
||||
|
||||
def snapshot(self) -> Dict[str, object]:
|
||||
with self.lock:
|
||||
return {
|
||||
"ap_mode": self.ap_mode,
|
||||
"wifi_connected": self.wifi_connected,
|
||||
"internet_available": self.internet_available,
|
||||
"connecting": self.connecting,
|
||||
"status_message": self.status_message,
|
||||
"last_error": self.last_error,
|
||||
"known_ssids": list(self.known_ssids),
|
||||
}
|
||||
Reference in New Issue
Block a user