# Dangerous Pi - Hardware Test Results **Test Date**: 2026-03-03 12:17:58 **Target**: dangerous-pi.local (http://dangerous-pi.local:8000/api) **Serial**: /dev/ttyUSB0 @ 115200 **Tester**: Automated (test_hardware_2026-03-03.py) --- ## Summary | Metric | Count | |--------|-------| | Total Tests | 77 | | **PASS** | 53 | | **FAIL** | 3 | | **WARN** | 10 | | **SKIP** | 11 | | **Pass Rate** | 68.8% (excl. skips: 80.3%) | --- ## ❌ Phase 1: Regression - Jan 23 Issues | # | Test | Status | Detail | |---|------|--------|--------| | 1.1 | WiFi status reports connected | ✅ PASS | ssid=XFSETUP-0D80, ip=10.0.0.249 | | 1.2 | UPS detected at boot | ❌ FAIL | UPS not available: Failed to initialize I2C Fuel Gauge (MAX17040/MAX17048) | | 1.3 | BLE advertising active | ✅ PASS | name=DangerousPi | | 1.4 | Pydantic namespace warning | ✅ PASS | No warning found or logs unavailable | **Phase Summary**: 3 pass, 1 fail, 0 warn, 0 skip --- ## ✅ Phase 2: Core Health & System Endpoints | # | Test | Status | Detail | |---|------|--------|--------| | 2.1 | Health check | ✅ PASS | 18ms | | 2.2 | Readiness check | ✅ PASS | 10ms | | 2.3 | System info | ✅ PASS | temp=46.698°C, mem=162.0MB | | 2.4 | System config | ✅ PASS | 10ms | | 2.5 | Pi model info | ✅ PASS | {'model': 'Raspberry Pi Zero 2 W Rev 1.0', 'model_short': 'Pi Zero 2 W', 'total_cores': 4, 'default_active_cores': 2, 'm | | 2.6 | CPU cores | ✅ PASS | total=4, online=2 | | 2.7 | Power restrictions | ✅ PASS | 9ms | | 2.8 | Header widgets | ✅ PASS | 0 widgets | | 2.9 | Response time < 100ms avg | ✅ PASS | avg=13ms, min=8ms, max=26ms | **Phase Summary**: 9 pass, 0 fail, 0 warn, 0 skip --- ## ⚠️ Phase 3: PM3 Hardware Integration | # | Test | Status | Detail | |---|------|--------|--------| | 3.1 | Device discovery | ✅ PASS | 1 device(s), id=pm3_119fea49 | | 3.2 | Device status | ✅ PASS | {'device_id': 'pm3_119fea49', 'device_path': '/dev/ttyACM0', 'friendly_name': 'ttyACM0', 'serial_number': 'iceman', 'con | | 3.3 | PM3 overall status | ✅ PASS | connected=None | | 3.4 | Create session | ✅ PASS | id=ddebed0f-ac41-4894-b2c2-823de334f4e8 | | 3.5 | Execute hw version | ⚠️ WARN | Unexpected output: | | 3.6 | Execute hw status | ✅ PASS | 382ms | | 3.7 | Execute hw tune | ⚠️ WARN | No tune data in output (419ms) | | 3.8 | HF search | ✅ PASS | 609ms | | 3.9 | LF search | ✅ PASS | 665ms | | 3.10 | LED identify | ✅ PASS | 5620ms | | 3.11 | Command history | ✅ PASS | ? entries | | 3.12 | Session release | ✅ PASS | 10ms | | 3.14 | Command time < 1s | ⏭️ SKIP | hw version not tested | **Phase Summary**: 10 pass, 0 fail, 2 warn, 1 skip --- ## ⚠️ Phase 4: WiFi Manager | # | Test | Status | Detail | |---|------|--------|--------| | 4.1 | WiFi status | ✅ PASS | mode=client, ssid=XFSETUP-0D80 | | 4.2 | Interface detection (wlan0) | ✅ PASS | mac=2c:cf:67:87:db:13, up=True | | 4.3 | Network scan | ✅ PASS | 17 networks found | | 4.4 | Saved networks | ⚠️ WARN | HTTP 404 | | 4.5 | Current connection | ✅ PASS | ip=10.0.0.249 | | 4.6 | WiFi mode report | ✅ PASS | mode=client | **Phase Summary**: 5 pass, 0 fail, 1 warn, 0 skip --- ## ⚠️ Phase 5: HTTPS & SSL | # | Test | Status | Detail | |---|------|--------|--------| | 5.1 | SSL info endpoint | ✅ PASS | 19ms | | 5.2 | SSL enabled field present | ✅ PASS | enabled=False | | 5.3 | Certificate SANs | ⚠️ WARN | No certificate generated yet | | 5.4 | HTTPS access | ⚠️ WARN | HTTPS not responding (may not be enabled): timeout | | 5.5 | SSL toggle endpoint | ⏭️ SKIP | Skipped to avoid disrupting connection | | 5.6 | Cert regeneration | ⏭️ SKIP | Skipped to avoid disrupting HTTPS state | | 5.7 | SSL cert script exists | ⚠️ WARN | Script not at expected path | | 5.8 | nginx config files | ✅ PASS | Found configs | **Phase Summary**: 3 pass, 0 fail, 3 warn, 2 skip --- ## ❌ Phase 6: Authentication & WebSocket | # | Test | Status | Detail | |---|------|--------|--------| | 6.1 | Auth status check | ❌ FAIL | HTTP 404 | | 6.2 | Enable auth via serial | ⏭️ SKIP | Auth is disabled, skipping auth toggle tests (use --phase 6 to run interactively) | | 6.3 | Auth test 6.3 | ⏭️ SKIP | Auth disabled on Pi | | 6.4 | Auth test 6.4 | ⏭️ SKIP | Auth disabled on Pi | | 6.5 | Auth test 6.5 | ⏭️ SKIP | Auth disabled on Pi | | 6.6 | Auth test 6.6 | ⏭️ SKIP | Auth disabled on Pi | | 6.7 | Auth test 6.7 | ⏭️ SKIP | Auth disabled on Pi | | 6.8 | Auth test 6.8 | ⏭️ SKIP | Auth disabled on Pi | | 6.9 | Auth test 6.9 | ⏭️ SKIP | Auth disabled on Pi | | 6.10 | WebSocket event stream | ❌ FAIL | Connection failed: server rejected WebSocket connection: HTTP 403 | **Phase Summary**: 0 pass, 2 fail, 0 warn, 8 skip --- ## ✅ Phase 7: Plugin System & Hooks | # | Test | Status | Detail | |---|------|--------|--------| | 7.1 | Plugin discovery | ✅ PASS | Found: ['hello_world'] | | 7.2 | Plugin list | ✅ PASS | 1 plugin(s) | | 7.3 | Plugin info (hello_world) | ✅ PASS | version=1.0.0 | | 7.4 | Load plugin | ✅ PASS | 72ms | | 7.5 | Enable plugin | ✅ PASS | 15ms | | 7.6 | Hook trigger (pm3_command) | ✅ PASS | PM3 command executed with plugin enabled | | 7.7 | Plugin widgets | ✅ PASS | 11ms | | 7.8 | Disable plugin | ✅ PASS | 12ms | | 7.9 | Unload plugin | ✅ PASS | 15ms | | 7.10 | Invalid plugin returns 404 | ✅ PASS | 81ms | **Phase Summary**: 10 pass, 0 fail, 0 warn, 0 skip --- ## ⚠️ Phase 8: BLE & UPS Hardware | # | Test | Status | Detail | |---|------|--------|--------| | 8.1 | BLE status API | ✅ PASS | enabled=True, advertising=True, name=DangerousPi | | 8.2 | BLE scan from laptop | ⚠️ WARN | DangerousPi not found in scan (may need longer scan) | | 8.3 | Start BLE advertising | ✅ PASS | 5259ms | | 8.4 | Stop BLE advertising | ✅ PASS | 224ms | | 8.5 | Send BLE notification | ⚠️ WARN | HTTP 400 | | 8.7 | UPS status | ⚠️ WARN | UPS not available: Failed to initialize I2C Fuel Gauge (MAX17040/MAX17048) | | 8.8 | UPS thresholds | ✅ PASS | 11ms | | 8.9 | Power source detection | ⚠️ WARN | Power source unknown (UPS may not be detected) | | 8.10 | I2C device at 0x75 | ✅ PASS | PiSugar responds | **Phase Summary**: 5 pass, 0 fail, 4 warn, 0 skip --- ## ✅ Phase 9: Frontend & Performance | # | Test | Status | Detail | |---|------|--------|--------| | 9.1 | Frontend loads | ✅ PASS | 9964 bytes, has app markup | | 9.2 | Dashboard page | ✅ PASS | 9964 bytes, has app markup | | 9.3 | Commands page | ✅ PASS | 7226 bytes, has app markup | | 9.4 | Settings page | ✅ PASS | 7588 bytes, has app markup | | 9.5 | Logs page | ✅ PASS | 5584 bytes, has app markup | | 9.6 | Response time (10 requests) | ✅ PASS | avg=10ms, p95=15ms, min=7ms, max=15ms | | 9.7 | Memory usage | ✅ PASS | system total used: 171MB | | 9.8 | CPU temperature | ✅ PASS | 48.312°C (target < 70°C idle) | **Phase Summary**: 8 pass, 0 fail, 0 warn, 0 skip --- ## Issues Found (FAIL) ### 1.2: UPS detected at boot - **Detail**: UPS not available: Failed to initialize I2C Fuel Gauge (MAX17040/MAX17048) - **Data**: `{"battery_percentage": 0.0, "voltage": 0.0, "current": 0.0, "power_source": "unknown", "battery_status": "unknown", "time_remaining": null, "temperature": null, "last_updated": null, "is_available": false, "error_message": "Failed to initialize I2C Fuel Gauge (MAX17040/MAX17048)"}` ### 6.1: Auth status check - **Detail**: HTTP 404 ### 6.10: WebSocket event stream - **Detail**: Connection failed: server rejected WebSocket connection: HTTP 403 ## Warnings - **3.5 Execute hw version**: Unexpected output: - **3.7 Execute hw tune**: No tune data in output (419ms) - **4.4 Saved networks**: HTTP 404 - **5.3 Certificate SANs**: No certificate generated yet - **5.4 HTTPS access**: HTTPS not responding (may not be enabled): timeout - **5.7 SSL cert script exists**: Script not at expected path - **8.2 BLE scan from laptop**: DangerousPi not found in scan (may need longer scan) - **8.5 Send BLE notification**: HTTP 400 - **8.7 UPS status**: UPS not available: Failed to initialize I2C Fuel Gauge (MAX17040/MAX17048) - **8.9 Power source detection**: Power source unknown (UPS may not be detected) --- *Generated by test_hardware_2026-03-03.py*