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
  2. Inputs
  3. The demand math
  4. The four checks
  5. Verdict and ranking rules
  6. Class E engineering defaults
  7. The switch registry and its sources
  8. Evidence classes and confidence
  9. What invalidates a result
  10. Method changelog

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

InputValuesDefaultUsed by
camerasa count, or a list of { count, class } groups8demand, ports, per-port, standard
camera_classfixed, ptz, ptz_heaterfixeddemand, standard
per_camera_w1–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
headroom0–10.8 (class E)operating reserve policy on the budget check (not multiplied into available)
switchregistry switch id—pins the result to one model
industrialbooleanfalsecandidate filter
min_poe_ports1–96—candidate filter
uplinkany, 1g, 2_5g, 10ganycandidate 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_m1–500 m100 (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 W
  • node demand W = node count × node pse_w when nodes is provided and the per-node PSE draw resolves
  • total demand W = camera demand + node demand
  • powered devices = cameras + node count — one powered device, one PoE port
  • highest 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

CheckRequiredAvailableStatus 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

DefaultValueWhy
Fixed bullet / dome draw7 W (6–8 W band)A fixed camera with IR illuminators, negotiating as an 802.3af Type 1 device.
PTZ draw22.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 draw50 W (40–60 W band)A heated outdoor PTZ or a multi-sensor panoramic camera, needing an 802.3bt Type 3 port.
Budget headroom0.8A 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:

VendorRowsRange
Ubiquiti5UniFi Switch Lite 8 / 16 PoE, USW-Pro-24-PoE, USW-Pro-Max-24-PoE, USW-Industrial
Cisco5Business CBS350 8P / 24P, Catalyst 1300 24P, C1300X-48P-4X, C1300X-24MU-4X
TP-Link3TL-SG1008MP, TL-SG2210MP, TL-SG3428MP
MikroTik2CRS328-24P-4S+, netPower 16P
NETGEAR2GS308EP, 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

MethodDatasetDateChange
1.02026-09-092026-09-09First 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.12026-09-092026-09-17Budget 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.22026-09-092026-09-20poe_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.02026-09-252026-09-25The 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.02026-09-252026-09-25Default 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.12026-09-262026-09-26The 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.22026-09-262026-09-26Every 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.02026-09-262026-09-26Indoor 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.02026-09-262026-09-27The 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.02026-09-262026-09-26Breaking: 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.12026-09-262026-09-28Input 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.02026-09-262026-09-29elimination 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.