API de Dispositivos

Referência completa da área action=dispositivo: leitura da topologia de monitoramento, CRUD de grupos, dispositivos e sensores, descoberta SNMP de interfaces e consulta ao catálogo de sensores.

Visão geral Novo na 7.2

A API de Dispositivos permite que sistemas externos do provedor (ERP, scripts de automação, painéis próprios, outro servidor Ravi usado como fonte remota de dashboard) consultem e gerenciem a árvore de monitoramento sem abrir a interface web. Com ela você pode:

  • Ler a topologia completa (grupos, dispositivos e sensores) com status e valores atuais.
  • Criar, editar e excluir grupos, dispositivos e sensores.
  • Pausar e retomar sensores, por exemplo para silenciar alertas durante uma manutenção programada.
  • Fazer descoberta SNMP de interfaces por API e criar sensores de tráfego das portas escolhidas.
  • Consultar o catálogo de sensores (categorias e modelos) para saber qual model_id usar na criação.
  • Obter um resumo de status (contagem de sensores por estado) para integrar em painéis externos.
  • Ler um grupo em profundidade, um sensor em detalhe e o histórico de leituras de um sensor.
  • Buscar em toda a árvore por nome e consultar o histórico de alertas.

Na 7.2 esta área passou a usar o mesmo núcleo de código da tela nativa de Dispositivos. Um sensor criado pela API é um sensor de verdade: a consulta SNMP é validada na hora, as condições de alerta são avaliadas e a interface reflete a mudança imediatamente. Também são novidades da 7.2 as operações edit_sensor, edit_device, edit_group, sensor_descobrir, sensor_categorias, sensor_modelos e delete_all_sensors. Completam a área as leituras get_group, get_sensor, get_sensor_history, alerts e search.

Pré-requisitos

  • Chave de API com a permissão Acesso a Dispositivos marcada (veja Criar uma chave de API). Sem a permissão a chamada recebe HTTP 403 com {"status":"error","message":"Access denied for dispositivo"}.
  • Não há exigência de plano nem distinção entre Master e Admin: a chave dá acesso ao módulo inteiro.
  • Para operações que consultam SNMP (add_sensor de modelos SNMP e sensor_descobrir), o dispositivo precisa de SNMP configurado e alcançável a partir do servidor Ravi.

Ao marcar as permissões na modal da chave, confira a posição do checkbox: na versão atual o segundo item da grade é o de Dispositivos, mesmo que o rótulo exibido se pareça com o de Concentradoras (o terceiro item é o de Concentradoras). A ordem dos checkboxes é o que vale.

Endereço e forma de chamada

Todas as operações usam o endpoint único da API, com action=dispositivo e a operação em operation. Os parâmetros podem ir por GET ou POST (prefira POST em produção para o token não ficar em logs de URL).

formato
GET/POST  https://SEU-SERVIDOR/api/api.php?token=CHAVE&action=dispositivo&operation=NOME_DA_OPERACAO&...

A resposta é sempre application/json; charset=utf-8. Erros do gateway chegam com HTTP 400 (sem token ou ação), 401 (token inválido) e 403 (sem permissão). Erros dentro do módulo, porém, costumam voltar com HTTP 200 e o erro no corpo.

Formatos de resposta

O corpo da resposta varia conforme a operação; cada card de referência abaixo mostra o formato exato. Para o tratamento de erros no seu cliente, trate os dois casos: considere erro qualquer HTTP maior ou igual a 400, corpo com "msg" ou corpo com "status":"error".

FormatoOperaçõesSucessoErro
Objeto direto list_groups, list_devices, list_sensors, get_group, get_device, get_sensor, get_sensor_history, alerts, search, add_group, add_device, pause_sensor, resume_sensor, delete_sensor, delete_device, delete_group, status_summary, topology Corpo direto com os dados, ou {"msg":"ok", ...} nas escritas {"msg":"texto do erro"} (HTTP 200)
Envelope status add_sensor, sensor_categorias, sensor_modelos, sensor_descobrir, delete_all_sensors, edit_sensor, edit_device, edit_group {"status":"success", ...} {"status":"error","message":"..."}

Operação inexistente ou grafada errada devolve {"msg":"Invalid device operation"}.

Conceitos

ConceitoO que é
GrupoNó da árvore de monitoramento. Grupos podem conter subgrupos e dispositivos. parent_id = 0 significa raiz.
DispositivoEquipamento monitorado (IP + marca). Pertence a um grupo (group_id) e tem um código de marca (equipment).
SensorMétrica monitorada dentro de um dispositivo. Cada sensor nasce de um modelo do catálogo e tem um status numérico (tabela abaixo).
Modelo de sensorEntrada do catálogo que define o que coletar. O catálogo é organizado em categorias. Para criar um sensor via API é preciso informar o model_id: descubra-o com sensor_categorias e sensor_modelos.
Protocolos de modelo1 = SNMP (subtipo 1 = consulta simples; subtipo 2 = interface, exige descoberta antes), 2 = ping, 8 = agregador (soma de outros sensores). Outros protocolos do catálogo não são suportados pela criação via API.
Cascata SNMPA configuração SNMP usada segue a mesma cascata da tela: padrão do sistema, sobrescrito pelo SNMP próprio do grupo (se ativo), sobrescrito pelo SNMP próprio do dispositivo (se ativo).
Grupo de sensores (grupo_sensor_id)Agrupamento visual de sensores no painel do dispositivo. A API só atribui o sensor a um grupo existente; a gestão desses grupos é feita pela interface.

Status de sensor

Os campos status e status_text das listagens usam estes códigos:

Códigostatus_textSignificado
1OfflineSensor sem resposta.
2PausadoPausado manualmente; não é testado nem alerta.
3AlertaCondição de alerta atingida.
4CríticoCondição crítica atingida.
5Não testadoSensor novo ou retomado, aguardando o primeiro ciclo de coleta.
6OKNormal.
20Falha SNMPO equipamento respondeu, mas a consulta SNMP falhou.

Existem sub-estados internos (7 a 14, variações de alerta e crítico). Na operação topology eles já vêm colapsados nos códigos 3 e 4; nas demais listagens o código cru é devolvido.

Endpoints transversais de leitura

Além das operações organizadas por grupo, dispositivo e sensor, a área oferece duas leituras que atravessam toda a árvore: o histórico de alertas e a busca global. As duas respondem com o objeto direto dos dados.

GET /api/api.php?action=dispositivo&operation=alerts

Lista os alertas registrados, do mais recente para o mais antigo, com o dispositivo e o sensor de origem, os canais de notificação disparados e a duração de cada ocorrência.

ParâmetroTipoObrigatórioDescrição
limitintnão (padrão 100)Máximo de alertas retornados.
only_activeboolnão (padrão false)"true" traz só os alertas ainda não resolvidos.
group_idintnãoFiltra os alertas pelos dispositivos de um grupo.
curl
curl -s "https://ravi.exemplo.com/api/api.php?token=CHAVE&action=dispositivo&operation=alerts&only_active=true&limit=50"
resposta (resumida)
{"alerts":[{"id":9012,"date":"2026-07-04 09:15:00","sensor_id":8623,"sensor_name":"Tráfego sfp-sfpplus1",
  "device_id":5,"device_name":"RB Borda","device_ip":"10.0.0.1","type":3,"type_text":"Alerta","tag":"ifMikrotik",
  "messages":["Tráfego acima do limite"],
  "notifications":{"telegram":1,"email":1,"whatsapp":0,"push":0},
  "resolved":false,"resolved_date":null,
  "duration":{"days":0,"hours":1,"minutes":23,"seconds":11,"total_seconds":4991,"formatted":"01:23:11"}}],
 "total":1,"active_count":1}

O campo type usa estes códigos, com o rótulo correspondente em type_text; qualquer outro valor volta com type_text Desconhecido:

typetype_text
1Offline
2Pausado
3Alerta
4Crítico
5Não testado
7Warning
10Crítico
  • resolved indica se o alerta já foi resolvido; nesse caso resolved_date traz a data e duration é o tempo total. Para alertas ativos, a duração é contada até o momento da consulta.
  • duration.formatted vem como HH:MM:SS, prefixado pela contagem de dias quando houver: por exemplo "06:35:20" para menos de um dia e "2d 05:30:45" a partir de um dia.
  • Os quatro campos de notifications (telegram, email, whatsapp, push) são números, não booleanos: 0 = não enviado, 1 = enviado quando o problema surgiu, 2 = enviado na resolução do problema, 3 = falha no envio.
  • total é quantos alertas vieram na resposta; active_count, quantos deles seguem ativos.
GET /api/api.php?action=dispositivo&operation=search

Busca por texto em toda a árvore de monitoramento e devolve os grupos, dispositivos e sensores que casam com o termo. Útil para uma barra de busca em um painel externo. O termo é comparado por trecho (contém), sem diferenciar maiúsculas: grupos pelo nome, dispositivos pelo nome ou pelo IP e sensores pelo nome ou pela tag.

ParâmetroTipoObrigatórioDescrição
querystringsimTermo de busca (mínimo 2 caracteres).
typestringnão (padrão all)Restringe o tipo: all, groups, devices ou sensors.
curl
curl -s "https://ravi.exemplo.com/api/api.php?token=CHAVE&action=dispositivo&operation=search&query=borda&type=all"
resposta
{"results":{
  "groups":[{"id":12,"name":"POP Centro","parent_id":0}],
  "devices":[{"id":5,"name":"RB Borda","ip":"10.0.0.1","group_id":12,"equipment":"Mikrotik"}],
  "sensors":[{"id":8623,"name":"Tráfego sfp-sfpplus1","device_id":5,"device_name":"RB Borda",
              "status":6,"status_text":"OK","tag":"ifMikrotik"}]}}

Com type diferente de all, apenas a lista correspondente é preenchida; as demais vêm vazias. Cada lista devolve no máximo 50 resultados por tipo: se alguma vier com 50 itens, refine o termo de busca. Nos dispositivos, equipment vem como o nome da marca (diferente do list_devices, que devolve o código numérico). Erro: Search query must be at least 2 characters.


Grupos

Operações sobre os nós da árvore de monitoramento: listar por nível, criar, editar (inclusive SNMP próprio, posição no mapa e automações) e excluir.

GET /api/api.php?action=dispositivo&operation=list_groups

Lista os grupos de um nível da árvore. Não é recursivo: devolve apenas o nível pedido, na ordem em que aparecem na tela.

ParâmetroTipoObrigatórioDescrição
parent_idintnão (padrão 0)ID do grupo pai. 0 lista os grupos da raiz.
curl
curl -s "https://ravi.exemplo.com/api/api.php?token=CHAVE&action=dispositivo&operation=list_groups&parent_id=0"
resposta
{"groups":[{"id":12,"name":"POP Centro","parent_id":0},{"id":15,"name":"Backbone","parent_id":0}]}
GET /api/api.php?action=dispositivo&operation=get_group Novo na 7.2

Devolve um grupo com sua subárvore completa e um resumo de status. Diferente do list_groups (que traz só um nível), esta operação desce recursivamente pelos subgrupos e, por padrão, inclui os dispositivos e os sensores de cada nível.

ParâmetroTipoObrigatórioDescrição
group_idintsimGrupo raiz da consulta.
include_devicesboolnão (padrão true)"false" omite a lista de dispositivos de cada grupo (traz só a estrutura de grupos).
include_sensorsboolnão (padrão true)"false" omite os sensores de cada dispositivo.
curl
curl -s "https://ravi.exemplo.com/api/api.php?token=CHAVE&action=dispositivo&operation=get_group&group_id=12"
resposta (resumida)
{"group":{"id":12,"name":"POP Centro","parent_id":0,
  "subgroups":[{"id":18,"name":"Sala técnica","parent_id":12,"subgroups":[],"devices":[],"stats":{}}],
  "devices":[{"id":5,"name":"RB Borda","ip":"10.0.0.1","group_id":12,"equipment":"Mikrotik",
    "sensors":[{"id":301,"name":"Carga de CPU","device_id":5,"status":6,"status_text":"OK",
                "value":"12%","tag":"cpuMikrotik","unit":"%","schedule":"1m"}],
    "status":{"total_sensors":1,"sensors_ok":1,"sensors_alert":0,"sensors_error":0,
              "sensors_offline":0,"sensors_paused":0,"overall":"ok"}}],
  "stats":{"total_devices":8,"total_sensors":64,"sensors_ok":60,"sensors_alert":1,
           "sensors_error":0,"sensors_offline":2,"sensors_paused":1}}}
  • Cada nó de subgroups repete a mesma estrutura (subgroups, devices, stats), de forma recursiva.
  • Nos dispositivos, equipment vem como o nome da marca (por exemplo "Mikrotik", "Outro"). Já list_devices e get_device devolvem o código numérico da marca (tabela do add_device).
  • Cada sensor traz id, name, device_id, status, status_text, value (formatado), tag, unit e schedule. Os campos unit e schedule aparecem só aqui: o list_sensors não devolve esses dois.
  • Cada dispositivo traz também um bloco status que resume o equipamento (campos na tabela abaixo).
  • O bloco stats conta os sensores da subárvore por estado (sensors_ok, sensors_alert, sensors_error, sensors_offline, sensors_paused), útil para um resumo por POP.

Bloco status de cada dispositivo

CampoConteúdo
total_sensorsTotal de sensores do dispositivo.
sensors_okSensores OK.
sensors_alertSensores em alerta (status 3 e 7).
sensors_errorSensores em erro (status 4 e 20).
sensors_offlineSensores offline (status 1).
sensors_pausedSensores pausados (status 2).
overallResumo do dispositivo, com precedência: error se houver sensor em erro, senão alert, senão offline, senão ok. Quando nenhum sensor se encaixa (por exemplo todos não testados), vem unknown.

Erros: Group ID is required, Group not found.

POST /api/api.php?action=dispositivo&operation=add_group

Cria um grupo. O grupo novo entra no fim da ordem do nível. Nome duplicado no mesmo nível é bloqueado (em níveis diferentes pode repetir).

ParâmetroTipoObrigatórioDescrição
namestringsimNome do grupo. Caracteres HTML são convertidos em entidades.
parent_idintnão (padrão 0)Grupo pai. 0 cria na raiz.
curl
curl -s -d "token=CHAVE&action=dispositivo&operation=add_group&name=POP Norte" https://ravi.exemplo.com/api/api.php
resposta
{"msg":"ok","group_id":77}

Erros: Group name is required, Group already exists at this level.

POST /api/api.php?action=dispositivo&operation=edit_group Novo na 7.2

Edita um grupo existente com semântica PATCH: só altera o que for enviado; campos omitidos ficam como estão.

ParâmetroTipoObrigatórioDescrição
group_idintsimGrupo a editar.
namestringnãoNovo nome.
parent_idintnãoMove o grupo para outro pai.
ativasnmpintnão2 = o grupo passa a ter SNMP próprio (herdado pelos dispositivos filhos que herdam); outro valor = usa o padrão do sistema.
snmp_versionintnãoVersão SNMP do grupo: 1, 2 ou 3.
snmp_communitystringnãoCommunity (v1/v2c) ou usuário (v3).
snmp_portintnãoPorta SNMP.
snmp_seclevel / snmp_authproto / snmp_cryptoproto / snmp_authpass / snmp_cryptopassstringnãoParâmetros SNMPv3: nível de segurança, protocolo de autenticação, protocolo de criptografia e as duas senhas.
latitude / longitudedecimalnãoPosição no mapa. Valores vazios ou não numéricos são gravados como nulos.
autosensorstringnãoTemplate de auto-sensor do grupo (mesmo valor usado pela tela; criação automática de sensores nos dispositivos do grupo).
autoscanintnãoLiga ou desliga a Detecção Automática (varredura de rede) do grupo.
curl
curl -s -d "token=CHAVE&action=dispositivo&operation=edit_group&group_id=77&name=POP Norte 2&ativasnmp=2&snmp_version=2&snmp_community=publica&snmp_port=161" https://ravi.exemplo.com/api/api.php
resposta
{"status":"success","group":{"id":77,"nome":"POP Norte 2","idGrupoPai":0}}

Erros: group_id is required, Group not found.

DELETE /api/api.php?action=dispositivo&operation=delete_group

Exclui um grupo. Só funciona em grupo vazio: sem subgrupos e sem dispositivos. Esvazie antes, movendo o conteúdo com edit_device e edit_group.

ParâmetroTipoObrigatórioDescrição
group_idintsimGrupo a excluir.
curl
curl -s -d "token=CHAVE&action=dispositivo&operation=delete_group&group_id=77" https://ravi.exemplo.com/api/api.php
resposta
{"msg":"ok"}

Erros: Group ID is required, Group not found, Cannot delete group with subgroups, Cannot delete group with devices.


Dispositivos

Operações sobre os equipamentos monitorados: listagem, consulta detalhada, criação, edição (incluindo SNMP e SSH próprios), exclusão, resumo de status e a topologia completa em uma chamada.

GET /api/api.php?action=dispositivo&operation=list_devices

Lista os dispositivos de um grupo. Não é recursivo.

ParâmetroTipoObrigatórioDescrição
group_idintnão (padrão 0)Grupo dono. 0 lista os dispositivos soltos na raiz.
curl
curl -s "https://ravi.exemplo.com/api/api.php?token=CHAVE&action=dispositivo&operation=list_devices&group_id=12"
resposta
{"devices":[{"id":5,"name":"RB Borda","ip":"10.0.0.1","group_id":12,"equipment":2}]}
GET /api/api.php?action=dispositivo&operation=get_device

Devolve um dispositivo com todos os seus sensores (mesmo formato de sensor do list_sensors).

ParâmetroTipoObrigatórioDescrição
device_idintsimDispositivo a consultar.
curl
curl -s "https://ravi.exemplo.com/api/api.php?token=CHAVE&action=dispositivo&operation=get_device&device_id=5"
resposta
{"device":{"id":5,"name":"RB Borda","ip":"10.0.0.1","group_id":12,"equipment":2,
  "sensors":[{"id":301,"name":"Carga de CPU","device_id":5,"status":6,"status_text":"OK","value":"12%","tag":"cpuMikrotik"}]}}

Erros: Device ID is required, Device not found.

GET /api/api.php?action=dispositivo&operation=status_summary

Contadores de status para painéis externos: total de dispositivos, total de sensores e sensores por estado.

ParâmetroTipoObrigatórioDescrição
group_idintnãoSe enviado, considera só os dispositivos diretamente dentro desse grupo (não desce em subgrupos). Sem ele, o sistema inteiro.
curl
curl -s "https://ravi.exemplo.com/api/api.php?token=CHAVE&action=dispositivo&operation=status_summary"
resposta
{"total_devices":42,"total_sensors":310,
 "status_counts":{"offline":2,"paused":5,"alert":1,"critical":0,"untested":3,"ok":299}}

Observação: os sub-estados internos (7 a 14 e 20) não entram nos 6 contadores, então a soma pode ficar ligeiramente abaixo de total_sensors em cenários com falha SNMP.

GET /api/api.php?action=dispositivo&operation=topology

Devolve a árvore completa em uma única chamada: grupos com dispositivos e sensores, dispositivos da raiz e ainda as listas de OLTs, concentradoras, DNS e exportadores de Flow ativos. É a operação usada pelo Ambiente Dashboards para fontes remotas. Não recebe parâmetros.

curl
curl -s "https://ravi.exemplo.com/api/api.php?token=CHAVE&action=dispositivo&operation=topology"
resposta (resumida)
{"topology":{
  "groups":[{"id":12,"name":"POP Centro","parent_id":0,
    "devices":[{"id":5,"name":"RB Borda","group_id":12,
      "sensors":[{"id":301,"name":"Carga de CPU","status":6}]}]}],
  "devices":[],
  "olts":[{"id":1,"name":"OLT Central","ip":"10.0.0.9","status":1}],
  "concentradoras":[{"id":1,"name":"BNG-01","ip":"10.0.0.8","status":1}],
  "dns":[{"id":1,"name":"DNS Recursivo","primario":"10.0.0.53","secundario":"10.0.0.54"}],
  "flow":[{"id":0,"name":"Visão geral","ip":""},{"id":3,"name":"NE8000","ip":"10.0.0.7"}]
}}
  • Os grupos vêm achatados, todos com parent_id; o cliente monta a hierarquia.
  • O status dos sensores já vem colapsado nos códigos 1 a 6.
  • Só aparecem OLTs e concentradoras ativas e exportadores de Flow ativos. O item de Flow com id=0 é sintético e representa a visão geral de todos os exportadores.
  • Em bases grandes a resposta é volumosa: faça cache no cliente em vez de chamar em loop curto.
POST /api/api.php?action=dispositivo&operation=add_device

Cria um dispositivo. Ele nasce sem sensores: crie-os em seguida com add_sensor ou ligue o auto-sensor do dispositivo ou do grupo.

ParâmetroTipoObrigatórioDescrição
namestringsimNome do dispositivo.
ipstringsimIP válido (IPv4 ou IPv6).
group_idintnão (padrão 0)Grupo dono. 0 cria na raiz.
equipmentintnão (padrão 100)Código da marca (tabela abaixo).
curl
curl -s -d "token=CHAVE&action=dispositivo&operation=add_device&name=RB Borda&ip=10.0.0.1&group_id=77&equipment=2" https://ravi.exemplo.com/api/api.php
resposta
{"msg":"ok","device_id":123}

Erros: Device name and IP are required, Invalid IP address, Device with this name or IP already exists. A checagem de duplicidade é global: mesmo nome ou mesmo IP em qualquer grupo bloqueia a criação.

Códigos de marca (equipment)

Mesmos códigos da tela de dispositivo. A marca importa: a descoberta automática de sensores e a filtragem de modelos do catálogo são dirigidas por ela.

CódigoMarcaCódigoMarca
1Ubiquiti12Cambium Networks
2Mikrotik13Ceragon
3Cisco14VOLT
4Juniper15XPS
5Huawei16ALGcom
6Fiberhome17Rondotec
7ZTE18Linux
8Intelbras19DATACOM
9PARKS20JFA
10v-Solution21a10
11Mimosa100Outro
POST /api/api.php?action=dispositivo&operation=edit_device Novo na 7.2

Edita um dispositivo com semântica PATCH: só o que for enviado muda. Após salvar, o sistema reprocessa em segundo plano os auto-sensores do dispositivo e regenera a proteção SNMP do servidor, os mesmos efeitos do salvar da tela.

ParâmetroTipoObrigatórioDescrição
device_idintsimDispositivo a editar.
namestringnãoNovo nome.
ipstringnãoNovo IP (validado; inválido devolve Invalid IP address).
group_idintnãoMove o dispositivo para outro grupo.
equipmentintnãoMuda a marca (códigos do add_device).
herdar_snmpintnão2 = o dispositivo usa SNMP próprio (campos snmp_* abaixo); outro valor = herda do grupo ou do sistema.
snmp_versionintnão1, 2 ou 3.
snmp_communitystringnãoCommunity (v1/v2c) ou usuário (v3).
snmp_portintnãoPorta SNMP.
snmp_seclevel / snmp_authproto / snmp_cryptoproto / snmp_authpass / snmp_cryptopassstringnãoCredenciais SNMPv3.
herdar_sshintnãoAnálogo ao SNMP, para credenciais SSH próprias.
ssh_user / ssh_pass / ssh_portstringnãoCredenciais SSH do dispositivo (usadas no terminal por dispositivo, backups etc.).
limit_snmpgetintnãoLimite de OIDs por consulta SNMP, para equipamentos que não aceitam consultas grandes.
infstringnãoCampo Informações (anotações livres).
inf_sigilosasstringnãoCampo Informações sigilosas (visível conforme permissão na tela).
auto_sensorintnão0 desliga a criação automática de sensores deste dispositivo; 1 ou 2 liga.
curl
curl -s -d "token=CHAVE&action=dispositivo&operation=edit_device&device_id=123&herdar_snmp=2&snmp_version=2&snmp_community=noc&snmp_port=161" https://ravi.exemplo.com/api/api.php
resposta
{"status":"success","device":{"id":123,"nome":"RB Borda","ip":"10.0.0.1","idGrupoPai":12}}

Erros: device_id is required, Device not found, Invalid IP address.

DELETE /api/api.php?action=dispositivo&operation=delete_device

Exclui o dispositivo e todos os seus sensores.

A exclusão é irreversível. Esta operação remove as linhas de sensores, mas não faz a limpeza completa de históricos e arquivos auxiliares: para zerar um dispositivo por completo, rode delete_all_sensors antes de excluí-lo.

ParâmetroTipoObrigatórioDescrição
device_idintsimDispositivo a excluir.
curl
curl -s -d "token=CHAVE&action=dispositivo&operation=delete_device&device_id=123" https://ravi.exemplo.com/api/api.php
resposta
{"msg":"ok"}

Erros: Device ID is required, Device not found.


Sensores

Operações sobre as métricas monitoradas: listar, criar (com validação SNMP real), editar, pausar, retomar e excluir (individual ou em massa).

GET /api/api.php?action=dispositivo&operation=list_sensors

Lista os sensores de um dispositivo. O campo value já vem formatado como na tela (número + unidade do catálogo, por exemplo "87.5 mbps"); para sensores pausados, offline ou novos vem o texto do estado (Pausado, Offline, Sensor não testado).

ParâmetroTipoObrigatórioDescrição
device_idintsimDispositivo dono.
curl
curl -s "https://ravi.exemplo.com/api/api.php?token=CHAVE&action=dispositivo&operation=list_sensors&device_id=5"
resposta
{"sensors":[{"id":301,"name":"Carga de CPU","device_id":5,"status":6,"status_text":"OK","value":"12%","tag":"cpuMikrotik"}]}

Erro: Device ID is required.

GET /api/api.php?action=dispositivo&operation=get_sensor Novo na 7.2

Detalha um sensor: identificação, status, valores atuais (crus e médias por coletor), unidade, cronograma, o modelo de catálogo de origem e, quando há uma condição de alerta ativa, o campo context com as condições que dispararam. É a leitura mais completa de um sensor individual.

ParâmetroTipoObrigatórioDescrição
sensor_idintsimSensor a consultar.
curl
curl "https://SEU-SERVIDOR/api/api.php?action=dispositivo&operation=get_sensor&sensor_id=8623&token=SEU_TOKEN"
resposta (resumida)
{"sensor":{"id":8623,"name":"Tráfego sfp-sfpplus1","device_id":5,"device_name":"RB Borda",
  "device_ip":"10.0.0.1","status":6,"status_text":"OK","tag":"ifMikrotik","unit":"mbps",
  "schedule":"1m","error_count":0,
  "values":[{"name":"Download","raw_value":"87500000","extension":"mbps","average":"84.2"},
            {"name":"Upload","raw_value":"12300000","extension":"mbps","average":"11.8"}],
  "raw_values":{"value1":"87500000","value2":"12300000","value3":"","value4":""},
  "averages":{"avg1":"84.2","avg2":"11.8","avg3":"","avg4":""},
  "model":{"id":45,"name":"Tráfego de interface","protocol":1,"type":2}}}
  • values traz um item por coletor ativo, cada um com name, raw_value, extension (unidade) e average; raw_values e averages expõem os quatro campos crus (value1..4 e avg1..4).
  • status segue a tabela de status da Visão geral; status_text é o rótulo no idioma do sistema.
  • model identifica o modelo de catálogo de origem.
  • O campo context só aparece quando o sensor tem uma condição de alerta ativa: é a lista das condições que dispararam, cada item com a descrição do problema (campo descricao) e os dados da condição. Sensor normal (sem mensagem ativa) vem sem o campo context.

Erros: Sensor ID is required, Sensor not found.

GET /api/api.php?action=dispositivo&operation=get_sensor_history Novo na 7.2

Devolve o histórico de leituras de um sensor em um intervalo de datas, com estatísticas opcionais por coletor. Serve para gráficos externos e relatórios.

ParâmetroTipoObrigatórioDescrição
sensor_idintsimSensor a consultar.
start_datedatenão (padrão hoje)Data inicial no formato YYYY-MM-DD.
end_datedatenão (padrão hoje)Data final no formato YYYY-MM-DD.
include_statsboolnão (padrão true)"false" omite o bloco statistics.
limitintnão (padrão 0)Máximo de registros retornados em data. 0 = sem limite.
curl
curl -s "https://ravi.exemplo.com/api/api.php?token=CHAVE&action=dispositivo&operation=get_sensor_history&sensor_id=8623&start_date=2026-07-01&end_date=2026-07-04"
resposta (resumida)
{"sensor_id":8623,"sensor_name":"Tráfego sfp-sfpplus1","sensor_tag":"ifMikrotik",
 "start_date":"2026-07-01","end_date":"2026-07-04",
 "data":[{"timestamp":"2026-07-01 00:01:00","status":6,"status_text":"OK",
          "values":[{"name":"Download","value":"84.2","unit":"mbps"},
                    {"name":"Upload","value":"11.8","unit":"mbps"}]}],
 "total_records":5760,"returned_records":5760,
 "statistics":{"total_records":5760,"status_summary":{"6":5740,"3":20},
   "values_stats":{"Download":{"min":"0.4","max":"120.7","average":"84.2","unit":"mbps",
     "count":5760,"min_date":"2026-07-02 04:12:00","max_date":"2026-07-03 21:33:00"}}}}
  • Cada item de data traz o timestamp, o status/status_text da leitura e os values por coletor (nome, valor e unidade).
  • total_records é quanto existe no período; returned_records é quanto veio depois de aplicar o limit.
  • Em statistics.values_stats, cada chave é um coletor do sensor, com mínimo, máximo, média, unidade, contagem e as datas do mínimo e do máximo. status_summary conta os registros por código de status.

O histórico vem das leituras diárias armazenadas no servidor. Períodos antigos podem estar compactados; o endpoint lê os dois formatos de forma transparente, então intervalos longos podem levar mais tempo para responder.

Erros: Sensor ID is required, Invalid date format. Use YYYY-MM-DD.

POST /api/api.php?action=dispositivo&operation=add_sensor Novo na 7.2

Cria um ou mais sensores a partir de um modelo do catálogo. Reformulada na 7.2: a criação é real, com consulta SNMP validada na hora. Os parâmetros extras dependem do protocolo do modelo (descubra-o com sensor_modelos).

ParâmetroTipoObrigatórioDescrição
device_idintsimDispositivo dono.
model_idintsimModelo do catálogo (aceita o alias idSensor).
grupo_sensor_idintnãoGrupo de sensores (aba) onde o sensor entra no painel do dispositivo.
alvosJSON arraysó pingVários alvos de uma vez: [{"ip":"8.8.8.8","nome":"Google"}].
ping_ip / ping_nomestringsó ping (alternativa)Um único alvo. Sem alvo nenhum, o ping é criado contra o IP do próprio dispositivo. Nome vazio usa o nome do modelo.
nomestringsó agregadorNome do sensor agregador.
idsstring CSVsó agregadorIDs dos sensores-fonte (mínimo 2, todos do mesmo tipo).
itensJSON arraysó interfaceItens vindos de sensor_descobrir: [{"index":"7","nome":"sfp-sfpplus1","valor1":"..."}].

O que acontece por tipo de modelo:

  • SNMP simples (protocolo 1, tipo 1): a API faz uma consulta SNMP real nos OIDs do modelo usando a cascata SNMP. Se qualquer OID falhar, o sensor não é criado. As condições de alerta são avaliadas na hora: o sensor nasce com status 6 (OK) ou 3 (Alerta).
  • Interface (protocolo 1, tipo 2): exige itens (fluxo: sensor_descobrir, escolher, add_sensor). Cria um sensor por item, com status inicial 5 (Não testado). Sem itens, falha com "Nenhuma interface informada (use sensor_descobrir)".
  • Ping (protocolo 2): cria com status 5 e parâmetros padrão de ping. Deduplicação por IP: se já existe ping para aquele IP no dispositivo, o item conta como duplicado.
  • Agregador (protocolo 8): soma os valores dos sensores-fonte. Deduplicação por conjunto de IDs e por nome. Falhas possíveis: "Selecione ao menos 2 sensores", "Sensores de tipos diferentes", "Sensores nao encontrados".
curl
curl -s -d 'token=CHAVE&action=dispositivo&operation=add_sensor&device_id=123&model_id=45&itens=[{"index":"7","nome":"sfp-sfpplus1"}]' https://ravi.exemplo.com/api/api.php
resposta
{"status":"success","message":"criados=3 duplicados=1 falhas=0",
 "criados":[{"id":501,"nome":"sfp-sfpplus1","statusAlert":"5","idDispositivo":123}],
 "duplicados":[{"error":"Ja existe um ping para este IP"}],
 "falhas":[]}

A resposta sempre traz os três conjuntos criados, duplicados e falhas; o status é success se pelo menos um sensor foi criado. Falhas típicas dentro de falhas: SNMP nao configurado, Falha na consulta SNMP, mensagens de OID (com o OID problemático no campo oid), Modelo sem coletores, Protocolo nao suportado: N. Erros diretos: device_id and model_id are required, Device not found.

POST /api/api.php?action=dispositivo&operation=edit_sensor Novo na 7.2

Edita propriedades de um sensor com semântica PATCH, com uma exceção importante para sensores de ping (veja o aviso abaixo).

ParâmetroTipoObrigatórioDescrição
sensor_idintsimSensor a editar.
nomestringnãoNovo nome (não pode ser vazio se enviado).
valorstringnãoCampo "valor" do sensor (índice da interface, IP do ping etc.). Cuidado ao alterar.
cronogramastringnãoIntervalo de coleta: 30s, 1m (padrão recomendado), 5m, 15m, 1h, 1d, 7d.
falhasstringnão(Sensores que não são ping) limite de falhas antes de alarmar.
ping_tamanhointver aviso(Só ping) tamanho do pacote em bytes. Padrão 32.
ping_quantidadeintver aviso(Só ping) quantidade de pacotes. Padrão 20.
ping_delayintver aviso(Só ping) intervalo entre pacotes. Padrão 1.
ping_falhasintver aviso(Só ping) falhas toleradas. Padrão 2.
display_tipointnão1 = exibir 1 valor; 2 = exibir 2 valores (por exemplo down/up).
display_separadorstringnãoSeparador entre os 2 valores (máximo 4 caracteres, padrão " / ").
display_valor1 / display_valor2intnãoQual coletor (1 a 4) aparece em cada posição.

Sensores de ping: ao editar qualquer coisa de um sensor de ping, os quatro parâmetros ping_* que não forem reenviados voltam aos padrões (32/20/1/2). Sempre reenvie ping_tamanho, ping_quantidade, ping_delay e ping_falhas juntos ao editar um sensor de ping.

curl
curl -s -d "token=CHAVE&action=dispositivo&operation=edit_sensor&sensor_id=501&nome=Uplink SFP+1&cronograma=1m" https://ravi.exemplo.com/api/api.php
resposta
{"status":"success"}

Erros: sensor_id is required, Sensor not found, nome obrigatorio.

POST /api/api.php?action=dispositivo&operation=pause_sensor

Pausa um sensor (status 2). Sensor pausado não é coletado nem gera alerta. Útil para silenciar por script durante manutenções.

ParâmetroTipoObrigatórioDescrição
sensor_idintsimSensor a pausar.
curl
curl -s -d "token=CHAVE&action=dispositivo&operation=pause_sensor&sensor_id=501" https://ravi.exemplo.com/api/api.php
resposta
{"msg":"ok"}

Erros: Sensor ID is required, Sensor not found.

POST /api/api.php?action=dispositivo&operation=resume_sensor

Retoma um sensor pausado: ele volta ao status 5 (Não testado) e assume o status real no próximo ciclo de coleta.

ParâmetroTipoObrigatórioDescrição
sensor_idintsimSensor a retomar.
curl
curl -s -d "token=CHAVE&action=dispositivo&operation=resume_sensor&sensor_id=501" https://ravi.exemplo.com/api/api.php
resposta
{"msg":"ok"}

Erros: Sensor ID is required, Sensor not found.

DELETE /api/api.php?action=dispositivo&operation=delete_sensor

Exclui um sensor. Esta operação simples não limpa históricos e arquivos auxiliares; para a limpeza completa de um dispositivo use delete_all_sensors.

ParâmetroTipoObrigatórioDescrição
sensor_idintsimSensor a excluir.
curl
curl -s -d "token=CHAVE&action=dispositivo&operation=delete_sensor&sensor_id=501" https://ravi.exemplo.com/api/api.php
resposta
{"msg":"ok"}

Erros: Sensor ID is required, Sensor not found.

DELETE /api/api.php?action=dispositivo&operation=delete_all_sensors Novo na 7.2

Exclui todos os sensores de um dispositivo em uma única chamada, espelhando o botão equivalente da tela: remove os sensores, os registros de histórico e alertas associados e os caches de dados em disco. A limpeza é tolerante a falhas parciais nos históricos.

Operação irreversível: os históricos de coleta dos sensores excluídos são apagados junto e não podem ser recuperados.

ParâmetroTipoObrigatórioDescrição
device_idintsimDispositivo cujos sensores serão todos excluídos.
curl
curl -s -d "token=CHAVE&action=dispositivo&operation=delete_all_sensors&device_id=123" https://ravi.exemplo.com/api/api.php
resposta
{"status":"success","excluidos":14,"message":"14 sensor(es) excluído(s)"}

Dispositivo sem sensores devolve excluidos: 0 ainda com sucesso. Erros: device_id is required, Device not found.


Descoberta e catálogo Novo na 7.2

Estas três operações dão suporte à criação de sensores. O fluxo recomendado é sempre: sensor_categorias para achar a categoria, sensor_modelos para achar o model_id e o protocolo, sensor_descobrir se o modelo for de interface e, por fim, add_sensor. Não use um model_id "chutado".

GET /api/api.php?action=dispositivo&operation=sensor_categorias

Lista as categorias do catálogo de sensores (incluindo os grupos de marca), já no idioma do sistema.

ParâmetroTipoObrigatórioDescrição
device_idintnãoSe enviado, devolve também o IP do dispositivo (útil para pré-preencher o alvo de ping).
curl
curl -s "https://ravi.exemplo.com/api/api.php?token=CHAVE&action=dispositivo&operation=sensor_categorias&device_id=123"
resposta
{"status":"success","lang":1,"cats":[{"id":4,"nome":"Mikrotik"},{"id":9,"nome":"Ping"}],"hostIp":"10.0.0.1"}

lang indica o idioma do sistema (1 = português, 2 = inglês, 3 = espanhol); os nomes das categorias já vêm nesse idioma.

GET /api/api.php?action=dispositivo&operation=sensor_modelos

Lista os modelos do catálogo por categoria e/ou termo de busca. Os campos que interessam para criar um sensor são o id (vira o model_id) e o par protocolo/tipo, que define quais parâmetros o add_sensor exige.

ParâmetroTipoObrigatórioDescrição
group_idintnãoID da categoria (vindo de sensor_categorias). Atenção: aqui group_id é categoria de catálogo, não grupo da árvore.
termstringnãoBusca por nome, descrição ou tag (nos 3 idiomas). Sem categoria e com term, a busca é global e limitada a 80 resultados.
curl
curl -s "https://ravi.exemplo.com/api/api.php?token=CHAVE&action=dispositivo&operation=sensor_modelos&group_id=4&term=trafego"
resposta (resumida)
{"status":"success","models":[{"id":45,"nome_pt":"Tráfego de interface","tag":"ifMikrotik","protocolo":1,"tipo":2}]}
POST /api/api.php?action=dispositivo&operation=sensor_descobrir

Descoberta SNMP de interfaces para modelos de interface (protocolo 1, tipo 2, como tráfego de portas). Roda um SNMP walk síncrono no equipamento e devolve as interfaces encontradas, prontas para serem repassadas ao add_sensor no parâmetro itens.

ParâmetroTipoObrigatórioDescrição
device_idintsimDispositivo alvo.
model_idintsimModelo de interface do catálogo.
timeoutintnão (padrão 60)Segundos (mínimo 5, máximo 240). Se estourar, devolve o que coletou com truncado: true.
curl
curl -s -d "token=CHAVE&action=dispositivo&operation=sensor_descobrir&device_id=123&model_id=45&timeout=120" https://ravi.exemplo.com/api/api.php
resposta
{"status":"success","itens":[{"index":"7","nome":"sfp-sfpplus1","valor1":"..."}],"total":48,"truncado":false}
  • O index pode ser composto (por exemplo "idx|id2") em modelos que usam dois índices: repasse o valor exatamente como veio.
  • A chamada HTTP fica aberta até o walk terminar (até 240 segundos). Ajuste o timeout do seu cliente HTTP para um valor maior que o timeout pedido.

Erros: device_id and model_id are required, Device not found, Sem retorno da descoberta (timeout ou SNMP) (equipamento não respondeu dentro do prazo, SNMP errado ou modelo sem dados).


Exemplos práticos

Provisionar um POP completo: grupo, dispositivo e sensores de interface

O exemplo cria um grupo, cadastra uma Mikrotik nele, descobre as interfaces por SNMP e cria os sensores de tráfego.

# 1) Criar o grupo
curl -s -d "token=CHAVE&action=dispositivo&operation=add_group&name=POP Norte" \
  https://ravi.exemplo.com/api/api.php
# → {"msg":"ok","group_id":77}

# 2) Criar o dispositivo (equipment=2 é Mikrotik)
curl -s -d "token=CHAVE&action=dispositivo&operation=add_device&name=RB Borda&ip=10.0.0.1&group_id=77&equipment=2" \
  https://ravi.exemplo.com/api/api.php
# → {"msg":"ok","device_id":123}

# 3) Descobrir as interfaces do modelo 45
curl -s -d "token=CHAVE&action=dispositivo&operation=sensor_descobrir&device_id=123&model_id=45&timeout=120" \
  https://ravi.exemplo.com/api/api.php

# 4) Criar os sensores das interfaces escolhidas
curl -s -d 'token=CHAVE&action=dispositivo&operation=add_sensor&device_id=123&model_id=45&itens=[{"index":"7","nome":"sfp-sfpplus1"}]' \
  https://ravi.exemplo.com/api/api.php
<?php
$base  = 'https://ravi.exemplo.com/api/api.php';
$token = 'CHAVE';

function ravi($base, $params) {
    $ch = curl_init($base);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 300); // maior que o timeout da descoberta
    $out = json_decode(curl_exec($ch), true);
    curl_close($ch);
    // erro nos dois formatos: "msg" != ok ou status=error
    if (isset($out['msg']) && $out['msg'] !== 'ok') throw new Exception($out['msg']);
    if (($out['status'] ?? '') === 'error') throw new Exception($out['message']);
    return $out;
}

$grupo = ravi($base, ['token'=>$token, 'action'=>'dispositivo',
    'operation'=>'add_group', 'name'=>'POP Norte']);

$disp = ravi($base, ['token'=>$token, 'action'=>'dispositivo',
    'operation'=>'add_device', 'name'=>'RB Borda',
    'ip'=>'10.0.0.1', 'group_id'=>$grupo['group_id'], 'equipment'=>2]);

$desc = ravi($base, ['token'=>$token, 'action'=>'dispositivo',
    'operation'=>'sensor_descobrir', 'device_id'=>$disp['device_id'],
    'model_id'=>45, 'timeout'=>120]);

ravi($base, ['token'=>$token, 'action'=>'dispositivo',
    'operation'=>'add_sensor', 'device_id'=>$disp['device_id'],
    'model_id'=>45, 'itens'=>json_encode($desc['itens'])]);
import requests, json

BASE  = "https://ravi.exemplo.com/api/api.php"
TOKEN = "CHAVE"

def ravi(**params):
    params.update(token=TOKEN, action="dispositivo")
    r = requests.post(BASE, data=params, timeout=300)  # > timeout da descoberta
    out = r.json()
    # erro nos dois formatos: "msg" != ok ou status=error
    if out.get("msg") not in (None, "ok") or out.get("status") == "error":
        raise RuntimeError(out.get("msg") or out.get("message"))
    return out

grupo = ravi(operation="add_group", name="POP Norte")
disp  = ravi(operation="add_device", name="RB Borda",
             ip="10.0.0.1", group_id=grupo["group_id"], equipment=2)
desc  = ravi(operation="sensor_descobrir", device_id=disp["device_id"],
             model_id=45, timeout=120)
ravi(operation="add_sensor", device_id=disp["device_id"],
     model_id=45, itens=json.dumps(desc["itens"]))

Janela de manutenção: pausar e retomar sensores por script

curl
# Antes da manutenção: pausar (repita para cada sensor da lista de list_sensors)
curl -s -d "token=CHAVE&action=dispositivo&operation=pause_sensor&sensor_id=501" https://ravi.exemplo.com/api/api.php

# Depois da manutenção: retomar (volta como "Não testado" até o próximo ciclo)
curl -s -d "token=CHAVE&action=dispositivo&operation=resume_sensor&sensor_id=501" https://ravi.exemplo.com/api/api.php

Ping contra um alvo externo

Ache um modelo de ping (protocolo 2) com sensor_modelos e crie o sensor apontando para o IP desejado. Sem ping_ip, o ping é criado contra o IP do próprio dispositivo.

curl
curl -s -d "token=CHAVE&action=dispositivo&operation=add_sensor&device_id=123&model_id=12&ping_ip=8.8.8.8&ping_nome=Google" \
  https://ravi.exemplo.com/api/api.php

Painel externo com o resumo de status

curl
curl -s "https://ravi.exemplo.com/api/api.php?token=CHAVE&action=dispositivo&operation=status_summary"
# → {"total_devices":42,"total_sensors":310,"status_counts":{"offline":2,"paused":5,"alert":1,"critical":0,"untested":3,"ok":299}}

Boas práticas: uma chave por integração, POST + HTTPS em produção, cache no cliente para topology, e sempre delete_all_sensors antes de excluir um dispositivo que você quer zerar por completo. As edições são PATCH, então mande só o que muda, com a exceção dos quatro parâmetros ping_* do edit_sensor.


Solução de problemas

Sintomas comuns nas integrações com a área de Dispositivos e suas causas prováveis.

SintomaCausa provável e solução
Invalid token (401) Chave errada ou revogada. Lembre que a exibição na tela é mascarada após 2 horas, mas a chave continua válida; confira se copiou a chave certa. Veja também os cuidados com a edição de chaves em Criar uma chave de API.
Access denied for dispositivo (403) Chave sem a permissão de Dispositivos marcada. Ajuste a chave em Configurações, aba Integrações.
{"msg":"Invalid device operation"} operation grafada errada, ou tentativa de usar uma operação que não existe nesta versão. Para leituras use topology, get_device e as operações list_*.
add_sensor devolve falhas com "SNMP nao configurado" Nenhuma community, porta ou versão foi resolvida pela cascata (sistema, grupo, dispositivo). Configure o SNMP padrão do sistema ou os campos snmp_* do dispositivo com herdar_snmp=2.
add_sensor devolve "Falha na consulta SNMP" ou erro de OID Equipamento inalcançável, community errada, porta bloqueada, ou o modelo do catálogo não se aplica àquele hardware (o OID problemático volta no campo oid).
sensor_descobrir devolve "Sem retorno da descoberta (timeout ou SNMP)" O walk demorou mais que o timeout sem produzir nada, ou o SNMP está errado. Aumente o timeout (até 240) e valide o SNMP criando antes um sensor de modelo simples.
sensor_descobrir responde com truncado: true O walk estourou o tempo mas retornou resultados parciais. Em equipamentos com muitas interfaces, aumente o timeout.
Criei o dispositivo mas ele "não monitora nada" add_device não cria sensores. Crie-os com add_sensor ou ligue o auto-sensor do dispositivo ou do grupo.
Device with this name or IP already exists A checagem de duplicidade é global: mesmo nome ou mesmo IP em qualquer grupo bloqueia a criação.
Editei um ping por API e os parâmetros de ping mudaram sozinhos Comportamento do edit_sensor com sensores de ping: reenvie sempre ping_tamanho, ping_quantidade, ping_delay e ping_falhas juntos.
status_summary de um grupo veio "zerado" mas há dispositivos em subgrupos O resumo por group_id não é recursivo: só conta dispositivos diretamente naquele grupo.
Uma operação respondeu {"msg": ...} e outra {"status": ...} Comportamento esperado: coexistem os dois formatos de resposta (veja a Visão geral). Trate os dois no cliente e não confie só no código HTTP.
delete_group falha com "Cannot delete group with..." O grupo não está vazio. Mova os subgrupos com edit_group e os dispositivos com edit_device antes de excluir.

Outros pontos de atenção:

  • A busca global de modelos (sensor_modelos com term e sem categoria) é limitada a 80 resultados: refine o termo.
  • Nomes e textos passam por sanitização HTML na criação (caracteres especiais viram entidades): evite HTML em nomes.
  • A API não pagina as listagens; em bases muito grandes, prefira cachear topology no cliente.
  • A chave dá acesso de escrita total ao módulo (não há chave somente leitura). Trate a chave como senha, use HTTPS e prefira POST para não deixar o token em logs de URL.
  • Toda operação de escrita via API entra no Histórico de ações do sistema (por exemplo "Dispositivo adicionado via API: RB Borda (10.0.0.1)"), visível na interface.
  • Sensores criados via API entram no ciclo normal de coleta e de alertas (Telegram, WhatsApp, e-mail, conforme a configuração do sistema); nada extra a configurar.