Local Agent
Windows capture / decoder bridge — install guideThe analyzer never talks to an access point directly. A small Windows service sits beside the APs, speaks the NSI / spectrum protocol to each one, decodes the sweeps and republishes them as JSON frames on a local WebSocket. One agent can serve up to ten sensors at once; this workstation subscribes once per sensor.
Cisco AP sensor ─┐ Cisco AP sensor ─┼─► Windows capture agent ──► ws://127.0.0.1:8787/spectrum ──► NetRobin Spectrum Analyzer Cisco AP sensor ─┘ (NSI decode) one subscribe per sensor
1Prepare each access point
Enable spectrum monitoring on the AP radios you want to sweep and note the AP management IP plus the NSI / spectrum key for each one. Slot 0 covers 2.4 GHz, slot 1 covers 5 GHz and slot 2 covers 6 GHz on capable hardware. The agent can hold all three radios of an AP open at the same time.
2Download and install the agent
Use a machine on the same management network as the APs — a laptop is fine for a survey, a small always-on host for permanent monitoring. It needs Node.js 18 or newer; the agent itself has no other dependencies.
Download agent package (.zip)# Elevated PowerShell mkdir C:\NetRobin\agent # unzip the download into C:\NetRobin\agent cd C:\NetRobin\agent node src\index.mjs --synthetic --verbose # wiring test, no APs needed .\scripts\install-service.ps1 # install + start as a service
Health check while it runs: http://127.0.0.1:8787/health
3Configure the sensors
List every AP the agent should poll. Each entry becomes one selectable sensor in the analyzer.
{
"listen": "127.0.0.1:8787",
"path": "/spectrum",
"sensors": [
{ "id": "sensor-1", "name": "AP-CORE-01", "host": "10.42.18.11", "key": "••••", "port": 37540, "radios": ["slot0", "slot1", "slot2"] },
{ "id": "sensor-2", "name": "AP-WAREHOUSE-02", "host": "10.42.18.12", "key": "••••", "port": 37540, "radios": ["slot1"] }
],
"maxSensors": 10
}4Open the ports
Outbound TCP 37540 (or whatever the AP uses) from the agent host to each AP, and loopback TCP 8787 for the analyzer. If the analyzer runs on another machine, bind the agent to the LAN address and restrict it with a firewall rule.
New-NetFirewallRule -DisplayName "NetRobin Agent" -Direction Inbound -LocalPort 8787 -Protocol TCP -Action Allow
5Point the analyzer at it
On the Connection page set Data Source to Local Agent, enter the sensor name, AP IP, NSI key, radio and endpoint, then use Test Connection followed by Connect. Repeat per sensor — every sensor keeps its own socket subscription, so ten APs can stream at once.
6Frame contract the agent must emit
One JSON message per decoded sweep, per sensor. Arrays are ordered low frequency to high; power values are dBm, duty values are percentages.
{
"sensorId": "sensor-1",
"t": 1767225600000, // epoch ms
"startMhz": 5150, // first bin centre
"stepMhz": 0.7275, // MHz per bin
"current": [ -103.2, ... ],
"maxHold": [ -71.4, ... ],
"average": [ -100.8, ... ],
"duty": [ 0.0, ... ],
"dutyMax": [ 14.0, ... ],
"noiseFloorDbm": -103.1,
"peakDbm": -47.6,
"rbwKhz": 728
}The analyzer subscribes with { "cmd": "subscribe", "sensorId", "ap", "key", "port", "band", "radio" }. Sweep the full band, not a slice: 2400–2495, 5150–5895 and 5925–7125 MHz are all rendered end to end here.
7Binary NSI decoding (Cisco 3702i / CleanAir Express)
The agent now decodes the raw Cisco binary sweep stream itself — no shim needed. It auto-detects the firmware dialect from the live bytes, locks onto it, converts the samples to dBm plus duty cycle and resamples them onto the full band grid. Force a dialect per sensor if you already know it.
{ "id": "sensor-1", "driver": "nsi", "host": "10.42.18.11",
"key": "••••", "port": 37540, "bands": ["2.4", "5"],
"nsiProfile": "auto" } // auto | sage-v2 | sage-v2-le | nsi-classic | nsi-classic-pad | spectrum-xNote the 3702i has 2.4 and 5 GHz radios only — no 6 GHz. If an AP speaks a dialect that is not in the list, the agent writes an nsi-capture-*.bin sample next to itself and says so instead of inventing data; send that file over and the profile gets added.