fiberhome: add remove onu option

Signed-off-by: Rodrigo Bertoldo de Sousa Martins <rodrigo.sousa.577@gmail.com>
This commit is contained in:
rodrigo committed 2026-02-10 21:15:22 -03:00
1 parent cccd68b3b0
commit 11cb0a5faa
3 files changed
+123 -59

No files matched your search

+50 -58
View File
@@ -401,6 +401,25 @@ class FiberhomeManager {
this.executarComandoTL1(comandosDetalhados[2])
]);
// LOG COMPLETO DO LST-OMDDM PARA DEBUG - FORÇAR CONSOLE OUTPUT
if (resultadoDDM.success && resultadoDDM.data) {
const separador = '='.repeat(80);
console.log('\n' + separador);
console.log('LST-OMDDM RESPOSTA COMPLETA');
console.log(separador);
console.log('Comando: ' + comandosDetalhados[1]);
console.log('Resposta RAW:');
console.log(resultadoDDM.data);
console.log(separador + '\n');
// Verificar se é resposta válida de DDM
if (!resultadoDDM.data.includes('RxPower') && !resultadoDDM.data.includes('Optical Power')) {
console.log('⚠️ ATENÇÃO: LST-OMDDM retornou formato inesperado!');
console.log('⚠️ Resposta parece ser lista de ONUs ao invés de dados DDM');
console.log('⚠️ Verifique se o comando está correto para esta versão do equipamento');
}
}
// Adicionar dados coletados
onuEncontrada.estadoGeral = resultadoEstado.success ? resultadoEstado.data : null;
onuEncontrada.detalhes = resultadoDDM.success ? resultadoDDM.data : null;
@@ -663,76 +682,49 @@ class FiberhomeManager {
// Processar LST-OMDDM (potência ótica)
if (resposta.comando && resposta.comando.includes('LST-OMDDM')) {
this.logger.debug('🔍 Processando LST-OMDDM - Resposta completa:', dados);
// Verificar se a resposta é válida (deve conter "Optical Power" ou campos de potência)
if (!dados.includes('RxPower') && !dados.includes('Optical Power')) {
this.logger.warn('⚠️ LST-OMDDM retornou formato inesperado, pulando...');
continue;
}
// Buscar pela tabela de potência ótica no formato do manual TL1
// Formato: ONUID RxPower RxPowerR TxPower TxPowerR CurrTxBias CurrTxBiasR
// Temperature TemperatureR Voltage VoltageR PTxPower PRxPower
// Buscar pela tabela de potência ótica
const linhasTabela = dados.split('\n').filter(linha =>
linha.includes('\t') &&
!linha.includes('ONUID\tRxPower') && // header
!linha.includes('ONUID RxPower') && // header sem tabs
!linha.includes('---') && // separador
linha.match(/[+-]?\d+[,.]?\d*/) // linha com dados
!linha.includes('ONUID') &&
!linha.includes('OLTID') && // Não é lista de ONUs
!linha.includes('---') &&
linha.match(/[+-]?\d+[,.]?\d*/)
);
this.logger.debug(`📋 Linhas de dados encontradas: ${linhasTabela.length}`);
this.logger.debug(`📋 LST-OMDDM: ${linhasTabela.length} linhas encontradas`);
if (linhasTabela.length > 0) {
this.logger.debug('📄 Primeira linha de dados:', linhasTabela[0]);
const campos = linhasTabela[0].split('\t');
this.logger.debug(`📊 Total de campos: ${campos.length}`);
this.logger.debug(`📊 LST-OMDDM campos: [${campos.join('] [')}]`);
// Log de TODOS os campos para debug
campos.forEach((campo, idx) => {
this.logger.debug(` Campo [${idx}]: "${campo}"`);
});
// Formato: ONUID RxPower RxPowerR TxPower TxPowerR CurrTxBias CurrTxBiasR
// Temperature TemperatureR Voltage VoltageR PTxPower PRxPower
// Índices: 0 1 2 3 4 5 6
// 7 8 9 10 11 12
// Extrair todos os valores possíveis
const valores = {
onuId: campos[0]?.trim(),
rxPower: campos[1]?.replace(',', '.').trim(), // OLT recebe da ONU
rxPowerR: campos[2]?.trim(),
txPower: campos[3]?.replace(',', '.').trim(), // OLT transmite
txPowerR: campos[4]?.trim(),
currTxBias: campos[5]?.replace(',', '.').trim(),
currTxBiasR: campos[6]?.trim(),
temperature: campos[7]?.replace(',', '.').trim(),
temperatureR: campos[8]?.trim(),
voltage: campos[9]?.replace(',', '.').trim(),
voltageR: campos[10]?.trim(),
ptxPower: campos[11]?.replace(',', '.').trim(), // ONU transmite
prxPower: campos[12]?.replace(',', '.').trim() // ONU recebe
};
// RxPower = sinal que a OLT recebe da ONU (uplink) - campo 1
const rxPower = campos[1]?.replace(',', '.').trim();
// PTxPower = potência transmitida pela ONU - campo 11
const ptxPower = campos[11]?.replace(',', '.').trim();
this.logger.debug('📡 Valores de potência extraídos:', {
'RxPower (OLT recebe)': valores.rxPower,
'TxPower (OLT transmite)': valores.txPower,
'PTxPower (ONU transmite)': valores.ptxPower,
'PRxPower (ONU recebe)': valores.prxPower
});
// TESTE: Usar TxPower da OLT como RX da ONU (pode ser o correto!)
// TxPower da OLT = sinal que sai da OLT = sinal que chega na ONU
if (valores.txPower && valores.txPower !== '--' && !isNaN(parseFloat(valores.txPower))) {
resultado.rxPower = `${valores.txPower} dBm`;
this.logger.info(`✅ RX Power da ONU (TxPower da OLT): ${valores.txPower} dBm`);
} else if (valores.prxPower && valores.prxPower !== '--' && !isNaN(parseFloat(valores.prxPower))) {
resultado.rxPower = `${valores.prxPower} dBm`;
this.logger.info(`✅ RX Power da ONU (PRxPower): ${valores.prxPower} dBm`);
} else if (valores.rxPower && valores.rxPower !== '--' && !isNaN(parseFloat(valores.rxPower))) {
resultado.rxPower = `${valores.rxPower} dBm`;
this.logger.info(`⚠️ RX Power (RxPower da OLT - fallback): ${valores.rxPower} dBm`);
if (rxPower && rxPower !== '--' && !isNaN(parseFloat(rxPower))) {
resultado.rxPower = `${rxPower} dBm`;
this.logger.info(`✅ RX Power extraído: ${rxPower} dBm`);
} else {
this.logger.warn(`⚠️ RxPower inválido: "${rxPower}"`);
}
// TX Power: usar PTxPower (ONU transmite para OLT)
if (valores.ptxPower && valores.ptxPower !== '--' && !isNaN(parseFloat(valores.ptxPower))) {
resultado.txPower = `${valores.ptxPower} dBm`;
this.logger.info(`✅ TX Power da ONU (PTxPower): ${valores.ptxPower} dBm`);
} else if (valores.rxPower && valores.rxPower !== '--' && !isNaN(parseFloat(valores.rxPower))) {
// RxPower na OLT = TxPower na ONU (é o mesmo sinal)
resultado.txPower = `${valores.rxPower} dBm`;
this.logger.info(`✅ TX Power da ONU (RxPower da OLT): ${valores.rxPower} dBm`);
if (ptxPower && ptxPower !== '--' && !isNaN(parseFloat(ptxPower))) {
resultado.txPower = `${ptxPower} dBm`;
this.logger.info(`✅ TX Power extraído (PTxPower): ${ptxPower} dBm`);
} else {
this.logger.warn(`⚠️ PTxPower inválido: "${ptxPower}"`);
}
}
}