Wireless Access Point

Wireless Access Point #

Fills the wireless access role — see Substrate Networking → Wireless.


Hardware #

TP-Link Omada EAP650-Outdoor: specs, cabling, power and console.


Management #

AttributeValue
ControllerTP-Link Omada SDN
VLAN SupportYes — per-SSID VLAN tagging
APIYes — the Omada controller’s documented Open API
Automationdeevnet.net Ansible collection, through the controller

Product features in use #

FeatureUse
Wi-Fi 6Client connectivity
Per-SSID VLAN taggingEach SSID lands on its segment’s VLAN
PPSK with per-key VLANOne IoT SSID; the key a device joins with decides its VLAN
Band steeringDirects capable clients to 5 GHz

Client isolation is not used on the IoT SSID. The EAP650 offers no client isolation that would also preserve the service reachability devices need on the segment. Two devices on the IoT segment can therefore reach each other; why that is accepted is in Edge Devices → Access.


VLAN and API Capability Summary #

The EAP650-Outdoor meets the core selection criteria:

RequirementEAP650-Outdoor
VLAN tagging✓ Per-SSID
API management✓ Omada REST API
Controller-managed✓ Omada SDN
PoE powered✓ 802.3at

Configuration Management #

ControllerAutomation
Omada SDNdeevnet.net Ansible collection (Omada API)

SSID Design #

One SSID per trust class, each carrying one VLAN. The names come from wifi_ssid in deevnet_vlans, and the controller applies them — inventory is the only declaration ( ADR-0009).

SSIDVLANSecurityKey
DVNTM10 (trusted)WPA-Personalone shared key, from the vault
DVNTM-IOT30 (IoT)PPSK (security: 4)one key per tenant, issued by the Deevnet API
DVNTM-IOTV31 (IoT Vendor)WPA-Personalone shared key, from the vault
DVNTM-GUEST40 (guest)WPA-Personal + guest isolationone shared key, from the vault
DVNTM-TD45 (tenant dev)WPA-Personalone shared key, from the vault. No client isolation between laptops ( CHG-0022)

No SSID carries the management segment. The operator reaches management from DVNTM, through the zone policy’s declared trusted -> management exception. That makes the trusted Wi-Fi the everyday administration path ( Operator Access). Strictly, a dedicated jump host would be the more correct design: one audited entry point instead of a whole segment allowed in. For a lab this size it isn’t built. Every other SSID is refused at management, which Segment Check verifies from a client.

On DVNTM-IOT the key decides the VLAN. It is a PPSK SSID, so each key in its profile carries its own VLAN binding, and a device lands on the VLAN of the key it was flashed with — proven on this AP at firmware 1.3.11 in CHG-0005 phase 6. A per-key VLAN needs no controller network object: it is raw 802.1Q tagging, and the core router serves the DHCP.

Who owns what ( ADR-0012 §6):

  • Inventory owns the SSID and the PPSK profile. omada-wireless.yml creates them and never rewrites or deletes what it finds.
  • The Deevnet API owns the keys inside the profile, one per tenant per trust class. A tenant gets one from terraform apply and never touches the controller.
  • The automation therefore does not report those keys as drift. It names the profiles whose contents it is deliberately not inspecting, because reading them would pull every tenant’s password into Ansible’s memory and output.

One entry you may see and should leave alone. The controller refuses to let a PPSK profile reach zero keys (errorCode -34044), although it will happily create one empty. So when the last tenant key in a profile is revoked, the API leaves one placeholder named DEEVNET-PLACEHOLDER-DO-NOT-USE. Its password is generated, returned to nobody and stored nowhere, so it cannot be used to join anything, and it disappears the moment any real key is issued. It is only ever present when the alternative would be an empty profile.

Changing any of this goes through inventory, never the controller UI. See Build Network: Wireless.

Page last modified: September 27, 2026