Monitor and control your TP-Link Omada SDN infrastructure directly from Home Assistant.
This integration is under active development and has been heavily developed with AI assistance. The maintainer cannot guarantee long-term support. Use at your own risk and always test in a non-production environment first. Contributions and feedback are welcome!
- About
- Features
- Installation
- Configuration
- Entities
- Automation Examples
- Use Cases
- Options
- Supported Devices
- Known Limitations
- Removing the Integration
- Getting Help & Contributing
- License
Connects to your TP-Link Omada SDN controller (cloud or local) through the Omada Open API and exposes your infrastructure, clients, and security data as Home Assistant entities — monitoring, control, and automation triggers included. See Features for the full breakdown.
Authentication uses OAuth 2.0 Client Credentials with fully automatic token refresh — set it up once and forget it.
Not every feature works on every setup — some need specific hardware:
| Feature | Platform(s) | Requires |
|---|---|---|
| Device status, CPU/memory, uptime, IP, firmware update/install | Sensor, Binary Sensor, Device Tracker, Button, Update | Any AP, switch, or gateway (install needs write access) |
| Wired client count, uplink device/port, link speed | Sensor | Device with confirmed wired ports (gateways always qualify) |
| Wireless client count, per-band stats, radio utilization, SSID & radio-band switches | Sensor, Switch | Access Point (per-band sensors disabled by default; switches need write access) |
| Temperature, public IP, WAN rate/total/latency/loss, WAN status | Sensor, Binary Sensor | Gateway |
| Application (DPI) traffic | Sensor | Gateway with DPI enabled, plus clients/apps selected in Options |
| PoE budget/used/remaining, per-port power & switch | Sensor, Switch | PoE-capable switch (switch needs write access) |
| Site-wide LED toggle, WLAN optimization | Switch, Button, Binary Sensor | Any site (needs write access) |
| Threat heatmap (rolling hourly/daily/weekly/monthly) | Sensor | Controller with the Omada Threat Management API — not on the free cloud tier (see below); can be disabled in Options |
| Client sensors, presence, block/unblock, reconnect | Sensor, Binary Sensor, Device Tracker, Switch, Button | Selected client (RSSI/SNR/power-save are wireless-only; block/unblock and reconnect need write access) |
World heatmap card: Threat heatmap sensors feed the companion
ha-world-heatmap-card, a generic Lovelace card for any sensor exposing this attribute shape. This integration is backend-only — install the card separately to visualize the data.
Free cloud accounts won't work. Omada Cloud/Central Essentials has no Open API support — confirmed by TP-Link support. Cloud mode needs the paid Standard tier or higher; otherwise use Local with a self-hosted controller. See TROUBLESHOOTING.md for the resulting error.
OC200 controllers don't support Open API, regardless of licensing — a hardware limitation. Use a different hardware controller (e.g. OC300) or the free Software Controller instead.
Permissions: Control entities (PoE/LED/SSID/radio-band switches, firmware install) need write-access credentials. Viewer-only credentials still get all monitoring entities; controls are detected and skipped automatically.
- Open HACS → Integrations → ⋮ → Custom repositories
- Add
https://github.com/bullitt186/ha-omada-open-apias Integration - Search for TP-Link Omada Open API, click Download, then restart Home Assistant
- Go to Settings → Devices & Services → Add Integration and search for TP-Link Omada Open API
- Download the latest release and copy the
omada_open_apifolder into yourcustom_components/directory - Restart Home Assistant
- Add the integration via Settings → Devices & Services
- Log in to the TP-Link Omada Cloud Portal or your local controller's web UI
- Go to Settings → Platform Integration → OpenAPI
- Create an application to obtain your Client ID, Client Secret, and note your Omada ID (controller ID)
No API credentials needed — use the same username and password you use to log in to the gateway's web interface. The Omada Controller ID is auto-detected during setup.
The integration guides you through a multi-step configuration:
Cloud / Local controllers:
- Controller type — Select
CloudorLocal - Region (cloud) or API URL (local, e.g.
https://192.168.1.100:8043) - Credentials — Omada ID, Client ID, Client Secret
- Sites — Select one or more sites to monitor
- Clients (optional) — Select clients for presence detection
- Applications (optional) — Select DPI-tracked applications for traffic sensors
Fusion Gateways:
- Controller type — Select
Fusion Gateway - Gateway URL + Credentials — Enter the gateway URL (e.g.
https://192.168.1.1), username, and password - Sites — Auto-selected (Fusion gateways have a single site)
- Clients (optional) — Select clients for presence detection
- Applications (optional) — Select DPI-tracked applications for traffic sensors
The following parameters are required during the initial setup flow:
| Parameter | Step | Required | Description |
|---|---|---|---|
| Controller Type | 1 – Controller type | Yes | Cloud (TP-Link cloud-hosted), Local (self-hosted controller), or Fusion Gateway (built-in controller). Determines the authentication method and API endpoint used. |
| Region | 2 – Region (cloud only) | Yes (cloud) | Cloud region where your controller is deployed: United States, Europe, or Asia Pacific (Singapore). Sets the API base URL automatically. |
| Controller URL | 2 – Local URL (local/fusion) | Yes (local/fusion) | Full URL of your controller, including protocol and port (e.g., https://192.168.1.100:8043 for local, https://192.168.1.1 for Fusion). |
| Username | 2 – Fusion credentials (fusion only) | Yes (fusion) | Web interface login username for the Fusion Gateway. |
| Password | 2 – Fusion credentials (fusion only) | Yes (fusion) | Web interface login password for the Fusion Gateway. |
| Omada ID | 3 – Credentials (local/cloud) | Yes (local/cloud) | The MSP ID or Customer ID from your Open API application. Found in Settings → Platform Integration → Open API in the Omada controller. |
| Client ID | 3 – Credentials (local/cloud) | Yes (local/cloud) | OAuth2 Client ID from your Open API application. Generated when creating a new application in the controller. |
| Client Secret | 3 – Credentials (local/cloud) | Yes (local/cloud) | OAuth2 Client Secret from your Open API application. Shown once when the application is created — copy and store it securely. |
| Sites | 4 – Site selection | Yes | One or more Omada sites to monitor. Fusion gateways with a single site are auto-selected. All devices and clients under the selected sites become available as Home Assistant entities. |
| Clients | 5 – Client selection | No | Network clients to track for presence detection and per-client metrics. Can be modified later via Options. Limited to the first 200 clients in the UI. |
| Applications | 6 – Application selection | No | DPI-tracked applications for per-client traffic monitoring (upload/download sensors). Requires DPI enabled on the gateway. Can be modified later via Options. |
Network requirements:
- Cloud: outbound HTTPS (443) to TP-Link cloud
- Local: network access to your controller's API port (typically 8043)
- Fusion: HTTPS access to the gateway's IP (port 443)
| Entity | Example | Description |
|---|---|---|
| Sensor | sensor.office_ap_connected_clients |
Connected client count |
| Sensor | sensor.office_ap_uptime |
Uptime as a timestamp |
| Sensor | sensor.office_ap_cpu_utilization |
CPU usage (%) |
| Sensor | sensor.office_ap_memory_utilization |
Memory usage (%) |
| Sensor | sensor.office_ap_clients_2_4_ghz |
2.4 GHz clients (APs only) |
| Sensor | sensor.office_ap_clients_5_ghz |
5 GHz clients (APs only) |
| Sensor | sensor.main_switch_poe_power_used |
PoE power draw (W) |
| Sensor | sensor.main_switch_poe_power_budget |
PoE power budget (W) |
| Sensor | sensor.main_switch_poe_power_remaining |
PoE remaining (%) |
| Sensor | sensor.main_switch_port_3_poe_power |
Per-port PoE power (W) |
| Binary Sensor | binary_sensor.office_ap_status |
Online / offline |
| Binary Sensor | binary_sensor.office_ap_firmware_update_available |
Firmware update needed |
| Device Tracker | device_tracker.office_ap |
Device presence (home/away) |
| Switch | switch.main_switch_port_3_poe |
PoE on/off per port |
| Switch | switch.home_led |
Site-wide LED on/off |
| Button | button.office_ap_reboot |
Reboot device |
| Button | button.office_ap_locate |
Flash LEDs / beep to locate |
| Button | button.home_wlan_optimization |
Start WLAN optimization |
| Update | update.office_ap_firmware |
Firmware with install action |
| Entity | Example | Description |
|---|---|---|
| Sensor | sensor.johns_iphone_ip_address |
Current IP |
| Sensor | sensor.johns_iphone_rssi |
Signal strength (dBm) |
| Sensor | sensor.johns_iphone_snr |
Signal-to-noise ratio (dB) |
| Sensor | sensor.johns_iphone_ssid |
Connected network |
| Sensor | sensor.johns_iphone_connected_to |
Connected AP / switch |
| Sensor | sensor.johns_iphone_downloaded |
Total downloaded (MB) |
| Sensor | sensor.johns_iphone_uploaded |
Total uploaded (MB) |
| Sensor | sensor.johns_iphone_rx_activity |
RX rate (MB/s) |
| Sensor | sensor.johns_iphone_tx_activity |
TX rate (MB/s) |
| Sensor | sensor.johns_iphone_uptime |
Client uptime |
| Binary Sensor | binary_sensor.johns_iphone_power_save |
Power-save mode (wireless) |
| Device Tracker | device_tracker.johns_iphone |
Presence detection |
| Switch | switch.johns_iphone_network_access |
Block / unblock client |
| Button | button.johns_iphone_reconnect |
Reconnect wireless client |
| Entity | Example | Description |
|---|---|---|
| Sensor | sensor.johns_iphone_youtube_download |
App download traffic (auto-scaled) |
| Sensor | sensor.johns_iphone_youtube_upload |
App upload traffic (auto-scaled) |
Application traffic sensors auto-scale their unit (B, KB, MB, GB, TB) and reset daily at midnight.
| Entity | Example | Description |
|---|---|---|
| Sensor | sensor.office_site_threat_heatmap_hourly |
Threat count, rolling last 60 minutes |
| Sensor | sensor.office_site_threat_heatmap_daily |
Threat count, rolling last 24 hours |
| Sensor | sensor.office_site_threat_heatmap_weekly |
Threat count, rolling last 7 days |
| Sensor | sensor.office_site_threat_heatmap_monthly |
Threat count, rolling last 30 days |
One set of four per selected site. State is the raw threat count for a rolling window (relative to "now", never calendar-aligned). Attributes carry source, site_id, site_name, window, window_start/window_end, total_rows, fetched_rows, skipped_rows, max, and a points array (lat, lon, country, value, sample IPs, top signatures/activities, severities) — the shape ha-world-heatmap-card consumes. Disable under Options → Site Entity Settings; unsupported controllers just leave the sensors unavailable.
automation:
- alias: "AP offline alert"
trigger:
- platform: state
entity_id: binary_sensor.living_room_ap_status
to: "off"
action:
- action: notify.mobile_app
data:
title: "Network Alert"
message: "Living Room AP is offline!"automation:
- alias: "Welcome home"
trigger:
- platform: state
entity_id: device_tracker.johns_iphone
to: "home"
action:
- action: light.turn_on
target:
entity_id: light.entranceautomation:
- alias: "High CPU on switch"
trigger:
- platform: numeric_state
entity_id: sensor.main_switch_cpu_utilization
above: 80
for: "00:05:00"
action:
- action: persistent_notification.create
data:
title: "Performance Alert"
message: "Main switch CPU above 80% for 5 minutes"automation:
- alias: "Disable PoE on port 5 at night"
trigger:
- platform: time
at: "23:00:00"
action:
- action: switch.turn_off
target:
entity_id: switch.main_switch_port_5_poe- Network dashboard — device status, client counts, CPU/memory, PoE budgets at a glance
- Presence detection — trigger lights/locks/thermostat from device trackers
- PoE scheduling — power cameras/APs/phones down at night, back up in the morning
- Firmware management — get notified and install updates from HA
- Bandwidth alerts — flag a client or app exceeding a traffic threshold
- Guest network automation — toggle SSID broadcast by time, presence, or switch
- Infrastructure health — alert on sustained high CPU/memory for proactive maintenance
After initial setup, go to Settings → Devices & Services → TP-Link Omada Open API → Configure to access a menu with the following configuration options:
Add or remove tracked network clients. Select clients that should have device tracker entities and per-client sensors (IP, RSSI, SNR, traffic, etc.) created in Home Assistant.
| Parameter | Type | Description |
|---|---|---|
| Clients to Track | Multi-select | List of network clients discovered on your Omada network. Select one or more to create entities. Deselecting a client removes its entities and device. Limited to 200 clients in the UI. |
Add or remove tracked DPI applications for per-client traffic monitoring. Each selected application creates upload and download sensors for every tracked client.
| Parameter | Type | Description |
|---|---|---|
| Applications to Track | Multi-select | List of DPI-tracked applications discovered on your network. Requires DPI (Deep Packet Inspection) to be enabled on your gateway. Traffic data resets daily at midnight. |
Configure how frequently each data type is polled from the Omada controller. Lower values give more responsive updates but increase API load.
| Parameter | Default | Range | Description |
|---|---|---|---|
| Device polling interval | 60 s | 10 – 3600 s | How often infrastructure device data (APs, switches, gateways) is refreshed. Affects status, CPU, memory, uptime, PoE, and firmware sensors. |
| Client polling interval | 30 s | 10 – 3600 s | How often client data is refreshed. Affects device trackers, RSSI, SNR, traffic, and activity rate sensors. |
| Application traffic polling interval | 300 s | 10 – 3600 s | How often per-client application traffic data is refreshed. Higher values recommended since DPI data updates less frequently on the controller. |
| Parameter | Default | Description |
|---|---|---|
| Threat heatmap sensors | Enabled | Enables/disables the four threat heatmap sensors (hourly/daily/weekly/monthly) per site. Disable if your controller doesn't support the Omada Threat Management endpoint. |
All TP-Link Omada SDN devices accessible via the Open API are supported:
- Controllers: OC300, software controllers, cloud-managed controllers (OC200 is not supported — no Open API)
- Fusion Gateways: TP-Link Omada Fusion series (built-in controller, no separate hardware controller required)
- Access Points: EAP series (WiFi 5/6/6E/7, indoor & outdoor)
- Switches: JetStream and Smart Managed switches (PoE and non-PoE)
- Gateways: ER and SafeStream series
- Clients: Any device connected to the Omada network (wireless and wired)
Fusion + Traditional side by side: You can add both a Fusion Gateway and a traditional Omada controller in the same Home Assistant instance — each as its own integration entry with independent authentication and polling.
Device availability depends on your controller's firmware version and API access level. See Features for the OC200 and free-cloud-tier limitations.
- Cloud dependency: Cloud controllers require internet connectivity
- DPI required: Application traffic monitoring needs DPI enabled on the gateway
- Local controller: Requires Open API enabled (not available on all firmware versions)
- Fusion Gateway: Single-site only; no Open API app creation UI (uses web-session auth instead)
- API rate limits: Respected automatically; rarely an issue with default polling intervals
- Viewer-only credentials: PoE and LED switches are not created; all monitoring entities still work
Settings → Devices & Services → TP-Link Omada Open API → ⋮ → Delete, then confirm. This removes all entities and devices it created. To also clear config data/tokens, delete the custom_components/omada_open_api folder afterward.
Something not working? See TROUBLESHOOTING.md. Want to contribute code, report a bug, or request a feature? See CONTRIBUTING.md.
This project is licensed under the MIT License — see LICENSE for details.
Acknowledgments: Home Assistant community, TP-Link for the Omada Open API, HACS for custom component distribution.
