API OLT - Gerenciamento de ONTs

Visão Geral

A API OLT permite o gerenciamento de ONTs (Optical Network Terminals) conectadas às OLTs (Optical Line Terminals) no Ravi Monitor.

Configuração Prévia

⚠️ IMPORTANTE: Para utilizar a API OLT, é necessário:

  1. Ter OLTs cadastradas no sistema
  2. Para operações de ativação/exclusão: OLTs devem estar acessíveis via Telnet/SNMP
  3. Para operações de ativação/exclusão: Credenciais Telnet/SNMP configuradas
  4. Operações de ativação/exclusão: Apenas OLTs Nokia (incluiremos as demais marcas)

Parâmetros Base

Todas as operações OLT requerem:

Operações Disponíveis

A API OLT possui dois tipos de operações:

🔧 Operações de Controle (Apenas Nokia):

📊 Operações de Consulta (Todas as marcas):

1. activation - Ativar ONT ⚠️ Apenas Nokia

Ativa uma ONT na OLT especificada.

Parâmetros Obrigatórios

Exemplo

curl -X POST "https://seu-servidor-ravi/api.php" \
  -d "token=SEU_TOKEN" \
  -d "action=olt" \
  -d "operation=activation" \
  -d "olt=1" \
  -d "serial_number=ALCL12345678" \
  -d "model_id=1" \
  -d "slot=1" \
  -d "pon=1" \
  -d "ont=1" \
  -d "vlan=100" \
  -d "description=Cliente Teste"

Respostas Possíveis

// Sucesso
{"msg": "ONT activated successfully"}

// Erros
{"msg": "OLT not found"}
{"msg": "Model id 1 not found"}
{"msg": "Service not available for this OLT model"}
{"msg": "Nokia functions not available"}

2. exclusion - Excluir ONT ⚠️ Apenas Nokia

Remove uma ONT da OLT especificada.

Parâmetros Obrigatórios

Exemplo

curl -X POST "https://seu-servidor-ravi/api.php" \
  -d "token=SEU_TOKEN" \
  -d "action=olt" \
  -d "operation=exclusion" \
  -d "olt=1" \
  -d "slot=1" \
  -d "pon=1" \
  -d "ont=1"

Resposta de Sucesso

{
  "msg": "ONT removed successfully",
  "log": "Detalhes do log de exclusão..."
}

3. unprovisioned - Buscar ONTs Não Provisionadas ⚠️ Apenas Nokia

Lista ONTs conectadas mas não autorizadas na OLT.

Parâmetros Obrigatórios

Exemplo

curl -X POST "https://seu-servidor-ravi/api.php" \
  -d "token=SEU_TOKEN" \
  -d "action=olt" \
  -d "operation=unprovisioned" \
  -d "olt=1"

Resposta

{
  "msg": "Search completed successfully",
  "ONTs": [
    {
      "slot": "1",
      "pon": "1", 
      "serial": "ALCL12345678"
    },
    {
      "slot": "1",
      "pon": "2",
      "serial": "ALCL87654321"
    }
  ]
}

4. search_position - Buscar Posição Livre ⚠️ Apenas Nokia

Encontra a próxima posição disponível em uma porta PON.

Parâmetros Obrigatórios

Exemplo

curl -X POST "https://seu-servidor-ravi/api.php" \
  -d "token=SEU_TOKEN" \
  -d "action=olt" \
  -d "operation=search_position" \
  -d "olt=1" \
  -d "slot=1" \
  -d "pon=1"

Resposta

{
  "msg": "Search completed successfully",
  "position": "5"
}

5. search_olt - Buscar Dados da OLT ✅ Todas as marcas

Retorna informações completas de uma OLT e suas ONTs.

Parâmetros (um obrigatório)

Exemplo 1: Por ID

curl -X POST "https://seu-servidor-ravi/api.php" \
  -d "token=SEU_TOKEN" \
  -d "action=olt" \
  -d "operation=search_olt" \
  -d "olt=1"

Exemplo 2: Por Nome

curl -X POST "https://seu-servidor-ravi/api.php" \
  -d "token=SEU_TOKEN" \
  -d "action=olt" \
  -d "operation=search_olt" \
  -d "name=OLT-CENTRO"

Resposta

{
  "olts": [
    {
      "id": 1,
      "name": "OLT-CENTRO",
      "execution_cronogram": "Run every 30 minutes",
      "ip": "192.168.1.10",
      "brand": "NOKIA",
      "sync_date": "2024-01-15 10:30:00",
      "onts": [
        {
          "data": "2024-01-15 10:30:00",
          "status": "1",
          "slot": "1",
          "pon": "1",
          "ont": "1",
          "interface": "1/1/1:1",
          "nome": "Cliente A",
          "desc": "Residencial",
          "mac": "ALCL:1234:5678",
          "ns": "ALCL12345678",
          "rxpower": "-18.5",
          "txpower": "2.1",
          "oltrx": "-19.2",
          "voltagem": "3.3",
          "temperatura": "45",
          "distancia": "1.2",
          "biascurrent": "25",
          "dataconn": "2024-01-10",
          "reason": ""
        }
      ]
    }
  ]
}

6. search_ont - Buscar ONT Específica ✅ Todas as marcas

Busca ONTs por MAC, serial number ou localização.

Parâmetros (pelo menos um obrigatório)

Parâmetros Opcionais

Exemplo 1: Buscar por MAC

curl -X POST "https://seu-servidor-ravi/api.php" \
  -d "token=SEU_TOKEN" \
  -d "action=olt" \
  -d "operation=search_ont" \
  -d "olt=1" \
  -d "mac=ALCL:1234:5678"

Exemplo 2: Buscar por Serial Number

curl -X POST "https://seu-servidor-ravi/api.php" \
  -d "token=SEU_TOKEN" \
  -d "action=olt" \
  -d "operation=search_ont" \
  -d "name=OLT-CENTRO" \
  -d "ns=ALCL12345678"

Exemplo 3: Buscar por Localização

curl -X POST "https://seu-servidor-ravi/api.php" \
  -d "token=SEU_TOKEN" \
  -d "action=olt" \
  -d "operation=search_ont" \
  -d "olt=1" \
  -d "slot=1" \
  -d "pon=1" \
  -d "ont=1"

Resposta

{
  "onts": [
    {
      "slot": "1",
      "pon": "1",
      "ont": "1",
      "name": "Cliente A",
      "description": "Residencial",
      "rx_ont": "-18.5",
      "tx_ont": "2.1",
      "rx_olt": "-19.2",
      "voltage": "3.3",
      "temperature": "45",
      "distance": "1.2",
      "biascurrent": "25",
      "status": "1",
      "sync_date": "2024-01-15 10:30:00",
      "reason": ""
    }
  ]
}

7. status_summary - Resumo de Status ✅ Todas as marcas

Retorna estatísticas de status das ONTs da OLT.

Parâmetros (um obrigatório)

Exemplo

curl -X POST "https://seu-servidor-ravi/api.php" \
  -d "token=SEU_TOKEN" \
  -d "action=olt" \
  -d "operation=status_summary" \
  -d "olt=1"

Resposta

{
  "total_onts": 150,
  "status_counts": {
    "break": 2,
    "no-data": 5,
    "low-signal": 8,
    "signal-alert": 12,
    "online": 118,
    "offline": 5
  }
}

Exemplos Práticos

Script Shell

#!/bin/bash

TOKEN="seu_token_aqui"
API_URL="https://seu-servidor-ravi/api.php"
OLT_ID="1"

# Função para ativar ONT
activate_ont() {
    local serial="$1"
    local model_id="$2"
    local slot="$3"
    local pon="$4"
    local ont="$5"
    local vlan="$6"
    local desc="$7"

    curl -s -X POST "$API_URL" \
        -d "token=$TOKEN" \
        -d "action=olt" \
        -d "operation=activation" \
        -d "olt=$OLT_ID" \
        -d "serial_number=$serial" \
        -d "model_id=$model_id" \
        -d "slot=$slot" \
        -d "pon=$pon" \
        -d "ont=$ont" \
        -d "vlan=$vlan" \
        -d "description=$desc"
}

# Função para buscar ONTs não provisionadas
search_unprovisioned() {
    curl -s -X POST "$API_URL" \
        -d "token=$TOKEN" \
        -d "action=olt" \
        -d "operation=unprovisioned" \
        -d "olt=$OLT_ID"
}

# Função para buscar posição livre
search_free_position() {
    local slot="$1"
    local pon="$2"

    curl -s -X POST "$API_URL" \
        -d "token=$TOKEN" \
        -d "action=olt" \
        -d "operation=search_position" \
        -d "olt=$OLT_ID" \
        -d "slot=$slot" \
        -d "pon=$pon"
}

# Exemplo de uso
activate_ont "ALCL12345678" "1" "1" "1" "1" "100" "Cliente Teste"
search_unprovisioned
search_free_position "1" "1"

Script PHP

<?php

/**
 * Ativa uma ONT na OLT
 * 
 * @param int $oltId ID da OLT
 * @param string $serialNumber Número de série da ONT
 * @param int $modelId ID do modelo
 * @param string $slot Slot
 * @param string $pon PON
 * @param string $ont Posição da ONT
 * @param string $vlan VLAN
 * @param string $description Descrição
 * @return array Resposta da API
 */
function ativarONT($oltId, $serialNumber, $modelId, $slot, $pon, $ont, $vlan, $description) {
    $token = 'seu_token_aqui';
    $apiUrl = 'https://seu-servidor-ravi/api.php';

    $data = [
        'token' => $token,
        'action' => 'olt',
        'operation' => 'activation',
        'olt' => $oltId,
        'serial_number' => $serialNumber,
        'model_id' => $modelId,
        'slot' => $slot,
        'pon' => $pon,
        'ont' => $ont,
        'vlan' => $vlan,
        'description' => $description
    ];

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $apiUrl);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);

    $response = curl_exec($ch);
    curl_close($ch);

    return json_decode($response, true);
}

/**
 * Exclui uma ONT da OLT
 * 
 * @param int $oltId ID da OLT
 * @param string $slot Slot
 * @param string $pon PON
 * @param string $ont Posição da ONT
 * @return array Resposta da API
 */
function excluirONT($oltId, $slot, $pon, $ont) {
    $token = 'seu_token_aqui';
    $apiUrl = 'https://seu-servidor-ravi/api.php';

    $data = [
        'token' => $token,
        'action' => 'olt',
        'operation' => 'exclusion',
        'olt' => $oltId,
        'slot' => $slot,
        'pon' => $pon,
        'ont' => $ont
    ];

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $apiUrl);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);

    $response = curl_exec($ch);
    curl_close($ch);

    return json_decode($response, true);
}

/**
 * Busca ONTs não provisionadas
 * 
 * @param int $oltId ID da OLT
 * @return array Resposta da API
 */
function buscarONTsNaoProvisionadas($oltId) {
    $token = 'seu_token_aqui';
    $apiUrl = 'https://seu-servidor-ravi/api.php';

    $data = [
        'token' => $token,
        'action' => 'olt',
        'operation' => 'unprovisioned',
        'olt' => $oltId
    ];

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $apiUrl);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);

    $response = curl_exec($ch);
    curl_close($ch);

    return json_decode($response, true);
}

/**
 * Busca posição livre em uma PON
 * 
 * @param int $oltId ID da OLT
 * @param string $slot Slot
 * @param string $pon PON
 * @return array Resposta da API
 */
function buscarPosicaoLivre($oltId, $slot, $pon) {
    $token = 'seu_token_aqui';
    $apiUrl = 'https://seu-servidor-ravi/api.php';

    $data = [
        'token' => $token,
        'action' => 'olt',
        'operation' => 'search_position',
        'olt' => $oltId,
        'slot' => $slot,
        'pon' => $pon
    ];

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $apiUrl);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);

    $response = curl_exec($ch);
    curl_close($ch);

    return json_decode($response, true);
}

/**
 * Busca dados de uma OLT
 * 
 * @param int|null $oltId ID da OLT
 * @param string|null $oltName Nome da OLT
 * @return array Resposta da API
 */
function buscarOLT($oltId = null, $oltName = null) {
    $token = 'seu_token_aqui';
    $apiUrl = 'https://seu-servidor-ravi/api.php';

    $data = [
        'token' => $token,
        'action' => 'olt',
        'operation' => 'search_olt'
    ];

    if ($oltId) {
        $data['olt'] = $oltId;
    } elseif ($oltName) {
        $data['name'] = $oltName;
    }

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $apiUrl);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);

    $response = curl_exec($ch);
    curl_close($ch);

    return json_decode($response, true);
}

/**
 * Busca ONT por MAC, serial ou localização
 * 
 * @param int|null $oltId ID da OLT
 * @param string|null $oltName Nome da OLT
 * @param string|null $mac MAC da ONT
 * @param string|null $serial Serial da ONT
 * @param string|null $slot Slot
 * @param string|null $pon PON
 * @param string|null $ont Posição da ONT
 * @return array Resposta da API
 */
function buscarONT($oltId = null, $oltName = null, $mac = null, $serial = null, $slot = null, $pon = null, $ont = null) {
    $token = 'seu_token_aqui';
    $apiUrl = 'https://seu-servidor-ravi/api.php';

    $data = [
        'token' => $token,
        'action' => 'olt',
        'operation' => 'search_ont'
    ];

    if ($oltId) $data['olt'] = $oltId;
    if ($oltName) $data['name'] = $oltName;
    if ($mac) $data['mac'] = $mac;
    if ($serial) $data['ns'] = $serial;
    if ($slot) $data['slot'] = $slot;
    if ($pon) $data['pon'] = $pon;
    if ($ont) $data['ont'] = $ont;

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $apiUrl);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);

    $response = curl_exec($ch);
    curl_close($ch);

    return json_decode($response, true);
}

/**
 * Busca resumo de status das ONTs
 * 
 * @param int|null $oltId ID da OLT
 * @param string|null $oltName Nome da OLT
 * @return array Resposta da API
 */
function resumoStatus($oltId = null, $oltName = null) {
    $token = 'seu_token_aqui';
    $apiUrl = 'https://seu-servidor-ravi/api.php';

    $data = [
        'token' => $token,
        'action' => 'olt',
        'operation' => 'status_summary'
    ];

    if ($oltId) {
        $data['olt'] = $oltId;
    } elseif ($oltName) {
        $data['name'] = $oltName;
    }

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $apiUrl);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);

    $response = curl_exec($ch);
    curl_close($ch);

    return json_decode($response, true);
}

/*
Uso básico:

// Ativar ONT
$resultado = ativarONT(1, 'ALCL12345678', 1, '1', '1', '1', '100', 'Cliente Teste');

// Excluir ONT
$resultado = excluirONT(1, '1', '1', '1');

// Buscar ONTs não provisionadas
$onts = buscarONTsNaoProvisionadas(1);

// Buscar posição livre
$posicao = buscarPosicaoLivre(1, '1', '1');

// Buscar dados da OLT
$olt = buscarOLT(1);

// Buscar ONT por MAC
$ont = buscarONT(1, null, 'ALCL:1234:5678');

// Resumo de status
$resumo = resumoStatus(1);

// Verificar se funcionou
if ($resultado['msg'] === 'ONT activated successfully') {
    echo "ONT ativada com sucesso";
} else {
    echo "Erro: " . $resultado['msg'];
}
*/

?>

Códigos de Retorno

Código Descrição
"ONT activated successfully" ONT ativada com sucesso
"ONT removed successfully" ONT removida com sucesso
"Search completed successfully" Busca realizada com sucesso
"OLT ID is required" ID da OLT é obrigatório
"OLT ID or name is required" ID ou nome da OLT é obrigatório
"OLT not found" OLT não encontrada
"ONT not found" ONT não encontrada
"Model id X not found" Modelo não encontrado
"Service not available for this OLT model" Serviço indisponível para o modelo
"Nokia functions not available" Funções Nokia indisponíveis
"Missing required parameter: X" Parâmetro obrigatório ausente

Status das ONTs

Status Descrição
break ONT com falha
no-data Sem dados da ONT
low-signal Sinal baixo
signal-alert Sinal em alerta
online ONT online
offline ONT offline

Limitações


Nota: As operações de activation, exclusion, unprovisioned e search_position foram desenvolvidas especificamente para OLTs Nokia. As operações de search_olt, search_ont e status_summary funcionam com qualquer marca de OLT cadastrada no sistema.