Initial commit - Phase 3/4

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
michael
2026-01-06 13:45:29 -08:00
parent 1da6730735
commit 4f35df1781
323 changed files with 98287 additions and 1195 deletions

100
NETWORK_IMPLEMENTATION.md Normal file
View File

@@ -0,0 +1,100 @@
# Network Implementation Notes
This document describes the current WiFi/network architecture and known issues.
## Architecture Overview
The Dangerous Pi image uses a dual-mode WiFi configuration:
### Access Point Mode (Default)
- **hostapd** creates an AP on wlan0
- **dnsmasq** provides DHCP
- Default configuration:
- SSID: `Dangerous-Pi`
- Password: `dangerous123`
- IP Range: `192.168.4.2-20`
- Gateway: `192.168.4.1`
### Client Mode (Manual)
wlan0 can be switched to client mode to connect to an existing network:
```bash
# Stop AP services
sudo systemctl stop hostapd
sudo systemctl stop dnsmasq
# Connect to WiFi
echo -e 'network={\n ssid="YOUR_SSID"\n psk="YOUR_PASSWORD"\n}' > ~/wifi.conf
sudo wpa_supplicant -B -i wlan0 -c ~/wifi.conf
# Get IP address
sudo dhcpcd wlan0
```
To return to AP mode:
```bash
sudo killall wpa_supplicant
sudo systemctl start hostapd
sudo systemctl start dnsmasq
```
## Known Issues
### WiFi API Detection
- The systemd service must have `/sbin:/usr/sbin` in PATH for `iw` command to work
- This was fixed in the service file (2026-01-01)
### AP/Client Mode Switching
- wlan0 is configured as "unmanaged" by NetworkManager when hostapd is running
- hostapd must be stopped before wlan0 can connect as a client
- dhclient is not installed; use dhcpcd instead
### Mode Detection
- Current mode detection reports "client" when in AP mode because it checks for SSID presence
- Should check for `type AP` in `iw dev` output for accurate detection
- TODO: Fix mode detection to properly identify AP mode
### USB WiFi Adapter (wlan1)
- If present, wlan1 can be used for client connectivity while wlan0 stays in AP mode
- Configuration in `.env.example`: `USB_WLAN_INTERFACE=wlan1`
## Future Improvements
Planned features for easier network switching:
1. Web UI toggle for AP/Client mode
2. Persistent WiFi client configuration
3. Auto-fallback to AP mode if client connection fails
4. USB WiFi adapter auto-detection
## Service Dependencies
| Service | Port | Purpose |
|---------|------|---------|
| hostapd | - | WiFi Access Point |
| dnsmasq | 53, 67 | DNS & DHCP for AP clients |
| dangerous-pi | 8000 | Main backend API |
| dangerous-pi-frontend | 3000 | Remix frontend |
| pisugar-server | 8421-8423 | UPS battery management |
## Tested Configurations
- Raspberry Pi Zero 2 W with onboard WiFi
- Debian Trixie (arm64)
- wpa_supplicant + dhcpcd for client connections
- PiSugar 2 UPS (detected via I2C)
## Verified Working (Phase 3 Testing - 2026-01-01)
| Feature | Status | Notes |
|---------|--------|-------|
| WiFi AP | ✅ Working | SSID: Dangerous-Pi at 192.168.4.1 |
| WiFi API | ✅ Working | After PATH fix in systemd service |
| PM3 Device | ✅ Working | /dev/ttyACM0, Iceman firmware |
| PM3 API | ✅ Working | Command execution verified |
| UPS (PiSugar 2) | ✅ Working | Battery status, AC power detection |
| BLE | ✅ Working | Advertising as DangerousPi |
| Frontend | ✅ Working | Remix serving on port 3000 |
| Backend | ✅ Working | FastAPI on port 8000 |
---
*Last updated: 2026-01-01*