Como integrar ZABBIX com Controladora Omada
1. Instale o Zabbix
Acesse o link Download Zabbix para baixar e instalar o Zabbix 7.4 de acordo com as instruções de instalação do site oficial. Aqui usaremos a distribuição Ubuntu 22.04 como exemplo.
Selecione:
- “Server, Frontend, Agent 2” como o componente Zabbix;
- MySQL como DATABASE;
- Apache como o WEB SERVER.

Figura 1
2. Configurando a Controladora
Na tela global da sua controladora, selecione a opção "settings > Plataform Integration"
Clique em "Add New App" e utilize o modo "Authorization Code"
Figura 2
Copie os campos de identificação do cliente (client ID) e a chave (client secret)
Figura 3
Clique no ícone de visualização à direita e salve as informações de "Interface Access Address" e "Omada ID"
Figura 5
3. Configurando o Zabbix
Acesse o seu servidor Zabbix (http://host/zabbix) e acesse como administrador (Admin/Zabbix).
3.1 Configurando os itens de monitoramento
Na sua barra lateral, vá em “Data Collection” e em Hosts. Clique para criar um novo host e preencha o nome, "Omada Controller"
Figura 6
Clique em “Items” do seu novo host.
Clique em "Create Item" para criar um novo item de monitoramento do tipo script.
Configure os parâmetros conforme descritos:
- Name: Omada Open API
- Type: Script
- Key: omada.get_token (valor único)
- Type of information: Text
- Script: Insira o código Javascript.
Em seguida temos um exemplo.
try {
var request = new HttpRequest();
// 1. Parameter configuration area
var baseUrl = "https://use1-omada-northbound.tplinkcloud.com"; // Please refer Section 2
var omadacId = "baa5d9d28eb12f4007beeca0b925beb4"; // Please refer to Section 2
var clientId = "3277c5aee1324ef390ef8c9dda716666"; // Please refer to Section 2
var clientSecret = "f7cf5415fd1c4f9ea591463122fca37f"; // Please refer to Section 2
var username = "support.br@omadanetworks.com"; //your tp-link ID
var password = "Admin12345@"; //the password to your tp-link ID
// 2. Identity verification process (Steps 1-3)
// Step 1: Log in to the cloud to obtain session credentials
request.addHeader('Content-Type: application/json');
var loginBody = JSON.stringify({ "username": username, "password": password });
var loginResp = JSON.parse(request.post(baseUrl + "/openapi/authorize/login?client_id=" + clientId + "&omadac_id=" + omadacId, loginBody));
if (loginResp.errorCode !== 0) throw ' Login failed: ' + loginResp.msg;
var csrfToken = loginResp.result.csrfToken;
var sessionId = loginResp.result.sessionId;
// Step 2: Obtain Authorization Code
request.clearHeader();
request.addHeader('Content-Type: application/json');
request.addHeader('Csrf-Token: ' + csrfToken); // The request must include a CSRF token.
request.addHeader('Cookie: TPOMADA_SESSIONID=' + sessionId); // The request must include the session ID.
var codeUrl = baseUrl + "/openapi/authorize/code?client_id=" + clientId + "&omadac_id=" + omadacId + "&response_type=code";
var codeResult = JSON.parse(request.post(codeUrl, "{}"));
if (codeResult.errorCode !== 0) throw ' Failed to obtain authorization code: ' + codeResult.msg;
var authCode = codeResult.result; // Authorization codes typically begin with "OC-".
//Step 3: Obtain Access Token
request.clearHeader();
request.addHeader('Content-Type: application/json');
var tokenUrl = baseUrl + "/openapi/authorize/token?grant_type=authorization_code&code=" + authCode;
var tokenBody = JSON.stringify({ "client_id": clientId, "client_secret": clientSecret });
var tokenResp = JSON.parse(request.post(tokenUrl, tokenBody));
if (tokenResp.errorCode !== 0) throw ' Token exchange failed: ' + tokenResp.msg;
var accessToken = tokenResp.result.accessToken;
// 3. Data Acquisition Process (Step 4 - 5)
// Step 4: Get Site List
request.clearHeader();
request.addHeader('Authorization: AccessToken=' + accessToken); // AccessToken is needed here
var listUrl = baseUrl + "/openapi/v1/" + omadacId + "/sites?page=1&pageSize=100";
var listResult = JSON.parse(request.get(listUrl));
if (listResult.errorCode !== 0) throw ' Failed to retrieve site list: ' + listResult.msg;
var sites = listResult.result.data;
// Step 5: Batch collection of site statistics
request.clearHeader();
request.addHeader('Content-Type: application/json'); // Re-injection is required to prevent error 415.
request.addHeader('Authorization: AccessToken=' + accessToken);
// Construct the request body: Map the omadacId and siteId for each site.
var omadaAndSiteIds = sites.map(function(s) {
return { "omadacId": omadacId, "siteId": s.siteId };
});
var statUrl = baseUrl + "/openapi/v1/" + omadacId + "/sites/statistic";
var statResp = JSON.parse(request.post(statUrl, JSON.stringify({ "omadaAndSiteIds": omadaAndSiteIds })));
if (statResp.errorCode !== 0) throw ' Data collection failed: ' + statResp.msg;
// 4. Return Results
// Returns a JSON string for Zabbix slave monitoring items to parse.
return JSON.stringify(statResp.result);
} catch (error) {
// Unified error capture, returning a standard format for easy Zabbix trigger alerts.
return JSON.stringify({ "status": "error", "message": error.toString() });
}
Teste o script
Figura 7
3.2 Visualizando os dados JSON obtidos no Zabbix
Crie um item de monitoramento dependente para extrair as informações do Site01 para o JSON como uma métrica numérica. Clique em “Create Item” para criar um novo item do tipo Script e configure os parâmetros abaixo:
- Name: Gateway Health - Site01;
- Type: Dependent item;
- Key: omada.gw.health.site01 (Custom unique value)
- Master item: escolha o item de monitoramento tipo script criado anteriormente;
- Type of information: Numeric (float);
- Units: “pontos”, ou deixe em branco (opcional).
Figura 8
Configure o pré-processamento para que o Zabbix encontre adequadamente os valores.
Siga para a aba “Preprocessing” no item de configuração, Clique em Add e escolha JSONPath. No campo de parâmetro inclua a expressão (usando o ID correto).
Figura 9
Clique no botão “Test” à direita para verificar a configuração. Use os dados mais recentes do item de script criado anteriormente (encontrado na seção “Monitoramento”) como valor de entrada para este teste.
Figura 10
A configuração adequada vai trazer o resultado esperado, no exemplo dado, o valor 10.
Figura 11
Crie um item dependente para o Site02 usando os mesmos passos de 3.2.1 a 3.2.3.
Figura 12
Crie os componentes de visualização em sua dashboard.
Agora nós temos os dados “Gateway Health” para o Site01 e Site02, portanto vamos incluir no painel principal. Vá em Dashboards no menu superior e clique em +Add para incluir um widget para o status do Site01. Use os valores abaixo:
- Type: Vamos usar Gauge como exemplo
- Item: Item do Site01
- Min: -10
- Max: 10
- Show: Description, value, value arc e escala.
Figura 13
Agora escolhemos as cores desejadas.

Figura 14
Repita o procedimento para o Site02.
Figura 15
3.3 Configura os alarmes (trigger)
Podemos querer receber uma notificação se as pontuações de integridade do gateway caírem. No host que criamos anteriormente, vá para triggers, clique em “Create trigger” e defina os parâmetros da seguinte forma.
Figura 16
- Name: Gateway Health is low on Site01
- Severity: Disaster
- Expression: Expression: last(/HostName/omada.gw.health.site01) < 6
Aqui configuramos um alerta caso o valor seja menor que 6.
Figura 17
Desta maneira, se o valor ficar abaixo de 6, será gerada uma notificação que pode ser vista em “Monitoring > Problems” e o alerta será apresentado como configurado.
Figura 18
O status irá mudar para “Resolved” assim que o problema for corrigido.
Figura 19
4. Conclusão
O texto acima descreve como usar Omada Open API junto com o Zabbix para monitorar os valores de integridade do gateway de alguns sites.
Essa abordagem manual não é recomendada para monitoramento em grande escala devido à complexidade da configuração. O Zabbix é incrivelmente flexível — convidamos você a explorar seus recursos avançados de automação para atender às suas necessidades específicas.