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>
Dangerous Pi Systemd Service
This directory contains systemd service files and installation scripts for running Dangerous Pi as a system service.
Files
dangerous-pi.service- Main systemd service unit filedangerous-pi.env.example- Environment configuration templateinstall-service.sh- Installation scriptuninstall-service.sh- Uninstallation script
Installation
Automated Installation
Run the installation script as root:
cd /path/to/dangerous-pi/systemd
sudo ./install-service.sh
This will:
- Copy the service file to
/etc/systemd/system/ - Create the environment configuration file at
/opt/dangerous-pi/.env - Create data and logs directories
- Add the
piuser to required hardware access groups - Enable the service to start on boot
Manual Installation
If you prefer to install manually:
# Copy service file
sudo cp dangerous-pi.service /etc/systemd/system/
# Copy environment template
sudo cp dangerous-pi.env.example /opt/dangerous-pi/.env
# Create directories
sudo mkdir -p /opt/dangerous-pi/data /opt/dangerous-pi/logs
sudo chown -R pi:pi /opt/dangerous-pi/data /opt/dangerous-pi/logs
# Add pi user to groups
sudo usermod -a -G i2c,bluetooth,gpio,dialout pi
# Reload systemd and enable service
sudo systemctl daemon-reload
sudo systemctl enable dangerous-pi
Configuration
Edit the environment file to customize your installation:
sudo nano /opt/dangerous-pi/.env
Available configuration options:
PM3_DEVICE- Proxmark3 device path (default:/dev/ttyACM0)PM3_TIMEOUT- PM3 command timeout in secondsSESSION_TIMEOUT- User session timeout in secondsHOST- Server bind address (default:0.0.0.0)PORT- Server port (default:8000)GITHUB_REPO- GitHub repository for updatesUPS_I2C_ADDRESS- I2C address for UPS HATBLE_ENABLED- Enable/disable BLE notificationsAUTH_ENABLED- Enable/disable authentication- See
dangerous-pi.env.examplefor all options
Service Management
Start the service
sudo systemctl start dangerous-pi
Stop the service
sudo systemctl stop dangerous-pi
Restart the service
sudo systemctl restart dangerous-pi
Check service status
sudo systemctl status dangerous-pi
View service logs
# View recent logs
sudo journalctl -u dangerous-pi
# Follow logs in real-time
sudo journalctl -u dangerous-pi -f
# View logs since boot
sudo journalctl -u dangerous-pi -b
Enable service (start on boot)
sudo systemctl enable dangerous-pi
Disable service (don't start on boot)
sudo systemctl disable dangerous-pi
Uninstallation
Run the uninstallation script as root:
cd /path/to/dangerous-pi/systemd
sudo ./uninstall-service.sh
This will:
- Stop the service if running
- Disable the service
- Remove the service unit file
- Reload systemd daemon
Note: Application files in /opt/dangerous-pi are NOT removed automatically.
Security Features
The service includes security hardening:
- Runs as non-root user (
pi) - Private
/tmpdirectory - Protected system directories
- Read-only application directory (except for
dataandlogs) - Resource limits (memory, CPU, file descriptors)
- No new privileges allowed
Hardware Access
The service is configured to access the following hardware:
- I2C devices (for UPS HAT) via
i2cgroup - Bluetooth (for BLE notifications) via
bluetoothgroup - GPIO pins via
gpiogroup - Serial devices (for Proxmark3) via
dialoutgroup
Troubleshooting
Service fails to start
Check the logs for errors:
sudo journalctl -u dangerous-pi -n 50
Permission denied errors
Ensure the pi user is in the required groups:
groups pi
Should include: i2c, bluetooth, gpio, dialout
Port already in use
The default port (8000) conflicts with ttyd-bash from pi-pm3. See the main README for resolution options.
Can't access Proxmark3
Ensure the PM3 device path is correct in /opt/dangerous-pi/.env:
PM3_DEVICE=/dev/ttyACM0
Check that the device exists:
ls -l /dev/ttyACM*
Advanced Configuration
Custom Installation Directory
To use a different installation directory, edit the service file before installation:
WorkingDirectory=/your/custom/path
ReadWritePaths=/your/custom/path/data /your/custom/path/logs
Different User/Group
To run as a different user, edit the service file:
User=your-user
Group=your-group
Don't forget to add the user to required hardware groups.
Resource Limits
Adjust resource limits in the service file:
MemoryMax=1G # Maximum memory
CPUQuota=100% # CPU usage limit
LimitNOFILE=131072 # Max open files
Integration with pi-pm3
When running alongside the existing pi-pm3 setup:
-
Port Conflict: Port 8000 is used by ttyd-bash. Options:
- Change Dangerous Pi port in
.env:PORT=8001 - Disable ttyd-bash:
sudo systemctl disable ttyd-bash
- Change Dangerous Pi port in
-
RaspAP Compatibility: Dangerous Pi WiFi manager can coexist with RaspAP or replace it.
-
PM3 Access: Only one service should access PM3 at a time. Disable ttyd-pm3 if using Dangerous Pi's PM3 interface.