Opinionated diagnostic and optimization tool for UniFi networks (UDM Pro). Connects to the local controller API, runs analysis modules across RF, roaming, throughput, settings, and streaming, then gives you concrete fixes.
- Python 3.11+
- uv package manager
- UniFi Dream Machine (Pro) running local controller API
git clone https://github.com/youruser/unifi-doctor
cd unifi-doctor
uv sync# First-run: save credentials and map your AP layout
uv run unifi-doctor setup
# Run a full diagnostic scan
uv run unifi-doctor scan
# Live dashboard
uv run unifi-doctor watchFirst-run wizard. Saves controller credentials to ~/.unifi-doctor/config.yaml, connects to discover your APs, then walks you through physical placement so the analysis engine knows floor levels and inter-AP distances.
โญโ Setup โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ UniFi Doctor โ Topology Setup โ
โ โ
โ I'll ask about where each AP is physically located. โ
โ Backhaul type (wired/mesh) is auto-detected from device data. โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
Controller URL [https://192.168.1.1]:
Username [admin]:
Password (hidden):
Site name [default]:
Config saved to ~/.unifi-doctor/config.yaml
Found 3 access point(s):
โโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโฌโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโ
โ AP โ MAC โ Model โ IP โ Backhaul โ
โโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโค
โ Living Room โ aa:bb:cc:dd:ee:01 โ U6-Pro โ 192.168.1.2 โ wired โ
โ Office โ aa:bb:cc:dd:ee:02 โ U6-Lite โ 192.168.1.3 โ wired โ
โ Basement โ aa:bb:cc:dd:ee:03 โ U6-Mesh โ 192.168.1.4 โ wireless mesh โ
โโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโดโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโ
Floors: [1] ground [2] upper [3] basement [4] detached
Format: 'floor, location' (e.g. 'ground, hallway ceiling') or just 'ground'
Living Room โ floor, location [ground]: ground, living room ceiling
Office โ floor, location [ground]: ground, office
Basement โ floor, location [ground]: basement, mechanical room
Map distances between APs? (helps with power analysis) [y/N]: y
Living Room โ Office
Distance in feet (approximate) [30]: 35
Barrier: [1] Wall [2] Floor/Ceiling [3] Outdoor [4] Open Air
Barrier type: 1
Living Room โ Basement
Distance in feet (approximate) [30]: 20
Barrier: [1] Wall [2] Floor/Ceiling [3] Outdoor [4] Open Air
Barrier type: 2
Topology saved to ~/.unifi-doctor/topology.yaml
Full diagnostic scan across all analysis modules. Groups findings by severity with actionable recommendations and deep-links to the UniFi UI.
uv run unifi-doctor scan
uv run unifi-doctor scan --module rf # single module
uv run unifi-doctor scan --json # machine-readable outputโญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ UniFi Doctor โ Diagnostic Report โ
โ Generated: 2026-02-21 14:32:07 โ
โ Modules: rf, roaming, throughput, settings, streaming โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
๐ด CRITICAL โ 2 issues โ fix these first, they're probably causing your streaming failures
๐ WARNING โ 4 issues โ these degrade performance
๐ก INFO โ 3 issues โ optimizations
๐ข GOOD โ 6 issues โ configured correctly
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐ด CRITICAL
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ AP Channel Overlap โ Living Room and Bedroom on 2.4 GHz ch 6
rf
Both APs share channel 6 on 2.4 GHz, 40 ft apart through a wall.
Co-channel interference is severe at this separation.
โ Change Bedroom AP to channel 1 or 11.
๐ Settings > WiFi > Radio Management
โ Sticky Client โ FireTV-Stick
roaming
FireTV-Stick (signal: -79 dBm) has not roamed in 47 min despite
Office AP being within range at -61 dBm.
โ Enable 802.11v BSS Transition and set Min RSSI to -72 dBm.
๐ Settings > WiFi > [SSID] > Advanced
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐ WARNING
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ IDS/IPS Disabled
settings
Intrusion detection is not enabled on this network.
โ Enable Threat Management in Network settings.
๐ Settings > Security > Threat Management
โ 2.4 GHz Legacy Device Dragging Down BSS โ Roku-Ultra
throughput
Roku-Ultra is connected at 54 Mbps (802.11n) on 2.4 GHz,
lowering the effective throughput floor for all devices on that radio.
โ Move streaming devices to 5 GHz. Consider disabling 2.4 GHz legacy rates.
๐ Settings > WiFi > Radio Management
...
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐ข GOOD
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 802.11r Fast BSS Transition โ enabled
roaming
Fast roaming (802.11r) is active on all SSIDs.
โ SQM / Smart Queue โ enabled on WAN
settings
Smart Queue is active. Bufferbloat should be under control.
Table of all connected clients with AP association, signal quality, PHY rates, and satisfaction score.
uv run unifi-doctor clients
uv run unifi-doctor clients --json Connected Clients
โโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโฌโโโโโโโฌโโโโโโฌโโโโโโโโโโโฌโโโโโโโโโโโฌโโโโโโโโโโโฌโโโโโโโโฌโโโโโโโโโโโโโโโ
โ Client โ IP โ AP โ Band โ Ch โ Signal โ TX Rate โ RX Rate โ Proto โ Satisfaction โ
โโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโผโโโโโโโผโโโโโโผโโโโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโโโผโโโโโโโโผโโโโโโโโโโโโโโโค
โ iPhone-Wes โ 192.168.1.101 โ Living Room โ 5G โ 36 โ -52 dBm โ 540 Mbps โ 480 Mbps โ ax โ 97% โ
โ MacBook-Pro โ 192.168.1.102 โ Office โ 5G โ 149 โ -58 dBm โ 720 Mbps โ 650 Mbps โ ax โ 94% โ
โ iPad-Mini โ 192.168.1.103 โ Office โ 5G โ 149 โ -63 dBm โ 360 Mbps โ 300 Mbps โ ax โ 91% โ
โ FireTV-Stick โ 192.168.1.115 โ Living Room โ 5G โ 36 โ -79 dBm โ 130 Mbps โ 110 Mbps โ ac โ 43% โ
โ Roku-Ultra โ 192.168.1.116 โ Living Room โ 2.4G โ 6 โ -68 dBm โ 54 Mbps โ 48 Mbps โ n โ 62% โ
โ Ring-Doorbell โ 192.168.1.120 โ Living Room โ 2.4G โ 6 โ -71 dBm โ 24 Mbps โ 18 Mbps โ n โ 55% โ
โ NAS-Server โ 192.168.1.10 โ wired โ wiredโ - โ - โ - โ - โ - โ - โ
โโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโดโโโโโโโดโโโโโโดโโโโโโโโโโโดโโโโโโโโโโโดโโโโโโโโโโโดโโโโโโโโดโโโโโโโโโโโโโโโ
Total: 6 wireless, 1 wired
Per-AP overview: channel assignments, channel utilization, uplink type, and satisfaction.
uv run unifi-doctor aps
uv run unifi-doctor aps --json Access Points
โโโโโโโโโโโโโโโฌโโโโโโโโโโโฌโโโโโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโฌโโโโโโโโโโโโฌโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโ
โ AP โ Model โ IP โ Clients โ 2.4G Chโ 2.4G Util โ 5G Ch โ 5G Util โ Uplink โ Satisfaction โ
โโโโโโโโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโผโโโโโโโโโโโโผโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโโโโโโโโโโโค
โ Living Room โ U6-Pro โ 192.168.1.2 โ 14 โ 6 โ 47% โ 36 โ 28% โ 1000 Mbps โ 88% โ
โ Office โ U6-Lite โ 192.168.1.3 โ 8 โ 11 โ 22% โ 149 โ 15% โ 1000 Mbps โ 96% โ
โ Basement โ U6-Mesh โ 192.168.1.4 โ 3 โ 1 โ 18% โ 157 โ 9% โ MESH โ 81% โ
โโโโโโโโโโโโโโโดโโโโโโโโโโโดโโโโโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโดโโโโโโโโโโโโดโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโโโโโโโโโ
Shows current channel configuration versus the recommended plan generated by the RF analysis engine.
uv run unifi-doctor channels
uv run unifi-doctor channels --jsonโญโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ Recommended Channel Plan โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
โโโโโโโโโโโโโโโฌโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ AP โ Band โ Current Ch โ โ Recommended Ch โ Current Width โ โ Width โ Current Power โ โ Power โ Reason โ
โโโโโโโโโโโโโโโผโโโโโโโผโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Living Room โ 2.4G โ 6 โ 6 โ 20 MHz โ 20 MHz โ High โ Medium โ co-channel neighbor; reduce power โ
โ Bedroom โ 2.4G โ 6 โ 11 โ 20 MHz โ 20 MHz โ High โ Medium โ co-channel conflict; moved to ch 11 โ
โ Living Room โ 5G โ 36 โ 36 โ 80 MHz โ 80 MHz โ High โ High โ no change needed โ
โ Office โ 5G โ 149 โ 149 โ 80 MHz โ 80 MHz โ Auto โ Auto โ no change needed โ
โ Basement โ 5G โ 157 โ 157 โ 40 MHz โ 40 MHz โ Medium โ Medium โ no change needed โ
โโโโโโโโโโโโโโโดโโโโโโโดโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Pushes recommended channel/power changes back to the controller via API.
uv run unifi-doctor apply-plan --dry-run # preview only
uv run unifi-doctor apply-plan # apply with confirmation promptDRY RUN โ Changes to apply:
Living Room 2.4G: channel โ 6, width โ 20 MHz
Bedroom 2.4G: channel โ 11, width โ 20 MHz
Dry run โ no changes applied.
Live dashboard. Polls the controller every N seconds and updates in place.
uv run unifi-doctor watch
uv run unifi-doctor watch --interval 10โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ UniFi Doctor โ Live Dashboard | Last refresh: 14:33:22 | APs: 3 Clients: 18 โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Access Points โ โ Client Summary โ
โ AP Clients 2.4G Ch 2.4G Util 5G Ch 5G Util Sat โ โโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโค
โโโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโผโโโโโโโผโโโโโโโโโโคโโโค โ Metric โ Value โ
โ Living Room 14 6 47% 36 28% 88% โ โโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโค
โ Office 8 11 22% 149 15% 96% โ โ Total Wireless โ 18 โ
โ Basement 3 1 18% 157 9% 81% โ โ Total Wired โ 4 โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ On 5 GHz โ 14 โ
โ On 2.4 GHz โ 4 โ
โ Poor Signal (<-72) โ 1 โ
โโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Network Health โ
โ โ wan: ok โ
โ WAN latency: 12ms โ
โ โ wlan: ok โ
โ APs: 3 Clients: 18 โ
โ โ lan: ok โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ Recent Events โ
โ 14:33:18 Client FireTV-Stick disconnected from Living Room โ
โ 14:33:01 Client iPhone-Wes roamed from Living Room to Office โ
โ 14:32:44 AP Living Room: radio settings applied โ
โ 14:32:11 Client MacBook-Pro connected to Office โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
Refreshing every 5s. Press Ctrl+C to stop.
Renders an ASCII map of your AP layout using the placement data collected during setup. Pass --live to overlay current client counts.
uv run unifi-doctor topology
uv run unifi-doctor topology --live
uv run unifi-doctor topology --jsonโญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Topology Map โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ โ
โ โ
โ @ Living Room[G] โ
โ \ โ
โ \ 35ft โ
โ = โ
โ \ @ Office[G] โ
โ \ โ
โ \ โ
โ 20ft โ
โ # โ
โ \ โ
โ @ Basement[B] โ
โ โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
โญโโโโโโโโโโโ Legend โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ @ Access Point - Open Air = Wall # Floor/Ceiling . Outdoor โ
โ Floors: Ground Upper Basement Detached โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
With --live:
โ @ Living Room[G] (14) โ
โ \ โ
โ \ 35ft โ
โ = โ
โ \ @ Office[G] (8) โ
โ \ โ
โ # โ
โ \ โ
โ @ Basement[B] (3) โ
Dumps the raw network snapshot to JSON for external analysis.
uv run unifi-doctor export # stdout
uv run unifi-doctor export -o snapshot.json # fileCredentials and topology are stored in ~/.unifi-doctor/:
~/.unifi-doctor/
โโโ config.yaml # controller URL, username, password, site
โโโ topology.yaml # AP placements and inter-AP links
Environment variables override the config file:
UNIFI_HOST=https://192.168.1.1 UNIFI_USER=admin UNIFI_PASS=secret uv run unifi-doctor scan| Module | What it checks |
|---|---|
rf |
Channel overlap, co-channel interference, channel width, TX power; generates channel plan |
roaming |
Sticky clients, roaming storms, 802.11r/v/k, minimum RSSI, band steering |
throughput |
PHY rates, legacy device drag, mesh backhaul quality, uplink utilization, band ratios |
settings |
IDS/IPS, SQM, DPI, DNS, UPnP, DTIM, firmware currency, PMF |
streaming |
Identifies streaming devices by OUI/hostname, checks signal, band, and PHY rate per device |
uv sync --extra dev # install dev dependencies
uv run pytest # run tests
uv run ruff check src/ tests/
uv run ruff format src/ tests/The project follows protocol-driven development. docs/PROTOCOL.md is the authoritative specification for thresholds, API shapes, and output formats. Read it before changing behavioral code.