AI-Powered Android Device Health Dashboard using ADB
DroidPulse connects to Android devices via ADB, collects system health data (battery, storage, apps, network, CPU/memory), and uses Groq AI (Llama 3.3 70B) to analyze device health, flag issues, and generate actionable recommendations.
- π± ADB Device Discovery β auto-detect USB and WiFi-connected devices
- π Health Data Collection β battery, storage, memory, CPU, network, installed apps
- π WiFi Diagnostics β signal strength, frequency band, latency, DNS checks
- π€ AI-Powered Analysis β Groq AI (Llama 3.3) analyzes health data and flags issues
- π Terminal Dashboard β color-coded health summary in your terminal
- π HTML Reports β professional reports with health scores and recommendations
- π‘ ADB over WiFi β manage devices wirelessly
- π Multi-Device Support β scan and report on multiple devices
- β±οΈ Automation Ready β supports scheduled scans via cron or systemd timers
- Python 3 β core logic, data processing, AI integration
- Bash β ADB command wrappers, automation scripts
- ADB β Android device data collection
- Groq AI (Llama 3.3 70B) β AI-powered health analysis
- Rich β terminal dashboard formatting
- Jinja2 β HTML report templating
- Fedora Linux β host operating system
- Fedora Workstation (tested on Fedora 41)
- Android device with USB cable (tested on OnePlus Nord AC2001, Android 12)
- Python 3.x
- Groq API key (free at https://console.groq.com)
Fedora's default repos ship a limited ffmpeg-free without H.264/H.265 codecs. RPM Fusion provides the full versions.
# Free repository
sudo dnf install https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm
# Non-free repository
sudo dnf install https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpmReplace Fedora's limited ffmpeg-free with the full version from RPM Fusion. This is required for scrcpy's H.264/H.265 video decoding.
sudo dnf swap ffmpeg-free ffmpeg --allowerasing
sudo dnf install ffmpeg-libsThe android-tools package provides both adb and fastboot. Running sudo dnf install adb also works as it resolves to the same package.
sudo dnf install android-toolsscrcpy is not in Fedora's default repos. Install via COPR:
sudo dnf copr enable zeno/scrcpy
sudo dnf install scrcpy- Go to Settings β About Phone
- Tap Build Number 7 times to enable Developer Options
- Go to Settings β Developer Options
- Enable USB Debugging
- Connect USB cable to your Linux machine
- On the phone, tap Allow USB Debugging when prompted (check "Always allow")
# Check USB detection
lsusb
# Should show your device, e.g.: Bus 001 Device 008: ID 22d9:276a OPPO Electronics Corp. OnePlus Nord
# Start ADB server and check device
adb kill-server
adb start-server
adb devices
# Should show: <serial> deviceTroubleshooting: If
adb devicesshows nothing, add a udev rule for your device. For OnePlus/OPPO (vendor ID22d9):echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="22d9", MODE="0666", GROUP="plugdev"' | sudo tee /etc/udev/rules.d/51-android.rules sudo udevadm control --reload-rules sudo udevadm triggerCommon vendor IDs: Google=
18d1, Samsung=04e8, Xiaomi=2717, Huawei=12d1.
scrcpy --always-on-topIf you see ERROR: [FFmpeg] Unable to create decoder, ensure you completed Step 2 (full FFmpeg swap).
For wireless device management, both your Linux machine and Android device must be on the same network.
For VMs: Set the network adapter to Bridged mode so the VM gets an IP on the same subnet as the phone.
# Connect via USB first, then switch to WiFi mode
adb tcpip 5555
# Find phone's IP address
adb shell ip addr show wlan0 | grep inet
# Disconnect USB cable, then connect wirelessly
adb connect <phone-ip>:5555
# Verify
adb devices
# Should show: <phone-ip>:5555 device
# To switch back to USB mode
adb usbSecurity Note: ADB over WiFi has no encryption after initial pairing. Always run
adb usbto disable WiFi mode when done.
cd droidpulse
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txtexport GROQ_API_KEY="your-api-key-here"# Activate virtual environment
source venv/bin/activate
# Run DroidPulse (default: terminal dashboard)
cd src
python main.py
# JSON output only
python main.py --json
# Verbose mode (raw data + dashboard)
python main.py --verbose
# Generate HTML report
python main.py --report
# Target a specific device
python main.py --device a9686ef3
# Switch to WiFi ADB mode
python main.py --wifi
# Switch back to USB mode
python main.py --usbβββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β DroidPulse β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β main.py (Entry Point) β
β βββ collector.py (ADB Data Collection) β
β βββ wifi_manager.py (Network Diagnostics) β
β βββ analyzer.py (AI Analysis) β
β β βββ Groq API (Llama 3.3 70B) β
β β βββ Rule-based fallback β
β βββ dashboard.py (Terminal Output) β
β βββ reporter.py (HTML Report) β
β β
β scripts/ β
β βββ adb_commands.sh (Bash ADB wrappers) β
β βββ scan_all_devices.sh (Multi-device scanner) β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Android Device βββ ADB (USB / WiFi) βββ Fedora β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
droidpulse/
βββ README.md
βββ requirements.txt
βββ .gitignore
βββ LICENSE
βββ scripts/
β βββ adb_commands.sh # Bash ADB wrappers
β βββ scan_all_devices.sh # Multi-device scanner
βββ src/
β βββ __init__.py
β βββ main.py # Entry point with CLI args
β βββ collector.py # ADB data collection
β βββ analyzer.py # Groq AI health analysis
β βββ dashboard.py # Rich terminal dashboard
β βββ reporter.py # HTML report generator
β βββ wifi_manager.py # WiFi diagnostics & ADB over WiFi
βββ reports/ # Generated HTML reports
βββ docs/
β βββ runbook.md # Troubleshooting & setup docs
β βββ images/ # Screenshots
βββ venv/ # Python virtual environment
- π Runbook β setup procedures, troubleshooting guide, ADB command reference, architecture
- π Project Board β development progress tracking
This project is licensed under the MIT License β see the LICENSE file for details.

