Implement story 1.3: WiFi hotspot and captive portal form
Implement wifi.py (start_ap/stop_ap/kill_wifi with subprocess and ProvisioningError), portal.py (Flask captive portal with Android/iOS/Windows probe redirects and 404 catch-all), updated provision.py provisioning loop, and full test suite (38 passing). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,8 +1,28 @@
|
||||
import logging
|
||||
|
||||
from planemapper.provisioning import ProvisioningError, wifi
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def _reset_to_portal_state() -> None:
|
||||
log.info("Resetting to portal state")
|
||||
try:
|
||||
wifi.stop_ap()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
|
||||
def main() -> None:
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
log.info("not implemented")
|
||||
provisioned = False
|
||||
while not provisioned:
|
||||
try:
|
||||
wifi.start_ap()
|
||||
# Portal runs here (Story 1.3+ wires Flask app)
|
||||
# Provisioning sequence continues in Story 1.5
|
||||
log.info("Provisioning sequence started")
|
||||
provisioned = True # placeholder — full sequence wired in 1.5
|
||||
except ProvisioningError as e:
|
||||
log.error("Provisioning failed: %s", e)
|
||||
_reset_to_portal_state()
|
||||
|
||||
Reference in New Issue
Block a user