NetRobin Spectrum AnalyzerRF Analysis Workstation
disconnected

Local Agent

Windows capture / decoder bridge — install guide

The 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-x

Note 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.

The agent ships now — download it above. It serves up to ten sensors and all three bands at once, decodes JSON and binary NSI sweeps, and sensors set to the synthetic driver stream immediately so you can validate the link.