# ARRF documentation --- --- > iPhone augmented-reality Wi-Fi survey app for any network: walk a space and see the latency, loss and speed your phone measured as 3D cubes anchored where you stood, graded for calls and video, with an optional RUCKUS pack for AP-measured signal. --- --- # What is ARRF? Source: https://docs.neuralconfig.com/arrf/ ARRF turns your iPhone into an augmented-reality Wi-Fi survey tool. You walk a space, and what your phone measured blooms into 3D cubes anchored right where you measured it — a heatmap you see through the camera, not a flat map you decode later. It works on **any Wi-Fi network, from any vendor**. The default **Any Wi-Fi** survey needs no access-point login: the phone itself times its router and the internet and runs short speed bursts as you walk. If you administer **RUCKUS access points**, the optional, free **RUCKUS pack** also logs into your own APs over SSH and adds the signal they measure from this iPhone. ## What does ARRF measure (and what doesn't it)? ARRF measures **what the phone experiences** at each spot: - **Wi-Fi latency, jitter and packet loss**, timed against your router (the Wi-Fi hop). - **Internet latency and download/upload speed**, measured against a test server. - **Call quality (MOS)** from a voice-over-Wi-Fi call test. iOS gives third-party apps no access to this iPhone's own Wi-Fi signal strength and no passive multi-AP scan. Signal is therefore an add-on: an optional Apple Shortcut reads the phone's own signal, noise and channel, and the RUCKUS pack reads signal **from the AP's side** — how the serving access point hears *this iPhone*. That is the uplink direction. Either way ARRF measures **one device's connection health and roaming behaviour as you walk**, not an area coverage map of every client. ## The four tabs | Tab | What it's for | |---|---| | **Survey** | Walk-and-survey in AR — cubes drop as you move. See [Running a survey](https://docs.neuralconfig.com/arrf/survey/running-a-survey/). | | **History** | Every stopped survey is auto-saved here, ready to reopen, grade, or share. See [History and saved surveys](https://docs.neuralconfig.com/arrf/survey/history/). | | **Toolbox** | [Network Test](https://docs.neuralconfig.com/arrf/tools/network-test/) for this phone's Wi-Fi on any network, plus, with the RUCKUS pack, SSH diagnostics for the APs you administer — nine read-only tools plus a short [packet capture](https://docs.neuralconfig.com/arrf/tools/packet-capture/). See [Toolbox utilities](https://docs.neuralconfig.com/arrf/tools/toolbox/). | | **Settings** | Unlock, defaults, experience tests, integrations, display and report branding. See [Settings reference](https://docs.neuralconfig.com/arrf/settings/). | ## What you can do - **Walk-and-survey in AR** — cubes drop as you move, building a spatial map in real time. - **Colour by the metric that matters** — call quality, latency, jitter, loss and speed, plus signal, SNR, uplink/downlink rate and band with the RUCKUS pack. See [Cube colors, labels, and detail](https://docs.neuralconfig.com/arrf/survey/cube-colors-and-labels/). - **See where your APs are** — pin APs by hand, or let ARRF estimate them. See [AP locations and roaming](https://docs.neuralconfig.com/arrf/survey/ap-locations-and-roaming/). - **Reconstruct the space** — an optional LiDAR [floor plan](https://docs.neuralconfig.com/arrf/survey/floor-plan/) renders your walk as a 2D map and a 3D dollhouse. - **Grade your coverage** — a [Results](https://docs.neuralconfig.com/arrf/survey/results-and-grading/) summary scores the survey and flags weak spots and roaming events. - **Identify your phone** — [match a phone's motion](https://docs.neuralconfig.com/arrf/tools/find-my-device/) against what the AP hears to confirm which client it is (RUCKUS pack). - **Export** — [PDF site-survey report, CSV, and JSON](https://docs.neuralconfig.com/arrf/tools/exports/). ## What do I need? - **iPhone running iOS 17 or later**, with ARKit. ARRF is iPhone-only and runs in portrait. - **A LiDAR-equipped iPhone is recommended** for floor-plan reconstruction and wall occlusion. Everything else works without LiDAR. - **A Wi-Fi connection** for an Any Wi-Fi survey. No access-point login is needed. - **Optional, for the RUCKUS pack:** access to your RUCKUS access points on the local network over SSH (TCP 22). Your test iPhone may need to be permitted through any management ACL or firewall. Real surveys and the Toolbox run during a [free trial](https://docs.neuralconfig.com/arrf/setup/free-trial-and-unlock/) (14 days or 3 surveys, whichever comes first) and after a one-time unlock. The demo is always free. :::tip[No hardware? Start anyway.] A fresh install opens in a built-in **simulated survey** — just tap Start and walk to see cubes drop from a simulated network. See [Try it with no hardware](https://docs.neuralconfig.com/arrf/setup/demo-mode/). ::: ## Where does my data go? Your surveys stay on your iPhone. There is **no NeuralConfig account**; surveys are saved to the app's own storage and never uploaded, and any credentials are stored solely in the iOS Keychain. Two kinds of traffic leave the phone: - **Internet tests** time packets and run short speed bursts against NeuralConfig's test server, `arrf-probe.neuralconfig.com`, carrying a random install ID used for fair-use limits. You can point them at your own server or turn them off. - **The RUCKUS pack** talks only to the access points you administer on your local network — plus your own RUCKUS One tenant, if you connect one. ARRF's App Store privacy label declares one data type, **Device ID**, for app functionality and analytics — not linked to you and not used for tracking. See [Internet tests and privacy](https://docs.neuralconfig.com/arrf/setup/internet-tests-and-privacy/). ## Explore the docs ### Set up - [Getting started](https://docs.neuralconfig.com/arrf/setup/getting-started/): Install ARRF, answer the first-run question, grant permissions and walk your first survey. - [Surveying any Wi-Fi network](https://docs.neuralconfig.com/arrf/setup/any-wifi-survey/): The default survey: no AP login — the phone measures latency, loss, speed and call quality. - [Try it with no hardware](https://docs.neuralconfig.com/arrf/setup/demo-mode/): Demo mode runs a full AR survey against a simulated network — free, and no gear needed. - [Free trial and unlock](https://docs.neuralconfig.com/arrf/setup/free-trial-and-unlock/): What the 14-day or 3-survey trial covers, what always stays free, and how to restore a purchase. - [Internet tests and privacy](https://docs.neuralconfig.com/arrf/setup/internet-tests-and-privacy/): Which servers ARRF contacts, exactly what it sends, and how to self-host or switch internet tests off. - [Setting up a RUCKUS One account](https://docs.neuralconfig.com/arrf/setup/ruckus-one-account/): RUCKUS pack: connect your tenant to survey by venue and fetch AP passwords automatically. - [Connecting to your RUCKUS APs](https://docs.neuralconfig.com/arrf/setup/connecting-your-aps/): RUCKUS pack: log into your access points over SSH by IP, with passwords and a target SSID. ### Running a survey - [Running a survey](https://docs.neuralconfig.com/arrf/survey/running-a-survey/): Choosing a source, setting capture options, and walking the space. - [Experience metrics](https://docs.neuralconfig.com/arrf/survey/experience-metrics/): What each phone-measured metric means, from Wi-Fi latency to call quality. - [The experience grade](https://docs.neuralconfig.com/arrf/survey/experience-grade/): How phone-measured samples become a verdict for calls, video and browsing. - [Cube colors and labels](https://docs.neuralconfig.com/arrf/survey/cube-colors-and-labels/): What the survey cubes encode, the colour modes, and the detail behind each cube. - [AP locations and roaming](https://docs.neuralconfig.com/arrf/survey/ap-locations-and-roaming/): How ARRF pins and estimates AP locations in AR, and how it marks roaming events. - [LiDAR floor plan](https://docs.neuralconfig.com/arrf/survey/floor-plan/): Reconstructing a 2D floor plan from a LiDAR walk of the space. - [Results and the survey grade](https://docs.neuralconfig.com/arrf/survey/results-and-grading/): What the Results screen shows, and how the letter grade is calculated. - [Rooms and sites](https://docs.neuralconfig.com/arrf/survey/rooms-and-sites/): File surveys under a site and read results room by room. - [Before / after compare](https://docs.neuralconfig.com/arrf/survey/before-after-compare/): Compare two surveys of the same space to show what a change fixed. - [History and saved surveys](https://docs.neuralconfig.com/arrf/survey/history/): Where every stopped survey lands, and how to reopen, rename, share, or delete one. ### Tools and exports - [Exporting reports and data](https://docs.neuralconfig.com/arrf/tools/exports/): The deliverables ARRF produces — a multi-page PDF site survey and raw data exports. - [Network Test](https://docs.neuralconfig.com/arrf/tools/network-test/): Test this phone's Wi-Fi on any network without walking a survey, including a call test. - [Identify My Phone](https://docs.neuralconfig.com/arrf/tools/find-my-device/): How ARRF picks your iPhone out of the APs' client tables with a wave. - [Toolbox utilities](https://docs.neuralconfig.com/arrf/tools/toolbox/): RUCKUS pack SSH diagnostics — health checks and RF status straight from the AP. - [Packet capture](https://docs.neuralconfig.com/arrf/tools/packet-capture/): A short 802.11 capture on one AP radio, pulled back over TFTP and analysed on the phone. ### More - [Settings reference](https://docs.neuralconfig.com/arrf/settings/): Every section of the Settings tab, with its real default. - [Limits](https://docs.neuralconfig.com/arrf/limits/): What ARRF can and can't measure, and the limits that apply to a survey. - [Troubleshooting](https://docs.neuralconfig.com/arrf/troubleshooting/): Surveys that won't start, unreachable APs, and rejected rkscli logins. --- ARRF is an independent product of NeuralConfig LLC. It is not made, endorsed or supported by RUCKUS Networks. RUCKUS is a trademark of its owner. Need a hand? [Contact support](https://support.neuralconfig.com/arrf?from=docs). --- # Getting started Source: https://docs.neuralconfig.com/arrf/setup/getting-started/ You can be walking your first survey within a minute of launching ARRF — no account, no login, and no hardware required, because a fresh install opens in a built-in simulated survey. ## 1. Install and launch Install ARRF from the App Store and open it. There is no sign-up and no account — the app is ready the moment it launches. On first launch ARRF asks one question: **"What are you using ARRF for?"** | Choice | Defaults it sets | |---|---| | **Home** — "Checking my own Wi-Fi. Plain answers: can I call, is it fast, where is it weak." | Cubes coloured by call quality, no letter grade, plain-language labels, RUCKUS tools folded away. | | **Professional** — "Surveying for a client or a site. Letter grade, RF detail and methodology up front." | Cubes coloured by signal, letter grade shown, technical labels, RUCKUS tools open. | It only sets defaults: every feature stays available. **Skip** (or swiping the sheet away) picks Home. Change it any time under **Settings → Using ARRF for**. On a fresh install the survey source defaults to **Demo** (simulated), so you can explore the full AR experience before measuring a real network. See [Try it with no hardware](https://docs.neuralconfig.com/arrf/setup/demo-mode/). ## 2. Grant permissions ARRF asks for access the first time each feature needs it: | Permission | Why ARRF needs it | |---|---| | **Camera** | To place Wi-Fi measurements in augmented reality — the AR survey view is the camera feed — and, on iPhones with LiDAR, to scan the room for the floor plan. | | **Local Network** | To time round trips to your router, and, with the RUCKUS pack, to talk to your access points over SSH (and TFTP for packet captures). | | **Location (While Using)** | iOS only reveals the Wi-Fi network name and access-point address (BSSID) to apps with location access. ARRF uses it to note which access point served each measurement; your location itself is never recorded. | | **Motion & Fitness** | For [Identify My Phone](https://docs.neuralconfig.com/arrf/tools/find-my-device/), which matches your wave motion against the signal the AP hears. | If you decline camera access the AR survey can't run — you can re-enable it later in **iOS Settings → ARRF**. Declining Location still lets a survey run, but cubes won't record which AP served them or show roams. ## 3. Run your first survey (the demo) 1. **Open the Survey tab.** On a fresh install the source is already **Demo**. 2. **Tap Start Survey.** The demo is always free — no trial needed. 3. **Read the "How to run a survey" card** — a full-screen cover that appears the first time. In the demo it explains: *"Just walk around your space. This demo simulates one Wi-Fi AP near your starting point — signal fades as you move away — and drops a cube automatically as you go. Tap Stop Survey when you're finished to see your report."* Tap **Start walking**. 4. **Walk.** Move the iPhone slowly around the room. Coloured cubes drop automatically as you go — the demo is hands-free. 5. **Tap Stop Survey** when you're done. If the walk has at least three points, the **Results** grade screen opens automatically; the survey is also saved to the **[History](https://docs.neuralconfig.com/arrf/survey/history/)** tab. That's the whole loop: **Start → walk → Stop → Results.** A real survey works exactly the same way once you pick a real source. :::note[The survey-help card] The **"How to run a survey"** card shows on each survey's first appearance until you tick **Don't show this again** (or turn off **Show survey instructions** in Settings → Survey & capture). It's a full-screen cover, so the Stop and Capture buttons are only reachable after you dismiss it. ::: ## 4. Survey a real network When you're ready to survey your own network, tap the **Where** card in the Survey lobby. The **Survey source** sheet lists: | Source | What it does | |---|---| | **Any Wi-Fi** | The phone measures latency, loss, speed and call quality on whatever Wi-Fi it's joined. No AP access needed. Shown while **Experience tests (beta)** is on (the default). | | **Demo** | The simulated walk. | | **RUCKUS One venues** | Under *Integrations · RUCKUS*, once a RUCKUS One account is connected. | | **RUCKUS APs by IP** | Under *Integrations · RUCKUS*: fixed AP IPs over SSH, no RUCKUS One needed. | The moment you choose a real source, ARRF switches off the demo and remembers your choice. Starting a real survey needs the [free trial or the unlock](https://docs.neuralconfig.com/arrf/setup/free-trial-and-unlock/); the first one that uses internet tests also shows a one-time [Internet tests](https://docs.neuralconfig.com/arrf/setup/internet-tests-and-privacy/) sheet. - [Surveying any Wi-Fi network](https://docs.neuralconfig.com/arrf/setup/any-wifi-survey/) — the default, vendor-neutral survey. - [Connecting to your RUCKUS APs](https://docs.neuralconfig.com/arrf/setup/connecting-your-aps/) — RUCKUS pack: manual IPs, passwords, and the target SSID. - [Setting up a RUCKUS One account](https://docs.neuralconfig.com/arrf/setup/ruckus-one-account/) — RUCKUS pack: import venues and fetch AP passwords automatically. ## Next steps - [Surveying any Wi-Fi network](https://docs.neuralconfig.com/arrf/setup/any-wifi-survey/): Move off the demo — survey your own Wi-Fi with no AP login. - [Running a survey](https://docs.neuralconfig.com/arrf/survey/running-a-survey/): Capture modes, the AR HUD, and the full Start-to-Results lifecycle. - [Free trial and unlock](https://docs.neuralconfig.com/arrf/setup/free-trial-and-unlock/): What the trial covers and what always stays free. - [Results and the survey grade](https://docs.neuralconfig.com/arrf/survey/results-and-grading/): How a walk becomes a letter grade and a weak-spot list. Stuck? [Contact support](https://support.neuralconfig.com/arrf?from=docs). --- # Try it with no hardware (Demo mode) Source: https://docs.neuralconfig.com/arrf/setup/demo-mode/ ARRF ships with a **simulated survey** so you can explore the whole AR experience — cubes, the floor plan, and the Results grade — without any hardware on hand, RUCKUS or otherwise. The demo is **always free**: it needs no trial and never uses up one of the trial's surveys. ## What does Demo mode simulate? By default the demo simulates **one virtual Wi-Fi network** anchored near your starting position. It runs the real survey pipeline on synthesised data: the network gets slower and lossier as you walk away from your start point, and about 9 metres out the phone roams to a second virtual access point (and back again once you return within about 7 metres). Cubes drop, the floor plan builds, and Stop produces a genuine Results screen — the same as a live survey, just with simulated measurements. Demo mode always runs in **Continuous** capture (hands-free), so you just walk. ### Can the demo show AP-measured signal too? Yes. Under **Where**, the demo card has an **Include AP data** toggle, off by default: *"Also simulate an access point's own readings (signal, SNR, band), as a vendor integration adds them."* With it on, the demo adds one **virtual access point** called **Demo AP**. The virtual AP is anchored a short distance ahead of and above your starting position; its signal follows a free-space path-loss model, so you start in the strong-signal "hot" zone and the reading fades as you walk away, and AP auto-locate converges on it. If **Experience tests (beta)** is off in Settings, the demo is this AP-only version. ## How to start the demo On a **fresh install** the Survey lobby's source is already **Demo**, so you can just tap **Start Survey**. If you've already picked another source and want the demo back: 1. Open the **Survey** tab. 2. Tap the **Where** card and choose **Demo** — labelled *"Simulated walk — one virtual network, no hardware"* (or *"…one virtual AP…"* with Include AP data on). 3. Tap **Start Survey** and walk. The lobby explains the mode inline: *"No special hardware needed. Start and walk — a simulated network gets slower and lossier as you move away, cubes drop just like a live survey, and the phone roams to a second access point."* ## Switching to a real survey Tap the **Where** card and pick **Any Wi-Fi**, a **RUCKUS One** venue, or **RUCKUS APs by IP**. The moment you choose one, the demo switches off and your real source persists across launches. Real surveys need the [free trial or the unlock](https://docs.neuralconfig.com/arrf/setup/free-trial-and-unlock/). See [Surveying any Wi-Fi network](https://docs.neuralconfig.com/arrf/setup/any-wifi-survey/). :::caution[Demo mode is Survey-only] The demo lives in the **Survey** tab. The [Toolbox](https://docs.neuralconfig.com/arrf/tools/toolbox/) tools measure live networks and have **no simulated mode** — with no RUCKUS gear connected, the Toolbox instead offers a gallery of sample results for the RUCKUS tools. The AR survey is the part you can fully drive without hardware. ::: ## Next steps - [Getting started](https://docs.neuralconfig.com/arrf/setup/getting-started/): Install, grant permissions, and walk the demo end to end. - [Surveying any Wi-Fi network](https://docs.neuralconfig.com/arrf/setup/any-wifi-survey/): Leave the demo behind — measure your own Wi-Fi with no AP login. - [Running a survey](https://docs.neuralconfig.com/arrf/survey/running-a-survey/): Capture modes, the AR HUD, and what Stop saves. - [Results and the survey grade](https://docs.neuralconfig.com/arrf/survey/results-and-grading/): The grade screen a demo walk produces is a real one. --- # Setting up a RUCKUS One account Source: https://docs.neuralconfig.com/arrf/setup/ruckus-one-account/ Connecting a **RUCKUS One** account lets you survey by **venue**: ARRF pulls the venue's access points and fetches each AP's password automatically, so you never type or maintain per-AP passwords. It's part of the optional, free **RUCKUS pack** — an [Any Wi-Fi survey](https://docs.neuralconfig.com/arrf/setup/any-wifi-survey/) needs none of this, and neither does [manual surveying](https://docs.neuralconfig.com/arrf/setup/connecting-your-aps/) by AP IP. ## What you enter Open **Settings → Integrations → RUCKUS** and fill in the **RUCKUS One account** section. (The Survey lobby's **Connect RUCKUS One** button opens the same form.) | Field | Notes | |---|---| | **Region** | North America, Europe, or Asia — the RUCKUS One API region for your tenant. Defaults to North America. It picks the API host: `api.ruckus.cloud`, `api.eu.ruckus.cloud`, or `api.asia.ruckus.cloud`. | | **Tenant ID** | Your RUCKUS One tenant identifier. | | **Client ID** | The API client's ID. | | **Client secret** | The API client's secret. Stored **only in this device's Keychain**; once saved the field shows `•••••••• saved in Keychain` and the secret is never displayed again. | Get these from **RUCKUS One → Administration → Account Management** (API credentials). ARRF uses them to mint a short-lived token via the OAuth2 `client_credentials` grant; the token is cached and refreshed automatically. :::caution[The API client needs an admin (read-write) role] RUCKUS One hands a **read-only** API client a masked AP password (`**********`) instead of the real one. ARRF can't tell the difference, and **Test connection** only lists venues, so it can't catch this either; instead every AP login during a survey fails with **login rejected**. Create the API client with an **admin (read-write)** role. ::: ## Test the connection Tap **Test connection**. On success ARRF reports how many venues it found and names up to three of them, for example *"Connected — 3 venues (…)"*. If it fails, ARRF shows a specific reason — see [Troubleshooting](https://docs.neuralconfig.com/arrf/troubleshooting/). ## What it enables - **Venue import** — the Survey lobby's **Where** picker lists your venues under *Integrations · RUCKUS*; choose one and ARRF surveys its access points. - **Automatic AP passwords** — ARRF fetches each AP's rkscli password just-in-time by serial, so you never enter one. Fetched passwords are cached in the Keychain until shortly before they expire (a five-minute safety margin covers clock skew and a survey outliving its fetch), and a login failure drops the cached value so the next attempt refetches. - **Offline-on-LAN** — after one fetch, the venue's AP inventory is cached, so you can survey on the LAN without re-querying RUCKUS One. Only APs that are **operational and have a LAN IP** are surveyable; the rest appear in the lobby greyed out. :::note[Six APs per venue survey] A single survey polls at most **6 APs at once**. A venue with more surveyable APs leaves **Start Survey disabled** and the lobby reads *"Pick up to 6 APs to survey"* — tap the AP chips in the lobby's **Access points** card to select six or fewer, and Start enables. ::: If a just-in-time fetch fails for one AP, ARRF falls back to any password you saved by hand for that AP's IP under **Settings → Integrations → RUCKUS → APs**, and only reports the fetch error when there is nothing to fall back on. See [Connecting to your RUCKUS APs](https://docs.neuralconfig.com/arrf/setup/connecting-your-aps/#add-your-aps). ## Disconnect **Settings → Integrations → RUCKUS → Disconnect RUCKUS One**, confirmed with **Disconnect & remove APs**, removes the tenant ID, client ID, and secret, deletes the AP passwords fetched from RUCKUS One, forgets the selected venue and its cached AP inventory, and restores the Toolbox sample gallery. Manual AP IPs you added under **APs** are kept. ## How your credentials are handled The OAuth client secret and any fetched AP passwords live **only in this device's Keychain** (device-only, not synced to other devices via backup). Region, tenant ID, and client ID are not secrets and are stored in local app settings. RUCKUS One credentials are sent nowhere except your RUCKUS One tenant and your own APs. For RUCKUS One, the only host ARRF reaches over the internet is the API host for your region above; AP logins and packet-capture transfers stay on your local network. Separately, ARRF's experience tests contact a test server — see [Internet tests and privacy](https://docs.neuralconfig.com/arrf/setup/internet-tests-and-privacy/). ## Next steps - [Connecting to your RUCKUS APs](https://docs.neuralconfig.com/arrf/setup/connecting-your-aps/): The manual path, and the SSH details every survey uses either way. - [Running a survey](https://docs.neuralconfig.com/arrf/survey/running-a-survey/): Pick your venue in the lobby and walk. - [Toolbox utilities](https://docs.neuralconfig.com/arrf/tools/toolbox/): The venue's APs are what the Toolbox diagnostics read. - [Troubleshooting](https://docs.neuralconfig.com/arrf/troubleshooting/): Every RUCKUS One credential error and what fixes it. --- # Connecting to your RUCKUS APs Source: https://docs.neuralconfig.com/arrf/setup/connecting-your-aps/ With the optional, free **RUCKUS pack**, ARRF surveys by logging into each of your RUCKUS access points and reading the AP-measured signal live. You don't need any of this for an [Any Wi-Fi survey](https://docs.neuralconfig.com/arrf/setup/any-wifi-survey/), which measures from the phone alone. This page covers the manual connection path — APs you enter by hand, at fixed addresses on your LAN, shown in the Survey lobby as **RUCKUS APs by IP**. If your APs are managed in RUCKUS One, see [Setting up a RUCKUS One account](https://docs.neuralconfig.com/arrf/setup/ruckus-one-account/) instead, which imports the APs and fetches their passwords for you. ## How ARRF talks to APs Surveys poll each AP's **rkscli** command line over **SSH (TCP 22)**, reading the AP-measured signal about **2.5 times a second**. This is the only transport — there is no SNMP or agent to install. RUCKUS One venues always log in as **admin**; for manually added APs the username defaults to **admin** and can be changed (one username for all of them). :::note[Same network] Your iPhone must be on the **same local network** as the APs, and reachable to them over SSH. If a management ACL or firewall restricts which hosts can SSH to your APs, the test iPhone needs to be permitted. ::: ## Add your APs 1. **Open Settings → Integrations → RUCKUS → APs.** (The Survey lobby's **Add APs by IP** button opens the same screen.) 2. **Tap Add AP** and enter each AP's address — an IPv4 address (for example `192.0.2.11`), an IPv6 address, or a hostname. Invalid addresses show in red with an **Invalid** label. The list holds up to **6** APs, the same cap as a venue survey. A single-AP list is accepted and surveys normally — you simply can't record a roam, because there is nowhere to roam to. 3. **Enter each AP's password** in the **AP passwords (SSH)** section below the list, which shows a **Username** field (blank means `admin`) and one secure field per valid AP address. Passwords are stored **per AP in the iOS Keychain** — never in plain settings, and never sent anywhere off the device. If you start a manual survey with no password saved for any of your APs, the lobby warns you before you walk: *"No saved AP passwords — the SSH login will fail. Save them in Settings ▸ Integrations ▸ RUCKUS ▸ APs, or pick a RUCKUS One venue."* The pre-flight probe only tests whether port 22 answers, so it can pass while every login still fails. :::caution[Manual passwords go stale on R1-managed APs] RUCKUS One venues fetch passwords automatically, because R1-managed AP passwords rotate roughly **every two days** — a manually saved password on an R1-managed AP goes stale on that cycle. See [RUCKUS One account](https://docs.neuralconfig.com/arrf/setup/ruckus-one-account/). ::: A manual password is not *only* for manual surveys, though: it is also the last fallback when a venue survey can't fetch one. ARRF resolves an AP's login in this order — an unexpired fetched credential, then a fresh fetch from RUCKUS One, then a manual password saved for that AP's IP. Saving one by hand is a reasonable belt-and-braces move for an AP you survey often. ## Set the target SSID The **Target SSID** is the WLAN ARRF polls on each AP, and Start stays disabled until one is set (*"Choose the SSID to survey"*). The easiest way is the lobby's **Choose SSID** row: it reads each configured AP's broadcast WLANs over SSH and lists every broadcast SSID — tap the WLAN you're surveying and it's written to Target SSID. You can also type it by hand under **Settings → Integrations → RUCKUS → Target SSID**. If no AP is broadcasting the target SSID, that AP reports *"no up WLAN broadcasting"* during the survey. ## Pick your phone A RUCKUS survey reads the signal the APs hear from **one Wi-Fi client**, so ARRF needs this iPhone's Wi-Fi MAC address. Until one is set, Start stays disabled and the lobby reads *"Pick your phone so the APs know whose signal to read"*. Tap **Identify my phone** to pick it from the APs' client list — see [Identify My Phone](https://docs.neuralconfig.com/arrf/tools/find-my-device/). ## Host-key trust and Trusted APs The first time ARRF connects to an AP, it **pins that AP's SSH host key** (trust-on-first-use) and stores the SHA-256 fingerprint on the device. You are not prompted — the first sighting is trusted silently. On later connections, if the AP presents a **different** host key, ARRF **refuses the connection** and reports *"This AP's SSH identity changed (…) — if it was replaced or reset, review it in Settings ▸ Integrations ▸ RUCKUS ▸ Trusted APs."* It does not offer to trust the new key inline, because a changed key can mean a man-in-the-middle. ```mermaid stateDiagram-v2 [*] --> Unpinned: AP never contacted Unpinned --> Pinned: first connection
fingerprint recorded silently Pinned --> Pinned: same key
connection proceeds Pinned --> Refused: different key
"SSH identity changed" Refused --> Unpinned: you forget the pin
Settings > Integrations > RUCKUS > Trusted APs ``` In words: an AP starts unpinned; the first connection records its fingerprint without asking; every later connection that presents the same key proceeds; a different key is refused outright; and the only way back is to **forget the pin**, which returns that AP to the unpinned state so the next connection trusts and re-pins whatever key it now presents. ### Forget a pinned AP **Settings → Integrations → RUCKUS → Trusted APs** lists every AP ARRF has pinned, each with its IP and `SHA256:` fingerprint. **Swipe a row and tap Forget** to drop that pin. :::caution[Forget only when you know why the key changed] Forgetting a pin is the recovery path for an AP you **replaced or factory-reset** — its identity legitimately changed. If you weren't expecting the change, a mismatch can indicate a man-in-the-middle: confirm the hardware on that IP before you forget anything. ::: The screen reads *"No trusted APs yet"* until the first successful connection. Pins are per-IP and local to this iPhone. ## Start a manual survey Tap the Survey lobby's **Where** card and choose **RUCKUS APs by IP**. When you tap **Start Survey**, ARRF runs a quick pre-flight — a bare SSH-port probe of each AP. If every AP answers, the survey starts straight away; if some don't, a sheet lists which answered and, when at least one did, offers **Start anyway** (offline APs are skipped). Real surveys need the [free trial or the unlock](https://docs.neuralconfig.com/arrf/setup/free-trial-and-unlock/). See [Running a survey](https://docs.neuralconfig.com/arrf/survey/running-a-survey/). ## Next steps - [Running a survey](https://docs.neuralconfig.com/arrf/survey/running-a-survey/): Pre-flight, capture modes, the AR HUD, and what Stop saves. - [Setting up a RUCKUS One account](https://docs.neuralconfig.com/arrf/setup/ruckus-one-account/): The alternative to maintaining AP IPs and passwords by hand. - [Settings reference](https://docs.neuralconfig.com/arrf/settings/): Every Connection field, including Trusted APs, with its real default. - [Troubleshooting](https://docs.neuralconfig.com/arrf/troubleshooting/): Unreachable APs, rejected rkscli logins, and changed host keys. --- # Surveying any Wi-Fi network Source: https://docs.neuralconfig.com/arrf/setup/any-wifi-survey/ **Any Wi-Fi** is ARRF's vendor-neutral survey: you join a Wi-Fi network, walk, and the iPhone itself measures the experience at each spot — no access-point login, no vendor pack, any brand of gear. It is the source to pick whenever you don't administer the APs, or just want to know whether calls and video will work. **If your Wi-Fi isn't RUCKUS** — another brand, a home router, or a network someone else runs — this is how you survey it: choose **Any Wi-Fi** on the Survey tab and walk. Nothing about it needs RUCKUS hardware. ## What does the phone measure? As you walk, the phone times its router, the internet edge and short speed bursts, and paints each spot as a cube: | Measured | Against | |---|---| | **Wi-Fi latency, jitter and packet loss** | Your router (the Wi-Fi hop), found automatically or set under **Settings → Experience → Manual gateway**. | | **Internet latency** | The test server's nearest edge. | | **Download and upload speed** | Short speed bursts against the test server, or a local iperf3 server you set under **Settings → Experience**. | | **Call quality (MOS)** | A simulated voice call (a steady stream of small call-sized packets) timed to your router, and to the test server while internet tests are on. | Internet latency and the speed bursts use NeuralConfig's test server by default; see [Internet tests and privacy](https://docs.neuralconfig.com/arrf/setup/internet-tests-and-privacy/). For what each metric means, see [Experience metrics](https://docs.neuralconfig.com/arrf/survey/experience-metrics/). :::note[Signal strength is an add-on] iOS doesn't let apps read this iPhone's Wi-Fi signal (RSSI). The Any Wi-Fi card offers **Add signal strength**: an Apple Shortcut, set up once, reads the phone's own signal, noise and channel. In **Stop & sample** mode a **Read signal at each capture** toggle then attaches it to every cube. ::: ## What do I need? - **A Wi-Fi connection.** Start stays disabled with *"Join a Wi-Fi network to measure it"* until the phone is on Wi-Fi. Experience tests are Wi-Fi only. - **Experience tests (beta)** turned on under **Settings → Experience**. It is **on by default**; turning it off hides the Any Wi-Fi source. - **The [free trial or the unlock](https://docs.neuralconfig.com/arrf/setup/free-trial-and-unlock/).** No access-point login, IP list, SSID or device MAC is needed. ## How do I start an Any Wi-Fi survey? 1. **Open the Survey tab, tap the Where card, and choose Any Wi-Fi** — *"No AP access needed — the phone measures latency, loss and speed"*. 2. **Check the Measure the experience card.** It reads *"Works on any Wi-Fi, any vendor. As you walk, the phone times its router (Wi-Fi latency, jitter, loss), the internet edge, and short speed bursts, and paints each spot as a cube."* Below that it shows **On Wi-Fi** (or **Not on Wi-Fi**) and the router address it found. 3. **Pick a capture mode** in the card's **Capture** picker: - **Continuous** — *"Walk and a cube drops every couple of seconds, with speed bursts as you go."* - **Stop & sample** — *"Stand still, tap Capture — the phone measures for a moment, runs a speed burst, then drops a cube."* 4. **Tap Start Survey.** The first time, ARRF shows the one-time [Internet tests](https://docs.neuralconfig.com/arrf/setup/internet-tests-and-privacy/) sheet, then a **"Test this phone's Wi-Fi"** primer explaining two permissions (below). Tap **Continue**. 5. **Walk**, then tap **Stop Survey** to see the [experience grade](https://docs.neuralconfig.com/arrf/survey/experience-grade/). ## Which permissions does it ask for? The primer explains, and iOS then asks for: | Permission | Why | If you decline | |---|---|---| | **Local Network** | To time round trips to your router (the Wi-Fi hop). | The internet edge and speed tests still run. | | **Location (While Using)** | iOS only reveals the Wi-Fi network name and access-point address (BSSID) to apps with location access. ARRF uses it to note which access point served each measurement; your location itself is never recorded. | Cubes won't record which AP served them or show roams. | The lobby repeats either problem as a warning that doesn't block Start: *"No router found to time the Wi-Fi hop — the internet edge and speed tests still run. You can set a gateway in Settings ▸ Experience."* and *"Location is off for ARRF, so iOS hides the access point (BSSID) — cubes won't record which AP served them or show roams."* ## What does the pre-flight check? Every Any Wi-Fi start runs a quick pre-flight: it pings your router and says hello to the test server (and to a local iperf3 server, if you set one). If everything answers — or only the router is missing — the survey starts straight away. Otherwise a sheet explains: - **"Part of the test is unavailable"** — *"You can start anyway — the survey measures what it can reach."* Tap **Start anyway** or **Cancel**. - **"Nothing to measure"** — *"Neither your router nor the test server answered. Check this iPhone's Wi-Fi connection."* Only **OK** is offered; this is the one case that blocks the survey. :::tip[Measuring experience on a RUCKUS survey too] With Experience tests on, a RUCKUS venue or RUCKUS APs by IP survey also shows a **Measure experience** toggle (on by default): *"Also time the router, internet edge and speed bursts from this phone, alongside the AP readings."* ::: ## Next steps - [Experience metrics](https://docs.neuralconfig.com/arrf/survey/experience-metrics/): What latency, jitter, loss, speed and call quality mean on each cube. - [The experience grade](https://docs.neuralconfig.com/arrf/survey/experience-grade/): How the walk becomes a verdict for calls, video and browsing. - [Internet tests and privacy](https://docs.neuralconfig.com/arrf/setup/internet-tests-and-privacy/): What the test server sees, and how to self-host or switch it off. - [Network Test](https://docs.neuralconfig.com/arrf/tools/network-test/): Check this phone's Wi-Fi in one spot without walking a survey. --- # Free trial and unlock Source: https://docs.neuralconfig.com/arrf/setup/free-trial-and-unlock/ ARRF is free to download. A **free trial** lets you use every feature for **14 days or 3 surveys, whichever comes first**; after that a **one-time unlock** keeps ARRF working for good. There is no subscription. The demo, and everything you have already saved, stay free in every state. ## What needs the trial or the unlock? Only **new work** is gated: | Gated (needs the trial or unlock) | Always free | |---|---| | **Start Survey** on any real source — Any Wi-Fi, a RUCKUS One venue, or RUCKUS APs by IP | The **demo** survey | | **Every Toolbox tool**, including Network Test and the RUCKUS tools | The Toolbox **sample results** gallery | | | **History**, **Results**, floor plans, exports and the **PDF** report for every survey you've saved | The paywall says it directly: *"Your saved surveys, Results, floor plans, reports and exports always stay available — even if the trial ends. The demo survey is always free."* ## How does the trial count? The trial ends at whichever limit you reach first: - **14 days**, counted from when you tap **Start free trial**. - **3 surveys.** A survey counts only when it is a real (non-demo) survey that saves **at least three readings**. Demo walks never count, and neither does a quick Start/Stop with fewer than three cubes. The survey counter is kept in the iOS Keychain, so deleting and reinstalling the app doesn't reset it. ## How do I start the trial? Tap **Start Survey** on a real source, tap the Toolbox's lock button (its tools stay greyed out until then), or tap **Unlock ARRF** at the top of Settings. Before the trial starts the paywall is headed **"Try every feature free"**: 1. Tap **Start free trial** — *"14 days or 3 surveys, whichever comes first. No charge, no subscription."* 2. The paywall closes. Tap **Start Survey** again. While the trial runs, the lobby and Settings show a status line such as *"Trial: 12 days · 2 surveys left"*; tapping it in the lobby opens the paywall. Before the trial starts it reads *"Free trial: 14 days or 3 surveys"*, and the Toolbox shows **Start the free trial to use Toolbox**. ## What happens when the trial ends? The status line changes to *"Trial ended (14 days)"* or *"Trial ended (3 surveys used)"*, the Toolbox shows **Unlock ARRF to use Toolbox**, and starting a real survey opens the paywall, headed **"Keep surveying with ARRF"**. Tap **Unlock ARRF** to buy the one-time unlock (*"One-time purchase. No subscription."*). The button shows the price from the App Store for your region. ## How do I restore a purchase? Tap **Restore purchases**, either on the paywall or in the **Unlock ARRF** row at the top of Settings (shown until ARRF is unlocked). The unlock is *"One purchase per Apple ID, restorable on your other iPhones. Family Sharing isn't included."* If nothing is found, ARRF reports *"No previous purchases found for this Apple ID."* Once unlocked, the Settings row reads **ARRF Unlocked** and the status line **Unlocked**. ## Next steps - [Try it with no hardware](https://docs.neuralconfig.com/arrf/setup/demo-mode/): The demo is always free and never uses a trial survey. - [Surveying any Wi-Fi network](https://docs.neuralconfig.com/arrf/setup/any-wifi-survey/): Spend a trial survey measuring your own Wi-Fi. - [History and saved surveys](https://docs.neuralconfig.com/arrf/survey/history/): Saved surveys stay available whatever your trial state. --- # Internet tests and privacy Source: https://docs.neuralconfig.com/arrf/setup/internet-tests-and-privacy/ ARRF's **internet tests** measure the path from your iPhone to the internet against NeuralConfig's test server, **`arrf-probe.neuralconfig.com`**, which runs on Cloudflare's network. They send small timing packets, short speed bursts and a random install ID — **no account, name, location, Wi-Fi name, survey data or photos**. You can point them at your own server, or switch them off and keep every test on your own network. ## Which servers does ARRF contact? ```mermaid flowchart LR Phone["iPhone running ARRF"] Router["Your router
(Wi-Fi hop)"] Probe["Test server
arrf-probe.neuralconfig.com"] Public["Public services
STUN, DNS, time,
Apple captive page"] Phone -->|latency, jitter, loss, voice| Router Phone -->|edge latency, speed bursts,
install ID| Probe Phone -->|one-off policy check| Public ``` In words, an experience test talks to three kinds of host: 1. **Your router.** The phone times round trips to its gateway for Wi-Fi latency, jitter, loss and the voice test. This stays on your local network and runs whether or not internet tests are on. 2. **The test server**, `arrf-probe.neuralconfig.com` by default. The phone measures latency to the nearest edge and runs short speed bursts against it. 3. **Public services, for a one-off network policy check:** Cloudflare's and Google's STUN servers (`stun.cloudflare.com`, `stun.l.google.com`), Cloudflare's DNS (`1.1.1.1`, plain, DNS-over-TLS and DNS-over-HTTPS via `cloudflare-dns.com`), Cloudflare's time server (`time.cloudflare.com`), and Apple's captive-portal test page (`captive.apple.com`). Each sees this iPhone's public IP address, as with any website. The RUCKUS pack adds its own traffic — your access points over SSH, and your RUCKUS One region's API host if you connect a tenant. See [Setting up a RUCKUS One account](https://docs.neuralconfig.com/arrf/setup/ruckus-one-account/). ## What is sent, and what isn't? | Sent to the test server | Never sent | |---|---| | Small timing packets | Your name or any account (there is no NeuralConfig account) | | Speed-test data — short bursts, tens of MB on a fast line | Your location | | A **random install ID** in the `X-ARRF-Install` header, used only for fair-use limits | The Wi-Fi network name (SSID) | | Your trial state (`trial` or `unlocked`) in the `X-ARRF-Tier` header; the server ignores it and doesn't store it | Survey data, cubes, floor plans or photos | The **install ID** is a random UUID created on first use and stored in the iOS Keychain, so it survives reinstalling the app on the same iPhone. It carries no identity. The server keeps only usage counters: bytes per install ID per day (the last 7 days, for the fair-use allowance), and which Cloudflare location answered. ## What does the Internet tests sheet ask? Before the first survey or Network Test that would contact the test server, ARRF shows a one-time **Internet tests** sheet explaining the above. It has three choices: | Choice | What it does | |---|---| | **Continue** | Use NeuralConfig's test server. | | **Use my own server** | Enter the host of a self-hosted copy of the ARRF probe server (HTTPS, port 443), then tap **Use this server** (or **Back**). It must be a bare host name or IPv4 address — no `https://` or path. | | **Skip internet tests** | Turn internet tests off. *"Skipping keeps every test on your own network: router latency, jitter, loss, voice and roaming still run. Speed bursts need a local iperf3 server."* | ## How do I change it later? Everything lives under **Settings → Experience**: - **Internet tests** — on by default. Turning it off stops all contact with the test server and the policy-check services: no internet latency, no internet call lane, no policy check, and no cloud speed bursts. Router latency, jitter, loss, voice and roaming still run, and the Survey lobby reads *"Phone-measured · internet tests off"*. - **Test server** — shown while Internet tests is on. Blank uses `arrf-probe.neuralconfig.com`; enter your own host to self-host. - **Local iperf3 server** — host or host:port (default port 5201). Speed bursts then run over your own network only; run `iperf3 -s` on a wired machine. ## What does ARRF's App Store privacy label say? ARRF's privacy manifest declares **no tracking** and one collected data type: **Device ID** (the random install ID), for **App Functionality** and **Analytics**, **not linked** to your identity and **not used for tracking**. Surveys are saved to the app's own storage and never uploaded; credentials stay in the iOS Keychain. The full policy is at [neuralconfig.com/privacy/arrf/](https://neuralconfig.com/privacy/arrf/). ## Next steps - [Surveying any Wi-Fi network](https://docs.neuralconfig.com/arrf/setup/any-wifi-survey/): The survey that uses these tests, and its pre-flight check. - [Network Test](https://docs.neuralconfig.com/arrf/tools/network-test/): Run the same tests in one spot without walking. - [Settings reference](https://docs.neuralconfig.com/arrf/settings/): Every Experience setting with its real default. --- # Running a survey Source: https://docs.neuralconfig.com/arrf/survey/running-a-survey/ A survey is the core of ARRF: you walk a space and coloured cubes drop where you measured. This page covers the survey lifecycle and the on-screen controls. ## The survey lifecycle ```mermaid flowchart TD A[Survey lobby
pick Where and How] --> B{Source} B -- Demo --> W[Walk the space
cubes drop] B -- Any Wi-Fi --> P[Pre-flight: router + test server] B -- RUCKUS venue or APs by IP --> C[Pre-flight: SSH port probe of each AP] P -- neither answered --> N[Nothing to measure
survey blocked] P -- one part missing --> E2[Start anyway
measures what it can reach] P -- both answered --> W E2 --> W C -- none answered --> D[Can't reach your APs
survey blocked] C -- some answered --> E[Start anyway
offline APs skipped] C -- all answered --> W E --> W W --> F[Stop Survey] F --> G[Generating floor plan
if LiDAR mesh captured] G --> H{Saved to History?} H -- yes, 3+ cubes --> I[Results opens automatically] H -- yes, 1-2 cubes --> J[Saved to History note] H -- write failed --> K[Survey not saved
Retry or Open anyway] ``` In words: you choose a source and a capture mode in the lobby. A demo walk starts immediately. An **Any Wi-Fi** survey first checks that your router and the test server answer: if neither does you'll see *"Nothing to measure"*, and if only part answers you can **Start anyway** and the survey measures what it can reach. A live RUCKUS survey first probes SSH on each AP and refuses to start if none answer, or lets you **Start anyway** with the unreachable ones skipped. You walk, cubes drop, and **Stop** ends the run — snapshotting the LiDAR mesh into a floor plan if one was captured, then saving to History. With three or more cubes the Results screen opens on its own; with one or two you get a brief note instead. If the write to storage fails, ARRF says so and offers **Retry** or **Open anyway** rather than losing the walk silently. ## What do I pick in the Survey lobby? The **Survey** tab opens on a lobby with these choices: - **Where** — the survey source: - **Any Wi-Fi** — the phone measures latency, loss and speed on whatever network it's on; no AP access needed. See [Any Wi-Fi survey](https://docs.neuralconfig.com/arrf/setup/any-wifi-survey/). - **Demo** — a simulated walk with no hardware. A fresh install starts on this source. See [Demo mode](https://docs.neuralconfig.com/arrf/setup/demo-mode/). - A **RUCKUS One** venue, or **RUCKUS APs by IP** — the RUCKUS vendor pack, which adds the APs' own signal readings. See [Connecting your APs](https://docs.neuralconfig.com/arrf/setup/connecting-your-aps/). - **Site** — which site the survey is filed under (optional; hidden for the demo). See [Rooms and sites](https://docs.neuralconfig.com/arrf/survey/rooms-and-sites/). - **How** — the **Capture** mode (below). On a RUCKUS source, a **Measure experience** toggle (on by default) also runs the phone-measured tests alongside the AP readings. Tap **Start Survey** to begin. The demo is always free; every real survey needs the free trial or the unlock — see [Free trial and unlock](https://docs.neuralconfig.com/arrf/setup/free-trial-and-unlock/). The first survey that uses the internet tests asks about them before it starts — see [Internet tests and privacy](https://docs.neuralconfig.com/arrf/setup/internet-tests-and-privacy/). For a live RUCKUS survey ARRF first runs a **pre-flight** — a bare SSH-port probe of each AP — and shows which answered. If none answer, you'll see *"Can't reach your APs"* and can't start; if only some answer, you can **Start anyway** and offline APs are skipped. :::note[A new survey clears the last one] Starting a survey clears the previous walk's cubes from the AR view. Every stopped survey is already saved to History, so nothing is lost — but finish and Stop before starting the next. ::: ## Which capture mode should I use? Pick the mode in the lobby's **How** card. | Mode | How it works | Best for | |---|---|---| | **Continuous** *(default)* | Walk and cubes drop automatically — hands-free, no tapping. On Any Wi-Fi a cube drops every couple of seconds, with speed bursts as you go. | Fast coverage of a space. | | **Stop & sample** | Stand still and tap the Capture button. On a RUCKUS survey one cube drops on the next fresh reading; on Any Wi-Fi the phone measures for a moment, runs a speed burst, then drops a cube. | Deliberate, accurate spot measurements. | ## Placement throttle To keep the AR scene readable, ARRF spaces cubes out. Two floors apply in Continuous mode, both set in **Settings → Survey & capture**: - **Placement throttle** — the minimum **distance** between cubes. Default **0.3 m**. - **Live cube interval** — the minimum **time** between cubes. Default **1.0 s**. Raise them for a sparser map, lower them for denser sampling. ## What does the AR HUD show? While surveying, the camera view carries a heads-up display: - **Cube count** — a large running total of cubes placed. - **Serving-AP chip** — on a RUCKUS survey, the AP your phone is currently associated to (in that AP's outline colour), with its band, channel, and width. On Any Wi-Fi it shows the network name and the access point (BSSID) the phone is on, with the vendor when known. - **Live readout** — on a RUCKUS survey, the current dBm, SNR, and grade, plus a live signal sparkline. On Any Wi-Fi, the Wi-Fi latency (p95 to your router) in ms with loss and jitter, a live round-trip trace, the last speed burst, and the live call quality and DNS time. - **Room** — a large *Room: …* control that tags the cubes and notes that follow. See [Rooms and sites](https://docs.neuralconfig.com/arrf/survey/rooms-and-sites/). - **Capture button** (bottom centre) — in Stop & sample it arms the next cube; in Continuous it pauses/resumes the automatic sweep. - **Discard** (trash) — after a confirmation, discards every cube placed so far: *"The survey keeps running; your AP pins stay put."* - **Full screen** — hides the HUD for an unobstructed camera view; capture keeps running. Tap again to exit. - **Chips** (top right) — **roam markers** (flag), **privacy blur** (eye), **Place APs** (map pin), **Add note**, and **colour**. They toggle roam posts, blur the camera, open the AP-pinning and proposed-placement sheet, drop a note, and change what cubes encode. See [Cube colors, labels, and detail](https://docs.neuralconfig.com/arrf/survey/cube-colors-and-labels/) and [AP locations and roaming](https://docs.neuralconfig.com/arrf/survey/ap-locations-and-roaming/). - **Tracking state** — hints like *"Move slower"* or *"Point at detail"* when ARKit needs a better view to track. - **`slowed ×2` / `slowed ×4`** — a thermometer chip that appears only when the iPhone is thermally throttling. See [Long walks and hot phones](#long-walks-and-hot-phones). The first time you start a survey, a **How to run a survey** overlay explains the walk. Tick *Don't show this again*, or turn off **Settings → Survey & capture → Show survey instructions**. The screen **stays awake** for as long as a survey is running on screen — auto-lock would kill the AR session mid-sweep. Normal auto-lock returns when you stop, switch tabs, or background the app. ## How do I add a note or photo to a spot? Tap the **Add note** chip (note icon, top right). ARRF drops a note where the phone is aiming and opens the note editor: | Section | What it holds | |---|---| | **Tags** | One-tap reasons a spot reads badly: *Metal racking*, *Elevator*, *Glass wall*, *Concrete wall*, *Microwave*, *Dead spot reported*, *AP obstructed*, *Ceiling AP*. | | **Note** | Free text — *"What's here?"* | | **Photo** | **Take photo of camera view** captures what the camera sees now. Cubes and labels aren't included. | Tap **Save**. Notes are tagged with the current room, show as numbered badges on the [floor plan](https://docs.neuralconfig.com/arrf/survey/floor-plan/), and get their own page in the PDF report. Open an existing note to edit it or **Delete note**. :::caution[Note photos are not blurred] A note photo is the raw camera frame. The privacy blur below does not apply to it, so aim away from anything sensitive before you tap. ::: ## How do I blur the camera background? Tap the **privacy blur** chip (eye icon) and pick **Off**, **Light**, **Medium**, or **Strong**. The default is **Off**; the same setting is **Settings → Display → Blur camera background**. The blur softens the live camera image — whiteboards, screens, faces, documents — while cubes and labels stay sharp. Screenshots and screen recordings of the survey are blurred too. It is display-only: ARKit still tracks from the unblurred camera, so placement accuracy doesn't change. ARRF never saves the camera feed; the only camera image it stores is a note photo you take yourself. ## When AR is interrupted Two banners can appear over the camera: | Banner | What happened | What to do | |---|---|---| | *"Camera paused — capture resumes when it's back."* | A phone call or Control Center took the camera. Capture pauses deliberately, because a frozen pose would place cubes in the wrong spot. | Nothing — tracking relocalises against the saved world map and already-placed cubes stay put. | | *"AR stopped: …"* with **Restart AR** and **Stop & save** | A fatal ARSession error, such as the camera becoming unavailable or tracking failing unrecoverably. | **Restart AR** begins a fresh AR session; **Stop & save** ends the survey normally. Readings collected so far are kept either way. | ## Long walks and hot phones Two guards keep a very long survey from degrading: - **Thermal backoff.** When iOS reports thermal pressure, ARRF slows its AP polling — **×2** at *serious* and **×4** at *critical* — and shows a `slowed ×2` or `slowed ×4` chip at the top of the screen. Cubes keep dropping, just further apart. Cooling the phone restores full rate on its own. - **A 20,000-reading ceiling.** Past 20,000 placed readings (roughly two hours of continuous capture), ARRF halves the set by keeping every other reading, newest always retained. Spatial coverage stays roughly uniform and the walk stays exportable; the survey is not truncated and does not stop. ## Stopping and saving Tap the red **Stop Survey** button to end. Stop also saves: - Every stopped survey with data is **auto-saved to the [History tab](https://docs.neuralconfig.com/arrf/survey/history/)**. - With **at least 3 cubes**, the [Results](https://docs.neuralconfig.com/arrf/survey/results-and-grading/) screen opens automatically. With fewer, you'll see a brief *"Saved to History (N cubes)"* note and can reopen it from History any time. A Stop with no cubes shows *"No readings captured — nothing saved"*. - If the save itself fails, a **"Survey not saved"** alert offers **Retry** or **Open anyway** — see [History and saved surveys](https://docs.neuralconfig.com/arrf/survey/history/#when-a-survey-cant-be-saved). ## Next steps - [Cube colors, labels, and detail](https://docs.neuralconfig.com/arrf/survey/cube-colors-and-labels/): What the cubes encode, and what tapping one shows you. - [What the phone measures](https://docs.neuralconfig.com/arrf/survey/experience-metrics/): How each Any Wi-Fi metric is measured, and its colour scale. - [Results and the survey grade](https://docs.neuralconfig.com/arrf/survey/results-and-grading/): The verdict, the grades, and the cards that open when you stop. - [History and saved surveys](https://docs.neuralconfig.com/arrf/survey/history/): Where every stopped survey lands, and how to reopen, rename, or delete it. --- # Cube colors, labels, and detail Source: https://docs.neuralconfig.com/arrf/survey/cube-colors-and-labels/ Each survey cube carries a lot of information. Its **fill colour** encodes a metric you choose; on a RUCKUS survey its **edge outline** identifies the **serving access point**; and it can spell out values as text when you're close. ## Which colour modes are there? ARRF has **21 colour modes** in two families: - **Measured by this phone** — 16 experience modes (latency, jitter, loss, call quality, speed and more). They work on any Wi-Fi and need no AP access. Their scales and how each is measured are on [What the phone measures](https://docs.neuralconfig.com/arrf/survey/experience-metrics/). - **Access point** — the 5 RF modes below. They need AP-side data, which comes from the RUCKUS vendor pack. On Any Wi-Fi, the optional RF Shortcut can add the phone's own signal to stop-and-sample cubes instead. Change the active mode from the **colour chip** in the survey HUD, or in **Settings → Display → Cube colors**. Existing cubes recolour instantly. The chip only lists modes the current survey can actually paint. ### Presets and "All metrics" Every colour menu (the HUD chip, the Results walk map, both floor-plan viewers) leads with three job-shaped **presets**, then an **All metrics** submenu with every mode the survey can paint, grouped as *Access point* and *Measured by this phone*: | Preset | Modes, most telling first | |---|---| | **Voice** | Call quality (MOS), Call quality under load, Internet call quality (MOS), Voice-class latency, Jitter | | **Data** | Download ↓, Upload ↑, Latency under load, Internet latency | | **RF** | Signal (dBm), SNR (dB), Downlink rate ↓, Band | The presets are ordered by your audience answer: **Home** lists Voice, Data, RF; **Professional** lists RF, Voice, Data. ### What's the default? The default colour follows the **Home or Professional?** answer. **Home** — also the default before you answer — starts on **Call quality (MOS)**; **Professional** starts on **Signal (dBm)**. If a survey can't paint the default (for example Signal on an Any Wi-Fi walk), the colour falls back to the first mode it can. ### RF modes and their thresholds | Mode | Cube fill shows | Colour scale | |---|---|---| | **Signal (dBm)** | Serving-AP-measured RSSI | Red→green ramp: Poor / Fair / Good / Excellent at −85 / −75 / −67 / −60 dBm | | **SNR (dB)** | AP-measured uplink signal-to-noise | Red→green ramp at 15 / 25 / 35 / 45 dB | | **Uplink rate ↑** | Achieved PHY rate, phone→AP | Red→green ramp at 50 / 200 / 450 / 900 Mbps | | **Downlink rate ↓** | Achieved PHY rate, AP→phone | Same rate ramp | | **Band** | Radio band | 2.4 GHz amber · 5 GHz teal · 6 GHz violet | All five RF modes are fed by the standard survey poll — none needs [deep RF stats](#deep-rf-stats). Band mode shows exactly where the phone holds 6 GHz and where it falls back. ## The legend The HUD shows a legend for the active mode. Ramp modes draw a red→green bar with the four grade names beneath and clamped end labels (for example `≤ −85` … `≥ −60 dBm`). Band mode draws coloured swatches. In **Signal** mode the AR view shows a per-AP outline-colour key instead — the AR-unique way to tell which cube belongs to which AP — with the roam count at the end. ## Cube labels Cubes label themselves by distance so a dense trail stays readable: - **Near** (within ~2 m) — the full set of fields you chose. - **Mid** (~2–5 m) — just the active colour metric's value. - **Far** (beyond ~5 m) — colour only, no text. A small white **band tag** (2.4 / 5 / 6) always rides in the corner of near and mid cubes. Choose the near-label fields in **Settings → Display → Cube label fields** — pick up to **four** of: **AP name**, **Signal (dBm)**, **SNR (dB)**, **Uplink rate ↑**, **Downlink rate ↓**. The default set is AP name, Signal, Uplink rate, and Downlink rate. These fields are AP-side readings, so they apply to RUCKUS surveys. ## Tap a cube for full detail Tap any placed cube to open its detail card. A cube with AP-side readings opens **Signal here**: - **Signal** — RSSI and SNR with grades, RSSI spread, and a note that these are how the AP hears the phone (uplink). - **Link** — uplink/downlink rates, band, channel and width, PHY, spatial streams, and MLO. - **Serving radio** — the AP's airtime-busy percentage and channel plan. A cube measured only by the phone opens **Experience here**, grouped as **Wi-Fi hop**, **Voice over Wi-Fi**, **Internet call**, **Internet**, **Throughput burst**, and **Network**. Each group lists only what that cube measured. ## Deep RF stats Turn on **Settings → AP signal → Deep RF stats per cube** to enrich each cube on the serving AP with extra radio detail — uplink SNR, PHY link rate, and MCS index/width/streams. These appear in the cube's **Uplink modulation** and **Radio PHY snapshot** detail sections, and land in the [export](https://docs.neuralconfig.com/arrf/tools/exports/). Deep stats are **off by default** because each cube costs one extra query to the AP. MCS is not a colour mode — it lives only in the tap-detail. ## Behind-wall occlusion (LiDAR) On a LiDAR iPhone, **Settings → Display → Behind walls** controls how cubes hidden behind detected walls are drawn: **Off** (walls ignored), **Hide** (fully occluded), or **Dimmed** (a faint ghost shows through so data stays visible while depth still reads). The default is **Dimmed**. On non-LiDAR devices this has no effect. ## Next steps - [What the phone measures](https://docs.neuralconfig.com/arrf/survey/experience-metrics/): Every phone-measured colour mode, how it's measured, and its thresholds. - [Running a survey](https://docs.neuralconfig.com/arrf/survey/running-a-survey/): The HUD the colour chip lives on, and the rest of the survey controls. - [AP locations and roaming](https://docs.neuralconfig.com/arrf/survey/ap-locations-and-roaming/): What the cube outline colour identifies, and where each AP is. - [Exporting reports and data](https://docs.neuralconfig.com/arrf/tools/exports/): Where the deep-stat columns land in the readings CSV. --- # AP locations and roaming Source: https://docs.neuralconfig.com/arrf/survey/ap-locations-and-roaming/ You place each access point in the AR scene by standing under it and pinning it; ARRF can also guess positions automatically, but that is off by default. As you walk, ARRF marks where your phone roamed between access points. You can also mark where you'd **add** an AP or mesh node. ## AP location signs With **AP location signs** on (**Settings → Display**, on by default), ARRF floats a sign in the AR scene at each AP you've **pinned**. AP pinning is part of a RUCKUS survey, where ARRF knows the APs it polls. **Automatic estimates are off by default.** Turn on **Settings → AP placement → Estimate AP locations automatically** to have ARRF guess unpinned APs from how their signal changes along your walk — a rough guide, often off by several metres. An estimate starts as a wide **"?"** halo and **tightens as more samples land**, recomputing as you walk. The demo always shows auto-estimated signs, since there's nothing to stand under. Tap a sign to open the AP card. Its **Location** section shows: - **Position** — the confidence, or "pinned by you" if you've pinned it. - **Uncertainty** — the estimate's radius (`± X.X m`). - **Samples** — how many readings from this AP fed the estimate. - **Path-loss n** — the fitted path-loss exponent. Uncertainty, Samples and Path-loss n apply only to an estimate, so they are hidden once the AP is pinned. If an AP has served no samples yet, the card says *"No samples from this AP yet — walk where it serves you."* ## How do I pin an AP? Stand under the AP and pin it in the **Place APs** sheet: 1. In the survey, tap the **Place APs** chip (map-pin icon) to open the placement sheet. An orange dot on the chip means no AP is placed yet. 2. Stand **directly under the AP**. 3. Tap **Pin here** on that AP's row. The pin takes its position from where you stand. Its **mount height** starts 10 cm below the **ceiling height** in **Settings → AP placement** (default **2.7 m**, so 2.6 m above the floor); adjust it per AP with the height stepper under the pinned row, in 10 cm steps. You can also pin from the AP card with **Pin AP here**. A manual pin overrides the auto-estimate. To remove it, tap **Clear** in the placement sheet, or **Clear manual pin** on the AP card. The AP card also carries **AP vitals** (per-radio airtime, TX power vs EIRP, client count, uptime, PoE), **Wiring** (switch, port, VLAN, and PoE from LLDP), and **Relationships** (channel and BSS-colour conflicts) — all read live from the AP over SSH. ## How do I mark where an AP or mesh node should go? Use **Proposed placements**, at the bottom of the same **Place APs** sheet. Stand where you'd add a device and tap **AP here** or **Mesh node here**. - Each proposal is named *Proposed AP 1*, *Proposed mesh node 1*, and so on; rename it, switch its kind, set its mount height, or remove it from its row. - Proposals are drawn **dashed** — in AR, on the [floor plans](https://docs.neuralconfig.com/arrf/survey/floor-plan/), and in the PDF — because they are a recommendation, not a measurement. - They need no RUCKUS pack: proposed placements work on an Any Wi-Fi walk too. ## Roam markers When your phone hands off from one access point to another mid-walk, ARRF records a **roam**. With **Roam markers** on (**Settings → Display**, or the HUD flag chip, on by default) it draws a labelled post at each handoff in the AR scene. Roams come from two places: - **AP-side roams** — on a RUCKUS survey, the APs report the phone moving between them. These feed the [RF grade](https://docs.neuralconfig.com/arrf/survey/results-and-grading/) as flagged roams. - **Phone-seen roams** — on any survey, ARRF notices when the access point (BSSID) the phone is connected to changes. The Results **Roaming** card counts them, flags **ping-pongs** (bounced straight back within 30 seconds), and reports the **longest interruption**: under 150 ms is *seamless for calls*, under 500 ms *a call would glitch*, and longer is *long enough to break up a call*. Reading the access point needs Location access; without it the card says roams weren't recorded. The HUD's roam count adds both kinds together. Roams are always **recorded and exported** even with the markers hidden — the toggle only affects what's drawn. Roaming events also feed the survey grade and the reports: see [Results and the survey grade](https://docs.neuralconfig.com/arrf/survey/results-and-grading/). ## Next steps - [Results and the survey grade](https://docs.neuralconfig.com/arrf/survey/results-and-grading/): How flagged roams feed the grade, and the roam card. - [Running a survey](https://docs.neuralconfig.com/arrf/survey/running-a-survey/): The Place APs chip and the rest of the AR HUD. - [LiDAR floor plan](https://docs.neuralconfig.com/arrf/survey/floor-plan/): Where pinned APs and dashed proposed placements appear after the walk. - [Identify My Phone](https://docs.neuralconfig.com/arrf/tools/find-my-device/): The one client whose roams are being tracked. --- # LiDAR floor plan Source: https://docs.neuralconfig.com/arrf/survey/floor-plan/ On a LiDAR-equipped iPhone, ARRF can reconstruct the space you walked as a **floor plan** and show it on the Results screen — an explorable **3D survey** at the top of the screen and a top-down 2D map further down, with the floor painted by your Wi-Fi measurements. ## Enable it Floor-plan reconstruction is controlled by **Settings → Survey & capture → Floor-plan reconstruction**, which is **on by default**. When it's off, the AR session runs the plain scene reconstruction and no mesh is captured or saved. Changes take effect on the **next** survey start. :::note[Needs LiDAR] Reconstruction uses the iPhone's LiDAR scanner. On non-LiDAR devices (and in the Simulator) no plan is produced — everything else in ARRF still works. ::: ## Generate a plan Just **run a survey with the toggle on** on a LiDAR iPhone. As you walk, ARRF captures the scene; when you tap **Stop**, it snapshots the LiDAR mesh and downsamples it (off the main thread, behind a brief *"Generating floor plan…"* overlay) into a compact surface. The plan then appears on the [Results](https://docs.neuralconfig.com/arrf/survey/results-and-grading/) screen as the **3D survey** card at the top and a **Floor plan** card further down. A plan is shown whenever the walk captured a surface — even a bare footprint with no readings is a legitimate result. ## What the plan shows ARRF renders the **sensed surfaces directly** (walls, doors, windows, floor, furniture) as a chunky voxel structure rather than guessing idealised room outlines. Key ideas: - **Structure is greyscale** — walls and fixtures are told apart by lightness, not colour, so colour is free for signal. - **The floor is the heatmap** — floor near your walk is **painted by the selected Wi-Fi metric**; floor you didn't cover stays neutral (honestly uncovered, not invented). - **Walk samples glow** — your readings render as glowing dots/cubes over the structure. - **Notes and proposals** — your [notes](https://docs.neuralconfig.com/arrf/survey/running-a-survey/#how-do-i-add-a-note-or-photo-to-a-spot) appear as numbered badges, and [proposed AP or mesh-node placements](https://docs.neuralconfig.com/arrf/survey/ap-locations-and-roaming/) are drawn **dashed**, never as a located AP. :::caution[Shape-true, not compass-true] The plan is built in the AR session's own frame, which has an arbitrary heading — so it is **shape- and scale-accurate but not oriented to true north**. A scale bar is the honest anchor; don't read compass bearings off it. ::: ## How do I explore the 3D survey? The **3D survey** card leads the Results screen and turns slowly on its own (a freshly stopped survey drops in from overhead first). Tap it, or its **Expand** label, to open it full screen. Full screen you see the sensed surfaces as greyscale voxel blocks, a translucent slab per detected level, the floor painted by the selected metric, and glowing sample cubes. AP signs appear as labelled posts with their uncertainty halos. **Drag to orbit, pinch to zoom.** The controls along the bottom: | Control | What it does | |---|---| | **Shade by** menu | Recolour the floor and cubes by another metric. | | Level switcher | Shown on multi-storey walks — see [Per-level split](#per-level-split). | | **Iso** / **Top** / **Side** | Jump the camera to an isometric, overhead, or side view. | | Walk path button | Show or hide the path you walked. | | **Replay** (play) | Replay the walk along that path. | | Legend button | Show or hide the colour legend. | The 3D view is SceneKit-based, so it renders from a saved survey too. ### Sharing the 3D view The share button in the full-screen title bar offers: - **Snapshot (PNG)** — the current view as an image. - **Video (MP4)** — a preset move (**Orbit**, **Fly-in**, or **Overhead spin**), or **Record your own move**: orbit, pinch and pan, then tap **Stop**; the move is smoothed. - **View in AR** — place the model in the room around you. - **3D model (USDZ)** — the model as a file. ### Ask your survey On a device with **Apple Intelligence** (iOS 26 or later), an **Ask your survey** panel in the full-screen 3D view turns a question — *"e.g. where is 5 GHz SNR under 25?"* — into a filter over your samples, and the matching samples are highlighted. Answers and numbers always come from your data. It needs **Settings → Experimental → Apple Intelligence features**, which is on by default; without Apple Intelligence the panel is hidden. ## 2D map The Floor plan card shows a top-down **column silhouette**. Tap it (expand glyph) to open the **full-screen 2D view** with pinch-to-zoom and pan. ## Per-level split If your survey climbed **more than one storey**, a segmented storey switcher appears: - **All** — all levels stacked. - **Lower** / **Upper** for two storeys (or **L1**, **L2**, … for three or more). Two storeys read as Lower and Upper because the walk may be any two floors, not necessarily the ground floor. The selected level is shared between the 3D survey, the inline 2D card, and the full-screen views. Single-storey surveys show no switcher. ## Export the plan Use the **Image** button on the Floor plan card to save the 2D plan as a PNG. Floor-plan pages (one per storey when multi-level) are also included in the [PDF report](https://docs.neuralconfig.com/arrf/tools/exports/). ## Next steps - [Results and the survey grade](https://docs.neuralconfig.com/arrf/survey/results-and-grading/): The screen the 3D survey and floor-plan card live on. - [Exporting reports and data](https://docs.neuralconfig.com/arrf/tools/exports/): Floor-plan pages in the PDF, and the PNG export. - [Running a survey](https://docs.neuralconfig.com/arrf/survey/running-a-survey/): The walk that captures the mesh in the first place. - [Settings reference](https://docs.neuralconfig.com/arrf/settings/): Where floor-plan reconstruction and behind-wall occlusion are set. --- # Results and the survey grade Source: https://docs.neuralconfig.com/arrf/survey/results-and-grading/ When you stop a survey with at least three cubes, ARRF opens the **Results** screen (also reopenable from any [History](https://docs.neuralconfig.com/arrf/survey/history/) row). It leads with a plain-language verdict, grades the walk, summarises it, and flags the weak spots. ## What the Results screen shows From top to bottom: - **3D survey** — when the walk captured a LiDAR surface, the [3D survey](https://docs.neuralconfig.com/arrf/survey/floor-plan/) leads the screen, slowly turning; tap it to explore full screen. - **Grade card** — an editable survey title, the date and cube count, then the **verdict**: one plain-language headline such as *"The Wi-Fi is the weak link, not the internet."* with a supporting sentence. The letter grade sits beside it only when **show letter grade** is on (see below). - On a survey with AP-side signal (the RUCKUS pack), the card also carries the connection-health score out of 100, a stat row (median dBm, coverage %, metres walked, roams), a grade breakdown, and a *"How this was measured"* scope note. - On a phone-measured survey (Any Wi-Fi), the card carries the [experience grade](https://docs.neuralconfig.com/arrf/survey/experience-grade/) and its breakdown instead. - **Experience** card — on a RUCKUS survey that also measured experience, the experience grade in its own card. - **Voice** and **Network policy** cards — the simulated-call results and the internet policy check, when measured. See [What the phone measures](https://docs.neuralconfig.com/arrf/survey/experience-metrics/). - **Rooms** — per-room ratings, when you tagged rooms. See [Rooms and sites](https://docs.neuralconfig.com/arrf/survey/rooms-and-sites/). - **Floor plan** — the [LiDAR reconstruction](https://docs.neuralconfig.com/arrf/survey/floor-plan/), if one was captured. - **Walk map** — a top-down minimap you can shade by metric. - On a RUCKUS survey: **Signal histogram**, **band shares**, a **roam card**, an **AP-share card**, and a **weakest-spots card**. - On an Any Wi-Fi survey: a **Roaming** card of roams seen by the phone, and an **access-point share** card. - On the demo: a **What a real survey tells you** card with a **Survey my Wi-Fi** button. ### Why is there no letter grade? The letter shows only when **show letter grade** is on. It follows the **Home or Professional?** answer: **Home** (also the default before you answer) hides the letter so the verdict leads alone; **Professional** shows it. You can change it in [Settings](https://docs.neuralconfig.com/arrf/settings/). ## How is the verdict chosen? The verdict is a fixed sentence picked from the experience Wi-Fi and internet subscores and the RF grade — no AI, so the same survey always reads the same way. A part that wasn't measured is never called good. The full list of headlines is on [The experience grade](https://docs.neuralconfig.com/arrf/survey/experience-grade/). ## What the RF grade measures The RF grade applies when the RUCKUS vendor pack supplied AP-side signal. ARRF grades **connection health**, not area coverage. Every signal value is read from the **serving AP over SSH** — how the AP hears *this phone* (the **uplink** direction). iOS exposes no downlink RSSI and no passive multi-AP scan to third-party apps, so the grade is honest about scope: it scores **one device's connection health and roaming as you walked**. Uplink is the conservative direction. ## How the score is calculated Each sample is scored against a **requirement** you set (and that is captured into every export), with these defaults following common WLAN design convention: | Target | Default | Meaning | |---|---|---| | **Primary** | −67 dBm | Full credit at or above this signal | | **Edge** | −72 dBm | Zero credit at or below; credit fades linearly between edge and primary | | **Min SNR** | 25 dB | Full credit at or above; credit fades linearly to zero **10 dB below** it (so 15 dB scores zero at the default) | The scoring is continuous — **no hard band cliffs** — and it deliberately can't average away a dead spot: 1. Each sample gets a 0–1 **signal quality** and a 0–1 **SNR quality**. 2. Each sub-score blends the **mean 50/50 with the worst-decile (10th-percentile) sample** — a **worst-decile gate**, so weak spots pull the score down. 3. The two sub-scores combine **60% signal + 40% SNR**, minus **8 points per flagged roam, counting at most 3** — so the roam penalty is capped at **24 points** and a survey **cannot fail on roams alone**. 4. The result is clamped to 0–100. A very long survey still grades the whole walk. Past 20,000 placed readings (roughly two hours of continuous capture) ARRF thins the set by keeping every other reading, newest always kept, so spatial coverage stays roughly even and nothing is cut off; the worst-decile gate still finds the weak spots. See [Long walks and hot phones](https://docs.neuralconfig.com/arrf/survey/running-a-survey/#long-walks-and-hot-phones). Both sub-scores are shown on the Results screen next to the letter, along with the percentage of samples meeting each target and the flagged-roam count, so the grade is always decomposable. :::note[Which dBm gets graded] Where the serving AP reported a real RSSI, that is the value scored. Where it didn't, ARRF grades the SNR-derived figure instead (`dBm = SNR + offset`, using the offset or true noise floor from **Settings → AP signal**). Changing the offset therefore changes the grade of a survey with SNR-derived readings. ::: The final 0–100 score maps to letters: | Grade | Score | |---|---| | **A** | ≥ 90 | | **B** | ≥ 75 | | **C** | ≥ 55 | | **D** | ≥ 35 | | **F** | below 35 | | **N/A** | fewer than **10** readings — too few to grade, not an F | A survey with fewer than 10 readings is **N/A**, not F; F is reserved for a genuinely-scored floor. The [experience grade](https://docs.neuralconfig.com/arrf/survey/experience-grade/) uses the same letters and the same 10-cube minimum. ## Weak spots The **worst-decile** effective dBm is the weak-spot indicator, and the in-app **weakest-spots card** keeps the three weakest samples (weakest first), ringed on the walk map. The [PDF report](https://docs.neuralconfig.com/arrf/tools/exports/) keeps up to ten. ## Flagged roams ARRF flags two kinds of problem handoff, and one roam can carry both: - **Weaker signal** — handed off to a *weaker* signal (SNR dropped 3 dB or more). - **Ping-pong** — bounced straight back to the AP it just left within **30 seconds**. The flagged-roam count drives the roam penalty in the grade and appears in the breakdown and the reports. Roams seen by the phone on an Any Wi-Fi walk are covered in [AP locations and roaming](https://docs.neuralconfig.com/arrf/survey/ap-locations-and-roaming/). ## Adjust the requirement The primary/edge/SNR targets live in **Settings → Grade requirement**. Because they're captured into each export, a report always states — and grades against — the requirement that was set when it was captured. Changing the targets does **not** re-grade surveys you already saved: each one keeps the requirement it was captured with, which is why an old report and a new one can disagree about the same floor. ## Next steps - [The experience grade](https://docs.neuralconfig.com/arrf/survey/experience-grade/): Profiles, targets, scoring and every verdict headline for phone-measured surveys. - [Exporting reports and data](https://docs.neuralconfig.com/arrf/tools/exports/): Turn this screen into a PDF site survey, CSVs, or raw JSON. - [History and saved surveys](https://docs.neuralconfig.com/arrf/survey/history/): Reopen, rename, or delete any graded survey. - [LiDAR floor plan](https://docs.neuralconfig.com/arrf/survey/floor-plan/): The 3D survey and reconstructed plan that appear on this screen. --- # History and saved surveys Source: https://docs.neuralconfig.com/arrf/survey/history/ You never have to remember to save. **Stopping a survey is the save** — any walk that recorded a reading or a roam lands in the **History** tab automatically, newest first, ready to reopen, grade, or export. ## How is History organised? Once you have at least one [site](https://docs.neuralconfig.com/arrf/survey/rooms-and-sites/), History shows **one section per site** (most recently used first), then **Unfiled** for surveys not filed under a site. Without any sites it is one plain list. A **search** field filters by site, client, or survey name. | Action | How | |---|---| | **Open** a survey | Tap the row. | | **File** it under a site | Swipe the row right (**Move**) or long-press it and pick **Move to site…**. | | **Delete** it | Swipe left, or long-press and pick **Delete**, then confirm. | | **Compare** two surveys | A site's **⋯** menu → **Compare surveys…**; the compare button on the Unfiled header; or **Compare** in the toolbar when you have no sites. See [Before and after compare](https://docs.neuralconfig.com/arrf/survey/before-after-compare/). | | **Rename** or **delete a site** | The site's **⋯** menu → **Rename site…** / **Delete site…**. Deleting a site keeps its surveys and moves them to Unfiled. | The demo can't be filed under a site. ## What a History row shows Each row is a summary, read from a lightweight index rather than the full survey document, so the list opens instantly however many surveys you have: | Element | What it is | |---|---| | **Thumbnail** | A miniature top-down walk map, its dots coloured by signal band. | | **Title** | Your custom name if you set one, otherwise the RUCKUS One venue name, otherwise *Demo survey* for the demo, *Experience walk* for a phone-measured survey, or *Manual survey*. | | **DEMO badge** | An orange tag on a simulated demo walk, so it can't pass for a real survey. | | **Subtitle** | Date and time, point count, and roam count. | | **Grade badge** | The letter grade, colour-coded, computed once when the survey was saved: the RF grade when the survey has one, otherwise the [experience grade](https://docs.neuralconfig.com/arrf/survey/experience-grade/). | Tap a row to open the same [Results](https://docs.neuralconfig.com/arrf/survey/results-and-grading/) screen the survey ended on — the full document is decoded in the background, so a very long walk takes a moment. ## How do I delete a survey? Swipe the row left (or long-press it and pick **Delete**). ARRF asks *"Delete this survey?"* first — *"Its readings, floor plan and report are removed from this device. This can't be undone."* — and only **Delete** removes the survey document from the device permanently. ## Rename a survey The title is edited on the **Results** screen, not in the list: open the survey and type over the name in the grade card header. Clearing it back to empty restores the default title (venue name, *Demo survey*, *Experience walk*, or *Manual survey*). A report you opened *without* saving it (see below) has no title field — there is nothing on disk to rename. ## Where surveys are stored Saved surveys live inside ARRF's own container on the iPhone: one JSON document per survey — byte-identical to the [JSON export](https://docs.neuralconfig.com/arrf/tools/exports/) — plus a small index file that backs the list. They are never uploaded anywhere, and deleting the app deletes them. :::note[History is per-device] Surveys do not sync between iPhones. To move one, share its [JSON or PDF](https://docs.neuralconfig.com/arrf/tools/exports/) from the Results screen. ::: ## When a survey can't be saved If writing the survey to storage fails — a full disk is the usual cause — ARRF does **not** discard the walk. A **"Survey not saved"** alert appears with the underlying reason and two choices: - **Retry** — attempt the write again. The survey is still held in memory, so a retry after freeing space usually succeeds. - **Open anyway** — skip saving and open the Results screen regardless, so you can still export the PDF, CSV, or JSON by hand before leaving the screen. :::caution[Open anyway is a one-shot] An unsaved report is in memory only. Once you dismiss it the walk is gone — export what you need before you close it. ::: ## When a saved survey won't open Tapping a row whose file is missing or damaged raises a **"Couldn't open survey"** alert rather than doing nothing: | Message | Meaning | |---|---| | *"This survey's file is missing from storage."* | The index still lists the survey but its document is gone. | | *"This survey's file is damaged and can't be opened."* | The document is present but can't be decoded. | The row stays in the list — ARRF never deletes a document it failed to read, so a file recovered from a backup still opens. Delete the row yourself once you're satisfied it's unrecoverable. ## Recovered surveys If the index file is lost or damaged, ARRF rebuilds it at launch by scanning the survey documents themselves, and re-grades each one it finds. The survey data — readings, roams, floor plan, grade, and the site it was filed under — is fully intact. The casualties are the **RUCKUS One venue name** and any **custom name** you typed, which live only in the index: a recovered survey shows its default title until you rename it. ## Next steps - [Results and the survey grade](https://docs.neuralconfig.com/arrf/survey/results-and-grading/): What opens when you tap a History row, and how the letter is calculated. - [Rooms and sites](https://docs.neuralconfig.com/arrf/survey/rooms-and-sites/): How sites group surveys and keep room names across re-walks. - [Before and after compare](https://docs.neuralconfig.com/arrf/survey/before-after-compare/): Put two surveys of one site side by side. - [Exporting reports and data](https://docs.neuralconfig.com/arrf/tools/exports/): Turn a saved survey into a PDF report, CSVs, or raw JSON. --- # What the phone measures Source: https://docs.neuralconfig.com/arrf/survey/experience-metrics/ On an **Any Wi-Fi** survey — and on a RUCKUS survey with **Measure experience** on — the iPhone itself times your network as you walk. It probes your **router** (the Wi-Fi hop you can fix), a nearby **test server** on the internet, and runs short **speed bursts**. Each cube summarises the probes from the **2 seconds** before it was placed. None of this needs access to the access points, so it works on any Wi-Fi from any vendor. These tests run on Wi-Fi only; if the phone drops off Wi-Fi, the survey pauses measuring until it's back. ## Which metrics are there, and how is each measured? | Metric (colour mode) | How it's measured | Needs internet tests | |---|---|---| | **Wi-Fi latency (p95)** | ICMP echoes to your router, 20 a second. The 95th-percentile round trip of the idle replies in the cube's window. If the router ignores ICMP, ARRF falls back to timing TCP connects. | No | | **Jitter** | The average change between consecutive idle router round trips. | No | | **Packet loss** | The share of idle router probes with no reply within 1 second. | No | | **Internet latency** | WebSocket echoes to the test server, 10 a second; the median round trip. | Yes | | **Download ↓** / **Upload ↑** | Short speed bursts against the test server, or a local iperf3 server if you set one. | Yes, unless you use local iperf3 | | **Latency under load** | The median router round trip for probes sent *during* a speed burst. | For the burst | | **Voice-class latency** | The median round trip on the simulated-call lane (WMM voice queue). | No | | **Call quality (MOS)** | A simulated call to your router, scored with the E-model — see [below](#how-is-call-quality-scored). | No | | **Call quality under load** | The same call score while a speed burst is running. | For the burst | | **Internet call quality (MOS)** | The same call frames sent end to end to the nearest Cloudflare edge. | Yes | | **DNS lookup** | One DNS query a second to the phone's own resolver; the median time. | No | | **Connection setup** | A fresh TCP + TLS connection to the test server, up to once a second; the median setup time. | Yes | | **Retransmissions** | From a speed burst: the worse of the upload's retransmitted share and the download's duplicate/out-of-order share. | For the burst | | **OS link quality** | iOS's own rating of the Wi-Fi link: *minimal*, *moderate*, or *good*. iOS 26 or later only. | No | | **Connected AP (BSSID)** | Which access point (BSSID) the phone was on — one colour per BSSID. Needs Location access. | No | Idle figures never include probes sent during a burst; those become the **under load** figures instead. :::note[Internet tests off] With **Internet tests** off, ARRF never contacts the test server: no internet latency, internet call quality, connection setup, or test-server speed bursts. Router tests and DNS still run, and a local iperf3 server still bursts. See [Internet tests and privacy](https://docs.neuralconfig.com/arrf/setup/internet-tests-and-privacy/). ::: ## How are speed bursts run? During a continuous survey ARRF runs a **1.5-second** burst about **every 5 seconds**, alternating download and upload; a hot phone bursts less often. In an Any Wi-Fi stop-and-sample capture, the phone measures for one window and runs a download and an upload burst before the cube drops. Bursts go to the default test server, or to a **local iperf3 server** set in **Settings → Experience**, which measures speed over your own network only, without the internet in the way. **Saturate (latency under load)** in the same settings keeps a transfer running instead, so every cube also measures latency under load; it uses more data and battery. ## How is call quality scored? The call test sends **50 packets a second** — one G.711-sized frame per 20 ms — to your router, marked for the **WMM voice queue**. ARRF scores it with the **ITU-T E-model** for **G.711** with packet-loss concealment, giving a **MOS** (mean opinion score) from the lane's delay, jitter and loss. | MOS | Label | |---|---| | 4.3 or more | Excellent | | 4.0 – 4.3 | Good | | 3.6 – 4.0 | Fair | | 3.1 – 3.6 | Poor | | below 3.1 | Bad | This score covers **this iPhone to your router** — the Wi-Fi hop — not an end-to-end call. **Internet call quality** sends the same frames to the nearest Cloudflare edge over a TCP WebSocket; any frame more than 60 ms later than the fastest ones counts as lost, as in a real call's jitter buffer. The Results **Voice** card also reports **Voice priority (WMM)**: it compares how much the voice lane and normal traffic slowed during the speed bursts. A failure means priority isn't kept somewhere between this phone and the router. ## What do the colours mean? Each metric paints cubes on a red → green ramp with four breakpoints, read as **Poor / Fair / Good / Excellent**. A value exactly on a breakpoint counts toward the better side. For lower-is-better metrics the breakpoints run downward. | Metric | Poor | Fair | Good | Excellent | |---|---|---|---|---| | Wi-Fi latency (p95), Voice-class latency | 100 ms | 50 ms | 20 ms | 10 ms | | Jitter | 20 ms | 10 ms | 5 ms | 2 ms | | Packet loss | 5 % | 2 % | 1 % | 0.5 % | | Internet latency | 150 ms | 80 ms | 40 ms | 20 ms | | Download ↓, Upload ↑ | 3 Mbps | 10 Mbps | 25 Mbps | 100 Mbps | | Latency under load | 200 ms | 100 ms | 50 ms | 25 ms | | Retransmissions | 10 % | 5 % | 2 % | 1 % | | Call quality, under load, Internet call (MOS) | 3.1 | 3.6 | 4.0 | 4.3 | | DNS lookup | 150 ms | 60 ms | 30 ms | 15 ms | | Connection setup | 400 ms | 200 ms | 100 ms | 50 ms | **OS link quality** and **Connected AP** are categories, not ramps: link quality runs minimal → moderate → good, and each access point gets its own colour. ## Which colour presets group these? The colour menus lead with three presets, then **All metrics**: | Preset | Modes | |---|---| | **Voice** | Call quality (MOS), Call quality under load, Internet call quality (MOS), Voice-class latency, Jitter | | **Data** | Download ↓, Upload ↑, Latency under load, Internet latency | | **RF** | Signal (dBm), SNR (dB), Downlink rate ↓, Band — AP data only | **Home** orders them Voice, Data, RF and starts cubes on **Call quality (MOS)**; **Professional** orders them RF, Voice, Data. See [Cube colors, labels, and detail](https://docs.neuralconfig.com/arrf/survey/cube-colors-and-labels/). ## Why did my cubes switch to Internet latency? If ARRF can't time your router — none was found, or it never answers (for example when Local Network access was declined) — every Wi-Fi-hop cube would be grey. So, once per walk, if the colour is **Wi-Fi latency**, **Jitter**, **Packet loss**, or **Voice-class latency**, ARRF switches it to **Internet latency**, which is still measured. ## Next steps - [The experience grade](https://docs.neuralconfig.com/arrf/survey/experience-grade/): How these metrics roll up into a letter and a plain-language verdict. - [Any Wi-Fi survey](https://docs.neuralconfig.com/arrf/setup/any-wifi-survey/): Start a phone-measured survey on any network. - [Internet tests and privacy](https://docs.neuralconfig.com/arrf/setup/internet-tests-and-privacy/): What the test server sees, and what turning internet tests off removes. - [Network test](https://docs.neuralconfig.com/arrf/tools/network-test/): Run the same measurements standing still, without a survey. --- # The experience grade Source: https://docs.neuralconfig.com/arrf/survey/experience-grade/ The **experience grade** scores what the phone measured against a **usage profile** — **Video calls** by default — and turns it into a 0–100 score, a letter, and a one-line **verdict** such as *"The Wi-Fi is the weak link, not the internet."* It weights the Wi-Fi hop **60%** and the internet path **40%**, so a slow internet provider isn't blamed on the Wi-Fi. It leads the Results screen on an Any Wi-Fi survey, and gets its own **Experience** card on a RUCKUS survey that also measured experience. The metrics it reads are described on [What the phone measures](https://docs.neuralconfig.com/arrf/survey/experience-metrics/). ## Which profiles are there, and what are their targets? Pick a profile from the **Profile** menu on the Experience card. Each profile sets a target per criterion; a criterion the profile doesn't list isn't part of its grade. | Criterion | Web | Streaming | Video calls *(default)* | Gaming | |---|---|---|---|---| | **Wi-Fi latency (p95)** | ≤ 50 ms | ≤ 50 ms | ≤ 30 ms | ≤ 20 ms | | **Jitter** | — | — | ≤ 20 ms | ≤ 10 ms | | **Packet loss** | ≤ 2 % | ≤ 1 % | ≤ 1 % | ≤ 0.5 % | | **Latency under load (Δ)** | — | — | — | ≤ 30 ms | | **Internet latency** | ≤ 150 ms | ≤ 200 ms | ≤ 100 ms | ≤ 50 ms | | **Download** | ≥ 5 Mbps | ≥ 25 Mbps | ≥ 3 Mbps | ≥ 10 Mbps | | **Upload** | ≥ 1 Mbps | — | ≥ 3 Mbps | — | **Latency under load (Δ)** is how much a cube's router round trip rose during a speed burst over its own idle round trip — or over the survey's median idle round trip when the cube has none. The first four criteria form the **Wi-Fi** subscore (the hop you can fix); the last three form the **Path** subscore (they include your internet provider and the test server). With **plain labels** on — the Home default — they read *Router delay*, *Delay wobble (jitter)*, *Lost packets*, *Delay when busy*, *Internet delay*, *Download speed*, and *Upload speed*. ### Does changing the profile change the survey? Choosing another profile **re-grades the survey on screen** — the score, letter, breakdown and verdict all follow. The survey keeps the profile and targets it was captured with, so reopening it later grades it exactly as it did when you stopped. New surveys are captured under **Video calls**. ## How is the score calculated? ```mermaid flowchart LR V[Each cube's value] --> Q[Quality 0-1
vs the profile target] Q --> C[Criterion score
50% mean + 50% worst decile] C --> W[Wi-Fi subscore
average of Wi-Fi criteria] C --> P[Path subscore
average of path criteria] W --> S[Score = 0.6 Wi-Fi + 0.4 Path] P --> S S --> L[Letter A-F
or N/A under 10 cubes] ``` 1. **Each cube gets a 0–1 quality per criterion.** Full credit at or better than the target, fading linearly to zero at **twice the target** for lower-is-better criteria (latency, jitter, loss, latency under load), or at **half the target** for download and upload. There are no band cliffs. 2. **Each criterion scores 0–100** as **50% the mean quality + 50% the quality of the worst-decile value** (the 90th-percentile value for lower-is-better criteria, the 10th percentile for speed), so a few bad spots can't be averaged away. 3. **Criteria average into two subscores**, **Wi-Fi** and **Path**. 4. **Score = 0.6 × Wi-Fi + 0.4 × Path**, clamped to 0–100. If only one family was measured, it is the score on its own. 5. The score maps to the same letters as the RF grade: **A** ≥ 90, **B** ≥ 75, **C** ≥ 55, **D** ≥ 35, **F** below. :::note[Not measured is never zero] A criterion no cube measured is listed — *"Not measured: … — excluded from the grade."* — and left out, never scored as zero. When a whole family is missing, the card says *"Wi-Fi hop not measured — graded on the internet path alone."* or *"Internet path not measured — graded on the Wi-Fi hop alone."* ::: ### When is a survey N/A? The grade needs at least **10 cubes** with experience measurements and at least one measured criterion. Otherwise it's **N/A**, not F, with the reason: *"Experience not measured"*, *"No video calls criteria measured"* (named after the profile), or *"Too few readings to grade (N of 10 needed)"*. ### What else does the card show? Each criterion row shows its score, median, worst 10%, target, the share of cubes meeting the target, and the cube count. **Worst spots** lists up to three cubes with the lowest average quality, naming the criterion that dragged each one down. **How experience was measured** opens the methodology note. The letter itself shows only when **show letter grade** is on; the Home default hides it and lets the verdict lead. ## What does the verdict say? The verdict is a fixed sentence — no AI — chosen from the Wi-Fi and Path subscores and, on a RUCKUS survey, the RF grade. A subscore **below 75** (under a B) counts as weak. A part that wasn't measured is never called good. | Situation | Headline | |---|---| | Wi-Fi and internet both weak | *Both the Wi-Fi and the internet connection are holding things back.* | | Wi-Fi weak, internet fine | *The Wi-Fi is the weak link, not the internet.* | | Wi-Fi weak, internet not tested | *The Wi-Fi is the weak link.* | | Internet weak, Wi-Fi fine | *The Wi-Fi is fine; the internet connection is the weak link.* | | Internet weak, Wi-Fi not tested | *The internet connection is the weak link.* | | Experience fine, RF coverage weak | *Works today, but coverage is thin in places.* | | Everything fine | *Wi-Fi and internet both look good.* | | Wi-Fi fine, internet not tested | *The Wi-Fi looks good.* | | Internet fine, Wi-Fi not tested | *The internet connection looks good.* | | RF only, coverage weak (score under 55) | *Coverage is weak across much of the space.* | | RF only, coverage weak (55–74) | *Coverage is thin in places.* | | RF only, coverage fine | *Signal coverage meets the target.* | The supporting sentence says what's dragging it down — *"Mainly Wi-Fi delay."*, *"Talk to the internet provider."*, *"Fix the Wi-Fi first …, then check with the internet provider."*, or *"Only N% of spots reach −67 dBm."* — and names anything untested, such as *"The internet connection wasn't tested."* An RF-only survey always adds *"The connection itself wasn't tested."* Two clauses can be appended: - *"Worst in Kitchen."* — the weakest rated [room](https://docs.neuralconfig.com/arrf/survey/rooms-and-sites/), when the weak link is in the building (the Wi-Fi or coverage), never for an internet problem. - *"QUIC/UDP blocked — calls and video may suffer."* — whenever the network policy check found QUIC or all UDP blocked. When nothing could be graded there is no verdict. ## Next steps - [What the phone measures](https://docs.neuralconfig.com/arrf/survey/experience-metrics/): How each criterion is measured, and its colour scale. - [Results and the survey grade](https://docs.neuralconfig.com/arrf/survey/results-and-grading/): The rest of the Results screen, and the RF connection-health grade. - [Rooms and sites](https://docs.neuralconfig.com/arrf/survey/rooms-and-sites/): Per-room ratings, and where the verdict's worst room comes from. - [Before and after compare](https://docs.neuralconfig.com/arrf/survey/before-after-compare/): Grade two walks of one site against the same profile. --- # Rooms and sites Source: https://docs.neuralconfig.com/arrf/survey/rooms-and-sites/ **Rooms** answer "how's the kitchen?": tag cubes with a room as you walk and Results rates each room **Good**, **Fair**, or **Poor**. **Sites** answer "which building was this?": file surveys under a site so History groups them and a re-walk reuses the same room names. Both are optional. ## How do I tag cubes with a room? Use the large **Room** control in the survey HUD (*Room: none* until you pick one). Every cube and note placed after that carries the room, until you change it. The menu offers: | Section | What's in it | |---|---| | **This site** | The rooms the filed site already knows. | | **This walk** | Rooms you've used earlier in this walk that the site doesn't have yet. | | **Suggestions** | Living room, Kitchen, Dining room, Bedroom, Bathroom, Office, Hallway, Basement, Garage, Patio, Pool, Outdoor — minus any already listed. | | **New room…** | Type a name. *"Cubes and notes from here on are tagged with this room."* | | **No room** | Stop tagging (shown while a room is set). | A typed or suggested name that matches a room the site already has — ignoring case, accents and extra spaces — reuses that room rather than creating a duplicate. That shared identity is what [before and after compare](https://docs.neuralconfig.com/arrf/survey/before-after-compare/) matches rooms on. ## What does the Rooms card on Results show? When the walk tagged at least one room, Results shows a **ROOMS** card with one line per room: its score, a rating chip, and the figures a client asks about — sample count, Wi-Fi latency p95, call MOS, internet call MOS, median download, median signal (and whether the AP or this iPhone measured it), and roams. Cubes without a room are counted as *"N samples not in a room."* The PDF report carries the same rooms. | Rating | Room score | |---|---| | **Good** | 75 or more | | **Fair** | 55 – 74 | | **Poor** | below 55 | | **Too few** (*Not enough samples*) | fewer than 3 cubes in the room | A room's score uses the same method as the whole survey on just that room's cubes: the [experience score](https://docs.neuralconfig.com/arrf/survey/experience-grade/) (Wi-Fi 60 % / path 40 %) when experience was measured, otherwise the RF connection-health core (signal 60 % / SNR 40 %). Rooms are small, so there's no 10-cube minimum — only the 3-cube floor. ### How do I fix a mis-tagged room? Tap **Edit** on the Rooms card (saved surveys only) to open **Edit rooms**. Select samples, then use **Move N samples to…** to send them to another room, a **New room…**, or **No room**. **Rename** a room from its section. Tap **Save** to rewrite the survey, or **Cancel**. ### Where does "Worst in …" come from? When the [verdict](https://docs.neuralconfig.com/arrf/survey/experience-grade/#what-does-the-verdict-say) says the weak link is the Wi-Fi or coverage, it appends the weakest rated room that isn't Good — for example *"Worst in Kitchen."* It never names a room for an internet-provider problem. ## How do I file a survey under a site? Use the **Site** card in the Survey lobby, under *Where*. It shows *Untitled (Unfiled)* until you choose; the demo is never filed, so the card is hidden for it. Tap it to open the site picker: - **New site…** — enter a **Site name** and an optional **Client**, then **Create and use**. - **No site (Unfiled)** — file nothing. - **Recent** — your sites, most recently used first, each with its client, room count, and when it was last used. - **Search** — *Search sites or clients*. A site groups every survey of one place — a client office, a home — and keeps the rooms its surveys used, so the next walk's Room menu lists them under **This site**. You can also file or re-file a saved survey later from History with **Move to site…**. ## How do sites show up in History? Once you have a site, [History](https://docs.neuralconfig.com/arrf/survey/history/) shows one section per site, most recently used first, then **Unfiled**. Each site's **⋯** menu offers **Compare surveys…**, **Rename site…**, and **Delete site…**; deleting a site keeps its surveys and moves them to Unfiled. ## Next steps - [Before and after compare](https://docs.neuralconfig.com/arrf/survey/before-after-compare/): Compare two walks of one site, room by room. - [History and saved surveys](https://docs.neuralconfig.com/arrf/survey/history/): Site sections, Unfiled, search, and moving surveys between sites. - [The experience grade](https://docs.neuralconfig.com/arrf/survey/experience-grade/): The scoring each room's rating reuses, and the verdict. - [Running a survey](https://docs.neuralconfig.com/arrf/survey/running-a-survey/): The HUD the Room control lives on. --- # Before and after compare Source: https://docs.neuralconfig.com/arrf/survey/before-after-compare/ **Compare** puts two surveys of one place side by side, so you can show what a change — moving a mesh node, adding an AP, a new router — actually did. Walk the space before the change and again after it, then compare the two from History. **The older survey is always Before.** ## How do I open Compare? From the [History](https://docs.neuralconfig.com/arrf/survey/history/) tab: - **Filed under a site** — open the site's **⋯** menu and tap **Compare surveys…**. - **Unfiled surveys** — tap the compare button (two arrows) on the Unfiled section header; it appears once Unfiled holds two or more surveys. - **No sites at all** — tap **Compare** in the toolbar; it appears once you have two or more surveys. Compare picks the two newest surveys to start. Change either with the **Before** and **After** pickers. Whichever way round you pick them, the older walk is treated as Before. With fewer than two surveys you'll see *"Compare needs two surveys"*. :::tip[Two surveys on the trial] The free trial includes enough surveys for a before and an after. See [Free trial and unlock](https://docs.neuralconfig.com/arrf/setup/free-trial-and-unlock/). ::: ## What's compared? | Section | What it shows | |---|---| | **Headline** | One sentence such as *"Better overall: C → B · 2 rooms better."*, with the Before and After grade tiles (letters shown only when **show letter grade** is on) and the score change. | | **Key numbers** | Points; median signal; Wi-Fi hop call MOS and Internet call MOS (with the worst tenth); roams; longest roam gap; and voice priority for download and upload, when measured. | | **Rooms** | Each room's rating and score, before → after, with the change. Rooms are matched by their saved identity, else by name. Rooms only in the after walk read *new*; rooms only in the before walk read *not walked*. | | **Signal distribution** | The two signal histograms overlaid — only when both walks carried AP-side signal. | | **Experience** | Each experience criterion on both sides, graded with the after survey's profile. | The section ends with a methodology note. ## How does Compare decide "better" or "worse"? - **Each survey is graded exactly as in its own report.** The two letters are compared only when both were graded the same way — both by the signal grade, or both by the [experience grade](https://docs.neuralconfig.com/arrf/survey/experience-grade/). Otherwise the headline says they were *graded differently*. - **One yardstick for experience.** Both sides use the **after** survey's profile, so a changed profile never reads as a changed network. - **A change must beat the noise.** A score must move by more than **5 points**, a call MOS by more than **0.2**, median signal by more than **3 dB**, and the longest roam gap by more than **100 ms**. Smaller moves read as *about the same*, because two walks of one space never take the same path. :::note[No spatial difference map] Each walk has its own AR coordinate frame, so Compare can't overlay the two walks spot by spot. **Rooms** are the join — tag rooms on both walks, filed under the same [site](https://docs.neuralconfig.com/arrf/survey/rooms-and-sites/), for a room-by-room comparison. ::: ## How do I share the comparison? Tap **PDF** in the Compare toolbar to build a before / after PDF report and share it. It uses your report branding, and shows letters only when both **show letter grade** and the PDF letter-grade setting are on. ## Next steps - [Rooms and sites](https://docs.neuralconfig.com/arrf/survey/rooms-and-sites/): Tag rooms and file both walks under one site so they compare room by room. - [History and saved surveys](https://docs.neuralconfig.com/arrf/survey/history/): Where the Compare entry points live. - [The experience grade](https://docs.neuralconfig.com/arrf/survey/experience-grade/): The profile and scoring both sides are graded with. --- # Exporting reports and data Source: https://docs.neuralconfig.com/arrf/tools/exports/ Every survey can be shared as a report or raw data. Open a survey's [Results](https://docs.neuralconfig.com/arrf/survey/results-and-grading/) screen — freshly stopped, or reopened from [History](https://docs.neuralconfig.com/arrf/survey/history/) — and tap the **share** icon at the top left for the export menu. The floor-plan image is shared from the Floor plan card instead, and the 3D view has its own share menu. On a long walk the screen briefly shows *"Preparing report…"* while it builds the analysis, walk map, and floor plans in the background. Each deliverable is named after the survey title and date, for example `Warehouse survey 2026-07-22`. ## What's in the share menu? | Menu item | File | When it appears | |---|---|---| | **Share PDF report** | ` <date> report.pdf` | Always | | **Share JSON** | `<title> <date>.json` | Always | | **Share CSV** | `<title> <date> readings.csv` | Always | | **Share roams CSV** | `<title> <date> roams.csv` | At least one roam was recorded | | **Share probe timeline CSV** | `<title> <date> experience timeline.csv` | The survey measured experience | | **Share throughput bursts CSV** | `<title> <date> bursts.csv` | Experience was measured and at least one speed burst ran | | **Share network policy CSV** | `<title> <date> network policy.csv` | Experience was measured and the network policy checks ran | Characters that would break a filename are replaced with `-`, and an empty title falls back to `survey`. ## PDF site-survey report **Share PDF report** builds a multi-page, **vector** PDF (selectable text, small files). The cover reads **Wi-Fi Site Survey Report** when the survey measured AP signal, or **Wi-Fi Experience Walk Report** for a phone-measured [Any Wi-Fi survey](https://docs.neuralconfig.com/arrf/setup/any-wifi-survey/). Pages appear in this order, each only when it has something to show: | Page | When it appears | |---|---| | **Cover** — title, venue, date, the verdict, the letter **grade** and score (if letter grades are on), the requirement line, and headline stats (points, roams, metres walked) | Always | | **Summary** — a stat grid (connection health, median signal, signal/SNR ≥ target %, sub-scores, distance walked, roams, weakest decile), the signal histogram, band shares, and median link rate | The survey measured AP signal | | **Experience** — the phone-measured results, call quality, and network policy | The survey measured [experience](https://docs.neuralconfig.com/arrf/survey/experience-metrics/) | | **Rooms** — per-room ratings, 26 rows a page | Cubes were tagged with [rooms](https://docs.neuralconfig.com/arrf/survey/rooms-and-sites/) | | **3D overview** — one still of the 3D survey | The walk captured surfaces | | **Floor plan** — one page per storey for a multi-level survey | A [plan](https://docs.neuralconfig.com/arrf/survey/floor-plan/) was captured | | **Walk map** — the top-down minimap | A walk map exists | | **AP breakdown** — per-AP table: samples, share %, median dBm, median SNR, worst dBm, and bands; 26 rows a page | The survey measured AP signal | | **Weakest points** — up to the ten weakest samples | The survey measured AP signal | | **Roams** — every handoff with "before → after" and its flag | The survey measured AP signal | | **Notes** — your site notes, with photos | You added notes | | **Methodology** — the scope disclosure, the graded-against targets, and the ARRF version and date | Always | The page count varies with the survey. A *"Generating report…"* overlay counts the pages as it renders. A [before / after comparison](https://docs.neuralconfig.com/arrf/survey/before-after-compare/) exports its own PDF, with a comparison summary and per-room pages. :::note[Executive summary on Apple Intelligence devices] Where Apple Intelligence is available and **Apple Intelligence features** is on in Settings, **Share PDF report** first opens a **PDF report** sheet. It can draft an optional **Executive summary** — a short paragraph printed on the cover, drafted from the survey's computed results only and labelled AI-drafted. Edit it, then choose **Export PDF with summary** or **Export without summary**. ::: ## CSV — readings **Share CSV** writes one row per placed sample. Columns are only ever appended, so existing positions hold: `placedAt, tickObservedAt, servingAP, servingHost, apIP, host, band, snr, dbm, rssi, minRSSI, maxRSSI, rssiSpread, channel, channelWidthMHz, phyFamily, noiseFloor, idleSeconds, x, y, z, uncertaintyRadius, txRateMbps, rxRateMbps, deepUplinkSnrDB, deepPhyRateMbps, deepMcsIndex, deepMcsWidthMHz, deepMcsNSS, effectiveDbm, gwRttMedianMs, gwRttP95Ms, jitterMs, lossPct, edgeRttMs, downMbps, upMbps, loadedRttMs, bssid, ssid, apVendor, linkQuality, retransPct, dupOooPct, voiceRttMs, otherTrafficBytes, callMos, callMosLoaded, voiceJitterMs, voiceLossPct, voiceMaxLossRun, voiceLoadedRttMs, dnsMs, connectSetupMs, clientRssi, clientNoise, clientChannel, rssiSource, netCallMos, netCallMosLoaded, netCallRttMs, netCallJitterMs, netCallLossPct` | Columns | What they hold | |---|---| | `placedAt` … `rxRateMbps` | AP-side RF for the cube. `dbm` is derived from SNR. | | `deep*` | Populated only when [Deep RF stats per cube](https://docs.neuralconfig.com/arrf/survey/cube-colors-and-labels/#deep-rf-stats) was on. | | `effectiveDbm` | The signal value the grade and every map actually use: AP-measured RSSI when present, else the SNR-derived estimate. | | `gwRttMedianMs` … `netCallLossPct` | Phone-measured [experience](https://docs.neuralconfig.com/arrf/survey/experience-metrics/); blank on RF-only cubes. | | `rssiSource` | Which side the cube's signal number came from: `ap` or `phone`. | ## CSV — roams **Share roams CSV** appears only when the survey recorded at least one roam. One row per handoff: `timestamp, fromAP, fromHost, toAP, toHost, snrBefore, snrAfter, x, y, z` ## CSV — experience data Three more CSVs carry the raw data behind every experience figure, so a reviewer can re-derive the numbers: | Menu item | Header | |---|---| | **Share probe timeline CSV** | `probe,sentAt,rttMs,inBurst` (blank `rttMs` = no reply) | | **Share throughput bursts CSV** | `id,direction,start,end,bytes,mbps,backend,retransPct,dupOooPct,srttMs` | | **Share network policy CSV** | `check,status,detail` | ## JSON **Share JSON** exports the full survey export as a single `.json` file — the complete record ARRF itself stores. ## Can I view a survey in a browser? **Yes — open the JSON export in the web viewer at [arrf.neuralconfig.com](https://arrf.neuralconfig.com).** Export the survey as JSON from its Results, then drop the file onto the page (or use **Choose a file**). The file is read in your browser and never uploaded. ## Floor-plan image and 3D exports On the **Floor plan** card, the **Image** button saves the 2D plan as a PNG. The 3D view's share menu adds a snapshot PNG, an MP4 video, **View in AR**, and a USDZ 3D model — see [LiDAR floor plan](https://docs.neuralconfig.com/arrf/survey/floor-plan/). ## Brand the report Fill in **Settings → Report branding**: - **Company** — stamped on the cover and footer ("Prepared by"). - **Engineer** — the preparer's name. - **Contact** — a phone, email or website line on the cover. - **Add logo** — your logo replaces the ARRF mark on the PDF (without a logo, your company name does). A PNG with a transparent background prints best. Leave any of them blank to omit it. To hand a client the verdict and scores without a letter, turn off **Letter grade in PDF report** under **Settings → Using ARRF for**. ## Next steps - [Results and the survey grade](https://docs.neuralconfig.com/arrf/survey/results-and-grading/): The screen every export is shared from, and what the numbers mean. - [History and saved surveys](https://docs.neuralconfig.com/arrf/survey/history/): Reopen an old survey to export it again. - [LiDAR floor plan](https://docs.neuralconfig.com/arrf/survey/floor-plan/): The plan pages in the PDF, the PNG export, and the 3D share menu. - [Settings reference](https://docs.neuralconfig.com/arrf/settings/): Report branding, and the grade requirement stamped into every export. --- # Identify My Phone Source: https://docs.neuralconfig.com/arrf/tools/find-my-device/ **Identify My Phone** was formerly called **Find my device**. A survey with RUCKUS APs follows **one** Wi-Fi client: your iPhone. **Identify My Phone** works out which client in your APs' tables is actually this phone, so the survey and the signal readout track the right device. Open it from **Settings → Integrations → RUCKUS → My device → Identify My Phone**, from the **Identify my phone** button in the Survey lobby, or from the **Identify** button on the banner the AR view raises mid-survey. It needs APs first — a RUCKUS One venue or manual AP IPs — because it searches their client lists. ## Three ways to confirm ARRF tries the strongest method available and lets you fall back: 1. **IP auto-match** *(silent, highest confidence)* — ARRF matches your iPhone's own Wi-Fi IPv4 against the APs' IP-to-MAC tables. When it matches, it confirms outright with *"Matched by your IP address"* — no waving needed. This needs the phone to be on the same subnet the APs serve. 2. **Pick from the list** — ARRF shows every client the APs currently see, asks *"Which one is you?"*, and highlights the likely candidate. Each row carries its serving AP, band, signal, and whether it is **active now** or idle, and flags iOS randomised **private addresses**; a `NEW` badge marks a client that appeared during the scan and `CURRENT` marks the saved target. Tap the one that's you, then choose **Confirm with a wave test** or **Use without confirming**. 3. **Wave to confirm** — hold the phone and swing it side to side. ARRF correlates the wave against the per-reading signal wiggle the AP measures and returns **Found you** or **Not confirmed**. The prompt reads *"Wave your phone side to side until this fills."* ## Why the target can go stale iPhones default to a **randomised ("private") Wi-Fi address** per network. Identify My Phone happily targets it — but if iOS is set to rotate the address (or you roam), the saved target can go stale and readings stop. ARRF notices: when the target vanishes from every AP while polls keep landing, the AR view raises an orange banner reading *"Can't see your phone — its private address may have rotated."* with an **Identify** button that reopens this flow without ending the survey. Cubes already placed are kept. You can also type the MAC by hand under **Settings → Integrations → RUCKUS → My device → Advanced**, but the guided flow is the reliable path. ## Limits - **IP auto-match** works only when the phone is on the same subnet the APs' tables cover; otherwise ARRF falls back to the wave. - **Waving** needs real device motion — it isn't available in the iOS Simulator. - If more than one device moves during a wave, ARRF asks you to *"hold others still and try again."* - The wave/IP match runs over SSH against reachable APs; it isn't part of the [demo](https://docs.neuralconfig.com/arrf/setup/demo-mode/). - An [Any Wi-Fi survey](https://docs.neuralconfig.com/arrf/setup/any-wifi-survey/) measures from the phone itself and doesn't need it. ## Next steps - [Running a survey](https://docs.neuralconfig.com/arrf/survey/running-a-survey/): The walk itself — capture modes, the AR HUD, and what Stop saves. - [AP locations and roaming](https://docs.neuralconfig.com/arrf/survey/ap-locations-and-roaming/): Where the APs are, and how handoffs of this device are recorded. - [Connecting to your RUCKUS APs](https://docs.neuralconfig.com/arrf/setup/connecting-your-aps/): The SSH connection Identify My Phone runs over. - [Troubleshooting](https://docs.neuralconfig.com/arrf/troubleshooting/): Every Identify My Phone message and what to do about it. --- # Toolbox utilities Source: https://docs.neuralconfig.com/arrf/tools/toolbox/ The **Toolbox** tab holds **eleven tools**. One, **Network Test**, measures this iPhone's own Wi-Fi on any network and needs no access-point login. The other ten are diagnostics for the RUCKUS APs you administer: they come with the free **RUCKUS vendor pack**, read live APs **over SSH**, and **nine of the ten only read** — they run `get` commands and change nothing on the AP. **Packet capture is the one exception:** [Packet capture](https://docs.neuralconfig.com/arrf/tools/packet-capture/) puts one radio into capture mode for a few seconds (`set capture wifiN …`), then returns it to idle. Nothing is saved to the AP's configuration and the radio is always released — but it is a change to a live radio, so treat it as an active tool rather than a read. The other nine RUCKUS tools never issue anything but reads. No tool anywhere in ARRF writes AP *configuration*: there is no way to change a channel, a power level, an SSID, or any other setting from the app. ## Do I need the trial or an unlock? **Yes — every Toolbox tool is new work, so it needs the free trial or the one-time unlock.** Before the trial starts or after it ends, the tools are greyed out and the top of the tab shows a button: | Entitlement | Button | |---|---| | Trial not started | **Start the free trial to use Toolbox** | | Trial ended, nothing unlocked | **Unlock ARRF to use Toolbox** | The line under the button shows your trial status (for example *"Free trial: 14 days or 3 surveys"*). **See sample results** stays open either way. See [Free trial and unlock](https://docs.neuralconfig.com/arrf/setup/free-trial-and-unlock/). ## Which tool works on any Wi-Fi? **Network Test**, listed under **Any Wi-Fi** at the top of the tab. It times this phone's router, the internet edge, a simulated call, and speed bursts — no AP access. It shows while **Experience tests** are on in Settings (the default). See [Network Test](https://docs.neuralconfig.com/arrf/tools/network-test/). ## What do the RUCKUS tools need? Every RUCKUS tool needs at least one **reachable AP over SSH**. The APs come from either a selected [RUCKUS One venue](https://docs.neuralconfig.com/arrf/setup/ruckus-one-account/) or [manual AP IPs](https://docs.neuralconfig.com/arrf/setup/connecting-your-aps/) — either source works; RUCKUS One is not required. With no gear set up, the tools fold away behind a **RUCKUS tools** section: | Control | What it does | |---|---| | **Add RUCKUS gear** | Opens the Settings tab, where the RUCKUS pack lives under **Integrations**. | | **See sample results** | A gallery of bundled screenshots of the tools in use. | | **Show RUCKUS tools** | Unfolds the tool list anyway. Its default follows your *Using ARRF for* answer: off for **Home**, on for **Professional**. | Once a venue or manual APs are set, a **Connected** note replaces that section and the tools always show. :::note[No demo here] Unlike the [Survey](https://docs.neuralconfig.com/arrf/setup/demo-mode/) tab, the Toolbox has **no simulated mode** — its RUCKUS tools read real APs. ::: ## What are the RUCKUS tools? Tools come in two shapes: **fleet** tools run across every connected AP at once; **per-AP** tools ask you to pick one AP first (or go straight in if there's only one). ### Health & infrastructure | Tool | Shape | What it does | |---|---|---| | **Health check** | Per-AP | Read-only triage of one AP — power, uplink, addressing, reachability, SSIDs, stability — graded pass/warn/fail; tap a check for the raw output. (~20 seconds.) | | **Fleet stability** | Fleet | Uptime, panics, recovery boots, flash wear, and silent uplink flaps across every AP. | | **Wire & power map** | Fleet | Per-AP switch, port, VLAN, and PoE draw; flags uplink single points of failure, VLAN mismatches, and slow links. | | **Path & DNS doctor** | Fleet | Pings the gateway and internet, times DNS, and traces the path — answering "is it the Wi-Fi or the uplink?" | ### Airwaves & clients | Tool | Shape | What it does | |---|---|---| | **Clients** | Fleet | Every client the APs see — signal, band, link rate, learned IP — with a deep read on tap. | | **RF advisor** | Fleet | Every radio's channel, measured airtime, and TX power; co-channel conflicts flagged. | | **Relationship web** | Fleet | Which APs hear each other, contend on a channel, or share a BSS colour. | | **Rogue radar** | Fleet | Neighbouring networks and flagged threats from the APs' intrusion-detection tables. | ### Per-AP deep dive | Tool | Shape | What it does | |---|---|---| | **Radio scope** | Per-AP | One AP's radios up close — rate/error histograms, per-antenna signal, airtime, latency. | | **Packet capture** | Per-AP | A 3–30 second capture on one radio, pulled back over TFTP and analysed on the device. The one tool that changes radio state — see [Packet capture](https://docs.neuralconfig.com/arrf/tools/packet-capture/). | ## Next steps - [Network Test](https://docs.neuralconfig.com/arrf/tools/network-test/): The any-Wi-Fi tool — router latency, call quality, internet edge, policy checks, and speed. - [Packet capture](https://docs.neuralconfig.com/arrf/tools/packet-capture/): The one Toolbox tool with real setup — radio, window, filters, and what it does to the AP. - [Connecting to your RUCKUS APs](https://docs.neuralconfig.com/arrf/setup/connecting-your-aps/): AP IPs, passwords, and the SSH host-key trust the Toolbox uses too. - [Troubleshooting](https://docs.neuralconfig.com/arrf/troubleshooting/): Rejected logins, unreachable APs, a locked Toolbox, and captures that never arrive. --- # Packet capture Source: https://docs.neuralconfig.com/arrf/tools/packet-capture/ **Packet capture** records raw 802.11 frames on one AP radio for a few seconds, pulls the pcap back to the iPhone over TFTP, and analyses it on the device. It is the deepest tool in the [Toolbox](https://docs.neuralconfig.com/arrf/tools/toolbox/) — and the only one that changes anything on the access point. **This one is not read-only:** Packet capture puts the chosen radio into capture mode for the window you set, then returns it to idle. Nothing is written to the AP's configuration and the radio is **always** released — on success, on failure, and if you leave the screen — but a live radio is briefly in a different mode, so pick your moment on a production AP. ## What happens, step by step ```mermaid sequenceDiagram participant P as iPhone (ARRF) participant A as RUCKUS AP P->>P: open TFTP receiver on UDP 69 P->>A: SSH connect (rkscli) P->>A: get channel wifiN P->>A: set capture wifiN idle (clean slate) P->>A: set capture wifiN local[-no...] [mac] Note over A: radio captures for 3-30 s P->>A: set capture wifiN idle (release) P->>A: get capture wifiN copy tftp <phone IP> arrf-wifiN.pcap A-->>P: pcap over TFTP P->>A: set capture wifiN idle (belt and braces) P->>P: analyse the pcap on device ``` In words: ARRF opens a TFTP receiver on the iPhone, connects to the AP over SSH, reads the radio's channel for context, idles the radio to start from a clean state, begins the capture, counts down your window, stops the capture, and asks the AP to TFTP the file back. The pcap is analysed entirely on the phone. The radio is idled again on the way out, and again on any error path, so a failed capture never leaves a radio capturing. ## Run a capture 1. **Open Toolbox → Packet capture** and pick the AP (you go straight in if only one AP is connected). 2. **Choose the radio** — listed as `wifi0 · 2.4 GHz`, `wifi1 · 5 GHz`, and `wifi2 · 6 GHz`. The default is `wifi1`. 3. **Set the window** with the stepper: **3 to 30 seconds**, default **10**. 4. **Narrow it with filters** if you want to (below), then start the capture and wait out the countdown. The screen walks through *capturing → "Transferring pcap over TFTP…" → "Analyzing N bytes…" → results*. Like every Toolbox tool, Packet capture needs the free trial or the one-time unlock — see [Free trial and unlock](https://docs.neuralconfig.com/arrf/setup/free-trial-and-unlock/). :::caution["You're on this radio"] If your iPhone is associated to the AP you're capturing on, and on the band you picked, ARRF warns you before you start. Capturing that radio taps the same radio that has to carry the pcap back, so the transfer can stall or fail. **Capture a different band, or capture that band from another AP.** ::: ## Filters All filters default to **off**, so an unfiltered capture records everything and the analysis is complete. Narrow from there: | Filter | Effect | |---|---| | **Exclude beacons** | Drops beacon frames, which otherwise dominate the air. | | **Exclude management** | Drops management frames. | | **Exclude control** | Drops control frames. | | **Exclude data** | Drops data frames. | | **This radio's BSS only** | Restricts the capture to the radio's own BSS instead of everything it can hear. | | **Only client (MAC)** | Captures one client's frames only. | **Only client (MAC)** is pre-filled with this iPhone's own address so the default run is "capture just my traffic". Clear the field to capture everything; once you type your own MAC, ARRF stops overwriting it. ## What the analysis shows The results are computed on the device from the pcap itself: - **A frame-type breakdown** — counts per management, control, and data subtype. `deauth` and `disassoc` are highlighted in red when non-zero, because they are the usual cause of a client being kicked. - **Data retry rate** — retried data frames over total data frames, the single best indicator of a struggling link. - **Top talkers** — up to eight transmitting addresses, busiest first, with their frame and byte counts. - **The raw pcap**, shareable to Files, AirDrop, or any capture analyser you prefer. :::note[One radio, one channel, one window] The summary describes what that AP's radio heard on its own channel for those few seconds. It is not a per-location measurement and it is not a whole-band view — for spatial data, run a [survey](https://docs.neuralconfig.com/arrf/survey/running-a-survey/). ::: ## Requirements and failure modes - **Local Network permission**, because the pcap arrives at the iPhone over **TFTP on UDP 69**. If ARRF can't bind that port you'll see **Couldn't open the capture receiver** — *"ARRF couldn't listen on UDP port 69 to receive the capture. Close other apps that might be using it and try again."* - **The AP must be able to reach the iPhone**, not just the other way round — the AP initiates the TFTP transfer to your phone's IP. A firewall or client-isolation rule between AP and phone breaks the return path even though SSH worked. - **If no data arrives**, ARRF reports *"The AP didn't deliver the capture (no TFTP data arrived)."*, or *"The AP couldn't upload the capture: …"* followed by the last meaningful line of the AP's own error, and releases the radio. ## Next steps - [Toolbox utilities](https://docs.neuralconfig.com/arrf/tools/toolbox/): The other RUCKUS tools, all of which only read, plus Network Test for any Wi-Fi. - [Connecting to your RUCKUS APs](https://docs.neuralconfig.com/arrf/setup/connecting-your-aps/): The SSH connection and credentials every Toolbox tool uses. - [Troubleshooting](https://docs.neuralconfig.com/arrf/troubleshooting/): Unreachable APs, rejected logins, and captures that never arrive. --- # Network Test Source: https://docs.neuralconfig.com/arrf/tools/network-test/ **Network Test** measures this iPhone's own Wi-Fi connection on **any network, any vendor** — no access-point login needed. Open **Toolbox → Network Test** (under **Any Wi-Fi**). It times the router, simulates a voice call, checks the internet edge and what the network lets through, and runs short speed bursts. Use it to check **call quality and speed at one spot** without walking a whole survey. ## What does it need? | Requirement | Why | |---|---| | **The free trial or the unlock** | Every Toolbox tool is new work. See [Free trial and unlock](https://docs.neuralconfig.com/arrf/setup/free-trial-and-unlock/). | | **Experience tests** on (Settings → Experience, the default) | Off hides Network Test. | | **Wi-Fi** | *"Tests run over Wi-Fi only — cellular results never count."* | | **Local Network** permission | To time round trips to your router. Without it, the internet edge and speed tests still run. | | **Location (While Using)** permission | iOS only reveals the Wi-Fi network name and access-point address (BSSID) to apps with location access. ARRF uses it to note which access point served each measurement; your location itself is never recorded. | | **Internet tests** on (optional) | The internet edge, Internet call, network policy, and cloud speed bursts use NeuralConfig's test server. See [Internet tests and privacy](https://docs.neuralconfig.com/arrf/setup/internet-tests-and-privacy/). | The first time you open it, a **Test this phone's Wi-Fi** screen explains the two permissions before iOS asks. If you haven't answered it yet, the **Internet tests** screen follows, where you can use the default test server, enter your own, or **Skip internet tests**. **Why there's no signal-strength number:** iOS doesn't let any app read this iPhone's Wi-Fi signal strength. Network Test measures what you feel instead — delay, loss, call quality and speed. The optional **ARRF RF** Apple Shortcut adds signal, noise and channel (see [RF details](#what-does-rf-details-add)). ## What does each section show? | Section | What it measures | |---|---| | **This phone's connection** | Path (Wi-Fi / Not Wi-Fi / Offline), the gateway and probe type, OS link quality, the network and access point, and **Other traffic** — Wi-Fi data this test didn't send, which skews results when heavy. | | **RF details · via Shortcuts** | This phone's own signal, noise, channel and link rate, through the Shortcuts app. | | **Wi-Fi hop (gateway) · last 10 s** | Round trips from the phone to the router: median, p95, jitter, and loss, charted live. | | **Voice over Wi-Fi** | A simulated call scored as a MOS, quiet and under load, plus the voice-priority verdict and an Internet call. | | **Internet edge** | Edge RTT, DNS lookup, and connection setup. | | **Network policy** | Eight checks of what the network lets through. | | **Burst capacity** | Download and upload speed. | | **Latency under load** | Router latency while the link is busy, and Responsiveness in RPM. | ## How is the Wi-Fi hop measured? **ARRF times round trips from this phone to the router — 20 a second over ICMP, or 5 a second when it falls back to TCP.** The chart covers the last 10 seconds; red dots are lost probes. Below it: **Median**, **p95**, **Jitter** and **Loss**. This is the hop you can fix with Wi-Fi changes. ## How does the Voice over Wi-Fi test work? **It runs a simulated call to the router: 50 call-sized packets a second on the Wi-Fi voice priority queue, scored as a MOS (1–4.5, ITU-T E-model for G.711; 4.0+ is good).** Tap **Run 30 s call test**. The call listens quietly, then while downloading, then while uploading — if the network honours voice priority, the call barely notices the load. | Result | Meaning | |---|---| | **Quiet** / **While downloading** / **While uploading** | MOS for each phase, with median RTT, jitter and loss. | | MOS label | **Excellent** (4.3+), **Good** (4.0–4.3), **Fair** (3.6–4.0), **Poor** (3.1–3.6), **Bad** (below 3.1). | | **Voice priority ↓ / ↑** | Whether the network honoured voice priority in each direction: **Honoured**, **Partly honoured**, **Not honoured**, or **Not tested**. | | **Internet call** | The same 50 pps call frames sent end to end to the nearest Cloudflare edge (needs Internet tests). They ride a TCP WebSocket; a frame more than 60 ms later than the fastest ones misses its playout slot and counts as lost. The voice priority marking (DSCP) is usually not kept past your ISP. | With internet tests off and no local iperf3 server there's nothing to load the link with, so only the quiet call runs (**Run 10 s call test**). The call test needs the router to answer ICMP. ## What does the Internet edge section show? | Row | What it is | |---|---| | **Edge** | The nearest Cloudflare data centre. | | **Edge RTT** | WebSocket round trips to that edge. | | **DNS lookup** | Asks the network's resolver directly (skipping this phone's cache) — the wait every new site starts with. | | **Connection setup** | A fresh TCP + TLS handshake to the test server. | If the test server is unreachable, gateway tests carry on. With Internet tests off, the status reads **Internet tests off**. ## What do the network policy checks test? **One pass at the start checks what this network lets through.** It needs Internet tests on; **Check again** reruns it. | Check | What it contacts | Flags | |---|---|---| | **QUIC (HTTP/3)** | A QUIC handshake to the test server (UDP 443) | QUIC blocked — apps fall back to TCP. | | **UDP to the internet** | The STUN and NTP traffic below | No UDP gets out — calls and games relay over TCP or fail. | | **NAT type** | STUN binding requests to Cloudflare and Google from one UDP port | Strict (symmetric) NAT — peer-to-peer calls and games relay through a server. | | **Outside DNS** | `whoami.cloudflare` via 1.1.1.1 | DNS redirected by the network, or outside DNS (port 53) blocked. | | **Encrypted DNS** | DNS over TLS (port 853) and DNS over HTTPS | Encrypted DNS blocked — private DNS settings won't work. | | **HTTPS inspection** | The test server's certificate chain | A root installed on the phone (SSL inspection), or an untrusted certificate. | | **Plain-web integrity** | Apple's plain-HTTP captive page | A page altered in transit, or a captive portal or proxy in the way. | | **Time sync (NTP)** | `time.cloudflare.com` (UDP 123) | NTP blocked — devices that set their own clock may drift. | ## How are speed bursts measured? **Tap Download or Upload for a 1.5 s burst on 4 parallel connections; the rate is the steady last second.** Retransmitted and duplicate/out-of-order data are what Wi-Fi loss looks like once the radio's own retries run out — above about 1 % points to a weak or busy link. Bursts go to the test server, or to your own network when **Settings → Experience → Local iperf3 server** is set (the header then reads **Burst capacity · iperf3 …**). With Internet tests off and no iperf3 server, the buttons are disabled. Cloud bursts count toward a fair-use allowance — see [Limits and quotas](https://docs.neuralconfig.com/arrf/limits/). ## What is Responsiveness (RPM)? **Round trips to the router per minute while the link is loaded — higher is better.** Tap **Run under load** to keep a download or upload running back to back (switching every run) while timing the router. **Latency under load** is the loaded round trip; **Responsiveness** is 60 000 ÷ that latency in ms. A link that bloats its buffers drops into the low hundreds. Tap **Stop load** to end it. ## What does RF details add? **This phone's own signal, noise, channel and link rate**, which iOS shares only with the Shortcuts app. Tap **Read RF details**: the **ARRF RF** shortcut reads them and hands them back, and ARRF briefly switches to Shortcuts and returns. **Set up the shortcut** walks you through adding it. ## Next steps - [Experience metrics](https://docs.neuralconfig.com/arrf/survey/experience-metrics/): The same measurements taken cube by cube on a survey walk. - [Internet tests and privacy](https://docs.neuralconfig.com/arrf/setup/internet-tests-and-privacy/): What the test server receives, and how to run without it. - [Limits and quotas](https://docs.neuralconfig.com/arrf/limits/): Daily speed-test allowance, rate limits, and other caps. - [Troubleshooting](https://docs.neuralconfig.com/arrf/troubleshooting/): Router not answering, Wi-Fi only, and speed-test allowance messages. --- # Settings reference Source: https://docs.neuralconfig.com/arrf/settings/ The **Settings** tab holds accounts and defaults. The *where* of a specific survey (Any Wi-Fi, a venue, or APs) is chosen in the Survey lobby; Settings holds everything else. This page lists each section, top to bottom, with its real defaults. | # | Section | What it holds | |---|---|---| | 1 | [Unlock](#unlock) | Trial status, unlock, restore purchases | | 2 | [Using ARRF for](#using-arrf-for) | Home or Professional defaults, letter grade, labels | | 3 | [Survey & capture](#survey--capture) | Cube spacing, floor plan, instructions | | 4 | [Experience](#experience) | Phone-measured tests and the internet test server | | 5 | [Integrations](#integrations) | The RUCKUS vendor pack: RUCKUS One, APs, My device, signal | | 6 | [AP placement](#ap-placement) | Ceiling height, automatic AP estimates | | 7 | [Experimental](#experimental) | Apple Intelligence features | | 8 | [Display](#display) | Roam markers, AP signs, blur, cube colours and labels | | 9 | [Grade requirement](#grade-requirement) | The targets the RF grade scores against | | 10 | [Report branding](#report-branding) | Company, engineer, contact, logo | | 11 | [About](#about) | Policies, help, support, version | ## Unlock The first row reads **Unlock ARRF** (or **ARRF Unlocked**) with your status under it — for example *"Free trial: 14 days or 3 surveys"* or *"Trial: 9 days · 2 surveys left"*. Tap it for the paywall. **Restore purchases** shows until the app is unlocked. See [Free trial and unlock](https://docs.neuralconfig.com/arrf/setup/free-trial-and-unlock/). ## Using ARRF for **Home** or **Professional** sets *defaults only* — nothing is hidden, and settings you've changed are kept when you switch. Until you answer, the Home defaults apply. | Setting | Home default | Professional default | Notes | |---|---|---|---| | **Show letter grade** | Off | On | The A–F letter on Results and the PDF cover; off leads with the plain verdict. | | **Letter grade in PDF report** | On | On | Greyed out while **Show letter grade** is off. Turn it off to give clients the verdict and scores without a letter. | | **Plain-language labels** | On | Off | Jargon-light names, e.g. "Router delay" instead of "Wi-Fi latency (p95)". | | Cube colours (in [Display](#display)) | Call quality (MOS) | Signal (dBm) | | | Show RUCKUS tools (in the [Toolbox](https://docs.neuralconfig.com/arrf/tools/toolbox/)) | Off | On | | ## Survey & capture | Setting | Default | Notes | |---|---|---| | **Placement throttle** | 0.3 m | Minimum distance between cubes (0–2 m). | | **Live cube interval** | 1.0 s | Minimum time between continuous cubes (0.4–5 s). | | **Floor-plan reconstruction** | On | Builds a LiDAR [floor plan](https://docs.neuralconfig.com/arrf/survey/floor-plan/); greyed out on iPhones without LiDAR. | | **Show survey instructions** | On | The "How to run a survey" card on each survey's first appearance. | Changes apply to the next survey. The capture **mode** (Continuous vs Stop & sample) is picked in the survey lobby, not here. ## Experience Phone-measured tests on any Wi-Fi, used by [Network Test](https://docs.neuralconfig.com/arrf/tools/network-test/) and by surveys that measure [experience](https://docs.neuralconfig.com/arrf/survey/experience-metrics/). Every row except the first shows only while **Experience tests** is on. | Setting | Default | Notes | |---|---|---| | **Experience tests (beta)** | On | Off restores the RF-only app and hides Network Test. | | **Internet tests** | On | Off never contacts the test server: no internet-edge latency, no cloud speed bursts, no connection-setup timing. See [Internet tests and privacy](https://docs.neuralconfig.com/arrf/setup/internet-tests-and-privacy/). | | **Test server** | Blank (`arrf-probe.neuralconfig.com`) | Shown while Internet tests is on. Enter a bare hostname of your own self-hosted probe server. | | **Manual gateway** | Automatic | A router address to time when ARRF can't find one itself. | | **Local iperf3 server** | Off | `host` or `host:port` (default port 5201) of an `iperf3 -s` on your own network, for speed bursts without the internet. A **Test iperf3 server** button appears once set. | | **Saturate (latency under load)** | Off | Keeps a transfer running so every sample also measures latency under load. Uses more data and battery. | | **Fill gaps between surveyed APs** | Off | Adds phone-measured cubes where none of the surveyed APs is heard. | | **RF details shortcut** | — | Sets up the "ARRF RF" Apple Shortcut that reads this phone's signal, noise, channel and link rate. | | **RF spot in AR (experimental)** | Off | Each stop-and-sample capture briefly switches to Shortcuts and back; hold the phone still. | ## Integrations **Vendor packs** add data read from your own access points; Any Wi-Fi works with every network, no pack needed. The one pack is **RUCKUS**, marked **Free with ARRF**: AP-measured signal for every cube, survey by venue with automatic AP passwords, live AP diagnostics in Toolbox, and roams between named APs. Tap it for the four sections below. ### RUCKUS One account Connect a RUCKUS One tenant to survey by venue with automatic AP passwords. Region (default **North America**), tenant ID, client ID, and client secret (Keychain-only), plus **Test connection** and **Disconnect RUCKUS One**. Full details in [Setting up a RUCKUS One account](https://docs.neuralconfig.com/arrf/setup/ruckus-one-account/). ### Connection | Setting | Default | Notes | |---|---|---| | **Target SSID** | empty | The WLAN surveys poll. Set it here or via the SSID picker. | | **APs** | empty | Up to **6** manual APs (IPv4, IPv6 or hostname), one SSH **Username** for all (default `admin`), and per-AP SSH passwords (Keychain, per IP). Only needed for manual surveys. | | **Trusted APs** | none pinned | The SSH host keys ARRF has pinned, one per AP IP. Swipe to forget one after an AP is replaced or reset. | Surveys log into each AP's CLI over **SSH (TCP 22)** and read the AP-measured signal at ~2.5 Hz. See [Connecting to your RUCKUS APs](https://docs.neuralconfig.com/arrf/setup/connecting-your-aps/). ### My device **Identify My Phone** picks the Wi-Fi client the survey follows; it's greyed out until you add APs or pick a RUCKUS One venue. Under **Advanced** you can type the target **MAC** by hand (default empty). See [Identify My Phone](https://docs.neuralconfig.com/arrf/tools/find-my-device/). ### Signal Shown in the app as **AP signal**. | Setting | Default | Notes | |---|---|---| | **Use true noise floor** | Off | When off, ARRF uses the flat **dBm offset**. | | **dBm offset** | −96 | Adjustable −120 to −60. Matches the RUCKUS One dashboard (dBm = SNR + offset). "True noise floor" uses the per-radio measured floor instead (5 GHz ≈ −99). | | **Deep RF stats per cube** | Off | Records uplink SNR and MCS for each cube, at one extra AP query per cube. | **Restore defaults** resets the noise-floor toggle and the offset. ## AP placement | Setting | Default | Notes | |---|---|---| | **Ceiling height** | 2.7 m | 2.2–6 m. A manual AP pin starts just under it. | | **Estimate AP locations automatically** | Off | Guesses unpinned APs from how their signal changes along your walk — a rough guide, often off by several metres. | Place APs by standing under each one and tapping **Pin here** in the survey's **Place APs** sheet. See [AP locations and roaming](https://docs.neuralconfig.com/arrf/survey/ap-locations-and-roaming/). ## Experimental | Setting | Default | Notes | |---|---|---| | **Apple Intelligence features** | On | "Ask your survey" in the 3D view, and the [PDF executive-summary draft](https://docs.neuralconfig.com/arrf/tools/exports/#pdf-site-survey-report). Needs a device with Apple Intelligence; hidden otherwise. | ## Display | Setting | Default | Notes | |---|---|---| | **Roam markers** | On | Draw a post at each handoff (also on the HUD). | | **AP location signs** | On | Show pinned APs (and auto-estimates, when enabled) in the survey. | | **Blur camera background** | Off | Off / Light / Medium / Strong. Softens the camera image, including screenshots and recordings. ARRF never saves camera images. | | **Cube colors** | Call quality (MOS) for Home, Signal (dBm) for Professional | The metric the cube fill encodes. Experience metrics are listed only while Experience tests is on. | | **Cube label fields** | AP name, Signal, Uplink ↑, Downlink ↓ | Up to four near-label fields. | | **Behind walls** | Dimmed | How LiDAR-occluded cubes are drawn (Off / Hide / Dimmed). | See [Cube colors, labels, and detail](https://docs.neuralconfig.com/arrf/survey/cube-colors-and-labels/). ## Grade requirement The targets the survey grade scores against, captured into every export: | Target | Default | Range | |---|---|---| | **Primary target** | −67 dBm | −80 to −50 | | **Edge target** | −72 dBm | −90 up to one dB below the primary | | **Min SNR** | 25 dB | 10 to 40 | Signal is the serving AP's uplink RSSI/SNR — how the AP hears the phone, not a coverage map. **Restore defaults** resets all three. See [Results and the survey grade](https://docs.neuralconfig.com/arrf/survey/results-and-grading/). ## Report branding **Company**, **Engineer** and **Contact** are stamped on exported [PDF reports](https://docs.neuralconfig.com/arrf/tools/exports/#brand-the-report); **Add logo** puts your logo in place of the ARRF mark (without one, your company name does). Leave any blank to omit it. ## About Links to the [Privacy Policy](https://neuralconfig.com/privacy/arrf/), [Terms of Use](https://neuralconfig.com/terms/arrf/), **Get Help**, and **Email Support**, plus the app **Version**. There's no NeuralConfig account. Experience tests time and download test data from NeuralConfig's test server (or one you host); the RUCKUS pack talks only to your own access points and, if you connect it, your RUCKUS One tenant. ## Next steps - [Internet tests and privacy](https://docs.neuralconfig.com/arrf/setup/internet-tests-and-privacy/): What the Experience test server receives, and how to run without it. - [Connecting to your RUCKUS APs](https://docs.neuralconfig.com/arrf/setup/connecting-your-aps/): The RUCKUS Connection section in full — AP IPs, passwords, SSID, and pinned host keys. - [Results and the survey grade](https://docs.neuralconfig.com/arrf/survey/results-and-grading/): How the grade requirement above turns into a letter. - [Troubleshooting](https://docs.neuralconfig.com/arrf/troubleshooting/): What to change when a survey won't start or readings stop. --- # Limits and quotas Source: https://docs.neuralconfig.com/arrf/limits/ ARRF's limits fall into four areas: the **free trial**, the **test server** behind internet tests, the **survey** itself, and **RUCKUS** connections. Each table below gives the exact number the app enforces. ## How long is the free trial? **14 days or 3 surveys, whichever comes first.** After that, new surveys (the demo excepted), vendor packs, Toolbox tools and cloud tests need the one-time unlock. History, Results, the floor-plan viewers and every export stay open. | Limit | Value | Notes | |---|---|---| | Trial length | 14 days | Starts when you claim the free trial. | | Trial surveys | 3 | Only a real survey with at least 3 cubes counts; the demo never does. | | Survey counter | Stored in the Keychain | Deleting and reinstalling the app doesn't reset it on that device. | See [Free trial and unlock](https://docs.neuralconfig.com/arrf/setup/free-trial-and-unlock/). ## What are the test server's limits? **Cloud tests share one fair-use allowance per install: 100 GiB over a rolling 7 days, the same on the trial and unlocked.** The test server is the one internet tests use (`arrf-probe.neuralconfig.com` by default). Turning **Internet tests** off never contacts it; a local iperf3 server isn't counted. | Limit | Value | Notes | |---|---|---| | Data allowance | 100 GiB per rolling 7 days | Per install, the same for the trial and unlocked. Downloads, Internet-call traffic and uploads that finish count. Speed-test uploads are stopped at their time limit, before the server sees them, so they rarely count. A survey's download bursts count roughly 1 MB per minute for every Mbps of connection speed, so a 300 Mbps line counts about 0.35 GB a minute. | | When it frees up | Gradually | Each UTC day's usage drops out of the window 7 days later, so the allowance comes back a day at a time. | | When it runs out | Bursts pause | In ARRF 1.1 and later, during a survey ARRF shows a one-time notice with the time tests resume, and stops speed and Internet call tests until then; Wi-Fi and latency readings carry on. Network Test (1.1) shows *"The cloud test allowance is used up for now; it frees up gradually over the week. A local iperf3 server still works."* | | Rate limit, speed bursts (`/v1/down`, `/v1/up`) | 300 requests per 60 s | Keyed on install ID + client IP, **per Cloudflare data centre**. | | Rate limit, other calls (`/v1/meta`, `/v1/ws`, `/v1/voice`) | 60 requests per 60 s | Same keying. Over the limit, the app shows *"The test server is busy — try again in a few seconds."* | | Download size | 10 MiB default, 100 MiB max | Per request. | | Upload size | 100 MiB max | Per request. | | Edge-latency socket (`/v1/ws`) | 200,000 messages, each ≤ 1 KiB | Then the socket closes (about 5.5 h at 10 a second). | | Internet-call socket (`/v1/voice`) | 540,000 frames, each ≤ 256 bytes | Then the socket closes (3 h at 50 a second). | | Install ID | Required on every call | A random ID ARRF creates once and keeps in the Keychain (it survives reinstall on that device). It carries no identity; it keys the rate limits and the allowance. | The server's routes are `GET /v1/meta`, `GET /v1/down`, `POST /v1/up`, `GET /v1/ws` and `GET /v1/voice`. **Note:** The rate limits are counted separately at each Cloudflare data centre, not globally. A self-hosted copy of the probe server can set its own allowance. See [Internet tests and privacy](https://docs.neuralconfig.com/arrf/setup/internet-tests-and-privacy/). ## How big can a survey be? | Limit | Value | Notes | |---|---|---| | Cubes kept per survey | 20,000 | About 2 hours of continuous capture. Past that, ARRF halves the survey by keeping every other cube, newest kept, so coverage stays roughly even. | | Samples per AP for AP location estimates | 600 | Thinned the same way past the cap. | | Points to open Results | 3 | A survey with fewer cubes is saved to History with a note instead. | | Readings to grade | 10 | Fewer shows *"Too few readings to grade"* (N/A, not F). The same 10 applies to experience cubes. | | History thumbnail | 128 dots | The walk is downsampled for the History row. | | Cube label fields | 4 | Up-close label fields chosen in Settings. | ## Which iPhone does it need? An **iPhone running iOS 17 or later**, with ARKit. ARRF is iPhone-only and runs in portrait. **A LiDAR iPhone (a Pro model) is not required**: LiDAR adds the [floor plan](https://docs.neuralconfig.com/arrf/survey/floor-plan/) and wall occlusion, and every other feature, surveys included, works without it. ## What are the RUCKUS limits? | Limit | Value | Notes | |---|---|---| | APs per survey | 6 | Manual AP list and RUCKUS One venue surveys alike; the lobby asks you to narrow a bigger venue. | | RUCKUS One AP password reuse | Until 300 s before it expires | Then ARRF fetches a fresh one. Passwords rotate roughly every two days. | | Identify My Phone scan | 4 failed polls in a row | With nothing heard from any AP, the scan stops and offers Retry. | ## Next steps - [Free trial and unlock](https://docs.neuralconfig.com/arrf/setup/free-trial-and-unlock/): What the trial includes and what the one-time unlock keeps working. - [Internet tests and privacy](https://docs.neuralconfig.com/arrf/setup/internet-tests-and-privacy/): What the test server receives, and how to run without it. - [Network Test](https://docs.neuralconfig.com/arrf/tools/network-test/): The tests that use the test server and its allowance. - [Troubleshooting](https://docs.neuralconfig.com/arrf/troubleshooting/): What to do when a limit is hit. --- # Troubleshooting Source: https://docs.neuralconfig.com/arrf/troubleshooting/ Fixes for the messages ARRF shows, grouped by where they appear. If none of these resolves it, [contact support](https://support.neuralconfig.com/arrf?from=docs) or email [support+arrf@support.neuralconfig.com](mailto:support+arrf@support.neuralconfig.com). **Headline first, details behind it:** Toolbox errors show a short headline and a next step; the raw technical line (for example *"rkscli login failed (bad credentials?)"* or *"host key for … changed"*) sits behind **Details**. During a survey, the AR view shows a short reason per AP, such as *"2 of 3 APs: login rejected"*. ## "Can't reach your APs" Full message: *"None of the APs answered an SSH probe. Check that this iPhone is on the same Wi-Fi network as your APs."* ARRF probes SSH (TCP 22) on each AP before a survey. - Confirm the iPhone is on the **same local network** as the APs. - Confirm each AP IP is correct in **Settings → Integrations → RUCKUS → APs**. - If a management ACL or firewall limits SSH access to the APs, permit the test iPhone. If only *some* APs answer, you'll see *"Some APs didn't answer"* and can **Start anyway** — offline APs are skipped. Mid-survey, an AP that stops answering shows as *"AP unreachable"*. In the Toolbox the headline is **Couldn't reach the AP**: *"Is this iPhone on the AP's network? Also check Settings ▸ Privacy & Security ▸ Local Network and make sure ARRF is allowed."* ## "Login rejected" The AP was reachable but turned down the SSH username or password. The Toolbox shows **Login rejected**; the survey HUD shows *"login rejected"*. (Behind **Details**, the log line reads *"rkscli login failed (bad credentials?)"* or, mid-survey, *"rkscli login failed after credential refetch"*.) - **Manual surveys:** re-enter the AP's **admin password** under **Settings → Integrations → RUCKUS → APs**, and check the **Username** there (blank means `admin`). - **RUCKUS One venues:** passwords are fetched automatically and rotate roughly every two days; ARRF refetches once on a login failure. If it persists, check the API client's role (next section), then run **Test connection** in [RUCKUS One account](https://docs.neuralconfig.com/arrf/setup/ruckus-one-account/) to confirm the tenant is reachable. If the Survey lobby warns *"No saved AP passwords — the SSH login will fail. Save them in Settings ▸ Integrations ▸ RUCKUS ▸ APs, or pick a RUCKUS One venue."* before you start, no password is saved for **any** of your manual APs. The pre-flight probe only checks that port 22 answers, so it can report every AP reachable while every login still fails. ## Why is every login rejected with a RUCKUS One venue? **The RUCKUS One API client is probably read-only. Use an admin (read-write) API client instead.** RUCKUS One hands a read-only client a masked AP password: `GET /venues/{venueId}/aps/{serial}/passwords` returns HTTP 200 with `apPassword` set to `**********` (verified live on 2026-10-16). ARRF can't tell the mask from a real password, so it logs in with it, every AP rejects the login, and the refetch returns the same mask. 1. In RUCKUS One, create (or pick) an API client with an **admin (read-write)** role, under **Administration → Account Management**. 2. In ARRF, open **Settings → Integrations → RUCKUS** and enter that client's ID and secret under **RUCKUS One account**. 3. Run **Test connection**, then start the survey or Toolbox tool again. ## "No password saved" ARRF has no SSH password for that AP. The Toolbox shows **No password saved**; the survey HUD shows *"no password saved"*. Add it under **Settings → Integrations → RUCKUS → APs** — RUCKUS One venues fetch it automatically. If a RUCKUS One venue can't supply one, the HUD shows *"couldn't get password from RUCKUS One"*: run **Test connection** to see why. ## "SSID not on this AP" An AP has no up WLAN broadcasting your **Target SSID**. The Toolbox shows **SSID not on this AP**; the survey HUD shows *"“Your SSID” not on this AP"*. (The log line behind **Details** reads *"no up WLAN broadcasting …"*.) Choose the SSID you're surveying in the Survey lobby or in **Settings → Integrations → RUCKUS → Connection** — the SSID picker lists what each AP actually broadcasts. See [Connecting to your RUCKUS APs](https://docs.neuralconfig.com/arrf/setup/connecting-your-aps/#set-the-target-ssid). ## "AP refused the connection" *"The AP answered but refused SSH. Make sure SSH is enabled on the AP and nothing blocks port 22."* The AP is on the network but its SSH port is closed. Enable SSH on the AP, or remove the rule blocking TCP 22. ## "The AP stopped answering" or "Connection dropped" | Headline | Message | Fix | |---|---|---| | **The AP stopped answering** | *"The AP didn't respond in time — it may be busy or rebooting. Try again in a moment."* | Wait, then retry. | | **Connection dropped** | *"The AP closed the SSH session — it may have too many sessions open, or be rebooting. Try again in a moment."* | Close other SSH sessions to the AP, or wait for the reboot. | | **Connection dropped** | *"The connection to the AP closed unexpectedly. Try again in a moment."* | Retry. | ## The AP's host key changed The Toolbox and the survey HUD show **AP identity changed** (the log line behind **Details** reads *"host key for … changed"*). ARRF pinned this AP's SSH identity on the first connection and the AP is now presenting a different key, so ARRF refuses to connect. It will keep refusing until you clear the pin — there is no inline "trust it anyway", because a changed key can indicate a man-in-the-middle. **If you replaced or factory-reset that AP**, its identity legitimately changed and you can recover: 1. **Confirm the hardware on that IP is what you expect.** If the key changed and you didn't change anything, stop and investigate instead. 2. **Open Settings → Integrations → RUCKUS → Trusted APs.** Each row is a pinned AP. 3. **Swipe the row and tap Forget.** 4. **Reconnect.** The next connection trusts and re-pins whatever key that AP now presents. If the reset also changed the AP's admin password, update it under **Settings → Integrations → RUCKUS → APs** too (see [Login rejected](#login-rejected)). The pre-flight only checks that port 22 answers, so it still reports the AP reachable while every login fails. See [Host-key trust and Trusted APs](https://docs.neuralconfig.com/arrf/setup/connecting-your-aps/#host-key-trust-and-trusted-aps). ## "RUCKUS One rejected my credentials" Under **Test connection**, and anywhere else a RUCKUS One call fails, ARRF reports the specific reason: | Message | Fix | |---|---| | *"Enter the region, tenant ID, client ID and secret in Settings ▸ Integrations ▸ RUCKUS."* | Fill in all four fields. | | *"RUCKUS One rejected these credentials — check the region, tenant ID, client ID and secret."* | Re-copy the API credentials from RUCKUS One → Administration → Account Management, and check the region. | | *"This API client lacks permission (needs venue/AP read and AP password access)."* | Give the API client those permissions. | | *"RUCKUS One couldn't find that account — check the region and tenant ID."* | Correct the region or tenant ID. | | *"RUCKUS One is rate-limiting requests — try again in a minute."* | Wait and retry. | | *"RUCKUS One is having trouble (HTTP …) — try again shortly."* | A RUCKUS One server error; retry later. | | *"Can't reach RUCKUS One — check your internet connection."* | The tenant lookup needs internet; confirm the iPhone is online. | | *"RUCKUS One sent a response ARRF didn't understand — try again, or contact support if it persists."* | Retry, then contact support. | **Test connection** only lists the tenant's venues, so a read-only API client can pass it while every AP login is still rejected — see [Why is every login rejected with a RUCKUS One venue?](#why-is-every-login-rejected-with-a-ruckus-one-venue) ## Identify My Phone can't confirm - *"Didn't feel the wave…"* — hold the phone firmly and swing it side to side; waving isn't available in the iOS Simulator. - *"More than one device moved…"* — have others hold still and try again. - *"That device didn't answer the probe…"* — you likely picked the wrong client; try **IP auto-match** or pick again. - **Readings stopped mid-survey** — iOS may have rotated your private Wi-Fi address. The AR view raises *"Can't see your phone — its private address may have rotated."* with an **Identify** button; tap it to re-find the target without ending the survey. See [Identify My Phone](https://docs.neuralconfig.com/arrf/tools/find-my-device/#why-the-target-can-go-stale). ## Why is the Toolbox greyed out? **The free trial hasn't started, or it has ended without an unlock.** The top of the Toolbox shows **Start the free trial to use Toolbox** or **Unlock ARRF to use Toolbox**, with a status line such as *"Trial ended (14 days)"* or *"Trial ended (3 surveys used)"*. Tap it to start the trial or unlock. **See sample results** stays open. See [Free trial and unlock](https://docs.neuralconfig.com/arrf/setup/free-trial-and-unlock/). If the trial is running but a RUCKUS tool is still greyed out, no APs are loaded: pick a RUCKUS One venue in the Survey lobby or add AP IPs in Settings. ## Network Test: "The router isn't answering" *"The router isn't answering. If you declined Local Network access, allow it in Settings ▸ ARRF — the edge and burst tests still work without it."* Tap **Allow Local Network in Settings** and turn on Local Network for ARRF. If it's already on, enter your router's address under **Settings → Experience → Manual gateway**. The call test needs the router to answer ICMP: otherwise it reports *"The router didn't answer the call probes (ICMP), so a call couldn't be simulated."* ## Network Test: "Tests run over Wi-Fi only" *"Tests run over Wi-Fi only — cellular results never count."* Join a Wi-Fi network and run the test again. ## Speed test: "The cloud test allowance is used up" *"The cloud test allowance is used up for now; it frees up gradually over the week. A local iperf3 server still works."* (ARRF 1.0 words it *"Today's cloud test allowance is used up (resets at midnight UTC)…"*.) Each install has a fair-use data allowance on the test server, counted over a rolling 7 days — see [Limits and quotas](https://docs.neuralconfig.com/arrf/limits/). In 1.1 and later, a survey notice says when tests resume. Wait until then, or set **Settings → Experience → Local iperf3 server** to test over your own network. *"The test server is busy — try again in a few seconds."* is the short-term rate limit; wait a few seconds and retry. ## What if the test server is unreachable? **If the test server is unreachable, gateway tests carry on.** Router latency, jitter, loss, and the call to the router keep running; only the tests that use the test server (internet edge, Internet call, and cloud speed bursts) go without results. With **Internet tests** turned off, ARRF never contacts it — see [Internet tests and privacy](https://docs.neuralconfig.com/arrf/setup/internet-tests-and-privacy/). ## Camera paused during a survey *"Camera paused — capture resumes when it's back."* A phone call or Control Center interrupted ARKit. Capture resumes on its own when the camera returns; if tracking struggles afterward, follow the on-screen hints (*"Move slower"*, *"Point at detail"*). ## "AR stopped: …" A fatal ARSession error — the camera became unavailable, or tracking failed unrecoverably. The banner offers **Restart AR** (a fresh AR session, same survey) or **Stop & save** (end normally). **Readings already collected are kept either way**, so neither choice loses data. If restarting fails repeatedly, stop and save, then start a new survey. ## Cubes are dropping more slowly than usual Look for a `slowed ×2` or `slowed ×4` chip at the top of the survey screen. The iPhone is thermally throttling, and ARRF has deliberately halved or quartered its polling rate to match. Let the phone cool — take it out of direct sun, out of a case, or off charge — and full rate returns on its own. See [Long walks and hot phones](https://docs.neuralconfig.com/arrf/survey/running-a-survey/#long-walks-and-hot-phones). ## "Survey not saved" The walk finished but writing it to storage failed — usually a full device. ARRF does not discard the data: choose **Retry** after freeing space, or **Open anyway** to reach the Results screen and export the report by hand before you leave it. See [When a survey can't be saved](https://docs.neuralconfig.com/arrf/survey/history/#when-a-survey-cant-be-saved). ## "Couldn't open survey" A History row whose document is *missing from storage* or *damaged and can't be opened*. ARRF never deletes a file it failed to read, so a copy restored from a backup still opens. See [When a saved survey won't open](https://docs.neuralconfig.com/arrf/survey/history/#when-a-saved-survey-wont-open). ## The packet capture never arrives The AP TFTPs the pcap **to your iPhone**, so the return path matters as much as SSH. Check that ARRF has **Local Network** permission, that nothing blocks UDP 69 inbound to the phone, and that client isolation isn't preventing the AP from reaching it. If you captured on the radio your phone is associated to, ARRF warned you for this reason — capture a different band or a different AP. See [Packet capture](https://docs.neuralconfig.com/arrf/tools/packet-capture/#requirements-and-failure-modes). ## No floor plan on the Results screen Floor-plan reconstruction needs a **LiDAR** iPhone and the **Floor-plan reconstruction** toggle on (**Settings → Survey & capture**, on by default), and it takes effect on the **next** survey. Non-LiDAR devices produce no plan. See [LiDAR floor plan](https://docs.neuralconfig.com/arrf/survey/floor-plan/). ## Still stuck? [Contact support](https://support.neuralconfig.com/arrf?from=docs), or email [support+arrf@support.neuralconfig.com](mailto:support+arrf@support.neuralconfig.com).