Add Dangerous Pi MVP implementation - complete backend and system integration

This commit adds the complete Dangerous Pi web management interface with all MVP features implemented and tested locally.

## New Features

### Backend (Python + FastAPI)
- Complete FastAPI backend with async support
- 40+ API endpoints (Health, PM3, WiFi, Updates, UPS, BLE, Plugins)
- 6 managers: Session, WiFi, Update, UPS, BLE, Plugin
- SQLite database with sessions, config, history, crash reports
- Server-Sent Events (SSE) for real-time notifications
- Mock PM3 worker for development without hardware

### WiFi Manager
- Interface detection (USB vs built-in)
- Network scanning with signal strength
- Mode switching (AP/Client/Dual/Auto/Off)
- Network connection with password support
- Hidden SSID and saved networks support
- Static IP and DHCP configuration
- 10 WiFi API endpoints

### Update Manager
- GitHub releases API integration
- Automatic periodic update checks
- Semantic version comparison
- Update download with progress tracking
- SHA256 checksum verification
- Automatic installation with backup and rollback
- PM3 client rebuild after updates
- 6 Update API endpoints

### UPS Manager
- I2C battery monitoring (MAX17040-compatible)
- Battery percentage, voltage, current tracking
- Power source detection (AC/Battery)
- Safe shutdown triggers at configurable thresholds
- Event callbacks for battery warnings
- SSE and BLE notification integration
- 3 UPS API endpoints

### BLE Manager
- Bluetooth Low Energy notification support
- Auto-detects BLE capability
- Multiple notification types (updates, battery, shutdown, etc.)
- BLE advertising management
- Device connection tracking
- 4 BLE API endpoints

### Plugin Framework
- Dynamic plugin loading/unloading
- Plugin lifecycle management (load, enable, disable, unload)
- Hook system for extensibility
- JSON-based metadata
- Example "Hello World" plugin included
- 7 Plugin API endpoints

### Frontend (Remix.js + React)
- Cyberpunk-themed responsive UI
- Dashboard with system status
- PM3 command interface with history
- Settings page with WiFi and Update management
- Command logs viewer
- Theme toggle (Dark/Light/Auto)
- Server-side rendering (SSR)
- Mobile-first responsive design

### System Integration
- Systemd service with security hardening
- Automated install/uninstall scripts
- Environment configuration template
- Hardware access groups (i2c, bluetooth, gpio, dialout)
- Pi-gen stage 04 integration for OS image building
- Port conflict resolution with ttyd-bash
- I2C interface auto-enable for UPS HAT

### Testing
- test_backend.py - Backend API tests
- test_ups.py - UPS manager tests
- test_ble.py - BLE manager tests
- test_plugins.py - Plugin manager tests
- All tests passing locally

### Documentation
- 12 comprehensive documentation files
- claude.md - AI development guide
- WIFI_MANAGER.md - WiFi management guide
- UPDATE_MANAGER.md - Update system guide
- PORT_CONFLICT.md - Port conflict resolution guide
- MVP_COMPLETE.md - MVP implementation summary
- PROJECT_STATUS.md - Project status and roadmap
- systemd/README.md - Service management docs
- pi-gen integration documentation

## Technical Details
- ~5,000+ lines of backend code
- 11 Python dependencies (smbus2 added for UPS)
- FastAPI with async/await throughout
- Type hints and docstrings on all functions
- RESTful API design with SSE for notifications
- Security hardening (non-root, protected dirs, resource limits)

## Next Steps
- Deploy to Raspberry Pi Zero 2 W hardware
- Test with real Proxmark3 device
- Test UPS HAT integration
- Test BLE on Pi hardware
- Build custom OS image with pi-gen
- Performance optimization for Pi Zero 2 W

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
michael
2025-11-26 08:11:36 -08:00
parent 0a586c5360
commit 1da6730735
68 changed files with 12673 additions and 5 deletions

114
scripts/resolve-port-conflict.sh Executable file
View File

@@ -0,0 +1,114 @@
#!/bin/bash
# Script to resolve port conflict between Dangerous Pi and ttyd-bash
set -e
echo "Dangerous Pi Port Conflict Resolution"
echo "======================================"
echo ""
echo "The existing pi-pm3 setup uses:"
echo " - ttyd-bash on port 8000"
echo " - ttyd-pm3 on port 8080"
echo " - RaspAP on port 80"
echo ""
echo "Dangerous Pi wants to use port 8000 for the backend."
echo ""
echo "Choose a resolution option:"
echo " 1) Disable ttyd-bash (recommended - use Dangerous Pi's web terminal instead)"
echo " 2) Change Dangerous Pi to port 8001 (keep both services)"
echo " 3) Change ttyd-bash to port 8002 (keep both services)"
echo " 4) Cancel (manual configuration)"
echo ""
read -p "Enter option (1-4): " option
case $option in
1)
echo ""
echo "Disabling ttyd-bash service..."
if systemctl is-active --quiet ttyd-bash 2>/dev/null; then
sudo systemctl stop ttyd-bash
echo "✅ Stopped ttyd-bash"
fi
if systemctl is-enabled --quiet ttyd-bash 2>/dev/null; then
sudo systemctl disable ttyd-bash
echo "✅ Disabled ttyd-bash (won't start on boot)"
fi
echo ""
echo "✅ Done! Dangerous Pi can now use port 8000."
echo ""
echo "To re-enable ttyd-bash later:"
echo " sudo systemctl enable ttyd-bash"
echo " sudo systemctl start ttyd-bash"
;;
2)
echo ""
echo "Changing Dangerous Pi to port 8001..."
# Update environment file
if [ -f /opt/dangerous-pi/.env ]; then
if grep -q "^PORT=" /opt/dangerous-pi/.env; then
sudo sed -i 's/^PORT=.*/PORT=8001/' /opt/dangerous-pi/.env
else
echo "PORT=8001" | sudo tee -a /opt/dangerous-pi/.env
fi
echo "✅ Updated /opt/dangerous-pi/.env"
else
echo "⚠️ Environment file not found. Please edit manually."
fi
# Restart service if running
if systemctl is-active --quiet dangerous-pi 2>/dev/null; then
sudo systemctl restart dangerous-pi
echo "✅ Restarted dangerous-pi service"
fi
echo ""
echo "✅ Done! Dangerous Pi now uses port 8001."
echo " Access at: http://$(hostname -I | awk '{print $1}'):8001"
;;
3)
echo ""
echo "Changing ttyd-bash to port 8002..."
# Find and update ttyd-bash service file
if [ -f /etc/systemd/system/ttyd-bash.service ]; then
sudo sed -i 's/--port 8000/--port 8002/' /etc/systemd/system/ttyd-bash.service
sudo systemctl daemon-reload
echo "✅ Updated ttyd-bash service"
if systemctl is-active --quiet ttyd-bash 2>/dev/null; then
sudo systemctl restart ttyd-bash
echo "✅ Restarted ttyd-bash"
fi
echo ""
echo "✅ Done! ttyd-bash now uses port 8002."
echo " ttyd-bash: http://$(hostname -I | awk '{print $1}'):8002"
echo " Dangerous Pi can use port 8000"
else
echo "⚠️ ttyd-bash service file not found. Please configure manually."
fi
;;
4)
echo ""
echo "Cancelled. Manual configuration required."
echo ""
echo "Configuration files:"
echo " - Dangerous Pi: /opt/dangerous-pi/.env (PORT variable)"
echo " - ttyd-bash: /etc/systemd/system/ttyd-bash.service"
;;
*)
echo "Invalid option. Exiting."
exit 1
;;
esac
echo ""