Planning tools that show their working
Every number on these pages is computed from the standards and the physics, not looked up, and every control lives in the address bar, so a link is the whole argument. The mesh planner was held against a real point on 2026-09-13: the budgets matched to a couple of dB, and the one thing it got wrong was fixed the same morning. Open a fold to see how a figure was reached; the story fold under the mesh map tells the tree in the order a mesh forms. The fifth tab is the simulator, one frame sent symbol by symbol through a link you can break; it also has a page of its own.
How many access points
Offered load becomes airtime through the real frame time, and airtime becomes access points. Change the client mix and watch which ceiling binds: the airtime, or the number of clients a radio should be asked to hold. Every control is in the address bar, so the link is the argument.
Who is on the network
The radio
| Group | Clients | PHY | Each gets | Offered | Airtime | Airtime/Mb/s |
|---|
Aiming at a block of seats
Count a section the way you count one standing in it: the front row, the back row, and the rows between. From where the antenna is going, that gives the down-tilt, the beamwidth the section demands, and how the block should be carved up. The half power contour is the useful cell, not the last row that can hear anything.
The section
The mount
The crowd
Measure it here
Stand where the antenna is going, hold the phone upright and tip the top edge until it points at a row, then capture. Two rows give you the beamwidth the section needs.
Nothing captured yet.
How to carve it up
| Band | Rows | Down-tilt | Needs | Seats a block | Throw |
|---|
Mesh on a field
Put access points where the masts can go, mark the one with the uplink, and the mesh builds itself. Drag anything. Tap anything to change it. The big number is what gets off the site, and the notes under it say what is in the way.
Nothing selected
Tap an AP, an obstacle, a hill, a crowd or the client on the map.
Aim, tilt, radio
A link from here
Measured on site
Stand at this mast, read the RSSI from a neighbour off the AP, and type it. The model steps aside for that link and learns from the gap.
A smooth hill: the height is the top, the width is where it is about a tenth as high. Negative digs a hollow.
Tap the map to add waypoints; the plot under the answer reads the walk. Drag a waypoint to move it.
The site
The radios
Rules and compass
A picture under the map
A site plan or a satellite screenshot. It stays in this browser, not in the link. Then tap two points you know the distance between.
From an Ekahau project
Open an .esx file: the floor plan and its scale become the field, the access points you own become masts with their heights, aims and power. Antennas are matched by name where they can be.
From Google Earth
Draw the site in Google Earth and save it as .kml or .kmz: placemarks become masts (put "portal" and a height like "5 m" in the name), extruded polygons become buildings, a polygon or pin named "crowd 800" becomes a crowd, a path becomes the walk, and an image overlay lands under the map at its bounds. The 3D buildings and terrain you see in Google Earth do not export, so they cannot come across.
Verify against Central or Mist
This page never talks to a controller. On the laptop, central-pull.py --group <group> pulls an Aruba Central group's APs, their radios and the loss AirMatch measured between them, and mist-pull.py --site <site> does the same for a Juniper Mist site from its RRM neighbours; both write the same site.json. Open it here. Each measured pair replaces the model, and the table below the access points shows planned against measured loss with the gap in dB. Positions come across only where an AP sits on a floor plan; otherwise the APs land in a row for you to drag.
On site with a phone
At the mount point: the first fix sets the middle of the field, every fix after lands an AP where you are.
How this mesh formed
The tree above, told in the order a mesh forms: the rule, the portals, then each point by the hop it sits at, with everything it could hear, the one it took and why the runner-up lost. Change anything on the map and the story is retold.
What to put on the masts
Every access point
| AP | Role | Antenna | Ch | Parent | Hops | Link | Metric | Air lost | Backhaul | Delivers | Backup |
|---|
Planned against measured
| Pair | Band | Distance | Planned loss | Measured | Gap |
|---|
What fails when something fails
Each AP failed in turn, everything else recalculated. Orphans are the APs that lose their way to a portal.
| If this fails | Orphans | Portals left | Mesh carries | Lost | Coverage |
|---|
Every pair failed together, the worst shown first.
| If these fail | Orphans | Portals left | Mesh carries | Lost |
|---|
What to configure
The plan as RF intent: band, width, channel list, power window, mesh roles and each AP's radio. The same intent written for Aruba Central (ARM, a radio profile and per-AP settings from the tenant's Configuration API, mesh as group CLI) and for Juniper Mist (an RF template, the site, and each device with its mesh role). Both are JSON of bodies to send, not a script that sends them; the group, site and device ids are left as placeholders and every Mist field is marked to verify. Security, VLANs and RADIUS are not here: nothing in them has a picture to draw.
Assumptions
Share, export, compare
Scenarios
What happened
Two days of a site on one page: every client's roams as a timeline with the spikes explained by what changed just before them, the radios as a graph joined by the loss AirMatch measured between them, noise and utilisation by the hour, and what each AP actually carried beside the plan.
The site's story
This page never talks to a controller. On the laptop, central-pull.py --group <group> --story 48 writes a site.json with two days of what happened; open it here. The same file opens in the mesh planner's Verify fold. Kept in this browser until you open another.
No site loaded.
What it is not: a live view. Central's monitoring is minutes old and a trail is what the AP reported, so this is the record of the last two days, read carefully.
Roams across the site
Each bar is how many different clients moved in the bin; the marks below are what changed: channel moves, reboots, configuration. Tap a bar to see who moved and what happened just before.
Who hears whom
Every radio, joined to the ones it can hear by the path loss AirMatch measured (thicker is louder). A pair that also shares a channel shares air, drawn orange. Move one radio below and watch the pairs change; nothing is sent anywhere.
RF weather
Utilisation by the hour, one row per day per radio; cells outlined orange are hours the noise floor sat 6 dB or more above that radio's median, which is how a microwave, a camera or a neighbour's network shows up as a pattern rather than a complaint.
Plan against actual
What each AP carried over the last hours against what the mesh planner expected of it, when the planner holds the same APs.
| AP | Clients now | Mean | Peak | Planned clients | Planned demand |
|---|
Follow the cable
From the air to the wire: each AP's radios, its clients now, and the port it leaves by. Classic Central sees the AP's side of the cable; the switch, its port and the PoE budget belong to whichever Central manages the switch, and on a site where that is New Central they are not in this file, so the row ends at the AP's port and says so.
| AP | Radios | Clients | Uplink | Port | Beyond |
|---|
Clients worth a look
Who roams most and who lands weakest. A restless wearable is normal; a laptop that roams every minute is a design problem. Landing is the median signal the AP heard at each roam; weak is landings under -75 dBm; slow is roams over half a second.
| Client | Hops | Joins | Landing | Weak | Roam | Slow |
|---|
Why a mesh has to be provisioned over the wire
The planner tells you where the points will attach. The field note tells you what happens when the roles never reach them.