PoE Node Planner — methodology
Method version 2.2.0 · dataset poe-switches 2026-09-26 · engine: /engines/poe-planner/ · dataset: datasets/poe-switches.json
A procurement check, not a power-delivery simulation. Every switch figure it holds a design against is the vendor's published number with the page quoted. The per-camera typical draws and the budget headroom are class E engineering figures; IEEE powered-device and power-sourcing wattages come from the vendor standards table (class A) and are cited in every result.
Contents
1. What it decides, and what it does not
The planner answers one procurement question: for this mix of PoE cameras and PoE-powered compute nodes, will this switch — or the best switch in the registry that matches your filters — have the ports, the per-port ceiling, the total budget and the right IEEE standard to power them? It returns FIT, FIT WITH RISKS, NEEDS VALIDATION or NO FIT.
It does not model cable resistance, per-pair current, negotiation timing, class-event signalling or a switch's port-priority behaviour when its budget is exhausted. The IEEE standard specifies a 100 m channel and the vendor's per-port and budget figures already account for the loss inside it; beyond 100 m the result carries a warning and the engine models no derate, because a derate curve would be a guess.
It is also not the Power Budget engine, which sizes the whole node's supply including the compute module. This one is about the PoE switch and the cameras hanging off it.
2. Inputs
| Input | Values | Default | Used by |
|---|---|---|---|
cameras | a count, or a list of { count, class } groups | 8 | demand, ports, per-port, standard |
camera_class | fixed, ptz, ptz_heater | fixed | demand, standard |
per_camera_w | 1–100 W — overrides the class E typical draw for every group | — | demand |
nodes | { count, pse_w?, pd_class? } where count is 1–64, pse_w is per-node port PSE watts (0–100], and pd_class is one of 802.3af/at/bt Type 3/bt Type 4 | — | ports, per-port, budget, standard |
headroom | 0–1 | 0.8 (class E) | operating reserve policy on the budget check (not multiplied into available) |
switch | registry switch id | — | pins the result to one model |
industrial | boolean | false | candidate filter |
min_poe_ports | 1–96 | — | candidate filter |
uplink | any, 1g, 2_5g, 10g | any | candidate filter, as a minimum: a switch qualifies when its uplink is at least the class asked for (a 10 G uplink meets a 2.5 G need); a switch whose uplink is not published is left out when one is asked for |
cable_length_m | 1–500 m | 100 (the standard channel) | a warning past 100 m; no derate |
Nothing is required. Naming a switch pins the result to that model and the candidate list holds one row;
leaving it out ranks every row that matches the filters and reports the winner.
Inputs (WP-01). A field that is not stated takes its documented default and is listed in provenance.defaulted; a field that is stated but invalid — a count of 0, a negative, a fraction or a non-number, true in place of a count, an unknown value of an enumerated input, or an empty string — is rejected with VALIDATION_ERROR naming the field, never replaced by a default.
Input keys (WP-02). The engine accepts one list of input keys — the inputs documented here and their declared backward-compatible aliases. Unknown input keys are rejected with VALIDATION_ERROR naming the key: an invented or misspelt key is never silently ignored, a __ test hook never reaches the engine, and an alias sent together with the key it stands for is rejected too (the engine would read only one of them). export_json.inputs echoes every input the engine honoured, so replaying it reproduces the result.
3. The demand math
group W = count × (per_camera_w override, else the class's typical draw)camera demand W = Σ group Wnode demand W = node count × node pse_wwhennodesis provided and the per-node PSE draw resolvestotal demand W = camera demand + node demandpowered devices = cameras + node count— one powered device, one PoE porthighest PD ceiling = max(camera PD ceiling, node pse_w)when node PSE is known
The two figures do different jobs. The typical draw is a planning number and drives the total budget: a fixed dome that draws 7 W consumes 7 W of the switch's budget, not the 12.95 W powered-device maximum that 802.3af publishes for its class. The powered-device ceiling is the entitlement and drives the per-port check: a port has to be able to deliver the class the camera negotiates, whatever it actually draws.
Node supply resolves in this order: stated nodes.pse_w, else the IEEE class PSE maximum for
nodes.pd_class (30 W for 802.3at, 60 W for 802.3bt Type 3, 90 W for Type 4), else unknown. Those IEEE
class PSE figures are class D planning derivations from the standard pages, not vendor board measurements.
4. The four checks
| Check | Required | Available | Status rule |
|---|---|---|---|
ports |
total powered devices (cameras + PoE-powered nodes) | the switch's PoE port count (class A) | over the count → FAIL; exactly filling it (or 80 % and above) → NEAR LIMIT; else PASS. Ports are discrete: a full switch is a design with no spare port, not a failure. |
per_port |
the highest powered-device ceiling in the mix | the switch's per-port maximum watts (class A); UNKNOWN when the vendor page does not state one | categorical: the port either delivers the class or it does not. A powered device sits at about 85 % of its port's power-sourcing watts by design, so there is no NEAR LIMIT band here. A shortfall FAILs when the ceiling comes from an IEEE class you stated (poe_class) or a node's PD class; when it comes from a camera class's assumed standard (class E), it is REQUIRES VALIDATION with the shortfall stated. |
budget |
the total PoE demand (camera + node demand) | the switch's rated poe_budget_w (class A); UNKNOWN when the vendor publishes no total |
available is the rated budget. Demand above the rated budget → FAIL when the stated and IEEE-class demand alone exceeds it; when the class E typical camera draws take the demand over, REQUIRES VALIDATION with the shortfall stated (a typical draw is an estimate and cannot eliminate a switch). Demand from rated × headroom up to rated → NEAR LIMIT (operating reserve, class E; your headroom sets the band, so at 1.0 only demand exactly at the rated budget is NEAR LIMIT). Demand below the reserve floor → PASS. If node demand is unresolved, budget is UNKNOWN with insufficient evidence. |
standard_* (one row per tier) |
whether each IEEE tier required by the camera mix and node PD class is supported | the switch's negotiated standards (class A) | COMPATIBILITY rows (no utilization): e.g. standard_bt_type3 FAIL when a stated IEEE class or a node's PD class needs 802.3bt Type 3 and the switch is 802.3af/at only; REQUIRES VALIDATION when that need comes only from the class E camera-class assignment (a heated PTZ assumed to be a Type 3 device). A node with no published PD class reports standard_node UNKNOWN (insufficient evidence). |
The result also reports max_cameras_of_class: for each of the three camera classes, how many the chosen
switch can hold once ports, budget and standard are all applied. A class the switch cannot negotiate reports zero.
5. Verdict and ranking rules
- Any check FAILs → NO FIT. Only evidence that can prove the miss makes a FAIL (elimination authority).
- Else any check is UNKNOWN or REQUIRES VALIDATION → NEEDS VALIDATION.
- Else any check is NEAR LIMIT → FIT WITH RISKS.
- Else FIT.
With filters rather than a named switch, every matching row is evaluated and ranked by verdict first. Within one verdict, rows where none of the ports, per-port and budget checks misses come first (a miss demoted to REQUIRES VALIDATION still counts as a miss here), smallest switch first: fewer PoE ports, then a smaller PoE budget, then switch id; rows with a failing capacity check follow, closest miss first: the largest budget margin (an unknown margin last), then the larger port margin, then switch id.
When the industrial input is not true, a non-industrial switch ranks before an industrial one within the same verdict and the same capacity group, and the order above applies inside each; it is a preference, not a filter, so an industrial switch still wins when no indoor switch reaches its verdict and capacity group. Price never influences the winner.
The winner's verdict is the result's verdict; the top ten rows travel with it as candidates; the largest
budget-margin row is still published as most_headroom; the winner itself is switch.
The alternatives block also includes an industrial-rated option where one fits.
lowest_price is the fitting switch (FIT or FIT WITH RISKS) with the lowest known USD price in the PoE switch price registry, with its price, currency, evidence class and the listing's retrieved and verified dates; a switch with no known price is excluded, never counted as zero, ties go to fewer PoE ports then switch id, and it is null when no fitting switch has a price.
Every non-PASS check that has a fix lists it in remediations: add a second switch, move the heated PTZs to
their own budget or an 802.3bt injector, or choose a model with more ports, a higher per-port ceiling or a larger
budget.
6. Class E engineering defaults
| Default | Value | Why |
|---|---|---|
| Fixed bullet / dome draw | 7 W (6–8 W band) | A fixed camera with IR illuminators, negotiating as an 802.3af Type 1 device. |
| PTZ draw | 22.5 W (20–25 W band) | A PTZ dome with pan, tilt and zoom motors, negotiating as an 802.3at Type 2 device. |
| Heated PTZ / multi-sensor draw | 50 W (40–60 W band) | A heated outdoor PTZ or a multi-sensor panoramic camera, needing an 802.3bt Type 3 port. |
| Budget headroom | 0.8 | A switch running at its published budget has no margin for a camera above its class, a heater cycling on, or a port added later; several vendors drop the lowest-priority port when the budget is reached. |
All four are class E engineering figures. The per-camera draws and the headroom are named in the
assumptions of every result and are overridable from the Advanced panel and the API. The IEEE wattages are not
defaults: the power-sourcing maxima (15.4 W for 802.3af, 30 W for 802.3at, 60 W for Type 3, 90 W for Type 4) and the
powered-device maxima (12.95 W, 25.5 W, 51 W and 71.3 W) are class A figures quoted from a vendor standards table and
cited in every result. The same holds for a camera sized by IEEE PD class (poe_class 0–8): its
draw is the class's powered-device power — 12.95 W for classes 0 and 3, 3.84 W for class 1, 6.49 W for class 2,
25.5 W for class 4, 40 W for class 5, 51 W for class 6, 62 W for class 7 and 71.3 W for class 8 — read from the
registry's PD class table, each figure quoted from a vendor classification table (Synectics, Perle) and cited in the
result. The standard such a camera negotiates comes from the same table: classes 0–3 are 802.3af, class 4 is
802.3at, classes 5 and 6 are 802.3bt Type 3 and classes 7 and 8 are 802.3bt Type 4, so a Class 7 or 8 camera is held
against the Type 4 powered-device ceiling (71.3 W) and needs a port that negotiates Type 4 (90 W).
7. The switch registry and its sources
Twenty-one switches across six vendors, every row carrying the vendor tech-specs page or datasheet it was read from, with a verbatim quote and a link:
| Vendor | Rows | Range |
|---|---|---|
| Ubiquiti | 5 | UniFi Switch Lite 8 / 16 PoE, USW-Pro-24-PoE, USW-Pro-Max-24-PoE, USW-Industrial |
| Cisco | 5 | Business CBS350 8P / 24P, Catalyst 1300 24P, C1300X-48P-4X, C1300X-24MU-4X |
| TP-Link | 3 | TL-SG1008MP, TL-SG2210MP, TL-SG3428MP |
| MikroTik | 2 | CRS328-24P-4S+, netPower 16P |
| NETGEAR | 2 | GS308EP, GS316EP |
Nineteen of the twenty-one publish a total PoE budget and fifteen publish a per-port ceiling; the rest report UNKNOWN
rather than a guess. A source record without a resolvable URL is dropped when the registry is built, and a row left
with no source at all is dropped and listed in the dataset's gaps. Known holes travel with every result:
no vendor MSRP could be quoted for any row; the MikroTik netPower 16P publishes only per-rail current limits, so its
budget and per-port ceiling are null; NETGEAR's product pages do not state per-port watts or operating temperature; and
Ubiquiti's pages label ports “PoE+” / “PoE++” rather than by IEEE number, so those standards
are mapped from that labelling and the per-port ceiling rather than from a verbatim IEEE citation.
8. Evidence classes and confidence
- A — every switch figure: port counts, PoE budget, per-port maximum, standards, uplink, industrial rating, operating range; the power-sourcing and powered-device wattages the vendor standards table quotes; and the per-port check for a camera mix (a class A per-port maximum against the standard's published powered-device maximum, both cited).
- D — the budget check (a class A rated budget compared against demand, with your class E headroom input setting the NEAR LIMIT floor at rated × headroom — not folded into
available), the per-port check when a node's PSE figure comes from the IEEE standard rather than a stated value, and the standard check (class A port standards against a class E camera-class assignment). - E — the per-camera draws, the headroom, and any check whose vendor figure is missing (reported UNKNOWN).
Confidence: HIGH for the port check, MEDIUM for the per-port, budget and standard checks, LOW for any UNKNOWN. The overall confidence is the lowest of the four.
9. What invalidates a result
- Cameras that draw more than their class default — heaters, wipers, illuminators and edge analytics all raise the figure. Override it with the camera datasheet.
- Non-camera powered devices sharing the switch that were not declared in
nodes: access points, intercoms, speakers and extra PoE-powered compute all take budget and ports. - A cable run longer than the 100 m channel the standard specifies — the result warns, but models no derate.
- Cable that is not up to the standard's specification, or a patch path with extra connectors, which raises the loss inside the channel.
- A switch whose PoE budget is shared with a stacking or uplink module, or that derates its budget at high ambient temperature.
- Redundant-supply expectations: the budget in the registry is the single-supply figure the vendor publishes.
- Any figure the vendor page does not publish — the check reports UNKNOWN and the verdict becomes NEEDS VALIDATION rather than a number.
10. Method changelog
| Method | Dataset | Date | Change |
|---|---|---|---|
| 1.0 | 2026-09-09 | 2026-09-09 | First release. Seventeen vendor-sourced switches across five vendors; the four IEEE standards with the power-sourcing wattages a class A page states and class E nominal powered-device wattages where none does; three camera classes; four checks (ports, per-port ceiling, budget with headroom, standard compatibility); the verdict and ranking rules; per-camera draws and 0.8 headroom as class E defaults. |
| 1.1 | 2026-09-09 | 2026-09-17 | Budget available is the rated PoE budget; headroom is an operating reserve (NEAR LIMIT band between rated × headroom and rated). Standard compatibility is one row per IEEE tier. IEEE 100 m channel assumption on every run. |
| 1.1.2 | 2026-09-09 | 2026-09-20 | poe_class (IEEE 0–8) and switch_budget_w are aliases, not dropped keys. Unknown keys are rejected. 24× Class 4 on a 150 W budget is NO FIT. |
| 1.2.0 | 2026-09-25 | 2026-09-25 | The planner now counts PoE-powered compute nodes as powered devices: nodes adds node ports, node demand and node standard checks into the same four checks. Node PSE watts resolve from stated nodes.pse_w or the IEEE class PSE maximum when nodes.pd_class is given (class D assumption), and unknown node class yields standard_node UNKNOWN with insufficient evidence. Registry 2026-09-25: four IEEE 802.3bt Type 4 (90 W per port) switches — NETGEAR M4250-10G2XF-PoE++ and M4250-26G4F-PoE++, TP-Link SG3428XPP-M2 (hardware V2.0) and the DIN-rail PLANET IGS-6329-8UP2S2X — so a node fed by the registry's 72 W splitter has a port that can negotiate its class; the 802.3af PSE per-port maximum (15.4 W) is now a vendor-quoted figure, so an onboard 802.3af powered-device carrier no longer leaves the node's per-port and budget checks UNKNOWN. |
| 1.3.0 | 2026-09-25 | 2026-09-25 | Default filter ranking: verdict first; within one verdict, rows with no failing ports, per-port or budget check rank smallest first (PoE ports, then PoE budget, then switch id) — this now applies to NEEDS VALIDATION rows too, so an unknown budget no longer hands the win to the biggest switch — and rows with a failing capacity check follow, closest miss first (budget margin, unknown last; port margin; switch id). The largest budget-margin row remains available as most_headroom, and smallest_fitting mirrors the winner whenever any switch fits. |
| 1.3.1 | 2026-09-26 | 2026-09-26 | The IEEE powered-device wattages (12.95 W for 802.3af, 25.5 W for 802.3at, 51 W for 802.3bt Type 3, 71.3 W for Type 4) are now class A registry data quoted from a vendor standards table, not class E nominal figures, and the per-port check cites that table. The per-port check for a camera mix moves from class D to class A; with a node whose PSE figure comes from the standard it stays class D. poe_class 0, 3, 4, 6 and 8 read their wattage from the same registry. Verdicts, switch choice and ranking are unchanged. |
| 1.3.2 | 2026-09-26 | 2026-09-26 | Every IEEE PD class draw (poe_class 0–8) now reads a class A PD class table in the registry, quoted per class from vendor classification tables; classes 1, 2, 5 and 7 (3.84, 6.49, 40 and 62 W) were uncited fixed figures before, and a result sized by poe_class now cites the class figure. Each switch and standard source keeps its own verification date instead of the dataset date. The note about nominal powered-device wattages, unreachable since 1.3.1, is removed. Verdicts, wattages, switch choice and ranking are unchanged. |
| 1.4.0 | 2026-09-26 | 2026-09-26 | Indoor preference: when industrial is not true, a non-industrial switch ranks before an industrial one within the same verdict and capacity group (a preference, not a filter). New lowest_price alternative: the fitting switch with the lowest known registry price, unpriced rows excluded. smallest_fitting is deprecated through alternatives_deprecated. Price listing sources now name the seller and seller_type (manufacturer, distributor or marketplace); evidence classes are unchanged. |
| 2.1.0 | 2026-09-26 | 2026-09-27 | The headroom input now reaches the verdict: each capacity check's own threshold (the budget's headroom; the per-port check's categorical limit) is the one the verdict is decided on, and a check's published status is read from that single evaluation, so a NEAR LIMIT row always gives FIT WITH RISKS and an all-PASS run is FIT. Before, the verdict used a fixed 80 % band: at headroom 0.7 a NEAR LIMIT budget sat under FIT, at 1.0 an all-PASS run was FIT WITH RISKS, and a camera whose powered-device ceiling is about 85 % of its port (an 802.3at camera on a 30 W port, a Type 3 camera on a 60 W port) gave FIT WITH RISKS although the per-port check has no NEAR LIMIT band. IEEE PD classes 7 and 8 now negotiate 802.3bt Type 4 from the PD class table (they were judged as Type 3, so a 71.3 W Class 8 camera passed a 60 W port): on a port below 90 W the per-port and standard checks FAIL and the verdict is NO FIT, with a remediation naming a Type 4 port; a camera group with its own poe_class takes that class's draw. uplink is a minimum class (a 10 G uplink meets a 2.5 G need), so every uplink tile returns a plan; the page offers the uplink classes present in the registry. |
| 2.0.0 | 2026-09-26 | 2026-09-26 | Breaking: alternatives.smallest_fitting and alternatives_deprecated removed; use switch or alternatives.lowest_price. Verdicts, switch choice, ranking and every other alternative are unchanged. |
| 2.1.1 | 2026-09-26 | 2026-09-28 | Input rules (WP-01 remainder, WP-02): a scalar cameras "abc" used to become 8 and a group count of true or 3.5 was accepted — both are rejected; per_camera_w, headroom, switch_budget_w, min_poe_ports, cable_length_m, industrial, uplink, camera_class and poe_class / class (now checked whatever shape cameras has) are checked; defaults are listed in provenance.defaulted. Unknown input keys are rejected (nodes and camera-group keys included). No formula changed. |
| 2.2.0 | 2026-09-26 | 2026-09-29 | elimination authority (#263, owner ruling 2026-09-29). The budget FAILs on stated and IEEE-class demand; a miss that rests on class E typical camera draws is REQUIRES VALIDATION. The per-port and standard checks FAIL on a stated IEEE class or a node's PD class, and are REQUIRES VALIDATION when the need comes from a camera class's assumed standard. The default ranking still counts a demoted capacity miss as a miss. Every row publishes elimination_authority. |
Method changes bump the method version; new or re-verified switch rows bump the dataset version. Both are in every result and in the citation block.