On-Site Agent update (optional): if your site uses only SNMPv3, upgrade your Agent so it polls over v3: open Settings - Multi-Site, expand your site, and press Run It for Me under the upgrade command. If you updated on v2.9.3-preview2, you're set.
SNMPv3 polling now works, the Dashboard's ONT and cable modem error counters cover the last 24 hours, and Roam works for clients on a UniFi gateway with built-in Wi-Fi, plus two speed test container fixes (it would not start on Synology, and its page could loop on redirects) and two for Channel Recommendation's Apply Recommended Channels and the plan around it. A Custom Health Checks restart of UniFi Network no longer reports a failure when it worked, the Console connection recovers from the Console's login attempt limit, and ISP Health no longer grades the first device upstream of your gateway on ping jitter your traffic never sees. Performance Tweaks are unlocked on UniFi OS 6.0.12 EA for the UCG line, and Firmware Rollout's Set Time now shows the site's time. See the v2.9.2, v2.9.1, and v2.9.0 release notes for what's new in v2.9.0+.
Monitoring
SNMP
- Fix: SNMPv3 never polled (consoles with only SNMPv3 enabled) - UniFi Network's SNMPv3 user encrypts as well as authenticates, and Network Optimizer only authenticated, so every v3 poll failed. It polls now, on On-Site Agent sites after the Agent update above (thanks u/kronikwombat for the report).
- Fix: SNMP polling failed with no explanation on a View Only account - UniFi Network withholds the SNMPv3 password from View Only accounts, and on Network 11 it also withholds the Community String from View accounts. Monitoring - Setup now says so and names the fixes, instead of reporting SNMP as not enabled (thanks u/kronikwombat for the report).
ISP Health
- Fix: the first device upstream of your gateway was graded on jitter your traffic never sees - ISP Health clears an ISP router's own ping jitter when the paths past it measure smooth, but that first device was left out, so it could grade well below the rest of your ISP. It now gets the same treatment.
Custom Health Checks
- Fix: a service restart was reported as failed when it worked - when the unifi service's first start attempt failed, the check alerted that the action failed, though systemd's automatic retry brought UniFi Network up seconds later. It now checks the service's state before reporting a failure (thanks @jakerobb for the report and timeline).
AP Telemetry
- Roam for clients on a UniFi gateway with built-in Wi-Fi - the Roam button on Client Performance now works for a 5 GHz client on one of these (verified on a UX7 adopted as an AP), moving it to one of your Access Points. It asks the client to move rather than disconnecting it, so the client can decline and stay; MLO clients and Change Band aren't supported there (#1265, thanks @tempeduck).
- Fix: Roam wasn't offered for clients that stay put - a client that sat on one Access Point for more than half an hour before moving was never recorded as having roamed, so Roam was never offered for it. Those moves now count (#1265, thanks @tempeduck).
- Fix: one incomplete reading paused an Access Point's client data - a single bad answer from the Access Point stopped its client traffic and radio stats from updating for about five minutes. It now re-reads once and carries on (#1265, thanks @tempeduck).
Dashboard
- Error counters cover the last 24 hours - the ONT Stats (GPON / XGS-PON) and Cable Modem Stats (DOCSIS) cards counted BIP, FEC or HEC, and GEM drops, and correctable and uncorrectable codewords, since the device last rebooted, so one PON maintenance window or power blip stayed in them for months. They now count the last 24 hours, and a standalone ONT's card shows these counters too. For the cumulative counts, uncheck Limit error counters on Dashboard Cards to last 24 hours in the ONT Device Monitoring or Cable Modem Monitoring section of Settings - Monitoring.
Wi-Fi Optimizer
Channel Recommendation
- Fix: Apply Recommended Channels waited about a minute at every step - each access point moves within seconds, but the run held the next ones until UniFi Network's live radio stats caught up. It now moves on as soon as the access point has taken the change.
- Fix: Channel Recommendation missed some plans that move several access points together - when one access point barely gained from its own move, it was held in place, and the moves that needed its channel fell through with it, so the plan showed no change. Those plans now show when the site as a whole gains enough.
Firmware Rollout
- Fix: Set Time showed only the server's time (a site whose Console is in a different time zone from Network Optimizer) - the picker reads the time you pick in the server's time zone, with no site time beside it. It now shows the site's time under the picker, and so does the notice after Set Time, Postpone 24h, or Advance 24h.
Performance Tweaks
- UniFi OS 6.0.12 EA on the UCG line - supported, live-verified on a UCG-Fiber.
UniFi Console Connection
- Fix: the Console connection stayed down behind the Console's login attempt limit (username and password connections) - once the UniFi Console refused logins for its login attempt limit, Network Optimizer kept retrying, and each retry kept the limit in force. It now backs off and reconnects within a minute of the limit clearing.
Fixes
- The speed test container would not start on Synology (or any host on a Linux kernel older than 4.15) - Docker stopped it with
open /proc/sys/net/ipv4/tcp_rmem: no such file or directory. Its TCP buffer settings now come from the host rather than the compose file, so it starts everywhere. If yourdocker-compose.ymlpredates this, delete thesysctls:block undernetwork-optimizer-speedtest. To keep single-stream speed tests over long internet paths at full rate, raise the buffers on the host per Speed Test Server Tuning; the speed test container's log shows the values in effect. - The speed test page looped on redirects (Docker, speed test served without a TLS proxy) - with a capital letter in
HOST_NAMEorOPENSPEEDTEST_HOST, the browser stopped withERR_TOO_MANY_REDIRECTS. The hostname now matches regardless of case.
Installation
Windows: Download the MSI installer below
Docker (Upgrade):
docker compose pull && docker compose up -dmacOS (native, recommended for accurate speed tests vs Docker Desktop):
git clone https://github.com/Ozark-Connect/NetworkOptimizer.git && cd NetworkOptimizer && ./scripts/install-macos-native.sh
# or if you already have it cloned
cd NetworkOptimizer && git pull && ./scripts/install-macos-native.shProxmox:
bash -c "$(curl -fsSL https://raw.githubusercontent.com/Ozark-Connect/NetworkOptimizer/main/scripts/proxmox/install.sh)"
# or if you just need to update
pct exec <CT_ID> -- bash -c 'cd /opt/network-optimizer && docker compose pull && docker compose up -d && docker image prune -f'For other platforms (Synology, QNAP, Unraid, native Linux) or new installations, see the Deployment Guide.