Skip to main content

Execute API calls to Omada Controller from python code

Project description

omada-client

Python client for Tp-Link Omada Controller (Omada Software Controller). Allows executing API calls to the Omada Controller from Python code.

PyPI Version PyPI Version PyPI - Downloads Tests

Library created for automating and integrating with TP-Link Omada SDN Controllers. Unlike raw HTTP scripts or outdated wrappers, this library provides a clean, typed interface that enables developers and network engineers to manage Omada infrastructure with minimal effort and maximum reliability.

It abstracts away authentication, session handling, CSRF tokens, and endpoint routing, allowing you to focus on logic instead of network plumbing. The library is fully compatible with modern Python environments (>=3.11), supports structured data models via Pydantic, and includes utilities for batching large requests, safely manipulating network routes, and managing connected devices.

Installation

Using python:

pip install omada-client

Quick Start

Using direct credentials

from omada_client import OmadaClient

omada = OmadaClient(
    "OMADA_DOMAIN",    # URL of Omada WebUI
    "OMADA_USER",      # Username
    "OMADA_PASSWORD",  # Password
    "SITE_ID"          # Site identify (Optional. Default: First site in list)
)

Using environment variables

from dotenv import load_dotenv
import os
from omada_client import OmadaClient

load_dotenv()

omada = OmadaClient(
    os.getenv("OMADA_DOMAIN"),
    os.getenv("OMADA_USER"),
    os.getenv("OMADA_PASSWORD"),
    os.getenv("SITE_ID")
)

print(omada.get_devices())

Methods Reference

Category Method Parameters Description
WAN Ports get_all_wan_ports() None List all WAN ports
get_wan_ports_by_name(name) name: str Get WAN port by name
get_wan_ports_by_desc(desc) desc: str Get WAN port by description
Wireless get_all_wlan() None List all Wi-Fi networks
get_wlan_by_ssid(ssid) ssid: str Get Wi-Fi network by SSID
Static Routes create_static_route(route_name, destinations, interface_id, next_hop_ip, enable=False, metricId=0) route_name: str, destinations: list[str], interface_id: str, next_hop_ip: str Create a single static route
create_static_route_to_inteface_with_big_data(data_static_routes, interface_id, next_hop_ip, enable=False, metricId=0) data_static_routes: list, interface_id: str, next_hop_ip: str Create static routes from large data
Devices & Clients get_devices() None List all devices
get_clients() None List all clients
get_client_by_mac(mac) mac: str Get client by MAC
get_client_by_ip(ip_address) ip_address: str Get client by IP
create_group_ip_v4(group_name, ip_v4_list) group_name: str, ip_v4_list: list[GroupMemberIpv4Model] Create new group IPv4 addresses
delete_ipv4_from_group_by_name(group_name, ip_v4) group_name: str, ip_v4: GroupMemberIpv4Model Remove IPv4 address from group by name
Groups get_all_groups() List all groups
get_group_by_id(id) id: str Get group port by ID
get_group_by_name(name) name: str Get group port by Name
IP Assignment set_client_fixed_address_by_mac(mac, ip_address=None) mac: str, ip_address: str Assign fixed IP by MAC
set_client_fixed_address_by_ip(ip_address) ip_address: str Assign fixed IP by IP
set_client_dymanic_address_by_mac(mac) mac: str Assign dynamic IP by MAC

Advanced Example

Create static routes from large data sets

from dotenv import load_dotenv
import os
from omada_client import OmadaClient

load_dotenv()

omada = OmadaClient(
    os.getenv("OMADA_DOMAIN"),
    os.getenv("OMADA_USER"),
    os.getenv("OMADA_PASSWORD")
)

data = [
    {"name": "group_1", "ips": "99.99.99.99/24, 88.88.88.88/24"},
    {"name": "group_2", "ips": "99.99.99.99/24, 88.88.88.88/24"}
]

wan = omada.get_wan_ports_by_desc("openwrt")

omada.create_static_route_to_inteface_with_big_data(
    data_static_routes=data,
    interface_id=wan.port_uuid,
    next_hop_ip=wan.wan_port_ipv4_setting.get("ipv4Static").get("gateway"),
    enable=False
)

Notes

  • Replace all IPs, MAC addresses, and credentials with real values.
  • Environment variables help keep sensitive credentials out of code.
  • Use badges above to quickly check test status and PyPI version.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

omada_client-1.2.22.tar.gz (12.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

omada_client-1.2.22-py3-none-any.whl (12.1 kB view details)

Uploaded Python 3

File details

Details for the file omada_client-1.2.22.tar.gz.

File metadata

  • Download URL: omada_client-1.2.22.tar.gz
  • Upload date:
  • Size: 12.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for omada_client-1.2.22.tar.gz
Algorithm Hash digest
SHA256 7aec4219ab97d4fc35baf57489e177bf50da463d77fe45bedd7113acfce0c129
MD5 72878c59856fae9324b1731785796c1b
BLAKE2b-256 98f3ddfc63b4132aff522c301597de0ea46e61300452e8e4103222525ea7ae46

See more details on using hashes here.

Provenance

The following attestation bundles were made for omada_client-1.2.22.tar.gz:

Publisher: publish-pypi.yml on ErilovNikita/omada-client

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file omada_client-1.2.22-py3-none-any.whl.

File metadata

  • Download URL: omada_client-1.2.22-py3-none-any.whl
  • Upload date:
  • Size: 12.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for omada_client-1.2.22-py3-none-any.whl
Algorithm Hash digest
SHA256 3674497f9687698151e532e01827172850e1b5607c108605c817ead0e964e8e8
MD5 e00eb5ff63d9cfcf9f7f7bcc2c1e525f
BLAKE2b-256 8e50ea872b4533813557ba99e0ce5b80a11463430b7401148ddfaaa6efd1bac8

See more details on using hashes here.

Provenance

The following attestation bundles were made for omada_client-1.2.22-py3-none-any.whl:

Publisher: publish-pypi.yml on ErilovNikita/omada-client

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page